{"version":3,"file":"main_a1c147835d1e1323b125.bundle.js","mappings":"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","sources":["webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/App.styles.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositBody.styles.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositError.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositHeader.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/ApplePay/ApplePayButtonWeb.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/ApplePay/ApplePayButtonNative.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/CreditCard/CreditCardButton.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/CreditCard/CreditCardPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/GooglePay/GooglePayButtonWeb.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/GooglePay/googlePayNative.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/GooglePay/GooglePayButtonNative.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayPal/PayPalButton.styles.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayPal/PayPalButtonWeb.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayPal/PayPalButtonNative.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/Payment.styles.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/AccountBalanceHeader.styles.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/AccountBalanceHeader.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Grid/Grid.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Grid/Grid.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Payment/PaymentMethods.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/PaymentMethodBlocked.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/BPay/BPayPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/Cash/CashPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/ScanMyBet/ScanMyBetPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/PayID/usePayID.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayID/PayIDPanel.styled.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayID/PayIDInstructions.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PayID/PayIDPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/Payments/PaymentButton.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/SelfServeDepositPanels.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Tooltip/Tooltip.styles.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Tooltip/Tooltip.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositLimitStatus.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositBody.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositProgress.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/DepositPanel.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/InvalidCardAlert.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/GooglePay/useGooglePayAvailability.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/GooglePay/useGooglePayDeposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/GooglePay/initGooglePayWeb.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/PayPal/paypalSdk.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/PayPal/initPayPal.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/PayPal/usePayPalDeposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/ApplePay/useApplePayAvailabilityInterop.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/ApplePay/initApplePayWeb.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/ApplePay/useApplePayDeposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/ApplePay/useApplePayInterop.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/CreditCard/useCreditCardDeposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useMigrateLegacyLocalStorage.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useInitialData.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useBetAccount.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useBraintreeClient.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useDeposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useHostedFields.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Hooks/useUserContactDetails.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Store/deposit.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/HostedFieldsError.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/helpers.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/ThreeDSecureError.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/routes.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/creditCard.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/FeedbackPayIdStatusChange.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/FeedbackBalanceChange.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/depositCount.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/cards.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/googlePay.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/applePay.ts","webpack://@mobi/web/../../apps-shared/testing/src/reactQuery.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/3ds.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/errorCodes.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/sdk.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/api.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/localStorage.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/logging.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Utils/schema.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Components/Verification/DocumentPermission.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Components/Verification/Medicare.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Data/Address.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Hooks/useCountryList.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Hooks/useSignUpNavigation.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Store/index.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Utils/SignUpApi.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/SignUp/Utils/routes.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Verification/Biometrics/Components/BiometricsToggle.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Withdraw/Utils/BankAccountForm.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Withdraw/Utils/routes.ts","webpack://@mobi/web/../../apps-shared/account/src/Common/HostContext.tsx","webpack://@mobi/web/../../apps-shared/account/src/Utils/analytics.ts","webpack://@mobi/web/../../apps-shared/account/src/Utils/constants.ts","webpack://@mobi/web/../../apps-shared/account/src/Utils/validation.ts","webpack://@mobi/web/../../apps-shared/account/src/Utils/iotEvents.ts","webpack://@mobi/web/../../apps-shared/account/src/Utils/network.ts","webpack://@mobi/web/../../apps-shared/account/src/Utils/sentry.ts","webpack://@mobi/web/../../apps-shared/api-types/src/account/contactDetails.ts","webpack://@mobi/web/../../apps-shared/api-types/src/betAccount/primaryAccountHolderDetails.ts","webpack://@mobi/web/../../apps-shared/api-types/src/betAccount/verify.ts","webpack://@mobi/web/../../apps-shared/api-types/src/betAccount/error.ts","webpack://@mobi/web/../../apps-shared/api-types/src/betting/index.ts","webpack://@mobi/web/../../apps-shared/api-types/src/deposit/schemas.ts","webpack://@mobi/web/../../apps-shared/api-types/src/deposit/types.ts","webpack://@mobi/web/../../apps-shared/api-types/src/racePage/typeGuards.ts","webpack://@mobi/web/../../apps-shared/api-types/src/racePage/types.ts","webpack://@mobi/web/../../apps-shared/api-types/src/support/webapp.ts","webpack://@mobi/web/../../apps-shared/api-types/src/serverConfiguration/index.ts","webpack://@mobi/web/../../apps-shared/api-types/src/signup/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/helpers/apiResponse/errors.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/helpers/apiResponse/mapItemsWithResponse.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/helpers/investment/updateItem.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/helpers/apiResponse/multi.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Config/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Workflow/asyncActions.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Workflow/helpers/stateSetters.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Workflow/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Workflow/helpers/determineValueFromKeypad.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/calculator/misc.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/calculator/multis.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/constants.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/hostHelpers.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/state.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/typeGuards.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Account/Payment/MoneyInput.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Account/Payment/PaymentAmount.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Account/AccountHeader.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/ButtonsBase.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/themes.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/Buttons.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/Button.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/ButtonBlock.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/ButtonWithIcon.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Buttons/CloseButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Grid/Grid.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Grid/Grid.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/Icon.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/add.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/allraces.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/asterisk.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/backspace.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/bankAccount.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/betslip.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/blackbook.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/calendar.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/checked.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/closeAccount.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/comment.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/cross.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/depositLimits.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/dog.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/envelopeOpen.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/error.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/errorCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/externalLink.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/favouriteNumbers.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/featureraces.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/fixed.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/fixedHollow.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/futurefinalfield.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/giddyup.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/greysboxchallenge.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/hamburger.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/help.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/house.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/info.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/infoCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/infoCircledInvert.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/infoInvert.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/jockeychallenge.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/logout.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/media.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/minus.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/minusCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/more.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/mystery.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/notificationAdd.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/notifications.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/notificationsActive.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/offer.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/pencil.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/pending.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/person.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/phone.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/plus.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/plusCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/pushNotification.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/races.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/racingspecials.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/redo.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/remove.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/resulted.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/scanMyBet.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/share.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/sports.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/statement.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tab.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tabLocator.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tabtouchLogoCompact.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tickCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/trackconditions.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/trash.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/trot.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/unchecked.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/visibilityoff.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/visibilityon.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/warningCircled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/weatherCloudy.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/weatherFine.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/weatherOvercast.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/weatherShowery.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/weatherUnkown.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/accumulator.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/alpinesports.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/athletics.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/badminton.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/bandy.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/baseball.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/basketball.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/boxing.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/commonwealthgames.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/cricket.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/cycling.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/darts.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/elections.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/entertainment.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/esports.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/financial.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballau.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballca.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballdark.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballgaelic.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballlight.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballus.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/footballworldcup.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/friendlies.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/futsal.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/golf.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/handball.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/hockey.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/hockeyice.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/jackpot.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/lawnbowls.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/live.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/martialarts.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/motorsport.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/netball.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/pesapallo.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/raceall.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/rugby.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/rugbyunion.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/snooker.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/squash.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/surfing.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/surfironman.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/swimming.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tabletennis.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/tennis.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/totesports.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/volleyball.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/wintersports.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/yachting.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/Icon.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/arrow.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/refresh.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/specials.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Icon/paths/specialsBackground.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/InputField.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/InputField.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/CurrencyInputField.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/RadioInput.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/RadioInput.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/CheckboxInput.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/CheckboxInput.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/AutocompleteInputField.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/AutocompleteInputField.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/Toggle/Toggle.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/Toggle/Toggle.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Input/Toggle/ToggleIndicator.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Select/SelectField.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Select/SelectField.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Spinner/Spinner.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Spinner/Spinner.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Spinner/DesktopSpinner.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Svg/SvgLazy/Components/index.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Svg/SvgLazy/SvgLazy.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Accordion/Accordion.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Banner/Banner.styles.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Banner/BannerIcon.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Banner/Banner.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Buttons/Button.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Buttons/PillButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Display/InfoBox.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Icon/library/index.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Icon/Icon.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Inputs/Checkbox.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Inputs/Input.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Inputs/Input.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Inputs/Password.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Display/CopyField.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Display/CopyField.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Typography/Heading.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/AlertBox/AlertBox.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/AlertBox/AlertBox.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Utils/Centered.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/V2/Link/CustomerServiceCentre.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/ApplePay/ApplePayButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/CreditCard/helpers.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/CreditCard/CreditCardDisplay.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/CreditCard/CreditCardDisplay.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/CreditCard/MasterCardButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/CreditCard/VisaButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/PaymentMethodButton.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/PaymentMethodSelectionButton.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/PaymentMethodSelectionButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/PayPal/PayPalButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Buttons/GooglePay/GooglePayButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Common/PaymentMethodIconThemes.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardAlertLabel.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardDisplay.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardList.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardList.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardName.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/CreditCard/CreditCardSelector.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/Alert.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/PaymentMethodLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/Mastercard.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/Visa.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/GooglePayLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/ApplePayLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/CreditCardLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/PaypalLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/ChevronRight.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/CheckCircleAnimated.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Icons/BPayLogo.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Workflow/Workflow.styled.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Workflow/BusyPanel.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Workflow/ConfirmPanel.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Workflow/SuccessPanel.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/Workflow/FailPanel.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/types.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Deposit/helpers.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/BusyIndicator/BusyIndicator.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/LoadingSpinner/LoadingSpinner.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/Toast/helpers/events.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/Toast/Components/Toast/Toast.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/Toast/Toasts.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/Toast/Components/Content/Content.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Overlays/Modal/Modal.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Overlays/Tray/Tray.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/colors.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/font.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/layering.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/measurements.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/radius.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/shadow.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Common/spacing.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Components/Input/colors.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/Components/Link/colors.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Theme/theme.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Utils/gap.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Utils/media.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Common/Buttons/VerificationButton.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Common/Buttons/VerificationButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Common/Layouts/FooterMessage.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Common/Layouts/Layout.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Common/Layouts/Link.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Documents/DocumentScreen.styled.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Verification/Documents/DocumentNextButton.tsx","webpack://@mobi/web/../../apps-shared/settings/src/hexColors.ts","webpack://@mobi/web/../../apps-shared/settings/src/colors.ts","webpack://@mobi/web/../../apps-shared/settings/src/constants.ts","webpack://@mobi/web/../../apps-shared/settings/src/featureFlags.ts","webpack://@mobi/web/../../apps-shared/settings/src/statesInAustralia.ts","webpack://@mobi/web/../../apps-shared/utils/src/address/moniker.ts","webpack://@mobi/web/../../apps-shared/utils/src/array/range.ts","webpack://@mobi/web/../../apps-shared/utils/src/date/extendedDayjs.ts","webpack://@mobi/web/../../apps-shared/utils/src/date/date.ts","webpack://@mobi/web/../../apps-shared/utils/src/errors/index.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/bodyScrollLock.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/debounce.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/groupBy.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/tap.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/defer.ts","webpack://@mobi/web/../../apps-shared/utils/src/hooks/useBodyScrollLock.ts","webpack://@mobi/web/../../apps-shared/utils/src/hooks/useExpandToggle/useExpandToggle.ts","webpack://@mobi/web/../../apps-shared/utils/src/hooks/useRenderTimeoutControl/useRenderTimeoutControl.ts","webpack://@mobi/web/../../apps-shared/utils/src/arrays/join.ts","webpack://@mobi/web/../../apps-shared/utils/src/clipboard/clipboard.ts","webpack://@mobi/web/../../apps-shared/utils/src/creditCard/expiration.ts","webpack://@mobi/web/../../apps-shared/utils/src/environment/index.ts","webpack://@mobi/web/../../apps-shared/utils/src/number/number.ts","webpack://@mobi/web/../../apps-shared/utils/src/promises/withTimeout.ts","webpack://@mobi/web/../../apps-shared/utils/src/scriptLoader/scriptLoader.ts","webpack://@mobi/web/../../apps-shared/utils/src/hooks/useSentryScope.tsx","webpack://@mobi/web/../../apps-shared/utils/src/hooks/useToggleControl.ts","webpack://@mobi/web/../../apps-shared/utils/src/logging/sentry.ts","webpack://@mobi/web/../../apps-shared/utils/src/array/last.ts","webpack://@mobi/web/../../apps-shared/utils/src/string/grammar.ts","webpack://@mobi/web/../../apps-shared/utils/src/money/money.ts","webpack://@mobi/web/../../apps-shared/utils/src/money/toDisplayPrice.ts","webpack://@mobi/web/../../apps-shared/utils/src/money/currency.ts","webpack://@mobi/web/../../apps-shared/utils/src/phone/number.ts","webpack://@mobi/web/../../apps-shared/utils/src/storage/storage.ts","webpack://@mobi/web/../../apps-shared/web-native-comms/web.ts","webpack://@mobi/web/../../apps-shared/web-native-comms/commShared.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Intent/giddyUpSignals.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Intent/modal.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Intent/navigation.ts","webpack://@mobi/web/./app/core/Utils/object/deepMerge.ts","webpack://@mobi/web/./app/classic/Foundation/Analytics/Analytics.ts","webpack://@mobi/web/./app/classic/Foundation/Analytics/AnalyticsDataLayer.ts","webpack://@mobi/web/./app/classic/Foundation/Analytics/GoogleTagManagerService.ts","webpack://@mobi/web/./app/classic/Foundation/Navigation/Nav.ts","webpack://@mobi/web/./app/classic/Foundation/Services/ApiService.ts","webpack://@mobi/web/./app/classic/Foundation/Services/Device/DeviceIdentificationService.ts","webpack://@mobi/web/./app/classic/Foundation/Services/LoggingService.ts","webpack://@mobi/web/./app/classic/Foundation/Services/ServerConfig.ts","webpack://@mobi/web/./app/core/Areas/MysteryBet/constants.ts","webpack://@mobi/web/./app/core/AppRoutes.ts","webpack://@mobi/web/./app/core/Areas/TABLocatorWeb/constants.ts","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/constants.ts","webpack://@mobi/web/./app/core/Areas/Account/BetOffer/BetOfferPage.styles.tsx","webpack://@mobi/web/./app/core/Areas/Account/BetOffer/Components/BetOfferItem.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/constants.ts","webpack://@mobi/web/./app/core/Areas/Account/SignUp/analytics.ts","webpack://@mobi/web/./app/core/Areas/Account/SignUp/SignUp.tsx","webpack://@mobi/web/./app/core/Areas/Account/SignUp/constants.ts","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/constants.ts","webpack://@mobi/web/./app/core/Areas/Account/Verification/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Account/Verification/analytics.ts","webpack://@mobi/web/./app/core/Areas/Account/helpers/getRaceUrl.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Store/index.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/constants.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/Components/helpers/useGetSpecialTokens.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/Buttons/Buttons.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/Buttons/Buttons.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/Components/BetSlipButton/constants.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Store/index.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/hooks/useDisableAppHeaderRender.ts","webpack://@mobi/web/./app/core/Areas/BankAccount/constants.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Store/index.ts","webpack://@mobi/web/./app/core/Areas/ChangePassword/constants.ts","webpack://@mobi/web/./app/core/Areas/ContactDetails/data-transforms.ts","webpack://@mobi/web/./app/core/Areas/ContactDetails/driver.ts","webpack://@mobi/web/./app/core/Areas/Deposit/Deposit.tsx","webpack://@mobi/web/./app/core/Areas/Deposit/openDeposit.tsx","webpack://@mobi/web/./app/core/Areas/Home/analytics.ts","webpack://@mobi/web/./app/core/Areas/Kambi/constants.ts","webpack://@mobi/web/./app/core/Areas/Login/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Login/helpers/api.ts","webpack://@mobi/web/./app/core/Areas/Login/helpers/attemptLogin.ts","webpack://@mobi/web/./app/core/Areas/Login/helpers/triggerBiometricsPrompt.ts","webpack://@mobi/web/./app/core/Areas/Login/helpers/refreshLogonState.ts","webpack://@mobi/web/./app/core/Areas/Login/helpers/showLogin.ts","webpack://@mobi/web/./app/core/Areas/Meetings/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Navigation/Components/TabNavigation/Components/WebOnlyNav/WebOnlyNav.tsx","webpack://@mobi/web/./app/core/Areas/Navigation/Components/TabNavigation/Components/WebOnlyNav/hooks/useRadio.ts","webpack://@mobi/web/./app/core/Areas/Navigation/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Navigation/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/Notifications/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Password/Password.styles.tsx","webpack://@mobi/web/./app/core/Areas/Password/Components/VisibilityToggle.tsx","webpack://@mobi/web/./app/core/Areas/Password/Components/Password.tsx","webpack://@mobi/web/./app/core/Areas/Password/driver.ts","webpack://@mobi/web/./app/core/Components/InteractiveRules/InteractiveRules.styles.tsx","webpack://@mobi/web/./app/core/Components/InteractiveRules/InteractiveRules.tsx","webpack://@mobi/web/./app/core/Areas/Password/Password.tsx","webpack://@mobi/web/./app/core/Areas/Password/themes.ts","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/constants.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Store/index.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Hooks/useNextSkyRaces.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Store/index.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/helpers/navigateToSkyRacePage.ts","webpack://@mobi/web/./app/core/Data/Account/reverificationDetails.ts","webpack://@mobi/web/./app/core/Areas/Reverification/driver.ts","webpack://@mobi/web/./app/core/Areas/Settings/Store/index.ts","webpack://@mobi/web/./app/core/Areas/Settings/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/useEntitlement.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Store/index.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/analytics.ts","webpack://@mobi/web/./app/core/Areas/Sports/hooks/useIsFobSportsFeatureActive.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/constants.ts","webpack://@mobi/web/./app/core/Areas/Toolbox/Store/index.ts","webpack://@mobi/web/./app/core/Components/Autocomplete/Autocomplete.styles.tsx","webpack://@mobi/web/./app/core/Components/Autocomplete/Autocomplete.tsx","webpack://@mobi/web/./app/core/Components/Containers/MainContainer.styles.tsx","webpack://@mobi/web/./app/core/Components/Gap/Gap.ts","webpack://@mobi/web/./app/core/Components/HOCs/connect.tsx","webpack://@mobi/web/./app/core/Components/HOCs/observe.tsx","webpack://@mobi/web/./app/core/Components/Modal/Modal.styles.ts","webpack://@mobi/web/./app/core/Components/Modal/Modal.tsx","webpack://@mobi/web/./app/core/Components/Modal/store.ts","webpack://@mobi/web/./app/core/Components/Overlay/Overlay.styles.tsx","webpack://@mobi/web/./app/core/Components/Overlay/Overlay.tsx","webpack://@mobi/web/./app/core/Components/Overlay/OverlayDriver.ts","webpack://@mobi/web/./app/core/Components/Overlay/signals.ts","webpack://@mobi/web/./app/core/Components/Popup/Popup.styles.tsx","webpack://@mobi/web/./app/core/Components/Toast/ToastDriver.ts","webpack://@mobi/web/./app/core/Data/Account/betAccount.ts","webpack://@mobi/web/./app/core/Data/Account/contactDetails.ts","webpack://@mobi/web/./app/core/Data/Racing/races.ts","webpack://@mobi/web/./app/core/Data/Racing/acceptors.ts","webpack://@mobi/web/./app/core/Data/fetchResources.ts","webpack://@mobi/web/./app/core/Data/Racing/pools.ts","webpack://@mobi/web/./app/core/Data/ReactQuery/constants.ts","webpack://@mobi/web/./app/core/Data/ReactQuery/queryClient.ts","webpack://@mobi/web/./app/core/Data/ServerConfig/query.ts","webpack://@mobi/web/./app/core/Data/helpers.ts","webpack://@mobi/web/./app/core/NativeServices/Location/LocationService.ts","webpack://@mobi/web/./app/core/Services/Optimove/optimove.ts","webpack://@mobi/web/./app/core/Settings/colors.ts","webpack://@mobi/web/./app/core/Settings/constants.ts","webpack://@mobi/web/./app/core/State/LaunchDarklyFeatures/driver.ts","webpack://@mobi/web/./app/core/State/LaunchDarklyFeatures/signals.ts","webpack://@mobi/web/./app/core/State/Navigation/driver.ts","webpack://@mobi/web/./app/core/State/Navigation/helpers/isRaceRoute.ts","webpack://@mobi/web/./app/core/State/Navigation/helpers/navigateToLastRacesPath.ts","webpack://@mobi/web/./app/core/State/UserAccount/async-signals.ts","webpack://@mobi/web/./app/core/State/UserAccount/userAccountDriver.ts","webpack://@mobi/web/./app/core/Store/hooks.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/index.ts","webpack://@mobi/web/./app/core/Store/index.ts","webpack://@mobi/web/./app/core/Store/listenerMiddleware.ts","webpack://@mobi/web/./app/core/Utils/clientVersion.ts","webpack://@mobi/web/./app/core/Utils/hooks/useRefreshBalanceOnForeground.ts","webpack://@mobi/web/./app/core/Utils/hooks/useDataAccess.ts","webpack://@mobi/web/./app/core/Utils/hooks/useFeature.ts","webpack://@mobi/web/./app/core/Utils/hooks/useLogon.ts","webpack://@mobi/web/./app/core/Utils/hooks/useObservable.ts","webpack://@mobi/web/./app/core/Utils/hooks/useObservableImmutable.ts","webpack://@mobi/web/./app/core/Utils/hooks/usePrevious.ts","webpack://@mobi/web/./app/core/Utils/hooks/usePriceChangeAnimation.ts","webpack://@mobi/web/./app/core/Utils/sort/index.ts","webpack://@mobi/web/./app/core/Utils/time/timer.ts","webpack://@mobi/web/./app/core/Utils/logging/logging.ts","webpack://@mobi/web/./app/core/Utils/repository/getFromRepo.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Messaging/amplifyjs.ts","webpack://@mobi/web/./app/classic/Foundation/Common.ts","webpack://@mobi/web/./app/classic/Foundation/Services/MessageBusService.ts","webpack://@mobi/web/./app/classic/Foundation/Analytics/AnalyticsService.ts","webpack://@mobi/web/./app/classic/Foundation/Modal/modal-register.ts","webpack://@mobi/web/./app/classic/Foundation/Modal/modal.ts","webpack://@mobi/web/./app/core/State/Navigation/helpers/navigateToSportsPath.ts","webpack://@mobi/web/./app/core/NativeServices/DeepLinking/startDeepLinkingListeners.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/regulation.ts","webpack://@mobi/web/./app/classic/Foundation/Services/CookieService.ts","webpack://@mobi/web/./app/core/NativeServices/MetadataService.ts","webpack://@mobi/web/./app/core/NativeServices/PushNotifications.ts","webpack://@mobi/web/./app/core/Data/Account/pushNotifications.ts","webpack://@mobi/web/./app/core/State/Device/index.ts","webpack://@mobi/web/./app/core/NativeServices/RaceKeyNotification/RaceKeyNotification.ts","webpack://@mobi/web/./app/core/NativeServices/WebviewIsAliveListener.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/CustomBindings/React.ts","webpack://@mobi/web/../../apps-shared/utils/src/awsiot/topics.ts","webpack://@mobi/web/./app/core/Areas/Kambi/driver.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/kambiPlayerApi.tsx","webpack://@mobi/web/./app/core/Data/Account/PendingTicketsCount/api.ts","webpack://@mobi/web/./app/core/Data/Account/PendingTicketsCount/queries.ts","webpack://@mobi/web/./app/core/Data/Account/PendingTicketsCount/helpers.ts","webpack://@mobi/web/../../apps-shared/utils/src/awsiot/index.ts","webpack://@mobi/web/./app/core/State/PushData/initClient.ts","webpack://@mobi/web/./app/core/State/UserAccount/push-data.ts","webpack://@mobi/web/./app/core/Areas/Betslip/signals.ts","webpack://@mobi/web/./app/core/State/UserAccount/side-effects.ts","webpack://@mobi/web/./app/core/NativeServices/LoginStateRegister/LoginStateRegister.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Commands/driver.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Commands/driver-side-effects.ts","webpack://@mobi/web/../../apps-shared/utils/src/string/casing.ts","webpack://@mobi/web/./app/core/Components/Text/Paragraph.styles.tsx","webpack://@mobi/web/./app/core/Components/Text/Paragraph.tsx","webpack://@mobi/web/./app/core/Settings/fonts.ts","webpack://@mobi/web/./app/core/Components/NoticeBox/NoticeBox.styles.tsx","webpack://@mobi/web/./app/core/Components/NoticeBox/NoticeBox.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsAnniversaryPopup/DepositLimitsAnniversaryPopup.styles.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/AnniversaryPopupContent/AnniversaryPopupContent.tsx","webpack://@mobi/web/./app/core/Components/PopupNoticeBox/PopupNoticeBox.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsComponents/DepositLimitsComponents.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsAnniversaryPopup/DepositLimitsAnniversaryPopup.tsx","webpack://@mobi/web/./app/core/State/LaunchDarklyFeatures/LaunchDarklyService.ts","webpack://@mobi/web/./app/core/Data/Contentful/notification.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/Notification/NotificationLink.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Notification/Notification.tsx","webpack://@mobi/web/./app/core/Components/Banner/Components/BannerPicture.tsx","webpack://@mobi/web/./app/core/Components/Pagination/Pagination.styles.tsx","webpack://@mobi/web/./app/core/Components/Messages/Messages.styles.tsx","webpack://@mobi/web/./app/core/Components/Pagination/Pagination.tsx","webpack://@mobi/web/./app/core/Components/Banner/Banner.styles.tsx","webpack://@mobi/web/./app/core/Components/Banner/Components/CarouselWrapper.tsx","webpack://@mobi/web/./app/core/Components/Banner/Components/Container.tsx","webpack://@mobi/web/./app/core/Components/Banner/Components/FallBackBanner.tsx","webpack://@mobi/web/./app/core/Components/Banner/analytics.ts","webpack://@mobi/web/./app/core/Components/Banner/Components/LinkWrapper.tsx","webpack://@mobi/web/./app/core/Components/Banner/helpers/mapApiBanner.ts","webpack://@mobi/web/./app/core/Components/Banner/Banner.tsx","webpack://@mobi/web/./app/core/Components/Banner/helpers/filterBannersForArea.ts","webpack://@mobi/web/./app/core/Areas/Home/Home.styles.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNavigation/HomeNavigation.styles.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNavigation/HomeNavigation.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/utils.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Common/LoadingPlaceholder/LoadingPlaceholder.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextRaces/HomeNextRaces.styles.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextRaces/HomeNextRacesLoading.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Svg/SkyTv/SkyTvSvg.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Racing/SkyTvIndicator/SkyTvButton.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/StatusBadge/StatusBadge.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Racing/SkyTvIndicator/SkyTvBadge.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/Racing/helpers/liveVideoFeedHelpers.ts","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/TimeToJump/TimeToJump.style.tsx","webpack://@mobi/web/./app/classic/Foundation/DateTimeProvider.ts","webpack://@mobi/web/./app/classic/Betting-v2/Utils/TimeSpanCalculator.ts","webpack://@mobi/web/./app/core/Components/RaceCountdown/RaceCountdown.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/TimeToJump/TimeToJump.tsx","webpack://@mobi/web/./app/core/Areas/Racing/helpers/getNextRaceTimeDisplayOptions.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Betting/BetType.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Exceptions/InvariantFailureException.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Guard.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Messaging/EventAggregator.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/WindowManagement/AppWindow.ts","webpack://@mobi/web/./app/classic/Foundation/Services/ApiServiceInjectable.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Utils/LogInHelper.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/IOC/services.config.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/IOC/inversify.config.ts","webpack://@mobi/web/./app/classic/Specials/Services/PyosService.ts","webpack://@mobi/web/./app/classic/Specials/Utils/SpecialsUrlProvider.ts","webpack://@mobi/web/./app/classic/Specials/Model/Stake.ts","webpack://@mobi/web/./app/classic/Specials/Model/PriceDetails.ts","webpack://@mobi/web/./app/classic/Specials/Model/LegTypeCode.ts","webpack://@mobi/web/./app/classic/Specials/Store/PyosRewardCalculator.ts","webpack://@mobi/web/./app/classic/Specials/Store/PyosExtensions.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Lock.ts","webpack://@mobi/web/./app/classic/Specials/Model/BetSpecialOffer.ts","webpack://@mobi/web/./app/classic/Specials/Dtos/PyosServiceRequestDto.ts","webpack://@mobi/web/./app/classic/Specials/Store/PyosStore.ts","webpack://@mobi/web/./app/classic/Specials/IOC/services.config.ts","webpack://@mobi/web/./app/classic/Specials/Components/PyosMessage/PyosMessageViewModel.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/CustomBindings/slideVisible.ts","webpack://@mobi/web/./app/classic/AppUtils/Utils/CurrencyConverter.ts","webpack://@mobi/web/./app/classic/Specials/Components/PyosSelect/PyosSelectViewModel.ts","webpack://@mobi/web/./app/classic/Specials/IOC/viewmodels.config.ts","webpack://@mobi/web/./app/classic/Specials/IOC/inversify.config.ts","webpack://@mobi/web/./app/classic/Betting-v2/Services/BetEnquiryService.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableFixedOddsRaceInformation.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRace.ts","webpack://@mobi/web/./app/classic/Betting-v2/Exceptions/MissingMeetingInformationException.ts","webpack://@mobi/web/./app/classic/Betting-v2/Utils/WeatherClassUtil.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableMeetingInformation.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservablePool.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/MeetingRaceMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Exceptions/MissingStarterException.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableProvDiv.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableProvDivPool.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/ProvDivPoolMapper.ts","webpack://@mobi/web/./app/core/Settings/Components/GlobalCss/helpers.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/SilkImages.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/SilkImageMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableFixedFlucs.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableSameRaceMultiPrices.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/BaseRaceCodeBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/RaceTypes.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableFixedOddsStarterInfo.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableStarter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceStarter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/RaceBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableDogStarter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/DogBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableTrotStarter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/TrotBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/StarterBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Exceptions/MissingStartersException.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceKeyPoolInfo.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceKey.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/PoolMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/StartersMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/BetTypesMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceStarters.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservablePage.ts","webpack://@mobi/web/./app/classic/Betting-v2/Sorting/PersistedSorting.ts","webpack://@mobi/web/./app/classic/AppUtils/Utils/Algorithms.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableSelectedRaceStarters.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/UIElements/ButtonSelectionType.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/WinPlaceToteProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/WinPlaceFobProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/WinPlaceProcessorFactory.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/WinPlaceSelectionProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/WinPlaceValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/ToteSelectionResult.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/FobSelectionResult.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/WinPlaceSelectionResultProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Betting/BetTypeInformation.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/WinPlaceConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/BaseCheckBoxSelectionProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxSelectionPipeline.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxPipelineProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/AllwaysCheckBoxPipelineProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/RovingBankerCheckBoxPipelineProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/RegularCheckBoxPipelineProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/LegInCheckBoxPipelineProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxPipelineService.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/SameAsAlgorithms.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxSameAsProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxFieldProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/ForwardingCheckBoxValidatorProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/RovingBankerCheckBoxValidatorProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/AllwaysCheckBoxValidatorProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Utils/CheckBoxUtils.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/RegularCheckBoxValidatorProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/CheckBoxValidatorProcessorPipeline.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/TrifectaValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResult.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResultProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/TrifectaConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResult.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResultProcessor.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/MultiLegValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/MysteryConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/AllUpValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/AllUpConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/QuaddieConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/DoubleConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/FirstFourValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/FirstFourConfigurator.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiValidator.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiSelectionProcessor.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiSelectionResultProcessor.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/ExactaValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/ExactaConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Validation/QuinellaValidator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Configuration/QuinellaConfigurator.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Betting/BetTypeInformationBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/AllUpFormulas.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/InvestmentAmountModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/SameAs.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/BettingInformation.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRacePage.ts","webpack://@mobi/web/./app/classic/Betting-v2/Types/RacePageResponseType.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceFinishers.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceReplay.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableResultsPage.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableFixedOddsFinisherInfo.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableFinisher.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableRaceFinisher.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/BaseFinisherCodeBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/RaceFinisherBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableDogFinisher.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/DogFinisherBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableTrotFinisher.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/TrotFinisherBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/FinisherBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/FinishersMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableSubstitutePool.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableSubstitute.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/SubstitutePoolMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/Observables/ObservableScratching.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/ScratchingsMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/NoveltyDividend.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/NoveltyDividendsMapper.ts","webpack://@mobi/web/./app/classic/Betting-v2/Mapping/Mappers.ts","webpack://@mobi/web/./app/classic/Betting-v2/Utils/UrlProvider.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useStartersData.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRacePageData/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceFormData/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRacePageData/useRacePageData.ts","webpack://@mobi/web/./app/classic/Betting-v2/Services/StartersReactQueryService.ts","webpack://@mobi/web/./app/classic/Betting-v2/Services/FormReactQueryService.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/LegacyTabModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/LegacyBetModelBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/LegacyBetAdapter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Utils/ErrorHandler.ts","webpack://@mobi/web/./app/classic/Betting-v2/Sorting/SortFunction.ts","webpack://@mobi/web/./app/classic/Betting-v2/Sorting/ModelSorter.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/BettingInformationManager.ts","webpack://@mobi/web/./app/classic/Betting-v2/DataTransferObjects/EntitlementsDataTransferObject.ts","webpack://@mobi/web/./app/classic/Betting-v2/Services/EntitlementService.ts","webpack://@mobi/web/./app/classic/Betting-v2/IOC/services.config.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Disposable/Disposable.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Workflow/RaceDisplayType.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Workflow/RaceDisplayStateManagerViewModel.ts","webpack://@mobi/web/./app/core/State/PushData/eventTypeGuard.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/constants.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Workflow/BettingStateManagerViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/BetSelectionBuilder.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/Processor.ts","webpack://@mobi/web/./app/core/Components/SpecialIndicator/SpecialIndicator.styles.tsx","webpack://@mobi/web/./app/core/Utils/hooks/useInducementService.tsx","webpack://@mobi/web/./app/core/Components/SpecialIndicator/SpecialIndicator.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Receipt/Receipt.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/BettingDrawer.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/BettingDrawer.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiQuickbet.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiQuickbet.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPriceDetail.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPriceDetail.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiBettingDrawer.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPrice.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiBettingDrawer.tsx","webpack://@mobi/web/./app/core/Components/Text/Money.tsx","webpack://@mobi/web/./app/core/Data/betslip.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/kambiBettingApi.tsx","webpack://@mobi/web/./app/core/Data/kambiBetting.ts","webpack://@mobi/web/./app/core/Data/betting.ts","webpack://@mobi/web/./app/core/Components/Keypad/KeyPress.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/helpers/calculator.ts","webpack://@mobi/web/./app/core/Data/Betting/selections.ts","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/calculator.ts","webpack://@mobi/web/./app/core/Areas/Tipping/helpers/calculator.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Notifications/BonusDetailsNotification.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Notifications/NotificationTypes.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Notifications/NotificationTypes.tsx","webpack://@mobi/web/./app/core/Data/Betting/selectionDetails.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/signals.ts","webpack://@mobi/web/./app/core/Components/SuperPick/signals.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Formula/driver.ts","webpack://@mobi/web/./app/core/Areas/Betslip/constants.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/state.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/driver.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/MysteryRaceBettingPageWrapperDriver.ts","webpack://@mobi/web/./app/core/Components/DateTime/DateTime.tsx","webpack://@mobi/web/./app/core/Components/Separator/SeparatorBullet.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceTime.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/pushToteAcceptorScratching.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/pushToteRaceStatusChanged.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/LegSelectionContext.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/createBetSlipItem.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/addToBetslip.ts","webpack://@mobi/web/./app/core/State/LaunchDarklyFeatures/helpers/isActive.ts","webpack://@mobi/web/./app/core/Utils/hapticFeedback/hapticFeedback.ts","webpack://@mobi/web/./app/core/Utils/hooks/useHapticFeedbackOnBetSuccess/useHapticFeedbackOnBetSuccess.ts","webpack://@mobi/web/./app/core/Components/SuperPick/driver.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BetInvestment/BetInvestment.styles.tsx","webpack://@mobi/web/./app/core/Components/Text/utils.ts","webpack://@mobi/web/./app/core/Components/Text/MoneyGrouped.styles.tsx","webpack://@mobi/web/./app/core/Components/Text/MoneyGrouped.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/LegInfo/LegInfo.styles.tsx","webpack://@mobi/web/./app/core/Components/Odometer/Odometer.styles.tsx","webpack://@mobi/web/./app/core/Components/Odometer/Odometer.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/LegInfo/LegInfo.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Checkbox/Checkbox.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Checkbox/Checkbox.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/EachWay/EachWayCheckbox.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/ProjectedReturn/ProjectedReturn.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/ProjectedReturn/ProjectedReturn.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/FlexiDisplay/FlexiDisplay.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/FlexiDisplay/FlexiDisplay.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/NumberOfCombinationsDisplay/NumberOfCombinationsDisplay.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/NumberOfCombinationsDisplay/NumberOfCombinationsDisplay.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetButton/BonusBetButton.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetButton/BonusBetButton.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/helpers/campaignHelper.ts","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BetInvestment/BetInvestment.tsx","webpack://@mobi/web/./app/core/Components/Swiper/Swiper.tsx","webpack://@mobi/web/./app/core/Components/Keypad/Keypad.styles.tsx","webpack://@mobi/web/./app/core/Components/Keypad/KeypadButton.styles.tsx","webpack://@mobi/web/./app/core/Components/Keypad/KeypadButton.tsx","webpack://@mobi/web/./app/core/Components/Keypad/Keypad.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Quickbet.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Keypad/Keypad.styles.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Keypad/Keypad.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Receipt/driver.ts","webpack://@mobi/web/./app/core/Services/Optimove/hooks/useOptimoveTrackingEvents.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Receipt/QuickbetReceipt.tsx","webpack://@mobi/web/./app/core/Services/Optimove/hooks/useTrackOptimoveEvent.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Receipt/BetslipReceipt.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Receipt/Receipt.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Buttons/QuickbetButton.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BusyIndicator/BusyIndicator.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Campaigns/Campaigns.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Buttons/Buttons.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/async-signals.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/betting.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/helpers/request.ts","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Utils/helpers.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Buttons/ButtonsContainer.tsx","webpack://@mobi/web/./app/core/Components/SuperPick/SuperPick.styles.tsx","webpack://@mobi/web/./app/core/Components/SuperPick/SuperPickButton.tsx","webpack://@mobi/web/./app/core/Components/SuperPick/SuperPick.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/SuperPick/QuickbetSuperPick.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/themes.ts","webpack://@mobi/web/./app/core/Utils/object/object.ts","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandablePanel.styles.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandablePanelContent.styles.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandableSection.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandablePanelContent.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandablePanel.tsx","webpack://@mobi/web/./app/core/Components/Icons/Icons.styles.tsx","webpack://@mobi/web/./app/core/Components/Icons/Icons.tsx","webpack://@mobi/web/./app/core/Components/Icons/material/Tick.tsx","webpack://@mobi/web/./app/core/Components/Icons/MaterialIcon.styled.ts","webpack://@mobi/web/./app/core/Components/Icons/MaterialIcon.tsx","webpack://@mobi/web/./app/core/Components/Icons/Chat.tsx","webpack://@mobi/web/./app/core/Components/Icons/ChevronDown.tsx","webpack://@mobi/web/./app/core/Components/Icons/ChevronUp.tsx","webpack://@mobi/web/./app/core/Components/Icons/SpecialsNew.tsx","webpack://@mobi/web/./app/core/Components/Icons/Tips.tsx","webpack://@mobi/web/./app/core/Components/Icons/Video.tsx","webpack://@mobi/web/./app/core/Components/Text/Text.ts","webpack://@mobi/web/./app/core/Components/Panel/CompactPanel.styles.ts","webpack://@mobi/web/./app/core/Components/Panel/CompactPanel.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/CompactExpandablePanel.styles.ts","webpack://@mobi/web/./app/core/Components/ExpandablePanel/CompactExpandablePanel.tsx","webpack://@mobi/web/./app/core/Components/Formula/Formula.styles.tsx","webpack://@mobi/web/./app/core/Components/Formula/FormulaButton.tsx","webpack://@mobi/web/./app/core/Components/Formula/Formula.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Formula/QuickbetFormula.tsx","webpack://@mobi/web/./app/core/Components/ExpandablePanel/ExpandablePanelFactory.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Notifications/Notifications.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Campaigns/Campaigns.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Campaigns/QuickbetCampaigns.tsx","webpack://@mobi/web/./app/classic/Foundation/Analytics/Analytics.Bet.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/mapResponse.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/calculator.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/requestBuilder.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/iotSubscriptions.ts","webpack://@mobi/web/./app/core/Areas/Betslip/helpers/localStorage.ts","webpack://@mobi/web/./app/core/Areas/Betslip/driver.ts","webpack://@mobi/web/./app/core/Utils/state/state.ts","webpack://@mobi/web/./app/core/Areas/Betslip/analytics.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/analytics.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BalanceBar/BalanceBar.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BalanceBar/BalanceBar.tsx","webpack://@mobi/web/./app/core/Components/Pill/Pill.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/Common/Header.styles.tsx","webpack://@mobi/web/./app/core/Data/favouriteNumbers.ts","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/driver.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/FavouriteNumbersHeader/FavouriteNumbersHeader.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/FavouriteNumbersHeader/FavouriteNumbersHeader.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/FobHeader/FobHeader.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Common.styles.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/FobSportsHeader/FobSportsHeader.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/helpers/IconTypeHelper.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/MysteryInfo/MysteryInfo.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/Selection.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/helpers.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/MysteryNoveltySelection.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/MysteryDisplaySelections.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/NoveltySelection.tsx","webpack://@mobi/web/./app/core/Data/Racing/poolcode.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/MysteryComboSelection.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/SpendDisplay/SpendDisplay.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/MysteryDisplaySelections.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/MysteryHeader/MysteryHeader.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/RaceInfo/RaceInfo.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/MultiRaceSelection.tsx","webpack://@mobi/web/./app/core/Utils/calculateRem/calculateRem.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/SilkImage/QuickbetSilkImage.styles.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/SilkImage/QuickbetSilkImage.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Selection/Selection.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/RacingHeader/RacingHeader.tsx","webpack://@mobi/web/./app/core/Components/OverflowEllipsis/OverflowEllipsis.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/ToteSportsHeader/ToteSportsHeader.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/Header/Components/ToteSportsHeader/ToteSportsHeader.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetList/BonusBetList.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetList/BonusBetListItem.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetList/BonusBetListItem.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/BonusBetList/BonusBetList.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/MysteryQuickPickBonusToggleButton/MysteryQuickPickBonusToggleButton.styles.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/Components/MysteryQuickPickBonusToggleButton/MysteryQuickPickBonusToggleButton.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDepositActions.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/analytics.ts","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDeposit.styles.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDepositBody.tsx","webpack://@mobi/web/./app/core/Areas/Deposit/helper.ts","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDepositUnavailableActions.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Hooks/useQuickDepositValidation.ts","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/ProcessingMessage.styles.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Deposit/Components/ProcessingMessage.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDepositUnavailableReason.tsx","webpack://@mobi/web/./app/core/Areas/QuickDeposit/Components/QuickDeposit.tsx","webpack://@mobi/web/./app/core/Data/ServerConfig/useServerConfig.ts","webpack://@mobi/web/./app/core/Areas/Quickbet/Quickbet.tsx","webpack://@mobi/web/./app/core/Areas/Quickbet/logging.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Bets/selectors.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/hooks.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/MultiBuilderToastContent/MultiBuilderToastContent.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/toasts.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/analytics.ts","webpack://@mobi/web/./app/core/Utils/betting/handleBetSelection/helpers/convertToBetSelection.ts","webpack://@mobi/web/./app/core/Utils/betting/handleBetSelection/helpers/animateSelectionButtonToBetslip.ts","webpack://@mobi/web/./app/core/Utils/betting/handleBetSelection/handleBetSelection.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/StartersPageViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/helpers/helpers.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/getRacePushDataTopics.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/pushFobPriceChanged.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/pushTotePriceChanged.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/helpers/pushSameRaceMultiPriceChanged.ts","webpack://@mobi/web/./app/core/Areas/Racing/Types/RaceStatus.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RacePromotion/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RacePromotion/useRacePromotions.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RacePromotion/helpers.ts","webpack://@mobi/web/./app/core/Components/Links/Links.styles.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RacePromotion/RacePromotion.styles.ts","webpack://@mobi/web/./app/core/Utils/hooks/useOnce.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RacePromotion/RacePromotion.tsx","webpack://@mobi/web/./app/core/Utils/race-promotions/filters.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RacePromotion/RacePromotions.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetInformers/Hooks/useBetInformers.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetInformers/Hooks/useCommandState.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceFormData/helpers.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useStewardsComments/useStewardsComments.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useStewardsComments/helpers/formatStewardsComments.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/StewardsComments/StewardsComments.styles.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/StewardsComments/StewardsComments.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceContent/RaceContentPanel.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RaceContent/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RaceContent/useRaceContent.ts","webpack://@mobi/web/./app/core/Components/TipsterImage/TipsterImage.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useAcceptors.ts","webpack://@mobi/web/./app/core/Utils/emotion/gap.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/BettableTips.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/helpers.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/TipButton.styles.ts","webpack://@mobi/web/./app/core/Components/PriceChangeDisplay/PriceChangeDisplay.styles.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/Silks/silkImage.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/Silks/api.ts","webpack://@mobi/web/./app/core/Components/SilkImage/SingleSilkImage.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SilkImage/MatchedSilkImage.tsx","webpack://@mobi/web/./app/core/Components/SilkImage/SilkImage.styles.ts","webpack://@mobi/web/./app/core/Components/SilkImage/SilkImage.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/TipButton.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/analytics.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/Hooks/useBettableTipQuickBetting.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/BettableTip.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/BettableTips.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceContent/RaceContentPanel.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/RaceContent/useVideoPreview.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Preview/Preview.styles.ts","webpack://@mobi/web/./app/core/Utils/hooks/Video/useVideoStream.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Preview/Preview.tsx","webpack://@mobi/web/./app/core/State/LaunchDarklyFeatures/Components/FeatureFlag.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceStatus.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BettableTips/BettableTipsPanel.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useTipsterDisplay.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Panels/RacePanels.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Panels/Panels.styles.ts","webpack://@mobi/web/./app/core/Utils/hooks/useEventAggregator.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetInformers/constants.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetInformers/Hooks/useBetInformerAnalytics.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetInformers/BetInformers.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Results/ResultsPageViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/MultiSelectionProjections.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/MultiLeg/MultiLegSelectionsViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/Common.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/Histories.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceReplay/api.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/helpers/toggleSkyVideoPlayer.ts","webpack://@mobi/web/../../apps-shared/utils/src/number/ordinal.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/RaceInfoHeader/Components/SkyVideoButton.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/RaceReplayKnockout.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/HistoryHeader.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/HistoryExpandable.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Dogs/DogsHistorySingle.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Dogs/Dogs.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Races/RacesHistorySingle.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/HighlightStat.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Common/HighlightStatRules.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Races/Races.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Trots/TrotsHistorySingle.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Components/Trots/Trots.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/Form.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceFormData/useRaceFormData.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceFieldFormData/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceFieldFormData/useRaceFieldFormData.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Form/FOOForm.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/api.ts","webpack://@mobi/web/./app/core/Utils/hooks/useClickOutside.ts","webpack://@mobi/web/./app/core/Data/Account/api.ts","webpack://@mobi/web/./app/core/Components/Modal/Components/PromptForUserDecision/PromptForUserDecision.tsx","webpack://@mobi/web/./app/core/Components/Modal/Components/PromptForUserDecision/helpers/promptUserAndReturnDecision.ts","webpack://@mobi/web/./app/core/Components/Inputs/Components/TextArea/TextArea.styles.ts","webpack://@mobi/web/./app/core/Components/Inputs/Components/TextArea/TextArea.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/AddCommentModal/AddCommentModal.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/analytics.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/addOrEditBlackbookComment.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/Comments/Components/SingleComment.tsx","webpack://@mobi/web/./app/core/Data/Account/useContactDetails.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/Comments/Comments.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Hooks/useBlackbookRunners.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/getMatchedRunnerInBlackbook.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Hooks/useAddToBlackbook.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/BlackbookControl/Components/AddJockeyButton.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/BlackbookControl/BlackbookControl.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceList/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useRaceList/useRaceList.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RunnerExpanded/RunnerExpanded.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RunnerNumber/RunnerNumber.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/BaseFinisherViewModel.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/useRaceFieldSummaryData/api.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/useRaceFieldSummaryData/useRaceFieldSummaryData.ts","webpack://@mobi/web/./app/core/Components/Text/Heading.styles.tsx","webpack://@mobi/web/./app/core/Components/Text/Heading.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/constants.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/RaceCardFixedOnly.styles.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/JockeyName/JockeyName.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/FieldsResults.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Races/RaceFieldSummaryResults.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Dogs/DogFieldSummaryResults.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Trots/TrotFieldSummaryResults.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/MatchedFieldSummaryResults.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Fields.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Races/RaceFieldSummary.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Dogs/DogFieldSummary.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/Trots/TrotFieldSummary.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/FieldSummary/MatchedFieldSummary.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Dog/DogFinisherViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Race/RaceFinisherViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Trot/TrotFinisherViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/List/FinishersListViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Place/FinisherPlaceViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Prices/FinisherPricesViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/FieldViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/Index.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/SameAsUIElement.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/FieldUIElement.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/MultiFieldViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Standard/StandardTopPanel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Substitutes/SubstitutesViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Scratchings/ScratchingsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MessageBox/MessageBoxViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Model/RaceStatuses.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/view/ResultsViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/FinishersColumnHeader.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/view/ResultsFieldViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Prices/FieldFinisherPricesViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/AllUp/AllUpViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/MultiLeg/MultiLegViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/NoveltyDividends/NoveltyDividendsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/ProvDivs/ProvDivsViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceReplay/analytics.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/RaceReplay/RaceReplayViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RacingFormSliceJS/GiddyUp.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Form/FormGiddyUpRaceInformation.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/List/StartersListViewModel.ts","webpack://@mobi/web/./app/core/Components/PriceChangeDisplay/PriceChangeDisplay.tsx","webpack://@mobi/web/./app/core/Components/PriceChangeDisplay/WinPlaceSelection/WinPlaceSelection.styles.ts","webpack://@mobi/web/./app/core/Components/PriceChangeDisplay/WinPlaceSelection/WinPlaceSelection.tsx","webpack://@mobi/web/./app/core/Components/PriceChangeDisplay/BettingOptionsSelection/BettingOptionsSelection.styles.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Pricing/MultiSelectionPriceViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MultiRaceSubHeader/RaceSubHeaderViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/Fixed/FixedWinPlaceSelectionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Image/StarterImageViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/ResultedImage/ResultedImageViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Sorting/SortConverter.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/Helpers/StarterPageHeaderHelper.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/Components/FobToteSwitch/FobToteSwitch.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Allways/BoxedViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/LegIn/LegInViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/RovingBanker/RovingBankerViewModel.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetModifiers/BetModifiers.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/BetModifiers/Hooks/useToteSwapToggle.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/analytics.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/StartersColumnHeader.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/Hooks/useFixedOdds.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RunnersColumnHeader/Hooks/useColumnSort.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Commands/InfoToolboxWrapper/InfoToolbarViewModel.ts","webpack://@mobi/web/./app/core/Utils/odds/odds.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/FixedFlucs/FixedFlucs.styles.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/FixedFlucs/FixedFlucs.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MarketMovers/MarketMovers.styles.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MarketMovers/MarketMovers.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/BaseStarterViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Dog/DogStarterViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Race/RaceStarterViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Trot/TrotStarterViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/IOC/viewmodels.config.ts","webpack://@mobi/web/./app/classic/Betting-v2/IOC/inversify.config.ts","webpack://@mobi/web/./app/core/Utils/events/getEventAggregator.ts","webpack://@mobi/web/./app/core/Areas/Racing/helpers/meetingIdToContestType.ts","webpack://@mobi/web/./app/core/Areas/Racing/helpers/getRaceLink.ts","webpack://@mobi/web/./app/core/Areas/Racing/helpers/getSimpleRaceStatusText.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextRaces/HomeNextRacesTile.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextRaces/HomeNextRaces.tsx","webpack://@mobi/web/./app/core/Data/Contentful/featuredItems.ts","webpack://@mobi/web/./app/core/Data/Contentful/utils.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/FeaturedItems/Item.styles.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/FeaturedItems/Item.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/FeaturedItems/analytics.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/FeaturedItems/FeaturedItems.tsx","webpack://@mobi/web/./app/core/Areas/ResponsibleWagering/ActivitySummaryPopup.styles.tsx","webpack://@mobi/web/./app/core/Areas/ResponsibleWagering/ActivitySummaryPopup.tsx","webpack://@mobi/web/./app/core/Areas/ResponsibleWagering/ActivitySummary.styles.tsx","webpack://@mobi/web/./app/core/Areas/ResponsibleWagering/ActivitySummary.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/FeaturedItems/FeaturedItems.styles.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/HomeNextSuperPicks.styles.tsx","webpack://@mobi/web/./app/core/Components/List/List.styles.tsx","webpack://@mobi/web/./app/core/Components/List/ListItem.styles.tsx","webpack://@mobi/web/./app/core/Components/List/ListLink.styles.tsx","webpack://@mobi/web/./app/core/Components/List/ListItem.tsx","webpack://@mobi/web/./app/core/Components/List/ListBadge.styles.tsx","webpack://@mobi/web/./app/core/Components/List/ListBadge.tsx","webpack://@mobi/web/./app/core/Components/List/ListTime.styles.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/Flex/Flex.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/NextRaceLoading/NextRaceLoading.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/HomeNextSuperPicksTile.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/HomeNextSuperPicksList.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/HomeNextSuperPickDriver.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/SuperBoostSourceData.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/HomeNextSuperPicks/HomeNextSuperPicks.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/Footer.styles.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/Logos.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/SetDepositLimitButton.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/ExternalLink.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Hooks/useVersions.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Hooks/useVersionsSearch.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/VersionSelector.styled.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/VersionSelector.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/InternalVersionNumber.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/UnbundlingStatusDot.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/Components/Footer.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/Footer/HomeFooter.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingBets.styles.tsx","webpack://@mobi/web/./app/core/Components/SilkImage/utils.ts","webpack://@mobi/web/./app/core/Data/StructuredSearch/StructuredSearchResult.ts","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingBetTile.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingSameRaceMultiBetTile.styles.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingSameRaceMultiBetTile.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingBetTileErrorBoundary.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingBetsList.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/Components/TrendingBetsFilter.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/TrendingBets.tsx","webpack://@mobi/web/./app/core/Areas/Home/Components/TrendingBets/TrendingBetsToggled.tsx","webpack://@mobi/web/./app/core/Components/ContentHeader/ContentHeader.styles.tsx","webpack://@mobi/web/./app/core/Components/ContentHeader/ContentHeader.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/hooks/useDisableAppHeaderSticky.ts","webpack://@mobi/web/./app/core/Areas/Meetings/helpers/constants.ts","webpack://@mobi/web/./app/core/Areas/Meetings/helpers/sortMeetings.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useMeetings/api.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useMeetings/useMeetingsQuery.ts","webpack://@mobi/web/./app/core/Areas/Racing/Hooks/useMeetings/useMeetings.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/MeetingsDropdown/helpers/getCleanMeetingName.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/MeetingsDropdown/Components/DropdownLink.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/MeetingsDropdown/MeetingsDropdown.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/PayoutInformation/PayoutInformation.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/CountdownBadge/CountdownBadge.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Shared/RaceInfoWrapperWithTextExpand/RaceInfoWrapperWithTextExpand.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/DockedPlayer/constants.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/DockedPlayer/Hooks/useHeaderPinnedState.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Overlays/Popover/Popover.tsx","webpack://@mobi/web/./app/core/Areas/Notifications/NotificationButton/TimePickerPopover/TimePickerPopover.tsx","webpack://@mobi/web/./app/core/Areas/Notifications/NotificationButton/NotificationButton.styles.tsx","webpack://@mobi/web/./app/core/Components/Popup/driver.ts","webpack://@mobi/web/./app/core/Areas/Settings/Components/PayoutNotification/PayoutNotificationPopup.tsx","webpack://@mobi/web/./app/core/Areas/Notifications/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/Notifications/NotificationButton/hooks/useValidNotificationTimes.ts","webpack://@mobi/web/./app/core/Areas/Notifications/NotificationButton/NotificationButton.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceNotificationButton/RaceNotificationButton.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/RaceInfoHeader/RaceInfoHeader.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/RaceSelection/RaceButton.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/RaceSelection/RaceSelection.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/WeatherIcon/WeatherIcon.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/Components/SkeletonLoader/SkeletonLoader.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Navigation/RaceNavigation.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Components/PropositionItem.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Components/PropositionList.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Components/FieldToggle.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Components/ExtraInfo.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Components/EventInfo.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Data/api.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Hooks/useDisableAndroidBackGesture.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/SkeletonLoader/SkeletonLoader.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RaceSwipeContainer/SwipeContainer.styles.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RaceSwipeContainer/helpers.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RaceSwipeContainer/RaceSwipeContainer.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/RaceSwipeContainer/types.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/RaceCardFixedOnly.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/useFixedOddsEventDetails.ts","webpack://@mobi/web/./app/core/Areas/RaceCardFixedOnly/Hooks/useClearSelectionOnPlacement.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Utils/createBetSelection.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/buildBetItem/getToteBetType.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/buildBetItem/getSelectionInfo/getSelection.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/types.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/buildBetItem/getSelectionInfo/getSelectionDetails.ts","webpack://@mobi/web/./app/core/Areas/Sports/helpers/createSportsBetSelection.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/buildBetItem/getSelectionInfo/buildSportsBetProposition.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/buildBetItem/buildBaseBetSelection.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/Components/PromptBetslipChange/PromptBetslipChange.tsx","webpack://@mobi/web/./app/core/Utils/betting/loadBet/Components/PromptBetslipChange/helpers/index.ts","webpack://@mobi/web/../../apps-shared/utils/src/functions/zip.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/helpers/addToBetSlip.ts","webpack://@mobi/web/./app/core/Services/Optimove/hooks/useTrackOptimoveBetslipAbandoned.ts","webpack://@mobi/web/./app/core/Areas/Betslip/Betslip.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/AccountBalance/AccountBalance.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/AccountBalance/AccountBalance.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Buttons/Buttons.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Buttons/ClearBetslipButton.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/ErrorBoundaries/BetslipErrorBoundary.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/ErrorBoundaries/BetslipErrorBoundary.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Messages/BetsPlacedMessage.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Messages/ConfirmMessage.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Messages/ErrorMessage.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/FooterSummary/FooterSummary.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/EstimatedReturn/EstimatedReturn.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/EstimatedReturn/EstimatedReturn.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Messages/InvalidBetsMessage.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Messages/ReviewChangesMessage.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/TotalStake/TotalStake.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/TotalStake/TotalStake.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/FooterSummary/FooterSummaryButtons.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/FooterSummary/FooterSummary.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetslipExpandablePanel/BetslipExpandablePanel.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetslipExpandablePanel/BetslipExpandablePanel.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInvestment/BetInvestment.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiReturn/MultiReturn.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SingleItemList/SingleItemList.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetslipReceipt/BetsliptReceipt.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiItem/MultiItem.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingHeader/themes.ts","webpack://@mobi/web/./app/core/Components/BettingHeader/BettingHeader.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingHeader/RemoveButton.tsx","webpack://@mobi/web/./app/core/Components/BettingHeader/BettingHeader.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInfo/Components/ErroredBetInfo/ErroredBetInfo.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInfo/Components/FobBetInfo/FobBetInfo.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInfo/Components/RacingBetInfo/RacingBetInfo.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInfo/Components/SportBetInfo/SportBetInfo.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInfo/BetInfo.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiItem/MultiItem.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetslipReceipt/BetslipReceiptMulti.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiItemList/MultiItemList.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiFormula/MultiFormula.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/QuickEdit/QuickEdit.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/QuickEdit/driver.ts","webpack://@mobi/web/./app/core/Areas/Betslip/Components/QuickEdit/BonusBet/BonusBetButton.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/QuickEdit/BonusBet/BonusBetList.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/QuickEdit/QuickEdit.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiFormula/MultiFormula.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/MultiItemList/MultiItemList.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SuperPick/SuperPick.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SuperPick/RemoveButton.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SuperPick/SelectedSuperPick.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SuperPick/SuperPickAvailable.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/ProjectedReturn/ProjectedReturn.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/ProjectedReturn/ProjectedReturn.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInvestment/FobInvestment.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInvestment/ToteInvestment.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetInvestment/BetInvestment.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/BetslipReceipt/BetslipReceipt.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/Buttons/RefreshButton.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Exceptions/Exception.ts","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SingleAllUpFormula/SingleAllUpFormula.styles.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SingleAllUpFormula/SingleAllUpFormula.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Components/SingleItemList/SingleItemList.tsx","webpack://@mobi/web/./app/core/Areas/Betslip/Betslip.tsx","webpack://@mobi/web/./app/core/Utils/betting/loadBet/helpers/addToLegacyBetslip.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/helpers/loadBet.ts","webpack://@mobi/web/./app/core/Services/ShareIncoming/ShareBet/helpers/api.ts","webpack://@mobi/web/./app/core/Services/ShareIncoming/ShareBet/helpers/analytics.ts","webpack://@mobi/web/./app/core/Services/ShareIncoming/ShareBet/ShareBetIncoming.tsx","webpack://@mobi/web/./app/core/Services/ShareIncoming/ShareBlackbook/ShareBlackbookIncoming.tsx","webpack://@mobi/web/./app/core/Services/ShareIncoming/useShareIncomingListener.ts","webpack://@mobi/web/./app/core/Areas/Home/Home.tsx","webpack://@mobi/web/./app/core/Areas/Jackpots/Components/Jackpot/Jackpot.styles.tsx","webpack://@mobi/web/./app/core/Areas/Jackpots/Components/Jackpot/JackpotLoading.tsx","webpack://@mobi/web/./app/core/Areas/Jackpots/Components/Jackpot/Jackpot.tsx","webpack://@mobi/web/./app/core/Areas/Jackpots/Jackpots.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/Components/MeetingsList/Components/DataError/DataError.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/Components/MeetingsList/Components/Loading/Loading.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/analytics.ts","webpack://@mobi/web/./app/core/Areas/Meetings/Components/MeetingsList/Components/MeetingRow/MeetingRow.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/Components/MeetingsList/MeetingsList.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/utils.ts","webpack://@mobi/web/./app/core/Components/DateNavigation/DateNavigation.styles.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/DatePicker.styles.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/Components/DayCell.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/Components/WeekDayHeaders.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/Components/MonthYearSelect.tsx","webpack://@mobi/web/./app/core/Components/DatePicker/DatePicker.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/Components/PrimaryDateNavigation/PrimaryDateNavigation.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/Components/SecondaryCodeNavigation/SecondaryCodeNavigation.tsx","webpack://@mobi/web/./app/core/Areas/Meetings/hooks/useMeetingsData.ts","webpack://@mobi/web/./app/core/Areas/Meetings/Meetings.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/NextRaces.styles.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/NextRace/NextRace.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/NextRacesFilter/NextRacesFilter.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/Components/NextRacesLoading/NextRaceLoading.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/NextRaces.tsx","webpack://@mobi/web/./app/core/Areas/NextEvents/NextEventsPage.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/FavouriteNumbers.styles.tsx","webpack://@mobi/web/./app/core/Components/Buttons/ButtonGroup.styles.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/savedFavouriteNumbers.ts","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/NumberSelection.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/PoolSelection.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/FavouriteNumbersBettingDrawer.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/FavouriteNumbersBetSummary.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/HeaderWithLoader.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/EasyBet.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/PotLuck.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/NumberResultsTab.styles.tsx","webpack://@mobi/web/./app/core/Data/favouriteNumbersResults.ts","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/NumberResultsTab.tsx","webpack://@mobi/web/./app/core/Areas/FavouriteNumbers/FavouriteNumbersPage.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/Components/Buttons.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/Components/PendingBetsDrawerButton/Hooks/usePendingBetsCount.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/Components/PendingBetsDrawerButton/PendingBetsDrawerButton.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/helpers/useControlToggle.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/useFullscreen.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/findAndStartChildVideoElement.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/useLogout.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/Components/ProgressBar/ProgressBar.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/Components/SkyChannelSelector/SkyChannelSelector.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/Components/VideoPlayerControls/VideoPlayerControls.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/VideoPlayer/VideoPlayer.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FloatingPlayer/helpers/usePlayerState.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FloatingPlayer/FloatingPlayer.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Hooks/useAccountActivityData.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/helpers/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/FooterButtons/FooterButtons.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/Footer/Footer.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/Container/Container.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/Common/LinkWrapper/LinkWrapper.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/EventDetails/EventDetails.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/Price/Price.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/SelectionInfo/SelectionInfo.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/SilkImage/SilkImage.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/SelectionInfoMultiple/SelectionInfoMultiple.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/index.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/types.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/betStatus.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/isFobRacingWithIncorrectStarterNumbers.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/legTypes.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/getTicketStatus.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/shouldUseFallbackIcon.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/helpers/stringFormatting.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Common/SilkFallback.tsx","webpack://@mobi/web/./app/core/Components/SilkImage/SilkImageContained.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/SummaryLine/SummaryLine.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/StatusSilks.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/BetStatusIcon/BetStatusIcon.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/LegStatusSilks/LegStatusSilks.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/SelectionStatusSilks/SelectionStatusSilks.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/StatusSilks.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Investment/Investment.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/context.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/SkyPendingTicket/helpers/getMatchedSkyRaceForTicketLeg.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle/RacingTitle.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/SkyPendingTicket/Components/SkyRaceHeader/SkyRaceHeader.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/SkyPendingTicket/Components/MultiTicket/MultiTicket.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/Common/CountdownStatus/CountdownStatus.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/FavouriteNumbers/FavouriteNumbers.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/Multi/Multi.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/SameRaceMulti/SameRaceMulti.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/SingleMultiple/SingleMultiple.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/SingleSingle/SingleSingle.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/Sports/Sports.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/Components/Tipping/Tipping.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/BetInfo/BetInfo.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/SkyPendingTicket/Components/GeneralTicket/GeneralTicket.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/SkyPendingTicket/SkyPendingTicket.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Components/PendingTicketsPage/PendingTicketsPage.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/PendingBetsDrawer.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Components/PendingBetsDrawer/Hooks/useShrinkSkyOnLocationChange.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/FullscreenPlayer.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Hooks/useCanRenderPendingBetsCheck/useCanRenderPendingBetsCheck.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Hooks/usePendingBetsOpenToggle/usePendingBetsOpenToggle.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Hooks/useFullscreenNativeInterop/useFullscreenNativeInterop.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/FullscreenPlayer/Hooks/useSwipeActions/useSwipeActions.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/SkyVideoPlayer.tsx","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Hooks/useNativeInterop.ts","webpack://@mobi/web/./app/core/Components/Icons/PlayIcon.tsx","webpack://@mobi/web/./app/core/Components/Icons/TabRadioIcon.tsx","webpack://@mobi/web/./app/core/Areas/Navigation/FloatingTabRadioButton.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/RangeBoundaries.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/StructuredSearchLocation/track-utils.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Driver/StructuredSearchDriver.ts","webpack://@mobi/web/./app/core/Components/CodeSelector/CodeSelector.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/StructuredSearch.styles.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/RangeInput/RangeInput.styles.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/RangeInput/RangeInput.tsx","webpack://@mobi/web/./app/core/Areas/Search/Search.styles.tsx","webpack://@mobi/web/./app/core/Components/Buttons/Chips/Chips.styles.tsx","webpack://@mobi/web/./app/core/Components/Buttons/Chips/Chips.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/StructuredSearchLocation/StructuredSearchLocation.styles.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchResults.styles.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchTextLabelStyled.styles.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchTextLabel.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/StructuredSearchLocation/StructuredSearchLocationTrackModal.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Components/StructuredSearchLocation/StructuredSearchLocation.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Criteria/StructuredSearchCriteria.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchSilkImage.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredLocationTime.styles.tsx","webpack://@mobi/web/./app/core/Data/Search/Search.ts","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/utils.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredLocationTime.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchResult.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/StructuredSearchResults.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Results/utils.ts","webpack://@mobi/web/./app/core/Components/Tabs/Tabs.styles.tsx","webpack://@mobi/web/./app/core/Areas/StructuredSearch/Service/StructuredSearchService.ts","webpack://@mobi/web/./app/core/Areas/StructuredSearch/StructuredSearch.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Overlays/Drawer/hooks/useSwipeClose.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Overlays/Drawer/Drawer.tsx","webpack://@mobi/web/./app/core/Components/Toast/Toast.styles.tsx","webpack://@mobi/web/./app/core/Components/Toast/Toast.tsx","webpack://@mobi/web/./app/core/Components/Toast/index.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/Input/SearchField.styles.ts","webpack://@mobi/web/./app/core/Areas/Search/Components/Input/SearchField.tsx","webpack://@mobi/web/./app/core/Areas/Search/Service/SearchService.ts","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/InitialDisplay.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchTextLabel/SearchTextLabelStyled.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchTextLabel/SearchTextLabel.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/InitialDisplay.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchLoading.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchLoading.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchErrored.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchResults.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/LocationTime.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/HighlightDisplay.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/HighlightDisplay.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/LocationTime.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchSilkImage.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchResult.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchResultStyled.styles.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainers/SearchResults.tsx","webpack://@mobi/web/./app/core/Areas/Search/Components/SearchResultsContainer.tsx","webpack://@mobi/web/./app/core/Areas/Search/Search.tsx","webpack://@mobi/web/./app/core/Areas/Kambi/config/startupParameters.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/logging.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/authentication.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/initWapi.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/handleClientSubscriptions.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/handleLoginLogout.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/handleScriptLoading.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/visibility.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/hooks/useKambiVisible.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/hooks/useStickyOnScroll.ts","webpack://@mobi/web/./app/core/Data/Account/PendingTicketsCount/usePendingTicketsCount/usePendingTicketsCount.ts","webpack://@mobi/web/./app/core/Areas/Account/driver.ts","webpack://@mobi/web/./app/core/Areas/Account/helpers/useGetAccountDetails.ts","webpack://@mobi/web/./app/core/Areas/Reverification/Alert.styles.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Alert.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/Wallet.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/helpers/useAnalytics.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/Components/OffersPanel.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/Components/OffersPanel.tsx","webpack://@mobi/web/./app/core/Components/Badge/Badge.styles.tsx","webpack://@mobi/web/./app/core/Components/Badge/Badge.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/HamburgerMenu/Components/BalanceSection/BalanceSection.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/HamburgerMenu/Components/BalanceSection/BalanceSection.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/Wallet.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/AccountDropDown/AccountDropDown.styles.ts","webpack://@mobi/web/./app/core/Data/Account/changePassword.ts","webpack://@mobi/web/./app/core/Areas/ChangePassword/ChangePassword.styles.tsx","webpack://@mobi/web/./app/core/Areas/ChangePassword/driver.ts","webpack://@mobi/web/./app/core/Areas/ChangePassword/Components/CurrentPassword.tsx","webpack://@mobi/web/../../apps-shared/account/src/Areas/Verification/Biometrics/Hooks/useBiometricsStatus.tsx","webpack://@mobi/web/./app/core/Areas/Login/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/ChangePassword/ChangePassword.tsx","webpack://@mobi/web/./app/core/Areas/ChangePassword/ChangeTemporaryPassword.tsx","webpack://@mobi/web/./app/core/Areas/Login/hooks/useLoginState.ts","webpack://@mobi/web/./app/core/Services/Sentry/sentry.ts","webpack://@mobi/web/./app/core/Components/Icons/Day.tsx","webpack://@mobi/web/./app/core/Components/Icons/Night.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/Greeting/Greeting.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/Greeting/Greeting.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/HamburgerMenu/HamburgerMenu.styles.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/HamburgerMenu/HamburgerMenuLink.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/HamburgerMenu/HamburgerMenu.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/Balance/BalancePill.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useIsNewBetSlipFeatureActive.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/Components/Common/Button/Button.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/Components/BetSlipButton/BetSlipButton.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/Components/PendingBetsButton/PendingBetsButton.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/Components/PendingBetsButton/hooks/useInvalidatePendingCountOnEvents.ts","webpack://@mobi/web/./app/core/Areas/AppHeader/Components/MyBetsButtons/MyBetsButtons.tsx","webpack://@mobi/web/./app/core/Areas/AppHeader/AppHeader.tsx","webpack://@mobi/web/./app/core/Components/RaceListHeader/RaceListHeader.styles.tsx","webpack://@mobi/web/./app/core/Areas/RaceList/RaceList.styles.tsx","webpack://@mobi/web/./app/core/Components/RaceListHeader/utils.ts","webpack://@mobi/web/./app/core/Components/RaceListHeader/RaceListHeader.tsx","webpack://@mobi/web/./app/core/Components/Links/Link.tsx","webpack://@mobi/web/./app/core/Areas/RaceList/Components/RaceElements.tsx","webpack://@mobi/web/./app/core/Areas/Racing/helpers/getPrettyRaceStatus.ts","webpack://@mobi/web/./app/core/Areas/RaceList/RaceList.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/Components/RaceEventsHeader/RaceEventsHeader.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/Components/RaceEventsItem/RaceEventsItem.styles.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/Components/RaceEventsItem/RaceEventsItem.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/RaceEventsApis.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/RaceEvents.styles.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceEvents/RaceEvents.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/Withdraw.styles.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawApi.ts","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawLoading.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/helpers/navigaton.ts","webpack://@mobi/web/./app/core/Areas/Withdraw/analytics.ts","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawUnavailable.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawSuccess.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawFailure.tsx","webpack://@mobi/web/./app/core/Areas/Withdraw/WithdrawPage.tsx","webpack://@mobi/web/./app/core/Services/Optimove/hooks/useTrackOptimoveWithdrawalPercentage.ts","webpack://@mobi/web/./app/core/Areas/Withdraw/Withdraw.tsx","webpack://@mobi/web/./app/core/Areas/BankAccount/BankAccountComponents.tsx","webpack://@mobi/web/./app/core/Areas/BankAccount/BankAccount.styles.tsx","webpack://@mobi/web/./app/core/Areas/BankAccount/BankAccountApi.tsx","webpack://@mobi/web/./app/core/Areas/BankAccount/BankAccount.tsx","webpack://@mobi/web/./app/core/Areas/BankAccount/BankAccountEdit.tsx","webpack://@mobi/web/./app/core/Areas/ContactUs/Components/FeedbackForm/FeedbackForm.styles.ts","webpack://@mobi/web/./app/core/Areas/ContactUs/Components/FeedbackForm/helpers/api.ts","webpack://@mobi/web/./app/core/Areas/ContactUs/Components/FeedbackForm/helpers/useFeedbackFormQuery.ts","webpack://@mobi/web/./app/core/Areas/ContactUs/Components/FeedbackForm/helpers/handleFormSubmission.ts","webpack://@mobi/web/./app/core/Areas/ContactUs/Components/FeedbackForm/FeedbackForm.tsx","webpack://@mobi/web/./app/core/Areas/ContactUs/ContactUsPage.tsx","webpack://@mobi/web/./app/core/Areas/Specials/SpecialsPage.styles.tsx","webpack://@mobi/web/./app/core/Areas/Specials/routeBuilder.ts","webpack://@mobi/web/./app/core/Areas/Specials/SpecialTile.tsx","webpack://@mobi/web/./app/core/Areas/Specials/SpecialsTermsPage.tsx","webpack://@mobi/web/./app/core/Areas/Specials/SpecialsPage.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/driver.ts","webpack://@mobi/web/./app/core/Areas/Tipping/data/toteSports.ts","webpack://@mobi/web/./app/core/Areas/Tipping/Components/Games/Games.styles.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/Games/ClosedGame.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/BettingDrawer/BettingDrawer.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/LoadingBars.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/Games/Games.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/TippingPoolHeader.styles.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/TippingPoolHeader.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/TippingPage.styles.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/helpers/getDisplayTime.ts","webpack://@mobi/web/./app/core/Areas/Tipping/Components/SingleOpenPool.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/PoolLists/CurrentPoolList.tsx","webpack://@mobi/web/./app/core/Components/DateNavigation/DateNavigation.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/SingleResultedPool.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/Components/PoolLists/ResultedPoolList.tsx","webpack://@mobi/web/./app/core/Areas/Tipping/TippingPage.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/changeBlackbookAlertPreference.ts","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/api.ts","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Hooks/useTakeABreak.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RaceDayAlertPreference/RaceDayAlertPreference.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Hooks/useIncomingIndicator.ts","webpack://@mobi/web/./app/core/Utils/betting/loadBet/createLoadBetDetails.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Workflow/selectors.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useRealtimeFobPriceChanges.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useBetSlipAnalytics.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useHapticFeedbackOnBetsSuccess.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useToastOnClearBetSlipSuccess.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/Common/RunningSoonHeader/RunningSoonHeader.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/helpers/deleteRunnerFromBlackbook.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/Common/BlackbookEntryDetails/Components/ShareButton/Components/ShareLoading.tsx","webpack://@mobi/web/./app/core/NativeServices/DeepLinking/getFirebaseDynamicLinkFromNative.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/Common/BlackbookEntryDetails/Components/ShareButton/ShareButton.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/Common/BlackbookEntryDetails/BlackbookEntryDetails.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/Common/Common.styles.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/SlimEntryExpandable/SlimEntryExpandable.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/Components/JockeysRunningSoon/Components/JockeyRunningSoonEntries.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/Components/JockeysRunningSoon/JockeysRunningSoon.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerItem/Components/RunningSoon/RunningSoon.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/Components/Common/Common.styles.ts","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/Components/RunnersRunningSoon/RunnersRunningSoon.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/hooks/useSmartBetSlip.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/helpers/getMultiBetslipItems.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/MultiToast.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/MultiToastPrice.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/MultiToastPrice.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/MultiToast.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/Components/SmartBetslipToast/SmartBetslipToast.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SmartBetSlip/SmartBetSlipMultiToastLegacy.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/Components/RunnerListWithData/RunnerListWithData.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Components/RunnerList/RunnerList.tsx","webpack://@mobi/web/./app/core/Areas/Blackbook/Blackbook.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/RacingSportsTabs/RacingSportsTabs.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/RacingSportsTabs/RacingSportsTabs.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Store/selectors.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Header/hooks/useRebetBetCount.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/PagesDateHeader/DateHeader.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Header/Components/HeaderDate.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Header/Header.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Header/hooks/useScrollHeaderEvents.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/Transaction.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/TransactionRow/TransactionRow.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/TransactionRow/TransactionRow.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/PendingWithdrawalDetails/PendingWithdrawalDetails.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/PendingWithdrawalDetails/PendingWithdrawalDetails.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/CompletedWithdrawalDetails/CompletedWithdrawalDetails.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/CompletedWithdrawalDetails/CompletedWithdrawalDetails.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Transaction/Transaction.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Details.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/BlackbookButtons/Components/BlackbookButton.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/BlackbookButtons/Components/BlackbookJockey.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/BlackbookButtons/BlackbookButtons.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/BonusBet/BonusBet.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/BonusBet/BonusBet.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Investment/Components/Cost/Cost.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Investment/Components/Formulas/Formulas.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Investment/Components/Formulas/Formulas.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Investment/Components/TippingOrFooto/TippingOrFooto.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Investment/Investment.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/ReBetButton/ReBetButton.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/ReBetButton/helpers/canAllowReBetForTicket.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/FavouriteNumbers/FavouriteNumbers.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/Multi/Components/CountdownStatus/CountdownStatus.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/Multi/Multi.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/SingleMultiple/SingleMultiple.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/SingleSingle/SingleSingle.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/Components/SameRaceMulti/SameRaceMulti.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/SelectionInfo/SelectionInfo.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Specials/Specials.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Components/Specials/Specials.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/Details/Details.tsx","webpack://@mobi/web/./app/core/Components/Logos/TABtouchBrandLogo.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/helpers/createImageUrlFromHtml.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/helpers/handleShareBetClick.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/helpers/convertImageUrlToBlob.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/hooks/useCreateImageForBrowser.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/hooks/useImageOutputDevTool.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/SharePreview.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/SharePreview.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/helpers/doesClientSupportShare.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/ShareBet.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/RaceReplay/ReplayVideoPlayer.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/RaceReplayVideoPlayer/RaceReplayVideoPlayer.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/RaceReplayButton/RaceReplayButton.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/PromoSelector/constants.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/PromoBanner/PromoBanner.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Components/SuperPick/SuperPick.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Ticket/Ticket.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Main/AccountActivityMain.styles.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Pages/Pages.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Common/PullToRefreshContainer/PullToRefreshContainer.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Main/AccountActivityMain.tsx","webpack://@mobi/web/./app/core/Areas/AccountActivity/Components/Main/hooks/useRefreshOnBetPlaced.ts","webpack://@mobi/web/./app/core/Areas/AccountActivity/AccountActivityMobi.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/ReverificationPopup.styles.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/DueMessage/DueMessage.styles.tsx","webpack://@mobi/web/./app/core/Components/RadialCountdown/RadialCountdown.styles.tsx","webpack://@mobi/web/./app/core/Components/RadialCountdown/RadialCountdown.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/DueMessage/DueMessage.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/ReverificationComplete/ReverificationComplete.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/ProvideExtraPersonalIdMessage/ProvideExtraPersonalIdMessage.styles.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/ReverificationPopup.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/ProvideExtraPersonalIdMessage/ProvideExtraPersonalIdMessage.tsx","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useToggleVisibility.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useRouteEnterRedirect.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useShouldShowSpinner.ts","webpack://@mobi/web/./app/core/Areas/Kambi/KambiClient.styles.ts","webpack://@mobi/web/./app/core/Areas/Kambi/KambiClient.tsx","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useKambiMaintenanceFlag.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useKambiRouteGuard.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useShowTransactionTabs.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useShowBrowserUnsupported.ts","webpack://@mobi/web/./app/core/Areas/Kambi/config/customerSettings.ts","webpack://@mobi/web/./app/core/Areas/Kambi/config/widgetSettings.ts","webpack://@mobi/web/./app/core/Areas/Kambi/widgets/NavigationSection.widget.ts","webpack://@mobi/web/./app/core/Areas/Kambi/hooks/useKambiClient.ts","webpack://@mobi/web/./app/core/Areas/Kambi/helpers/isKambiSupportedBrowser.ts","webpack://@mobi/web/./app/core/Settings/Components/GlobalCss/GlobalCss.tsx","webpack://@mobi/web/./app/core/Areas/Account/MyPreferences/api.ts","webpack://@mobi/web/./app/core/Areas/Account/MyPreferences/MyPreferences.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/NextRaceDrawer.tsx","webpack://@mobi/web/./app/core/Utils/hooks/useIsAuthenticated.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/MysteryTypes.ts","webpack://@mobi/web/./app/core/Areas/MysteryBet/driver.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/Mystery.styles.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/MysteryBetPage.styles.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/NumberOfBets.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/ReviewSelectionsDrawer.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/BetAmountButtons.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/MysteryRaceDetailsHeader.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Data/MysteryUtils.ts","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/CustomizeSpend.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/Campaigns/Campaigns.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/Campaigns/ActiveCampaign.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/Buttons/BonusBetButton.styles.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/Campaigns/BonusCashCampaign.tsx","webpack://@mobi/web/./app/core/Components/BettingDrawer/ConfirmBetDrawer.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/ProposedMysteryBet.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/ReviewMysteryDetails.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/CustomizeBet.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/utils.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/Components/MysteryQuickPick.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/QuickPick.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/MysteryBetTabs.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Components/MeetingInformation.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Data/MysteryBetRequests.ts","webpack://@mobi/web/./app/core/Areas/MysteryBet/MysteryBetPage.tsx","webpack://@mobi/web/./app/core/Areas/MysteryBet/Hooks/useMysteryBetDetails.ts","webpack://@mobi/web/./app/core/Areas/Toolbox/viewModel.ts","webpack://@mobi/web/./app/core/Areas/Account/SignUp/SignUpComplete.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/VersionInfo.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/CookieManagement.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/LocalStorageManager/LocalStorageManager.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/LastPaymentMethod/LastPaymentMethod.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/Sentry/Sentry.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Toolbox.tsx","webpack://@mobi/web/./app/core/Areas/Toolbox/Components/DevTools/DevTools.tsx","webpack://@mobi/web/./app/core/Components/RequireAuth/RequireAuth.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/ContactDetails.styles.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/ContactDetails.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/CountrySelect/CountrySelect.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/AdditionalDetails/AdditionalDetails.styles.tsx","webpack://@mobi/web/./app/core/Components/DateSelection/DateSelection.styles.tsx","webpack://@mobi/web/./app/core/Components/DateSelection/DateSelection.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/AdditionalDetails/MedicareSvg.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/AdditionalDetails/Medicare.tsx","webpack://@mobi/web/./app/core/Areas/Reverification/Components/PastReverificationMessage/PastReverificationMessage.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/AdditionalDetails/AdditionalDetails.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/AddressAutocomplete.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/FailedSaveMessage/FailedSaveMessage.styles.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/FailedSaveMessage/FailedSaveMessage.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/ManualAddressEntry/driver.ts","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/ManualAddressEntry/SuburbStatePostcodeAutocomplete.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/ManualAddressEntry/StreetTypeAutocomplete.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/ManualAddressEntry/ManualAddressEntry.styles.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/ManualAddressEntry/ManualAddressEntry.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/Components/NameDateOfBirthChangedNotice/NameDateOfBirthChangedNotice.tsx","webpack://@mobi/web/./app/core/Areas/ContactDetails/ContactDetailsEdit.tsx","webpack://@mobi/web/./app/core/Areas/CloseAccount/CloseAccount.styles.tsx","webpack://@mobi/web/./app/core/Areas/CloseAccount/CloseAccountView.tsx","webpack://@mobi/web/./app/core/Areas/CloseAccount/CloseAccount.tsx","webpack://@mobi/web/./app/core/Areas/Biometrics/BiometricsPage.styles.tsx","webpack://@mobi/web/./app/core/Areas/Biometrics/BiometricsPage.tsx","webpack://@mobi/web/./app/core/Areas/Account/Account.styles.ts","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/ActivityStatement.styles.tsx","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/Components/Select.styles.tsx","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/api.ts","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/Components/ContactDetailsLink.tsx","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/Components/NoEmailAddress.tsx","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/Components/CannotFetchData.tsx","webpack://@mobi/web/./app/core/Data/Account/accountHolder.ts","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/Hooks/useActivityStatementQueries.ts","webpack://@mobi/web/./app/core/Areas/Account/ActivityStatements/ActivityStatements.tsx","webpack://@mobi/web/./app/core/Areas/Account/Account.tsx","webpack://@mobi/web/./app/core/Areas/Account/BetOffer/Components/BetOffers.tsx","webpack://@mobi/web/./app/core/Areas/Account/BetOffer/BetOfferPage.tsx","webpack://@mobi/web/./app/core/Areas/Account/Logout/Logout.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/Precommitment.styles.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/PrecommitmentBetLimit.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/PrecommitmentCreditCardBlock.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/PrecommitmentInfo.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/PrecommitmentForm.tsx","webpack://@mobi/web/./app/core/Areas/Account/Precommitment/PrecommitmentPage.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/TakeABreak.styles.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Components/TakeABreakError.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Components/TakeABreakActive.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Components/TakeABreakInfo.styled.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Components/TakeABreakInfo.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/Components/TakeABreakForm.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/TakeABreak.tsx","webpack://@mobi/web/./app/core/Areas/Account/TakeABreak/index.ts","webpack://@mobi/web/./app/core/Areas/Account/Verification/Components/VerificationBanner.tsx","webpack://@mobi/web/./app/core/Areas/Account/Verification/Verification.tsx","webpack://@mobi/web/./app/classic/Foundation/Notification.ts","webpack://@mobi/web/./app/classic/Foundation/ViewModels/TabLocatorViewModel.ts","webpack://@mobi/web/./app/core/Areas/TABLocatorWeb/TABLocatorWeb.tsx","webpack://@mobi/web/./app/core/Areas/Login/Login.styles.ts","webpack://@mobi/web/./app/core/Areas/Login/Components/AccountNumberRecovery/helpers/api.ts","webpack://@mobi/web/./app/core/Areas/Login/Components/AccountNumberRecovery/AccountNumberRecovery.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/LoginMain/LoginMain.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/Components/Step1AccountNumberInput.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/Components/Step2SendVerification.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/Components/Step3VerifyCode.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/Shared/DeliveryMethods/helpers.ts","webpack://@mobi/web/./app/core/Areas/Login/Components/Shared/DeliveryMethods/DeliveryMethodSent.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/Shared/DeliveryMethods/DeliveryMethods.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/helpers/api.ts","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/Components/Step4SetNewPassword.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/PasswordReset.tsx","webpack://@mobi/web/./app/core/Areas/Login/Components/PasswordReset/hooks/usePasswordReset.ts","webpack://@mobi/web/./app/core/Areas/Login/Components/Shared/RecoverFooter.tsx","webpack://@mobi/web/./app/core/Areas/Login/Login.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/Common/SettingItem/SettingItem.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/Common/SettingItemWithCheckbox/SettingItemWithCheckbox.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/PayoutNotification/PayoutNotification.tsx","webpack://@mobi/web/./app/core/Services/Analytics/helpers/updateUserSettingsOnDataLayer.ts","webpack://@mobi/web/./app/core/Services/Analytics/hooks/useInitAnalyticsDataLayer.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/DockedPlayer/Hooks/useAutoFullscreenOnNativeLandscape.ts","webpack://@mobi/web/./app/core/Areas/SkyVideoPlayer/Components/DockedPlayer/DockedPlayer.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/Common/SecondaryHeader.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/BettingInfo/BettingInfo.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/Mystery/MysteryRaceBettingPageWrapper.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Components/RatingTacho/RatingTacho.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Components/MarketProposition/MarketProposition.styles.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Components/MarketProposition/MarketProposition.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Components/Market/Market.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Utils/betWithSelection.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Utils/betWithStartingPrice.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/FixedOddsMarkets.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Hooks/useFixedOddsMarkets.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Hooks/useResetActiveToteSwap.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/MoreBettingOptions/MoreBettingOptions.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/PoolTotals/Components/JurisdictionDescription.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/PoolTotals/Components/PoolTotalsItem.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/PoolTotals/PoolTotals.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/SpecialsInfo/SpecialsInfo.tsx","webpack://@mobi/web/./app/classic/AppUtils/Framework/CustomBindings/SlideBinding.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/CustomBindings/ClassBinding.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/BaseBetType/BaseBetType.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/WinPlace/WinPlaceViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/WinPlace/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/FirstFour/FirstFourViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/FirstFour/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Trifecta/TrifectaViewModel.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/Components/koComponentRegistration.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Trifecta/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Race/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Dog/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Trot/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Image/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/ResultedImage/register.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/WinPlaceButtons.styles.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/Components/InsuranceButton.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/Components/StartingPriceButton.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/hooks/useSmartBetslipRunner.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/helpers/helpers.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/WinPlaceButtons/WinPlaceButtons.tsx","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiButtons/SameRaceMultiButtons.styles.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiButtons/SameRaceMultiButtons.tsx","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/UIElements/ButtonsSelection.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/SelectionViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/UIElements/CheckedValue.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/UIElements/NumberToPosition.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/Processors/CheckBoxSelectionContext.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Core/UIElements/CheckboxSelection.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/CheckBox/CheckboxSelectionViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/CheckBox/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Scratched/ScratchedViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Scratched/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/ScratchedDeductions/ScratchedDeductionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/ScratchedDeductions/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/RovingBanker/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Trifecta/TrifectaTopPanelViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Trifecta/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Allways/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/MySelectionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/WinPlaceSelectionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/Tote/ToteWinPlaceSelectionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/Tote/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/Novelty/NoveltySelectionsViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/Novelty/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/FirstFour/FirstFourTopPanelViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/FirstFour/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Exacta/ExactaTopPanelViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Exacta/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Quinella/QuinellaTopPanelViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Quinella/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Exacta/ExactaViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Exacta/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Quinella/QuinellaViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/Quinella/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/LegIn/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/VerticalArrow/VerticalArrowViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/VerticalArrow/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/ExpandPanel/ExpandPanelViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/ExpandPanel/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/ColumnHeaders/Results/ResultsColumnHeaderViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/ColumnHeaders/Results/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/AllUpPoolSelection/AllUpPoolSelectionViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/AllUpPoolSelection/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Form/Tacho/TachoViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Form/Tacho/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/BettingClosed/BettingClosedViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/BettingClosed/register.ts","webpack://@mobi/web/./app/classic/AppUtils/Framework/CustomBindings/StickyBinding.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/BetType/SameRaceMultiViewModel.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/ProvDivs/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Workflow/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Starters/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Pages/Results/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/MultiLeg/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/List/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Dog/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Race/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Trot/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Place/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/Prices/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Selection/Field/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Standard/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Substitutes/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/Scratchings/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MessageBox/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Finishers/view/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/AllUp/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/BetTypes/MultiLeg/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/NoveltyDividends/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/General/RaceReplay/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/List/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Starters/Pricing/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Panels/MultiRaceSubHeader/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/MySelection/WinPlace/Fixed/register.ts","webpack://@mobi/web/./app/classic/Betting-v2/Components/Commands/InfoToolboxWrapper/register.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/SameRaceMulti/BetType/register.ts","webpack://@mobi/web/./app/classic/Specials/Components/PyosMessage/register.ts","webpack://@mobi/web/./app/classic/Specials/Components/PyosSelect/register.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Hooks/useLegacyRaceCardIntegration.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/Components/RaceCardTicket/RaceCardTicket.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/Components/RaceTicketsAccordion/RaceTicketsAccordion.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/hooks.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/utils.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/AccountTicketsForRace.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/AccountTicketsForRace/api.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/BetTypeSelector/helpers/getAvailableBetTypesFromData.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/BetTypeSelector/helpers/analytics.ts","webpack://@mobi/web/./app/core/Areas/RaceCard/Components/BetTypeSelector/BetTypeSelector.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/RaceCardMatched.tsx","webpack://@mobi/web/./app/core/Areas/RaceCard/RaceCard.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceInfoSlim/Components/SkeletonLoader.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceInfoSlim/RaceInfoSlim.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceFilter/RaceFilter.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceFilter/Components/SkeletonLoader.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Hooks/useIsBlackbookInRace.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/Common/SharedRaceSelection.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/Common/ShowMoreSkyRacesButton.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceScrollView/RaceScrollView.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceScrollView/Hooks/useNextToJumpReset.ts","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceScrollView/Components/SkeletonLoader.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/NoRacesMessage/NoRacesMessage.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Components/RaceListView/RaceListView.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/RaceCardSky.tsx","webpack://@mobi/web/./app/core/Areas/RaceCardSky/Hooks/useSwipeable.ts","webpack://@mobi/web/./app/core/Areas/Racing/Components/RacingFormSliceJS/GoodThings.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/EnhancedBetslip/EnhancedBetslip.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/HapticFeedback/HapticFeedback.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Store/Config/selectors.ts","webpack://@mobi/web/./app/core/Areas/Settings/Components/KeypadDenominations/Components/EditPresetTrayContent/EditPresetTrayContent.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/KeypadDenominations/KeypadDenominations.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/NewSports/NewSports.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Components/NewBetSlip/NewBetSlip.tsx","webpack://@mobi/web/./app/core/Areas/Settings/Settings.tsx","webpack://@mobi/web/./app/core/Areas/Navigation/Hooks/useActiveTab.ts","webpack://@mobi/web/./app/core/Areas/Navigation/Components/TabNavigation/TabNavigation.tsx","webpack://@mobi/web/./app/core/Components/Popup/Popup.tsx","webpack://@mobi/web/./app/core/Contexts/HostContextMobile.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Selection&Input/Toggle/Toggle.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/ShareMyBet/context.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiLegCheckbox/Components/MultiLegClosed/MultiLegClosed.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiLegCheckbox/MultiLegCheckbox.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Selection&Input/ToggleWithLabels/ToggleWithLabels.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiLegTypeToggle/MultiLegTypeToggle.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetInfo/Components/FobBetInfo/FobBetInfo.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetInfo/Components/RacingBetInfo/helpers/index.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetInfo/Components/RacingBetInfo/RacingBetInfo.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetInfo/Components/SportBetInfo/SportBetInfo.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetInfo/BetInfo.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/InlineAlert/InlineAlert.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/context.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/InlineError/InlineError.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/Investment/Investment.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/Investment/hooks/useRegisterInvestmentInput.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/Investment/hooks/useCaptureValueOnActiveInput.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/Investment/Investment.styles.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/superPicks.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/calculator/singles.ts","webpack://@mobi/web/../../apps-shared/component-library/src/Selection&Input/RadioButton/RadioButton.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/PromoSelector/PromoSelection/PromoSelection.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/PromoSelector/PromoSelector.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/BetInvestment/Components/FobInvestment/Components/SuperPicks/SuperPicks.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/BetInvestment/Components/FobInvestment/FobInvestment.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/BetInvestment/Components/ToteInvestment/ToteInvestment.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/BetInvestment/BetInvestment.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/BetCardTitle/BetCardTitle.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiItems/Components/InvestmentSummary/InvestmentSummary.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiItems/Components/MultiItem/MultiItem.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/MultiItems/MultiItems.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/ShareMyBet/Components/ShareMyBetTray/ShareMyBetTray.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/ShareMyBet/ShareMyBet.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/AllUpFormula/AllUpFormula.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/ItemMessage/ItemMessage.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/ReceiptDetail/ReceiptDetail.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/Components/RemoveButton/RemoveButton.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Components/SingleItem/SingleItem.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/helpers/filterItemsForWorkflow.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Singles/Singles.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Common/ReceiptNumber/ReceiptNumber.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/ComboMultis/Components/ComboInvestment/ComboInvestment.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Components/ComboMultis/ComboMultis.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Multi/Multi.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/Keypad/Keypad.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/Keypad/hooks/useSyncActiveValueWithSelection.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/Keypad/hooks/usePhysicalKeyboardEntry.ts","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/calculator/combined.ts","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/ButtonsSection/Components/ClearBetSlipButton/ClearBetSlipButton.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/ButtonsSection/ButtonsSection.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/SummarySection/Components/BetsPlacedSuccessToast/BetsPlacedSuccessToast.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Components/SummarySection/SummarySection.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/Footer/Footer.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/EmptyState/EmptyState.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Navigation/Tabs/Tabs.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/TabButtons/TabButtons.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/Components/TabButtons/hooks/useListenForDesiredBettingSection.ts","webpack://@mobi/web/../../apps-shared/betslip/src/hooks/useTabSectionObserver.ts","webpack://@mobi/web/../../apps-shared/betslip/src/App.tsx","webpack://@mobi/web/../../apps-shared/component-library/src/Feedback/Badge/Badge.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/Components/HeaderPanel/HeaderPanel.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/Components/LowBalanceStatus/LowBalanceStatus.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/Components/TakeABreakStatus/TakeABreakStatus.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/Components/InducementSync/InducementSync.tsx","webpack://@mobi/web/../../apps-shared/betslip/src/helpers/requestBuilder.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/postAllBetsToServer.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/shareBet/helpers/getPlanSequence.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/shareBet/helpers/createLoadBetDetails.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/shareBet/handleShareBet.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/shareBet/helpers/doesBrowserSupportShare.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/BetSlipNew.tsx","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/index.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/helpers/shareBet/canShareBet.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useRefreshBalanceOnBetsPlaced.ts","webpack://@mobi/web/./app/core/Areas/BetSlipNew/hooks/useAccountBalanceSync.ts","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimits/DepositLimits.styles.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsViewAccountHolder/DepositLimitsViewAccountHolder.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/themes.ts","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsView/DepositLimitsView.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimitsEdit/DepositLimitsEdit.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/Components/DepositLimits/DepositLimits.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/DepositLimitsPage.tsx","webpack://@mobi/web/./app/core/Areas/DepositLimits/DepositLimitsEditPage.tsx","webpack://@mobi/web/./app/core/App.tsx","webpack://@mobi/web/./app/core/NativeServices/Navigation/useAndroidBackButton.ts","webpack://@mobi/web/./app/core/State/Navigation/hooks/useNavigationObserver.ts","webpack://@mobi/web/./app/core/NativeServices/AppLaunchState/useNativeAppLaunchState.ts","webpack://@mobi/web/./app/entry-main.ts"],"sourcesContent":["import styled from '@emotion/styled'\nimport { spacing } from '@mobi/component-library/Theme/Common'\n\nexport const AppStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const PageStyled = styled.div({\n boxSizing: 'border-box',\n width: 'min(60rem, 100%)',\n margin: '0 auto',\n padding: spacing.md,\n})\n","import styled from '@emotion/styled'\nimport { colors, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const LoadingContainerStyled = styled.div({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n\n '& :not(:last-child)': {\n marginBottom: '1rem',\n },\n})\n\nexport const PanelStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n})\n\nexport const PaymentMethodsStyled = styled.div({\n padding: '2.5rem 0',\n flex: 1,\n borderTop: `0.1rem solid ${colors.neutral[200]}`,\n marginTop: spacing.bigx1,\n})\n","import { coerceIntoError, unwrapErrorMessage } from '@mobi/utils'\nimport { isPaymentProcessorErrorCode } from '../Utils'\nimport type { DepositResponse } from '@mobi/api-types'\n\nexport type Reason =\n | 'generic_failure'\n | 'unable_to_retrieve_tokens'\n | 'sufficient_balance'\n | 'unsecure_client'\n | 'exceeds_deposit_limit'\n | 'minimum_deposit_exceeds_deposit_limit'\n | 'no_previous_payment_method'\n | 'no_suitable_card'\n | 'selected_card_is_a_credit_card'\n | 'cannot_deposit'\n | 'card_verification_failed'\n | 'unsupported_payment_method'\n | 'unable_load_payment_method'\n | 'unable_deposit_non_tokenized_card'\n | 'user_canceled'\n | 'deposit_failed'\n | 'declined_by_payment_processor'\n | 'paypal_initialization_failed'\n | 'tokenization_failed'\n\nexport const messages: Readonly> = {\n generic_failure: 'We were unable to complete the deposit',\n unable_to_retrieve_tokens: 'We were unable to retrieve tokens for this deposit',\n exceeds_deposit_limit: 'This deposit would exceed your deposit limit',\n minimum_deposit_exceeds_deposit_limit: 'The minimum deposit would exceed your deposit limit',\n no_previous_payment_method: 'No previous payment method has been used on this device',\n no_suitable_card: 'No suitable debit card could be found',\n selected_card_is_a_credit_card:\n \"Please select 'Other Deposit' and set a new primary debit card in the 'Manage Cards' section\",\n sufficient_balance: 'Your account balance is high enough to cover the bet',\n unsecure_client: 'This device could not securely perform the transaction',\n cannot_deposit: 'You are not able to deposit at this time',\n card_verification_failed: 'Your debit card could not be verified',\n unsupported_payment_method: 'Payment method not supported',\n unable_load_payment_method: 'Payment method currently not available',\n unable_deposit_non_tokenized_card: 'You may need to add your debit card to Google Wallet',\n user_canceled: 'Transaction was canceled by the user',\n deposit_failed: 'The deposit was not successful',\n declined_by_payment_processor:\n 'Your bank has declined this payment. Please contact your bank directly for details.',\n paypal_initialization_failed:\n 'We were unable to load PayPal, try depositing using a different payment method by clicking \"Other Deposit\" below',\n tokenization_failed: 'We were unable to verify your transaction',\n}\n\nexport class DepositError extends Error {\n public constructor(\n public readonly reason: Reason,\n public readonly transactionId: string | null,\n public readonly code: string | undefined,\n message: string\n ) {\n super(message ?? 'An unknown error has occured')\n }\n\n public get wasCanceled(): boolean {\n return this.reason === 'user_canceled'\n }\n\n public get displayMessage(): string {\n return messages[this.reason]\n }\n\n public static readonly defaultError = 'An unknown error has occured'\n\n public static coerce(error: unknown, transactionId: string | null) {\n if (error instanceof DepositError) {\n return error\n }\n\n return new DepositError(\n 'generic_failure',\n transactionId,\n undefined,\n unwrapErrorMessage(coerceIntoError(error))\n )\n }\n\n public static canceled(transactionId: string | null) {\n return new DepositError(\n 'user_canceled',\n transactionId,\n undefined,\n 'The user canceled the transaction'\n )\n }\n\n public static fromErrorDetails(\n details: Pick\n ) {\n const reason =\n typeof details.failureCode === 'string' && isPaymentProcessorErrorCode(details.failureCode)\n ? 'declined_by_payment_processor'\n : 'generic_failure'\n\n const message = details.message ?? details.failureMessage ?? DepositError.defaultError\n\n return new DepositError(\n reason,\n details.transactionId,\n details.failureCode ?? undefined,\n message\n )\n }\n}\n","import React from 'react'\nimport { AccountHeader } from '../../../../../component-library/src/Account'\n\n/**\n * Display a header for the Deposit screen, with an optional close\n * button\n */\nexport const DepositHeader = ({ title, onClose }: { title: string; onClose?: VoidFunction }) => {\n return (\n \n )\n}\n","import React from 'react'\nimport type { DepositRequest } from '@mobi/api-types'\nimport { unwrapErrorMessage } from '@mobi/utils'\nimport { useApplePayDeposit, useBraintreeClient } from '../../../Hooks'\nimport { DepositError } from '../../DepositError'\nimport { ApplePayButton } from '@mobi/component-library/Deposit/Buttons/ApplePay'\nimport type { PanelProps } from '../../types'\nimport { DepositRequestWithoutDeviceData } from '../../../Hooks'\n\nexport const ApplePayButtonWeb = ({\n initialData: { transactionId, clientToken },\n depositAmount,\n isDepositAllowed,\n onStart,\n onCancel,\n onDepositing,\n onSuccess,\n onFailure,\n}: PanelProps) => {\n const { isReady, client } = useBraintreeClient(clientToken)\n const { tokenize, deposit } = useApplePayDeposit({ braintreeClient: client })\n\n if (!isReady || !client) {\n return

Error

\n }\n\n const onApplePayConfirmed = async (data: DepositRequestWithoutDeviceData) => {\n onDepositing()\n\n try {\n const { isSuccess, ...errorDetails } = await deposit(data)\n\n if (isSuccess) {\n onSuccess(depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (error) {\n onFailure(DepositError.coerce(error, transactionId))\n }\n }\n\n const onApplePayButtonClicked = async () => {\n onStart()\n\n const canDeposit = await isReady()\n\n if (!canDeposit || !client.current) {\n onCancel?.()\n return\n }\n\n try {\n await tokenize({\n braintreeClient: client,\n depositAmount,\n transactionId,\n onSuccess: onApplePayConfirmed,\n onCancel,\n onError: error => {\n onFailure(\n new DepositError(\n 'tokenization_failed',\n transactionId,\n undefined,\n unwrapErrorMessage(error)\n )\n )\n },\n })\n } catch {\n onFailure(\n new DepositError(\n 'unable_load_payment_method',\n transactionId,\n undefined,\n 'Apple Pay failed to load'\n )\n )\n }\n }\n\n return (\n \n )\n}\n","import React from 'react'\nimport { DepositError } from '../../DepositError'\nimport { ApplePayButton } from '@mobi/component-library/Deposit/Buttons/ApplePay'\nimport { useApplePayDeposit, useApplePayInterop, useBraintreeClient } from '../../../Hooks'\nimport type { PanelProps } from '../../types'\n\nexport const ApplePayButtonNative = ({\n initialData: { transactionId, clientToken },\n depositAmount,\n isDepositAllowed,\n onStart,\n onSuccess,\n onDepositing,\n onFailure,\n onCancel,\n}: PanelProps) => {\n const { isReady, client } = useBraintreeClient(clientToken)\n const { deposit } = useApplePayDeposit({ braintreeClient: client })\n const { tokenize, attachNativeSubscriptions, disposeNativeSubscriptions } = useApplePayInterop({\n onSuccess: async token => {\n try {\n onDepositing()\n\n const { isSuccess, ...errorDetails } = await deposit({\n amount: depositAmount,\n paymentMethodNonce: token,\n transactionId,\n depositSource: 'ApplePay',\n })\n\n if (isSuccess) {\n onSuccess(depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (error) {\n onFailure(DepositError.coerce(error, transactionId))\n } finally {\n disposeNativeSubscriptions()\n }\n },\n onFailure: async error => {\n onFailure(new DepositError('deposit_failed', transactionId, undefined, error))\n disposeNativeSubscriptions()\n },\n onCancel: () => {\n onCancel?.()\n disposeNativeSubscriptions()\n },\n })\n\n const onApplePayButtonClicked = async () => {\n // TODO validation\n\n onStart()\n\n const canDeposit = await isReady()\n\n if (canDeposit) {\n tokenize(clientToken, depositAmount)\n attachNativeSubscriptions()\n } else {\n onCancel?.()\n disposeNativeSubscriptions()\n }\n }\n\n return (\n \n )\n}\n","import React from 'react'\nimport { CreditCardButtonProps } from '@mobi/component-library/Deposit/Buttons/types'\nimport { customerMustUseThreeDSecure } from '../../../Utils/helpers'\nimport { DepositError } from '../../DepositError'\nimport type { PanelProps } from '../../types'\nimport { useBraintreeClient, useCreditCardDeposit } from '../../../Hooks'\nimport { MasterCardButton, VisaButton } from '@mobi/component-library/Deposit/Buttons/CreditCard'\nimport type { PaymentMethod } from '@mobi/api-types'\nimport { Button } from '@mobi/component-library/Common/V2'\n\ntype Props = PanelProps & {\n creditCard: PaymentMethod\n /** True to show issuer on button, false to show generic 'Deposit' button */\n showIssuer: boolean\n}\n\nexport const CreditCardButton = ({\n initialData,\n accountNumber,\n depositAmount,\n isDepositAllowed,\n creditCard,\n showIssuer,\n onStart,\n onCancel,\n onDepositing,\n onSuccess,\n onFailure,\n}: Props) => {\n const mustUse3DSecure = customerMustUseThreeDSecure(initialData, depositAmount)\n\n const { clientTokenThreeDSecure, clientToken } = initialData\n\n const { isReady, client: braintreeClient } = useBraintreeClient(\n mustUse3DSecure ? clientTokenThreeDSecure : clientToken\n )\n\n const { deposit } = useCreditCardDeposit({\n initialData,\n accountNumber,\n braintreeClient,\n mustUse3DSecure,\n onDepositing,\n })\n\n const onCreditCardButtonClicked = async () => {\n // If depositing is not allowed, we stop here. While it isn't possible for\n // someone to get here while depositing isn't allowed, a user could try\n // to deposit by removing the `disabled` attribute through devtools.\n if (!isDepositAllowed) {\n return\n }\n\n onStart()\n\n const canDeposit = await isReady()\n\n if (!canDeposit) {\n onCancel?.()\n return\n }\n\n try {\n const response = await deposit({\n creditCard,\n isUsingNewCard: false,\n depositAmount,\n })\n\n const { isSuccess, ...errorDetails } = response\n\n if (isSuccess) {\n await onSuccess(depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (error) {\n if (error instanceof DepositError && error.reason === 'user_canceled') {\n onCancel?.()\n return\n }\n\n onFailure(DepositError.coerce(error, null))\n }\n }\n\n if (showIssuer) {\n const CreditCardButton = determineCreditCardButton(creditCard.issuerName)\n return (\n \n )\n }\n\n return (\n \n Deposit\n \n )\n}\n\nfunction determineCreditCardButton(issuerName: string): React.FC {\n switch (issuerName) {\n case 'MASTER_CARD':\n return MasterCardButton\n case 'VISA':\n return VisaButton\n default:\n return () => {\n return <>\n }\n }\n}\n","import React, { useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\nimport { Button, Icon } from '@mobi/component-library/Common/V2'\nimport { CreditCardButton } from './CreditCardButton'\nimport { CreditCardSelector } from '@mobi/component-library/Deposit/CreditCard'\nimport { isCardValid } from '@mobi/component-library/Deposit/helpers'\nimport { PaymentMethod } from '@mobi/api-types'\nimport { routes } from '../../../Utils'\nimport type { PanelProps } from '../../types'\nimport { selectDepositFlow } from '../../../Store'\nimport { track } from '../../../../../Utils'\n\nexport const CreditCardPanel = ({\n initialData,\n accountNumber,\n depositAmount,\n isDepositAllowed,\n onStart,\n onCancel,\n onDepositing,\n onSuccess,\n onFailure,\n}: PanelProps) => {\n const history = useHistory()\n const flow = useSelector(selectDepositFlow)\n\n // TODO: Pass this as a prop after MOBI-2697 has been merged\n // See https://rwwa.atlassian.net/browse/MOBI-2697\n const primaryCard = initialData?.paymentMethods.find(card => card.isDefault)\n\n const [selectedCard, setSelectedCard] = useState(() => primaryCard)\n\n const selectedCardIsDebitCard = selectedCard?.isDebitCard ?? false\n const selectedCardHasExpired = selectedCard?.isExpired ?? false\n const canDeposit = isDepositAllowed && selectedCardIsDebitCard && !selectedCardHasExpired\n\n const onCardSelected = (card: PaymentMethod) => {\n setSelectedCard(card)\n track('deposit_change_card', {\n accountNumber,\n depositVariant: flow,\n })\n }\n\n const navigateToManageCards = () => {\n history.push(routes.manageCards)\n track('deposit_manage_cards', {\n accountNumber,\n paymentMethod: 'CreditCard',\n depositVariant: flow,\n })\n }\n\n if (!primaryCard || !selectedCard) {\n return (\n \n \n Add a new card\n \n )\n }\n\n // Expired cards should not show up in the list\n const selectableCards = initialData?.paymentMethods.filter(isCardValid) ?? []\n\n /** Has existing cards */\n return (\n <>\n \n\n \n\n \n \n )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport type { GooglePayDepositRequest } from '@mobi/api-types'\nimport { SpinnerStandalone } from '@mobi/component-library/Common/Spinner'\nimport type { PanelProps } from '../../types'\nimport { useBraintreeClient } from '../../../Hooks/useBraintreeClient'\nimport { useGooglePayAvailability, useGooglePayDeposit } from '../../../Hooks/GooglePay'\nimport { isGooglePayError } from '../../../Hooks/GooglePay/initGooglePayWeb'\nimport { getGooglePaymentsClient } from '../../../Utils'\nimport { LoadingContainerStyled } from '../../DepositBody.styles'\nimport { PaymentSDKButtonContainerStyled } from '../Payment.styles'\nimport type { DepositRequestWithoutDeviceData } from '../../../Hooks/useDeposit'\nimport { InfoBox } from '@mobi/component-library/Common/V2'\nimport { DepositError } from '../../DepositError'\n\nexport const GooglePayButtonWeb = ({\n initialData: { clientTokenThreeDSecure, transactionId },\n accountNumber,\n depositAmount,\n isDepositAllowed,\n onStart,\n onCancel,\n onDepositing,\n onSuccess,\n onFailure,\n}: PanelProps) => {\n // Due to Google Pay's button rendering through an SDK and requiring a onClick\n // function with signature `() => void`, we need to keep the `pay` function\n // in a ref to prevent rerenders and allow us to change the dependencies\n const payFunctionRef = useRef()\n const buttonContainerRef = useRef(null)\n const isGooglePayAvailable = useGooglePayAvailability(clientTokenThreeDSecure)\n const { isReady, client } = useBraintreeClient(clientTokenThreeDSecure)\n const { verify, deposit } = useGooglePayDeposit({\n braintreeClient: client,\n accountNumber,\n transactionId,\n })\n const [isButtonReady, setButtonReady] = useState(false)\n\n const onGooglePayConfirmed = useCallback(\n async (data: DepositRequestWithoutDeviceData) => {\n onDepositing()\n\n try {\n const { isSuccess, ...errorDetails } = await deposit(data)\n\n if (isSuccess) {\n onSuccess(depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (error) {\n if (isGooglePayError(error)) {\n // TODO: Figure out what the appropriate reason is based on statusCode\n return onFailure(\n new DepositError(\n 'generic_failure',\n transactionId,\n error.statusCode,\n error.statusMessage\n )\n )\n }\n\n onFailure(DepositError.coerce(error, transactionId))\n }\n },\n [deposit, depositAmount, onDepositing, onFailure, onSuccess, transactionId]\n )\n\n const pay = useCallback(async () => {\n onStart()\n\n const canDeposit = await isReady()\n const braintreeClient = client.current\n\n if (!canDeposit || !braintreeClient) {\n onCancel?.()\n return\n }\n\n try {\n await verify({\n depositAmount,\n onSuccess: onGooglePayConfirmed,\n onFailure,\n onCancel,\n })\n } catch (unknownError) {\n const error = unknownError as Error | string | google.payments.api.PaymentsError\n\n if (isGooglePayError(error)) {\n if (error.statusCode === 'CANCELED') {\n return onCancel?.()\n }\n\n // TODO: Figure out what the appropriate reason is based on statusCode\n return onFailure(\n new DepositError('generic_failure', transactionId, error.statusCode, error.statusMessage)\n )\n }\n\n onFailure(DepositError.coerce(error, transactionId))\n }\n }, [\n onStart,\n isReady,\n client,\n onCancel,\n verify,\n depositAmount,\n onGooglePayConfirmed,\n onFailure,\n transactionId,\n ])\n\n useEffect(() => {\n // Don't render the Google Pay button when Google Pay is not available\n // or when the button has already been rendered\n if (isGooglePayAvailable !== 'available' || isButtonReady) {\n return\n }\n\n // See https://developers.google.com/pay/api/web/guides/resources/customize for button customization options\n getGooglePaymentsClient().then(client => {\n const button = client.createButton({\n onClick: () => payFunctionRef.current?.(),\n buttonType: 'plain', // Only display \"Pay\" along the Google Pay icon\n buttonColor: 'default',\n buttonLocale: 'en',\n buttonSizeMode: 'fill',\n })\n\n buttonContainerRef.current?.append(button)\n setButtonReady(true)\n })\n }, [isGooglePayAvailable, isButtonReady])\n\n // Update the `pay` function ref when it has changed\n useEffect(() => {\n payFunctionRef.current = pay\n }, [pay])\n\n return (\n <>\n
\n \n
\n\n {!isButtonReady && isGooglePayAvailable !== 'unavailable' && (\n \n \n \n )}\n\n {!isButtonReady && isGooglePayAvailable === 'unavailable' && (\n \n Google Pay is unavailable on your device.\n \n )}\n \n )\n}\n","import type { PanelProps } from '../../types'\nimport { DepositError } from '../../DepositError'\nimport { useDeposit } from '../../../Hooks'\nimport { sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\ntype PayParams = Pick<\n PanelProps,\n 'onSuccess' | 'onStart' | 'onFailure' | 'onCancel' | 'onDepositing'\n> & {\n clientToken: string\n transactionId: string\n depositAmount: number\n isReady: () => Promise\n deposit: ReturnType['depositMutation']['mutateAsync']\n}\n\n/**\n * Initiate a native Google Pay payment\n */\nexport async function pay({\n onFailure,\n onSuccess,\n onStart,\n onCancel,\n onDepositing,\n isReady,\n depositAmount,\n clientToken,\n transactionId,\n deposit,\n}: PayParams) {\n isReady()\n .then(canDeposit => {\n if (canDeposit) {\n onStart()\n return Promise.resolve()\n }\n\n return Promise.reject()\n })\n .then(() => {\n const abortController = new AbortController()\n\n const promise = Promise.race([\n waitForGooglePaySuccess(abortController.signal),\n waitForGooglePayFailure(abortController.signal, transactionId),\n waitForGooglePayCanceled(abortController.signal, transactionId),\n ]).finally(() => {\n // When any of the `Promise`s has settled we need to prevent any other promise from\n // calling back, as these are now NOOP. By having passed the abort signal to all\n // other subscriptions, we can call abortController.abort() to clean them up.\n abortController.abort()\n })\n\n sendToNative('REQUEST_GOOGLE_PAY_BEGIN_PAYMENT', {\n token: clientToken,\n price: depositAmount,\n })\n\n return promise\n })\n .then(token => {\n onDepositing()\n\n return deposit({\n amount: depositAmount,\n paymentMethodNonce: token,\n depositSource: 'GooglePay',\n transactionId,\n })\n })\n .then(({ isSuccess, ...errorDetails }) => {\n if (!isSuccess) {\n errorDetails.transactionId ??= transactionId\n return Promise.reject(DepositError.fromErrorDetails(errorDetails))\n }\n\n return onSuccess(depositAmount)\n })\n .catch(error => {\n if (error instanceof DepositError && error.wasCanceled) {\n return onCancel?.()\n }\n\n return onFailure(DepositError.coerce(error, transactionId))\n })\n}\n\nfunction waitForGooglePaySuccess(abort: AbortSignal) {\n return new Promise((resolve, reject) => {\n abort.addEventListener('abort', reject, {\n once: true,\n })\n\n subscribeToNative(\n 'RESPONSE_GOOGLE_PAY_SUCCESS',\n ({ token }) => {\n resolve(token)\n },\n {\n cleanupSignal: abort,\n }\n )\n })\n}\n\nfunction waitForGooglePayFailure(abort: AbortSignal, transactionId: string) {\n return new Promise((_, reject) => {\n abort.addEventListener('abort', reject, {\n once: true,\n })\n\n subscribeToNative(\n 'RESPONSE_GOOGLE_PAY_FAILURE',\n ({ error }) => {\n // TODO: Can we extrapolate why it failed?\n reject(new DepositError('generic_failure', transactionId, undefined, error))\n },\n {\n cleanupSignal: abort,\n }\n )\n })\n}\n\nfunction waitForGooglePayCanceled(abort: AbortSignal, transactionId: string) {\n return new Promise((_, reject) => {\n abort.addEventListener('abort', reject, {\n once: true,\n })\n\n subscribeToNative(\n 'GOOGLE_PAY_CANCELLED',\n () => {\n reject(DepositError.canceled(transactionId))\n },\n {\n cleanupSignal: abort,\n }\n )\n })\n}\n","import React from 'react'\nimport { useDeposit } from '../../../Hooks/useDeposit'\nimport { useBraintreeClient } from '../../../Hooks'\nimport { GooglePayButton } from '@mobi/component-library/Deposit'\nimport type { PanelProps } from '../../types'\nimport { pay } from './googlePayNative'\n\nexport const GooglePayButtonNative = ({\n initialData: { clientToken, canDeposit, transactionId },\n accountNumber,\n onStart,\n onSuccess,\n onDepositing,\n onCancel,\n onFailure,\n depositAmount,\n isDepositAllowed,\n}: PanelProps) => {\n const { client, isReady } = useBraintreeClient(clientToken)\n const { depositMutation } = useDeposit({\n braintreeClient: client,\n accountNumber,\n })\n\n const canUserStartDeposit = isDepositAllowed && canDeposit\n\n const onClick = async () => {\n if (canUserStartDeposit) {\n await pay({\n depositAmount,\n onStart,\n onFailure,\n onCancel,\n onDepositing,\n isReady,\n clientToken,\n transactionId,\n onSuccess,\n deposit: depositMutation.mutateAsync,\n })\n }\n }\n\n return \n}\n\nGooglePayButtonNative.displayName = 'GooglePayButtonNative'\n","import styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\n\nexport const PayPalButtonCaption = styled.div(\n {\n fontFamily: font.family.primary,\n fontWeight: font.weight.medium,\n textAlign: 'center',\n color: colors.neutral['700'],\n width: '100%',\n marginTop: '0.4rem',\n },\n font.size.sm\n)\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { DepositError } from '../../DepositError'\nimport { SpinnerStandalone } from '@mobi/component-library/Common/Spinner'\nimport { unwrapErrorMessage } from '@mobi/utils'\nimport type { PanelProps } from '../../types'\nimport type { PayPalDepositRequest } from '@mobi/api-types'\nimport { PaymentSDKButtonContainerStyled } from '../Payment.styles'\nimport { LoadingContainerStyled } from '../../DepositBody.styles'\nimport { type DepositRequestWithoutDeviceData } from '../../../Hooks'\nimport { usePayPalDeposit, useBraintreeClient } from '../../../Hooks'\nimport { PayPalButtonCaption } from './PayPalButton.styles'\n\nexport const payPalButtonCaption = 'You will be redirected to PayPal to complete your deposit.'\n\nexport const PayPalButtonWeb = ({\n initialData: { transactionId, clientToken },\n depositAmount,\n isDepositAllowed,\n onStart,\n onFailure,\n onSuccess,\n onDepositing,\n onCancel,\n}: PanelProps) => {\n const isInitializing = useRef(false)\n const didInitialize = useRef(false)\n const buttonContainer = useRef(null)\n const transactionDetailsRef = useRef({\n depositAmount,\n transactionId,\n })\n const { isReady, client } = useBraintreeClient(clientToken)\n const [isButtonReady, setButtonReady] = useState(false)\n const { init, deposit } = usePayPalDeposit({ braintreeClient: client })\n\n const onPayPalConfirmed = useCallback(\n async (data: DepositRequestWithoutDeviceData) => {\n onDepositing()\n\n try {\n const { isSuccess, ...errorDetails } = await deposit(data)\n\n if (isSuccess) {\n onSuccess(transactionDetailsRef.current.depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (error) {\n onFailure(DepositError.coerce(error, transactionId))\n }\n },\n [onDepositing, deposit, onSuccess, onFailure, transactionId]\n )\n\n // Update the transaction details that will be provided to the PayPal SDK\n useEffect(() => {\n transactionDetailsRef.current = {\n depositAmount,\n transactionId,\n }\n }, [depositAmount, transactionId])\n\n useEffect(() => {\n if (isInitializing.current || didInitialize.current) {\n return\n }\n\n isInitializing.current = true\n\n isReady().then(isReady => {\n if (!isReady || didInitialize.current) {\n return\n }\n\n didInitialize.current = true\n\n init({\n braintreeClient: client,\n buttonContainer,\n getTransactionDetails: () => transactionDetailsRef.current,\n onInit: () => setButtonReady(true),\n onClick: () => onStart(),\n onSuccess: onPayPalConfirmed,\n onError: error => {\n // FIXME: Find a better, more accurate way to determine whether or not to display the error\n // Errors with an undefined code are likely errors caused by rendering failures within\n // PayPal's SDK. This is currently the best way to determine these kinds of errors\n\n const errorCode =\n typeof error !== 'string' && 'code' in error && typeof error.code === 'string'\n ? error.code\n : undefined\n\n const shouldReportError = typeof error === 'string' || errorCode !== undefined\n\n if (shouldReportError) {\n onFailure(\n new DepositError(\n 'paypal_initialization_failed',\n transactionId,\n errorCode,\n unwrapErrorMessage(error)\n )\n )\n } else {\n onCancel?.()\n }\n },\n onCancel: () => onCancel?.(),\n })\n .catch(() => {\n return onFailure(\n new DepositError(\n 'paypal_initialization_failed',\n transactionId,\n undefined,\n 'Failed to initialize PayPal'\n )\n )\n })\n .finally(() => {\n isInitializing.current = false\n })\n })\n }, [\n client,\n depositAmount,\n deposit,\n transactionId,\n init,\n isReady,\n onCancel,\n onFailure,\n onPayPalConfirmed,\n onStart,\n ])\n\n return (\n <>\n
\n \n {payPalButtonCaption}\n
\n {isButtonReady ? null : (\n \n \n \n )}\n \n )\n}\n","import React, { useEffect } from 'react'\nimport { PayPalButton } from '@mobi/component-library/Deposit/Buttons'\nimport { useBraintreeClient } from '../../../Hooks'\nimport { usePayPalDeposit } from '../../../Hooks/PayPal/usePayPalDeposit'\nimport { DepositError } from '../../DepositError'\nimport { sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { PanelProps } from '../../types'\nimport { PayPalButtonCaption } from './PayPalButton.styles'\nimport { payPalButtonCaption } from './PayPalButtonWeb'\n\nexport const PayPalButtonNative = ({\n depositAmount,\n isDepositAllowed,\n initialData: { transactionId, clientToken },\n onStart,\n onSuccess,\n onDepositing,\n onFailure,\n onCancel,\n}: PanelProps) => {\n const { isReady, client } = useBraintreeClient(clientToken)\n const { deposit } = usePayPalDeposit({ braintreeClient: client })\n\n const onPayPalButtonClicked = async () => {\n onStart()\n\n if (await isReady()) {\n sendToNative('BEGIN_PAYPAL_TOKENIZE', {\n amount: depositAmount,\n clientToken,\n })\n } else {\n onCancel?.()\n }\n }\n\n useEffect(() => {\n const successSubscription = subscribeToNative(\n 'PAYPAL_TOKENIZE_DID_SUCCEED',\n async ({ details, nonce }) => {\n try {\n onDepositing()\n\n const { billingAddress, lastName, firstName, payerId, email } = details\n\n const { isSuccess, ...errorDetails } = await deposit({\n amount: depositAmount,\n paymentMethodToken: clientToken,\n paymentMethodNonce: nonce,\n payPalAddress: billingAddress && {\n street: `${billingAddress.line1}${billingAddress.line2}`,\n city: billingAddress.city,\n state: billingAddress.state,\n postCode: billingAddress.state,\n countryCode: billingAddress.countryCode,\n },\n payPalEmail: email,\n payPalPayerId: payerId,\n lastName,\n firstName,\n depositSource: 'PayPal',\n transactionId,\n })\n\n if (isSuccess) {\n onSuccess(depositAmount)\n } else {\n onFailure(DepositError.fromErrorDetails(errorDetails))\n }\n } catch (e) {\n onFailure(DepositError.coerce(e, transactionId))\n }\n }\n )\n\n const failSubscription = subscribeToNative('PAYPAL_TOKENIZE_DID_FAIL', data => {\n const { message } = data\n\n onFailure(new DepositError('tokenization_failed', transactionId, undefined, message))\n })\n\n const cancelSubscription = subscribeToNative('PAYPAL_TOKENIZE_WAS_CANCELLED', () =>\n onCancel?.()\n )\n\n return () => {\n successSubscription.dispose()\n failSubscription.dispose()\n cancelSubscription.dispose()\n }\n }, [\n depositAmount,\n deposit,\n clientToken,\n transactionId,\n onCancel,\n onDepositing,\n onFailure,\n onSuccess,\n ])\n\n return (\n <>\n \n {payPalButtonCaption}\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const PaymentSDKButtonContainerStyled = styled.div<{ isDisabled: boolean }>(\n ({ isDisabled }) => ({\n opacity: isDisabled ? '0.6' : '1',\n pointerEvents: isDisabled ? 'none' : 'auto',\n marginLeft: 'auto',\n marginRight: 'auto',\n maxWidth: '750px',\n })\n)\n","import styled from '@emotion/styled'\nimport { newTheme as theme } from '@mobi/component-library/Theme'\n\nexport const AccountBalanceHeaderStyled = styled.div({\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'space-between',\n padding: '1.6rem',\n alignItems: 'center',\n ...theme.font.size.md,\n fontFamily: theme.font.family.primary,\n fontWeight: theme.font.weight.regular,\n})\n\nexport const AccountBalanceTitleStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n gap: '1rem',\n '& > span': {\n padding: '0.8rem',\n background: theme.colors.surface['400'],\n borderRadius: '50%',\n },\n})\n\nexport const AccountBalanceAmountStyled = styled.div({\n color: theme.colors.studio['500'],\n})\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { toMoney } from '@mobi/utils/money'\nimport {\n AccountBalanceHeaderStyled,\n AccountBalanceTitleStyled,\n AccountBalanceAmountStyled,\n} from './AccountBalanceHeader.styles'\n\nexport const AccountBalanceHeader = ({ amount }: { amount: number }) => {\n return (\n \n \n \n Account Balance\n \n {toMoney(amount)}\n \n )\n}\n","import styled from '@emotion/styled'\nimport type { Props } from './Grid'\n\nexport const GridStyled = styled.div(\n {\n display: 'grid',\n },\n ({ gap = '1rem', cols = 1, rows = 1 }) => ({\n gap,\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gridTemplateRows: `repeat(${rows}, 1fr)`,\n })\n)\n","import React, { type PropsWithChildren } from 'react'\nimport { GridStyled } from './Grid.styled'\n\nexport type Props = PropsWithChildren<{\n gap?: string\n cols?: number\n rows?: number\n}>\n\n/**\n * A grid with evenly spaced rows and columns\n */\nexport const Grid = ({ children, ...props }: Props) => {\n return {children}\n}\n","import React, { memo } from 'react'\nimport { PaymentMethodSelectionButton } from '../Buttons'\nimport { Grid } from '../Grid'\nimport type { DeviceType } from '../types'\nimport type { PaymentMethodsAll } from '../types'\n\ntype Props = {\n /**\n * The type of the device the payments will be displayed on.\n */\n deviceType: DeviceType\n /**\n * The selected payment method to make a deposit. Note that `ApplePay`\n * is only available on Safari and iOS, and `GooglePay` is not\n * available on iOS.\n */\n selectedPaymentMethod?: PaymentMethodsAll\n /**\n * Whether to show ApplePay as a payment method\n */\n showApplePay: boolean\n /**\n * Whether to show GooglePay as a payment method\n */\n showGooglePay: boolean\n /**\n * Whether to show BPay as a payment method\n */\n showBPay: boolean\n /**\n * Whether to show Cash as a payment method\n */\n showCash: boolean\n /**\n * Whether to show 'Scan my Bet' as a payment method\n */\n showScanMyBet: boolean\n /**\n * Whether to show PayID as a payment method\n */\n showPayID: boolean\n /**\n * The click handler for the payment methods. When clicked, passes\n * the associated payment method as the first parameter.\n */\n onClick: (paymentMethod: PaymentMethodsAll) => void\n}\n\n/**\n * A grid based layout of available of supported payment methods that are supported on a given platform.\n *\n * ## Supported payment methods\n *\n * - Credit card\n * - Paypal\n * - Google Pay\n * - Apple Pay\n * - Other (self-serve deposit methods, e.g. BPay, Cash, PayID)\n *\n * ## Compatibility\n *\n * | | Browser (Safari) | Browser (Non-Safari) | Native iOS | Native Android |\n * |-------------|------------------|----------------------|------------|----------------|\n * | Debit Card | ✅ | ✅ | ✅ | ✅ |\n * | Paypal | ✅ | ✅ | ✅ | ✅ |\n * | Apple Pay | ✅ | ❌ | ✅ | ❌ |\n * | Google Pay | ✅ | ✅ | ❌ | ✅ |\n * | BPay | ✅ | ✅ | ✅ | ✅ |\n * | Cash | ✅ | ✅ | ✅ | ✅ |\n * | Scan My Bet | ❌ | ❌ | ✅ | ✅ |\n * | PayID | ✅ | ✅ | ✅ | ✅ |\n *\n */\nexport const PaymentMethods = memo(\n ({\n selectedPaymentMethod = 'CreditCard',\n showScanMyBet,\n showApplePay,\n showGooglePay,\n showBPay,\n showCash,\n showPayID,\n onClick,\n deviceType,\n }) => {\n const isDesktop = deviceType === 'desktop'\n\n return (\n \n \n\n {showPayID && (\n \n )}\n\n \n\n {showApplePay && (\n \n )}\n\n {showGooglePay && (\n \n )}\n\n {showBPay && (\n \n )}\n\n {showCash && (\n \n )}\n\n {showScanMyBet && (\n \n )}\n \n )\n }\n)\n","import React, { type FC } from 'react'\nimport { type PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\nimport { CustomerServiceCentre, InfoBox } from '@mobi/component-library/Common/V2'\nimport { paymentMethodTypeNameMap } from '../Utils/schema'\n\ntype Props = {\n paymentMethod: PaymentMethodsAll\n}\n\nexport const PaymentMethodBlocked: FC = ({ paymentMethod }) => {\n return (\n \n \n \n )\n}\n\nPaymentMethodBlocked.displayName = 'PaymentMethodBlocked'\n\nconst BlockedPaymentMethodText: FC = ({ paymentMethod }) => {\n return (\n
\n \n Deposits are not enabled for {paymentMethodTypeNameMap[paymentMethod]} on this account.\n {paymentMethod === 'PayID' &&\n ' Any deposits to this PayID will be automatically refunded to your bank account.'}\n \n
\n \n
\n )\n}\n","import React, { useRef } from 'react'\nimport styled from '@emotion/styled'\nimport { useSelector } from 'react-redux'\nimport { font, spacing } from '@mobi/component-library/Theme/Common'\nimport { CopyField, CustomerServiceCentre, InfoBox } from '@mobi/component-library/Common/V2'\nimport type { PanelProps } from '../../types'\nimport { selectDepositFlow } from '../../../Store'\nimport { track } from '../../../../../Utils'\n\ntype Props = Pick & {\n isPreCommitmentLimitSet: boolean\n}\n\nconst minBPayDeposit = 20\nconst maxBPayDeposit = 500_000\nconst formattedMaxBPayDeposit: string = maxBPayDeposit.toLocaleString()\n\nexport const BPayPanel = ({ accountNumber, initialData, isPreCommitmentLimitSet }: Props) => {\n const flow = useSelector(selectDepositFlow)\n const containerRef = useRef(null)\n\n const isOldAccountNumbers = accountNumber && accountNumber <= 2176659\n\n return (\n
\n \n
Biller Code
\n
\n {\n track('deposit_copy_content', {\n accountNumber,\n paymentMethod: 'BPay',\n copiedContent: 'Biller Code',\n copiedLocation: 'BPay',\n depositVariant: flow,\n })\n }}\n />\n
\n
Reference
\n\n
\n {isOldAccountNumbers ? (\n \n ) : (\n {\n track('deposit_copy_content', {\n accountNumber,\n paymentMethod: 'BPay',\n copiedContent: 'Account Number',\n copiedLocation: 'BPay',\n depositVariant: flow,\n })\n }}\n />\n )}\n
\n {initialData.depositLimits.maximum >= minBPayDeposit && (\n <>\n
Minimum Deposit
\n
${minBPayDeposit}
\n \n )}\n {(!isPreCommitmentLimitSet || initialData.depositLimits.maximum > maxBPayDeposit) && (\n <>\n
Daily Limit
\n
${formattedMaxBPayDeposit}
\n \n )}\n
\n\n \n BPay deposits are fee-free and usually reach your TABtouch account within 1-3 days.\n \n
\n )\n}\n\nBPayPanel.displayName = 'BPayPanel'\n\nconst BPayPanelStyled = styled.dl({\n alignItems: 'center',\n display: 'grid',\n fontFamily: font.family.primary,\n gap: spacing.sm,\n gridAutoRows: '5rem',\n gridTemplateColumns: 'minmax(0, max-content) 1fr',\n margin: 0,\n marginBottom: spacing.md,\n ...font.size.lg,\n\n dt: {\n fontWeight: font.weight.semibold,\n },\n\n dd: {\n margin: 0,\n },\n})\n","import React, { type MouseEventHandler } from 'react'\nimport styled from '@emotion/styled'\nimport { useSelector } from 'react-redux'\nimport { Button, InfoBox } from '@mobi/component-library/Common/V2'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { useHostContext } from '../../../../../Common/HostContext'\nimport { selectDepositFlow } from '../../../Store'\nimport { track } from '../../../../../Utils'\nimport type { PanelProps } from '../../types'\n\ntype Props = Pick\n\nexport const CashPanel = ({ accountNumber }: Props) => {\n const { events } = useHostContext()\n const flow = useSelector(selectDepositFlow)\n\n const onTabButtonClick: MouseEventHandler = e => {\n e.preventDefault()\n\n if (!events) {\n return\n }\n\n events?.findTab()\n track('deposit_find_tab', {\n accountNumber,\n depositVariant: flow,\n })\n }\n\n return (\n \n \n\n \n You can deposit cash into your TABtouch account at any TAB venue across Western Australia.\n \n \n )\n}\n\nCashPanel.displayName = 'CashPanel'\n\nconst CashPanelStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n rowGap: spacing.sm,\n})\n","import React, { type MouseEventHandler } from 'react'\nimport styled from '@emotion/styled'\nimport { Button, Icon, InfoBox } from '@mobi/component-library/Common/V2'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { sendToNative } from '@mobi/web-native-comms/web'\nimport { track } from '../../../../../Utils'\n\nexport const ScanMyBetPanel = ({ accountNumber }: { accountNumber: number }) => {\n const onButtonClick: MouseEventHandler = () => {\n track('deposit_scan_my_bet', {\n accountNumber,\n paymentMethod: 'ScanMyBet',\n })\n sendToNative('SCAN_RETAIL_TICKET')\n }\n\n return (\n \n \n \n Use Scan My Bet to check the status of your ticket from any TAB retail store. Deposit\n winnings or your remaining balance directly into your TABtouch account. Simply point your\n phone's camera at the ticket to start.\n \n \n )\n}\n\nScanMyBetPanel.displayName = 'ScanMyBetPanel'\n\nconst ScanMyBetPanelStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n rowGap: spacing.sm,\n})\n","import { useRef, useState, useEffect } from 'react'\nimport { useMutation, useIsMutating, useQueryClient } from 'react-query'\nimport { type PayIdDetails } from '@mobi/api-types/src/account/betAccount'\nimport { put } from '../../../../Utils/network'\nimport { reportErrorIfNeeded, track } from '../../../../Utils'\nimport { addCrumb } from '@mobi/utils'\nimport { queryKeys } from '../../../../Utils'\n\nexport function usePayID({ accountNumber, payIdDetailList }: Params) {\n const isGeneratingPayId = useIsMutating({ mutationKey: [queryKeys.generatePayId] })\n const [status, setStatus] = useState(\n getPayIdStatus(payIdDetailList, isGeneratingPayId)\n )\n const queryClient = useQueryClient()\n\n useEffect(() => setStatus(getPayIdStatus(payIdDetailList)), [payIdDetailList])\n\n // Official failureCount support is in @tanstack-query v4+\n // This is a ponyfill for it\n const failureCount = useRef(0)\n\n const { mutate: generatePayId } = useMutation({\n mutationFn: () =>\n put('/api/eft-mgt/payid/requestcreate', {\n betAccountNumber: accountNumber,\n }),\n mutationKey: queryKeys.generatePayId,\n onError: (response: Response) => {\n switch (response.status) {\n case 500:\n case 504:\n setStatus('retry')\n break\n case 400:\n case 401:\n case 404:\n case 405:\n default:\n setStatus('error')\n break\n }\n\n incrementFailureCount()\n track('deposit_payid_failed', {\n accountNumber,\n timeStamp: new Date().toISOString(),\n })\n reportErrorIfNeeded({\n message: `PayId /requestcreate error: ${response.statusText}`,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [queryKeys.depositBetAccount] }) //update PayId status to pending\n addCrumb('deposit', 'PayId /requestcreate success')\n },\n onMutate: () => addCrumb('deposit', 'PayId /requestcreate mutate'),\n })\n\n const incrementFailureCount = () => {\n failureCount.current++\n if (failureCount.current >= 3) {\n setStatus('error')\n }\n }\n\n const generate = () => {\n if (isGeneratingPayId) return\n\n track('deposit_generate_payid', {\n accountNumber,\n timeStamp: new Date().toISOString(),\n })\n setStatus('loading')\n generatePayId()\n }\n\n return {\n generate,\n activePayID: findActivePayId(payIdDetailList),\n status,\n }\n}\n\n// #region Types\n\ntype Params = {\n accountNumber: number\n payIdDetailList: PayIdDetails[]\n}\n\ntype PayIdStatuses = 'no-payid' | 'loading' | 'error' | 'retry' | 'generated'\n\n// #endregion\n\n// #region Utils\n\nconst getPayIdStatus = (payIds: PayIdDetails[], isGeneratingPayId = 0): PayIdStatuses => {\n if (isGeneratingPayId || findPayIdPendingActivation(payIds)) return 'loading'\n if (payIds.length === 0) return 'no-payid'\n if (findActivePayId(payIds)) return 'generated'\n\n return 'error' // zepto status failed | deregistered | disabled\n}\n\nconst findActivePayId = (payIds: PayIdDetails[]) =>\n payIds.find(payID => payID.CreationStatus === 'active')\n\nconst findPayIdPendingActivation = (payIds: PayIdDetails[]) =>\n payIds.find(payID => payID.CreationStatus === 'pending')\n\n// #endregion\n","import styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const PayIDPanelStyled = styled.section({\n fontFamily: font.family.primary,\n\n p: {\n textAlign: 'left',\n margin: 0,\n ...font.size.md,\n },\n\n '> header p': {\n color: colors.neutral[800],\n },\n})\n\nexport const MissingPayIDCardStyled = styled.div({\n alignItems: 'center',\n backgroundColor: colors.lavender[900],\n borderRadius: radius.lgx1,\n columnGap: spacing.big,\n display: 'grid',\n gridTemplateColumns: '7.6rem 1fr',\n marginTop: spacing.md,\n padding: `${spacing.md} ${spacing.bigx1}`,\n\n p: {\n color: colors.white,\n marginBottom: spacing.sm,\n },\n\n svg: {\n display: 'inline-block',\n },\n\n '@keyframes spin': { to: { transform: 'rotate(360deg)' } },\n\n 'button svg': {\n animation: 'spin 1s steps(8) infinite',\n },\n\n a: {\n color: 'inherit',\n },\n})\n\nexport const InfoContainerStyled = styled.div({\n alignItems: 'center',\n color: colors.neutral[900],\n columnGap: spacing.sm,\n display: 'grid',\n gridTemplateColumns: 'max-content 1fr',\n gridTemplateRows: spacing.lg,\n marginTop: spacing.md,\n ...font.size.lg,\n\n '> span:first-of-type': {\n fontWeight: font.weight.semibold,\n },\n})\n","import React, { type FC } from 'react'\nimport { Accordion } from '@mobi/component-library/Common/V2'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { track } from '../../../../../Utils'\n\ntype Props = {\n accountNumber: number\n}\n\nconst PayIDInstructions: FC = ({ accountNumber }) => {\n return (\n \n {\n if (!isExpanded) {\n track('deposit_payid_help', {\n accountNumber,\n })\n }\n }}\n >\n \n
    \n
  1. Generate your unique TABtouch PayID
  2. \n
  3. Copy your PayID
  4. \n
  5. Log in to your banking app
  6. \n
  7. Select PayID or payee via email address
  8. \n
  9. Paste your TABtouch PayID and finalise the payment
  10. \n
\n

\n Your PayID is unique to your account. Please ensure you copy the PayID field accurately\n before entering it into your banking app.\n

\n

\n If your banking app doesn’t explicitly state PayID, look for the option to transfer via\n email address to complete the transfer.\n

\n

\n PayID is an instant transaction, however your bank may delay the first deposit from your\n bank account due to their own security controls.\n

\n
\n \n
\n )\n}\n\nPayIDInstructions.displayName = 'PayIDInstructions'\n\n// ======\n// Styles\n// ======\n\nconst ContainerStyled = styled.div({\n marginTop: spacing.md,\n})\n\nconst ContentStyled = styled.div({\n paddingBottom: spacing.smx2,\n color: colors.neutral[900],\n ...font.size.md,\n\n ol: {\n marginTop: 0,\n paddingLeft: spacing.none,\n marginLeft: '2ch',\n lineHeight: '2.5rem',\n },\n p: {\n marginTop: spacing.big,\n },\n})\n\nexport default PayIDInstructions\n","import React, { type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport type { PanelProps } from '../../types'\nimport {\n Button,\n Centered,\n CopyField,\n CustomerServiceCentre,\n Icon,\n type ButtonColor,\n} from '@mobi/component-library/Common/V2'\nimport { type PayIdDetails } from '@mobi/api-types/src/account/betAccount'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { usePayID } from '../../../Hooks/PayID/usePayID'\nimport { track } from '../../../../../Utils'\nimport { selectDepositFlow } from '../../../Store'\nimport { InfoContainerStyled, MissingPayIDCardStyled, PayIDPanelStyled } from './PayIDPanel.styled'\nimport PayIDInstructions from './PayIDInstructions'\n\ntype Props = Pick & {\n payIdDetailList: PayIdDetails[]\n}\n\nexport const PayIDPanel: FC = ({ accountNumber, payIdDetailList }) => {\n const flow = useSelector(selectDepositFlow)\n const { activePayID, generate, status } = usePayID({\n accountNumber,\n payIdDetailList,\n })\n\n const [text, heading, color] = ((): [string, string | React.ReactElement, ButtonColor] => {\n if (status === 'loading') {\n return [\n 'Please wait...',\n \"We're still working on generating your PayID. Feel free to leave this page and check back again in a few minutes to see if it's ready.\",\n 'secondary_color',\n ]\n }\n\n if (status === 'retry') {\n return [\n 'Try again',\n \"We're unable to generate your PayID. Please try again.\",\n 'secondary_destructive',\n ]\n }\n\n if (status === 'error') {\n return [\n 'Try again',\n ,\n 'secondary_grey',\n ]\n }\n\n return ['Generate my PayID', 'Generate your unique TABtouch PayID.', 'secondary_color']\n })()\n\n return (\n \n
\n

\n Instantly transfer funds into your TABtouch account, direct from your banking app. It's\n fast and secure.\n

\n
\n\n {activePayID && (\n
\n \n PayID\n \n track('deposit_copy_content', {\n accountNumber,\n paymentMethod: 'PayID',\n copiedContent: 'PayID',\n copiedLocation: 'PayID',\n depositVariant: flow,\n })\n }\n />\n \n\n \n Minimum Deposit\n $5.00\n \n
\n )}\n\n {!activePayID && (\n \n \n \n \n\n
\n

{heading}

\n\n \n {status === 'loading' && }\n {text}\n \n
\n
\n )}\n\n \n
\n )\n}\n\nPayIDPanel.displayName = 'PayIDPanel'\n","import React, { type FC } from 'react'\nimport type { PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport type { PanelProps } from '../types'\nimport { CreditCardPanel } from './CreditCard'\nimport { ApplePayButtonWeb, ApplePayButtonNative } from './ApplePay'\nimport { GooglePayButtonWeb, GooglePayButtonNative } from './GooglePay'\nimport { PayPalButtonWeb, PayPalButtonNative } from './PayPal'\n\ntype Props = PanelProps & {\n paymentMethod: PaymentMethods\n isNative: boolean\n}\n\nexport const PaymentButton: FC = ({ paymentMethod, isNative, ...panelProps }) => {\n const Component = determinePaymentMethodPanel(paymentMethod, isNative)\n\n return \n}\n\nPaymentButton.displayName = 'PaymentButton'\n\nfunction determinePaymentMethodPanel(\n paymentMethod: PaymentMethods,\n isNative: boolean\n): FC {\n switch (paymentMethod) {\n case 'CreditCard':\n return CreditCardPanel\n case 'ApplePay':\n return isNative ? ApplePayButtonNative : ApplePayButtonWeb\n case 'PayPal':\n return isNative ? PayPalButtonNative : PayPalButtonWeb\n case 'GooglePay':\n return isNative ? GooglePayButtonNative : GooglePayButtonWeb\n }\n}\n","import React, { type FC } from 'react'\nimport type { PaymentMethodsSelfServe } from '@mobi/component-library/Deposit/types'\nimport type { PanelProps } from './types'\nimport { BPayPanel, CashPanel, PayIDPanel, ScanMyBetPanel } from './Payments'\nimport { PanelStyled } from './DepositBody.styles'\nimport { InitialData } from '@mobi/api-types'\nimport { type PayIdDetails } from '@mobi/api-types/src/account/betAccount'\n\ntype Props = {\n accountNumber: number\n paymentMethod: PaymentMethodsSelfServe\n initialData: InitialData\n isPreCommitmentLimitSet: boolean\n payIdDetailList: PayIdDetails[]\n}\n\nexport const SelfServeDepositPanels: FC = ({\n accountNumber,\n paymentMethod,\n initialData,\n isPreCommitmentLimitSet,\n payIdDetailList,\n}) => {\n const Panel = externalPaymentPanels[paymentMethod]\n return (\n \n \n \n )\n}\n\nconst externalPaymentPanels: Record<\n PaymentMethodsSelfServe,\n React.FC<\n Pick & {\n isPreCommitmentLimitSet: boolean\n payIdDetailList: PayIdDetails[]\n }\n >\n> = {\n BPay: BPayPanel,\n Cash: CashPanel,\n ScanMyBet: ScanMyBetPanel,\n PayID: PayIDPanel,\n} as const\n","import styled, { type CSSObject } from '@emotion/styled'\nimport { colors, radius, font } from '@mobi/component-library/Theme/Common'\n\nexport const TooltipStyled = styled.div(\n {\n zIndex: 1,\n\n '> div': {\n display: 'flex',\n alignItems: 'center',\n padding: '1rem',\n borderRadius: radius.md,\n marginRight: '1rem',\n boxShadow: '0 10px 15px -3px rgba(0,0,0,0.2)',\n maxWidth: '32rem',\n fontWeight: font.weight.regular,\n ...font.size.md,\n\n animationDuration: '0.2s',\n animationName: 'animateIn',\n animationTimingFunction: 'cubic-bezier(.26, .53, .74, 1.48)',\n\n '> div': {\n position: 'absolute',\n width: '0.8rem',\n height: '0.8rem',\n backgroundColor: 'inherit',\n transform: 'rotate(45deg)',\n },\n\n svg: {\n opacity: 0.6,\n padding: '0.75rem',\n },\n\n strong: {\n display: 'block',\n textTransform: 'uppercase',\n fontStyle: 'italic',\n paddingRight: '0.5rem',\n fontSize: '1.2rem',\n },\n\n a: {\n color: 'inherit',\n },\n },\n\n '@keyframes animateIn': {\n '0%': { opacity: 0, transform: 'scale(0.8, 0.8)' },\n '100%': { opacity: 1, transform: 'scale(1, 1)' },\n },\n },\n ({ color = 'blue' }) => ({\n '> div': {\n ...tooltipColors[color],\n },\n })\n)\n\nexport const tooltipColors: Record = {\n blue: { backgroundColor: colors.mariner[600], color: colors.white },\n black: { backgroundColor: colors.black, color: colors.white },\n}\n\nexport const TooltipReferenceContainer = styled.div({ display: 'grid' })\n\nexport type TooltipColor = 'blue' | 'black'\n\nexport type TooltipStyledProps = {\n /**\n * The color variant of the tooltip\n */\n color: TooltipColor\n}\n","import React, { useMemo, type PropsWithChildren } from 'react'\nimport { arrow, offset, shift, useFloating, flip } from '@floating-ui/react-dom'\nimport { Icon } from '../../Icon'\nimport { TooltipColor, TooltipStyled } from './Tooltip.styles'\nimport type { TooltipId } from './'\n\ntype Props = PropsWithChildren<{\n /** Element reference to trigger tooltip from. */\n triggerElRef: React.RefObject\n /** Tooltip reference key to be stored in local storage. */\n tooltipId: TooltipId\n /** Distance in pixels away from element reference. */\n offsetPx?: number\n /** Callback for determining whether the user has seen this tooltip before. */\n hasTooltipBeenSeen: (tooltipId: TooltipId) => boolean\n /** Callback when tooltip is dismissed. Useful for setting flag of whether tooltip has been seen or for iterating sequenced tooltips. */\n onDismissed?: (tooltipId: TooltipId) => void\n /** Title of the tooltip text, formatted differently to the children elements. */\n title?: string\n /**\n * Changes the placement of the tooltip to one that will fit if the initially specified placement does not.\n * (See: https://floating-ui.com/docs/flip)\n */\n flipElement?: boolean\n /** End date of when tooltip should render until. */\n untilDate?: Date\n /** Whether to hide tooltip. Eg. useSequencedTooltips hides tooltips not currently iterated on. */\n isHidden?: boolean\n /** Colour of the tooltip. */\n color?: TooltipColor\n}>\n\n/**\n * Tooltip component that is displayed if it has not been previously dismissed (seen).\n */\nexport const Tooltip = ({\n triggerElRef,\n tooltipId,\n offsetPx = 0,\n hasTooltipBeenSeen,\n title = '',\n children,\n onDismissed,\n flipElement = true,\n untilDate,\n isHidden = false,\n color = 'blue',\n}: Props): Nullable => {\n const arrowRef = React.useRef(null)\n const [isBeforeUntilDate] = React.useState(() =>\n untilDate ? new Date().getTime() <= untilDate.getTime() : true\n )\n const [isDismissed, setIsDismissed] = React.useState(false)\n\n React.useEffect(() => {\n setIsDismissed(isHidden)\n }, [isHidden])\n\n const shouldRender = useMemo(\n () => !isDismissed && isBeforeUntilDate && !hasTooltipBeenSeen(tooltipId),\n [isDismissed, isBeforeUntilDate, hasTooltipBeenSeen, tooltipId]\n )\n\n const middleware = [offset(offsetPx), shift({ padding: 5 }), arrow({ element: arrowRef })]\n if (flipElement) middleware.push(flip())\n\n const {\n refs,\n placement,\n floatingStyles,\n update: updatePosition,\n middlewareData,\n } = useFloating({\n middleware,\n elements: { reference: triggerElRef.current },\n })\n\n const handleDismiss = React.useCallback(() => {\n setIsDismissed(true)\n onDismissed?.(tooltipId)\n }, [tooltipId, onDismissed])\n\n // Update Position on Changes to Trigger Element Size\n React.useEffect(() => {\n const targetNode = triggerElRef.current\n if (!shouldRender || !window.ResizeObserver || !targetNode) return undefined\n const resizeObserver = new ResizeObserver(updatePosition)\n resizeObserver.observe(targetNode)\n return () => resizeObserver.disconnect()\n }, [triggerElRef, updatePosition, shouldRender])\n\n // Update Position on DOM Changes (additions/removals)\n React.useEffect(() => {\n const targetNode = triggerElRef.current\n if (!shouldRender || !targetNode) return undefined\n const mutationObserver = new MutationObserver(updatePosition)\n mutationObserver.observe(document.body, { childList: true, subtree: true })\n return () => mutationObserver.disconnect()\n }, [triggerElRef, updatePosition, shouldRender])\n\n // Handle Dismiss on Reference Node Click\n React.useEffect(() => {\n const targetNode = triggerElRef.current\n if (!shouldRender || !targetNode) return undefined\n targetNode.addEventListener('click', handleDismiss)\n return () => targetNode.removeEventListener('click', handleDismiss)\n }, [shouldRender, handleDismiss, triggerElRef])\n\n if (!shouldRender) return null\n\n return (\n \n
\n \n {title && {title}}\n {children}\n \n \n \n \n\n \n
\n \n )\n}\n","import React, { useState } from 'react'\nimport styled from '@emotion/styled'\nimport { InfoBox, CustomerServiceCentre } from '@mobi/component-library/Common/V2'\nimport { isSelfServePaymentMethod } from '@mobi/component-library/Deposit/helpers'\nimport { PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\nimport { Tooltip, TooltipReferenceContainer } from '@mobi/component-library/Common/V2/Tooltip'\nimport type { InitialData } from '@mobi/api-types'\n\nexport const DepositLimitStatus: React.FC = ({\n depositAmount,\n depositLimits: { minimum, maximum },\n isPreCommitmentLimitSet,\n selectedPaymentMethod,\n}) => {\n const [hasTooltipBeenSeen, setHasTooltipBeenSeen] = useState(true)\n const depositLimitStatusRef = React.useRef(null)\n\n if (maximum <= 0) {\n return (\n \n \n Deposit Limit Reached\n
You've reached your deposit limit for today. Please try again tomorrow.
\n
\n
\n )\n }\n\n function getPaymentMethodMinimum(paymentMethod: PaymentMethodsAll) {\n switch (paymentMethod) {\n case 'CreditCard':\n case 'PayPal':\n case 'ApplePay':\n case 'GooglePay':\n case 'PayID':\n return minimum\n case 'BPay':\n return 20\n case 'Cash':\n case 'ScanMyBet':\n return 0\n }\n }\n\n const PaymentMethodMinimum = getPaymentMethodMinimum(selectedPaymentMethod)\n if (maximum < PaymentMethodMinimum) {\n return (\n \n \n
\n You only have ${maximum} remaining on your deposit limit for today. That is below the\n minimum deposit amount of ${PaymentMethodMinimum}. Please try again tomorrow.\n
\n
\n
\n )\n }\n\n const showExceedsLimit =\n depositAmount > maximum && !isSelfServePaymentMethod(selectedPaymentMethod)\n\n if (showExceedsLimit || isPreCommitmentLimitSet) {\n const infoBoxColour = showExceedsLimit ? 'red' : 'blue'\n return (\n \n \n \n \n Your deposit limit for today is ${maximum}.{' '}\n {\n e.preventDefault()\n setHasTooltipBeenSeen(false)\n }}\n >\n Learn more\n \n \n \n \n {\n return hasTooltipBeenSeen\n }}\n onDismissed={() => {\n setHasTooltipBeenSeen(true)\n }}\n isHidden={hasTooltipBeenSeen}\n color='black'\n >\n \n \n \n \n \n )\n }\n return null\n}\n\ntype DepositLimitStatusProps = {\n depositAmount: number\n depositLimits: InitialData['depositLimits']\n isPreCommitmentLimitSet: boolean\n selectedPaymentMethod: PaymentMethodsAll\n}\n\nexport const Container = styled.div({\n paddingBottom: '2rem',\n})\n","import React, { useCallback, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { AccountBalanceHeader } from './AccountBalanceHeader'\nimport { DepositHeader, DepositPanel } from '.'\nimport { BetAccount, InitialData } from '@mobi/api-types'\nimport * as native from '@mobi/web-native-comms/web'\nimport { PageStyled } from '../App.styles'\nimport { PanelStyled, PaymentMethodsStyled } from './DepositBody.styles'\nimport { PaymentMethods } from '@mobi/component-library/Deposit/Payment'\nimport { PaymentMethodBlocked } from '../../Deposit/Components/PaymentMethodBlocked'\nimport {\n selectDepositFlow,\n selectDepositState,\n selectLastSelectedPaymentMethod,\n selectPaymentMethod,\n} from '../Store'\nimport { SelfServeDepositPanels } from '../../Deposit/Components/SelfServeDepositPanels'\nimport { type PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\nimport { isSelfServePaymentMethod } from '@mobi/component-library/Deposit/helpers'\nimport type { AppProps } from '../App'\nimport { isPaymentRequestApiSupported } from '../Utils/helpers'\nimport { isApplePayWebSupported } from '../Utils'\nimport { DepositLimitStatus } from './DepositLimitStatus'\nimport { track } from '../../../Utils'\n\ntype Props = Omit & {\n initialData: InitialData\n betAccountData: BetAccount\n}\n\ntype PaymentMethodStatuses = Record\n\nexport const DepositBody = ({\n accountNumber,\n accountBalance,\n initialData,\n betAccountData,\n asModal,\n onClose,\n}: Props) => {\n const dispatch = useDispatch()\n const flow = useSelector(selectDepositFlow)\n const lastSelectedPaymentMethod = useSelector(selectLastSelectedPaymentMethod(accountNumber))\n\n const { selectedPaymentMethod, depositInput } = useSelector(selectDepositState)\n\n const inputValue = +depositInput.inputValue\n const { depositLimits } = initialData\n\n const showApplePay = native.isReactNativeIos || isApplePayWebSupported()\n const showGooglePay =\n !native.isReactNativeIos && (native.isReactNativeAndroid || isPaymentRequestApiSupported())\n\n // When deposit is show modally, hide these payment methods\n // as their deposit flow can interrupt the user from\n // resuming their normal workflow\n const showBPay = !asModal\n const showCash = !asModal\n const showScanMyBet = !asModal && native.isReactNativeApp\n const showPayID = !asModal\n\n const payIdDetailList = betAccountData.PayIdDetailList ?? []\n const isPreCommitmentLimitSet = betAccountData.PreCommitmentMaxDepositFrequency !== null\n const paymentMethodStatuses: PaymentMethodStatuses = {\n CreditCard: { available: true, blocked: betAccountData.CreditCardBlockedInd === 'Y' },\n PayPal: { available: true, blocked: betAccountData.BlockPayPalInd === 'Y' },\n ApplePay: { available: showApplePay, blocked: betAccountData.BlockApplePayInd === 'Y' },\n GooglePay: {\n available: showGooglePay,\n blocked: betAccountData.BlockGooglePayInd === 'Y',\n },\n BPay: { available: showBPay, blocked: false },\n Cash: { available: showCash, blocked: false },\n ScanMyBet: { available: showScanMyBet, blocked: false },\n PayID: { available: showPayID, blocked: betAccountData.BlockEftInd === 'Y' },\n }\n\n const isAvailable = (paymentMethod: PaymentMethodsAll) =>\n paymentMethodStatuses[paymentMethod].available\n\n const isBlocked = (paymentMethod: PaymentMethodsAll) =>\n paymentMethodStatuses[paymentMethod].blocked\n\n const onPaymentMethodClick = useCallback(\n (paymentMethod: PaymentMethodsAll) => {\n dispatch(selectPaymentMethod({ accountNumber, paymentMethod }))\n\n // If the deposit method has changed, track it in GA\n if (paymentMethod !== selectedPaymentMethod) {\n track('deposit_method_selection', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n })\n }\n },\n [accountNumber, dispatch, selectedPaymentMethod, flow]\n )\n\n useEffect(() => {\n if (selectedPaymentMethod) return\n\n let paymentMethod: PaymentMethodsAll = 'CreditCard'\n\n if (lastSelectedPaymentMethod && isAvailable(lastSelectedPaymentMethod)) {\n paymentMethod = lastSelectedPaymentMethod\n }\n\n dispatch(\n selectPaymentMethod({\n accountNumber,\n paymentMethod,\n })\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedPaymentMethod])\n\n if (!selectedPaymentMethod) {\n return null\n }\n\n return (\n <>\n\n \n \n\n {asModal && accountBalance !== undefined && }\n {!isBlocked(selectedPaymentMethod) && selectedPaymentMethod != 'ScanMyBet' && (\n \n )}\n {(function () {\n const isSelectedPaymentMethodSelfServe = isSelfServePaymentMethod(selectedPaymentMethod)\n const isPaymentMethodBlocked = isBlocked(selectedPaymentMethod)\n\n if (isSelectedPaymentMethodSelfServe && isPaymentMethodBlocked) {\n return \n }\n\n if (isSelectedPaymentMethodSelfServe) {\n return (\n \n )\n }\n\n if (isPaymentMethodBlocked) {\n return (\n \n \n \n )\n }\n\n return (\n \n )\n })()}\n \n \n \n \n \n )\n}\n","import React, { type FC, type ReactNode, useRef, useEffect } from 'react'\nimport { BusyPanel, SuccessPanel, FailPanel } from '@mobi/component-library/Deposit/Workflow'\nimport { Tray } from '@mobi/component-library/Overlays/Tray'\nimport { Modal } from '@mobi/component-library/Overlays/Modal'\nimport { type DepositStatus } from '../Store/deposit'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport styled from '@emotion/styled'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { useHostContext } from '../../../Common/HostContext'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n depositAmount: number\n depositStatus: DepositStatus\n failureMessage?: string\n}\n\nexport const DepositProgress: FC = ({\n depositStatus,\n failureMessage,\n depositAmount,\n onClose,\n isOpen,\n}) => {\n const previousDepositStatus = useRef()\n const shouldRenderPreviousStatus = depositStatus === 'idle' || !isOpen\n const renderableDepositStatus =\n shouldRenderPreviousStatus && previousDepositStatus.current !== undefined\n ? previousDepositStatus.current\n : depositStatus\n\n useEffect(() => {\n if (isOpen && depositStatus !== 'idle') {\n previousDepositStatus.current = depositStatus\n }\n }, [depositStatus, isOpen])\n\n if (renderableDepositStatus === 'idle') {\n return null\n }\n\n const renderPanel = (depositStatus: Exclude) => {\n switch (depositStatus) {\n case 'verifying':\n return \n case 'depositing':\n return \n case 'success':\n return \n case 'unsuccessful':\n return \n }\n }\n\n return {renderPanel(renderableDepositStatus)}\n}\n\ntype OverlayProps = {\n isOpen: boolean\n children?: ReactNode\n}\nconst Overlay = ({ children, isOpen }: OverlayProps) => {\n const { channel } = useHostContext()\n const commonProps = {\n isOpen,\n dismissStatus: 'disallowed' as const,\n }\n\n return channel === 'desktop' ? (\n \n {children}\n \n ) : (\n \n {children}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nexport const TrayContentStyled = styled.div({\n paddingBottom: '4rem', // The tray only has 4rem of spacing while the bottom nav is 5, this is to compensate\n})\n\nexport const ModalContentStyled = styled.div({\n padding: `${spacing.lgx2} ${spacing.bigx1}`,\n})\n","import React, { type FC, useCallback, type ComponentPropsWithoutRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { InitialData, PaymentMethod } from '@mobi/api-types'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { PaymentAmount } from '@mobi/component-library/Account/Payment'\nimport { useHostContext } from '../../../Common/HostContext'\nimport type { PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport {\n selectDepositState,\n setDepositInput,\n verify,\n deposit,\n depositSucceeded,\n depositFailed,\n cancel,\n selectDepositFlow,\n finished,\n} from '../Store'\nimport type { OnFailureParams } from './types'\nimport { PanelStyled } from './DepositBody.styles'\nimport { DepositError, InvalidCardAlert } from '.'\nimport { incrementSuccessCount } from '../Utils'\nimport { amountInputValidationRegex } from '../../../Utils'\nimport { track } from '../../../Utils/analytics'\nimport { PaymentButton } from './Payments'\nimport { DepositProgress } from './DepositProgress'\nimport { useToggleControl } from '@mobi/utils'\n\ntype Props = {\n accountNumber: number\n initialData: InitialData\n paymentMethod: PaymentMethods\n}\n\nexport const DepositPanel: FC = ({ accountNumber, initialData, paymentMethod }) => {\n const dispatch = useDispatch()\n const flow = useSelector(selectDepositFlow)\n const { events } = useHostContext()\n const { depositStatus, depositInput, depositFailure } = useSelector(selectDepositState)\n const { isOpen, open: openTray, close: closeTray } = useToggleControl()\n\n const inputValue = +depositInput.inputValue\n\n const onStart = useCallback(() => {\n dispatch(verify())\n openTray()\n\n track('deposit-started', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n })\n }, [dispatch, openTray, accountNumber, paymentMethod, flow])\n\n const onCancel = useCallback(() => {\n dispatch(cancel())\n closeTray()\n\n track('deposit_cancel', {\n accountNumber,\n paymentMethod,\n cancelStep: depositStatus,\n depositVariant: flow,\n })\n }, [dispatch, closeTray, accountNumber, paymentMethod, depositStatus, flow])\n\n const onDepositing = useCallback(() => {\n if (paymentMethod !== 'CreditCard') {\n openTray()\n }\n dispatch(deposit())\n }, [dispatch, openTray, paymentMethod])\n\n const onSuccess = useCallback(\n (depositAmount: number) => {\n const successfulDepositCount = incrementSuccessCount(accountNumber)\n\n track('deposit-success', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n deposit: {\n amount: depositAmount.toString(),\n isFirstDeposit: successfulDepositCount === 1,\n isSecondDeposit: successfulDepositCount === 2,\n },\n })\n\n return new Promise(() => {\n events?.onDepositSuccess(flow, depositAmount)\n dispatch(depositSucceeded({ accountNumber }))\n })\n },\n [accountNumber, dispatch, flow, paymentMethod, events]\n )\n\n const onFailure = useCallback(\n (details: DepositError | OnFailureParams) => {\n track('deposit-error', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n errorTrigger: 'Deposit',\n message: details.message,\n })\n\n dispatch(\n depositFailed({\n ...details,\n displayMessage: details.displayMessage,\n })\n )\n },\n [accountNumber, paymentMethod, flow, dispatch]\n )\n\n const onDepositInputChanged = useCallback(\n (value: string) => {\n if (amountInputValidationRegex.test(value)) {\n dispatch(setDepositInput({ inputValue: value, isValid: true, amount: +value }))\n } else {\n dispatch(setDepositInput({ inputValue: value, isValid: false }))\n }\n },\n [dispatch]\n )\n\n const { depositLimits } = initialData\n\n const helpText =\n inputValue > 0 && inputValue < depositLimits.minimum\n ? `Minimum $${depositLimits.minimum.toFixed(2)}`\n : `Enter custom amount`\n\n //deposit limit reached regardless of what they enter\n const isDepositLimitReached =\n depositLimits.maximum < depositLimits.minimum || depositLimits.maximum <= 0\n\n const isDepositingAllowed =\n depositStatus === 'idle' &&\n depositInput.isValid &&\n depositInput.amount >= depositLimits.minimum &&\n depositInput.amount <= depositLimits.maximum &&\n !isDepositLimitReached\n\n const primaryCard = initialData.paymentMethods.find(card => card.isDefault)\n\n return (\n \n {paymentMethod === 'CreditCard' &&\n primaryCard !== undefined &&\n isCardInvalid(primaryCard) && }\n \n \n\n {\n dispatch(finished())\n closeTray()\n }}\n />\n \n )\n}\n\nfunction isCardInvalid(\n card: PaymentMethod\n): card is ComponentPropsWithoutRef['card'] {\n return card.isExpired || !card.isDebitCard\n}\n","import React, { type FC } from 'react'\nimport { PaymentMethod } from '@mobi/api-types'\nimport { InfoBox } from '@mobi/component-library/Common/V2'\n\ntype ExpiredCard = Omit & {\n isExpired: true\n}\n\ntype DisabledCard = Omit & {\n isDebitCard: false\n}\n\ntype InvalidCard = ExpiredCard | DisabledCard\n\ntype Props = {\n card: InvalidCard\n}\n\nexport const InvalidCardAlert: FC = ({ card }) => {\n return (\n \n {getAlertText(card)}\n \n )\n}\n\nInvalidCardAlert.displayName = 'InvalidCardAlert'\n\nfunction getAlertText(card: InvalidCard) {\n if (card.isExpired) {\n return \"Your primary card has expired. Please set a new primary card in 'Manage Cards'.\"\n }\n\n if (!card.isDebitCard) {\n return \"Your primary card is disabled as it is a credit card. Please set a new primary card in 'Manage Cards'.\"\n }\n\n // card is `never` at this point\n throw new Error('Given card is valid')\n}\n","import { useEffect, useState } from 'react'\nimport {\n isReactNativeAndroid,\n isReactNativeApp,\n sendToNative,\n subscribeToNative,\n} from '@mobi/web-native-comms/web'\nimport { initGooglePayWeb, isUserReadyToPay } from '../../Hooks/GooglePay/initGooglePayWeb'\nimport { withTimeout } from '@mobi/utils'\n\nexport type AvailabilityStatus = 'unknown' | 'available' | 'unavailable'\n\nexport function useGooglePayAvailability(token?: string) {\n const [availability, setAvailability] = useState('unknown')\n\n useEffect(() => {\n if (availability !== 'unknown') {\n return\n }\n\n if (isReactNativeAndroid && token) {\n checkNativeGooglePay(token).then(isAvailable => {\n setAvailability(isAvailable ? 'available' : 'unavailable')\n })\n\n return\n }\n\n if (!isReactNativeApp) {\n if (window?.PaymentRequest !== undefined) {\n // We're in web, so 2 components are required to make payments through Google Pay\n // First is the PaymentRequest API, second is the Google Pay script loaded\n // through Google's CDN, which makes window.google available\n\n initGooglePayWeb()\n .then(isUserReadyToPay)\n .then(isReady => {\n setAvailability(isReady ? 'available' : 'unavailable')\n })\n .catch(() => {\n setAvailability('unavailable')\n })\n\n return\n } else {\n setAvailability('unavailable')\n }\n }\n }, [availability, token])\n\n return availability\n}\n\nconst GOOGLE_PAY_NATIVE_CHECK_TIMEOUT_MS = 3_000\n\nfunction checkNativeGooglePay(token: string) {\n const promise = checkGooglePayAvailability(token)\n return withTimeout(promise, GOOGLE_PAY_NATIVE_CHECK_TIMEOUT_MS, false)\n}\n\nfunction checkGooglePayAvailability(token: string) {\n return new Promise(resolve => {\n const { dispose } = subscribeToNative('RESPONSE_GOOGLE_PAY_AVAILABLE', ({ isAvailable }) => {\n resolve(isAvailable)\n dispose()\n })\n sendToNative('REQUEST_GOOGLE_PAY_AVAILABLE', {\n token,\n })\n })\n}\n","import { type MutableRefObject } from 'react'\nimport type { Client } from 'braintree-web'\nimport { GooglePaymentDetails } from 'braintree-web/modules/google-payment'\nimport { useSelector } from 'react-redux'\nimport type { PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport { type ContactDetails, type GooglePayDepositRequest } from '@mobi/api-types'\nimport { getGoogleMerchantId, getGooglePaymentsClient, verifyThreeDSecure } from '../../Utils'\nimport { tokenize } from './initGooglePayWeb'\nimport { DepositRequestWithoutDeviceData, useDeposit } from '../../Hooks/useDeposit'\nimport { type HostApi, useHostContext } from '../../../../Common/HostContext'\nimport { useUserContactDetails } from '../../Hooks/useUserContactDetails'\nimport type { OnFailureParams } from '../../Components/types'\nimport { addCrumb, coerceIntoError, unwrapErrorMessage } from '@mobi/utils'\nimport {\n logLiabilityShiftError,\n logLiabilityShiftRejected,\n logLiabilityShiftSuccess,\n} from '../../Utils/logging'\nimport type { DepositFlow, UserCancelable } from '../../typings/types'\nimport { selectDepositFlow } from '../../Store'\nimport { DepositError } from '../../Components'\nimport { ThreeDSecureError } from '../../Utils'\n\nexport function useGooglePayDeposit({\n braintreeClient,\n accountNumber,\n transactionId,\n}: UseGooglePayDepositParams) {\n const { depositMutation } = useDeposit({\n braintreeClient,\n accountNumber,\n })\n const hostApi = useHostContext()\n const flow = useSelector(selectDepositFlow)\n\n const { data: userData } = useUserContactDetails({\n accountNumber,\n flow,\n })\n\n const verify = async ({ depositAmount, onSuccess, onFailure, onCancel }: TokenizeParams) => {\n const client = braintreeClient.current\n\n if (!client) {\n throw new Error('Braintree client is uninitialized')\n }\n\n const googlePayClient = await getGooglePaymentsClient()\n\n const { nonce, details } = await tokenize({\n depositAmount,\n braintreeClient: client,\n merchantId: getGoogleMerchantId(),\n googlePayClient,\n })\n\n const paymentTokenResult = await getPaymentTokens({\n accountNumber,\n client,\n nonce,\n details,\n depositAmount,\n transactionId,\n userData,\n hostApi,\n flow,\n })\n\n if (paymentTokenResult.wasUserCanceled) {\n onCancel?.()\n return\n }\n\n const { nonce: paymentMethodNonce, liabilityShiftStatus } = paymentTokenResult\n\n if (liabilityShiftStatus === 'did_not_ask') {\n onSuccess?.({\n paymentMethodNonce,\n amount: depositAmount,\n transactionId,\n forceThreeDSecureClient: false,\n depositSource: 'GooglePay',\n })\n return\n }\n\n if (liabilityShiftStatus !== 'shifted') {\n onFailure?.(\n new DepositError(\n 'card_verification_failed',\n transactionId,\n undefined,\n 'Card failed verification'\n )\n )\n return\n }\n\n onSuccess?.({\n paymentMethodNonce,\n amount: depositAmount,\n transactionId,\n forceThreeDSecureClient: true,\n depositSource: 'GooglePay',\n })\n }\n\n return {\n verify,\n deposit: depositMutation.mutateAsync,\n }\n}\n\nconst getPaymentTokens = async ({\n accountNumber,\n nonce,\n client,\n details,\n transactionId,\n depositAmount,\n userData,\n flow,\n}: PaymentTokenParams): Promise => {\n const paymentMethod: PaymentMethods = 'GooglePay'\n\n if (details.isNetworkTokenized) {\n return {\n wasUserCanceled: false,\n nonce,\n liabilityShiftStatus: 'did_not_ask',\n }\n }\n\n try {\n const threeDSecure = await verifyThreeDSecure(client, {\n nonce,\n bin: details.bin,\n depositAmount,\n userData,\n })\n\n if (threeDSecure.threeDSecureInfo.liabilityShifted) {\n logLiabilityShiftSuccess({\n accountNumber,\n transactionId,\n paymentMethod,\n flow,\n })\n\n return {\n wasUserCanceled: false,\n nonce: threeDSecure.nonce,\n liabilityShiftStatus: 'shifted',\n }\n }\n logLiabilityShiftRejected({\n accountNumber,\n transactionId,\n response: {\n wasUserCanceled: false,\n ...threeDSecure,\n },\n paymentMethod,\n flow,\n })\n return {\n wasUserCanceled: false,\n nonce: threeDSecure.nonce,\n liabilityShiftStatus: 'not_shifted',\n }\n } catch (error) {\n if (error instanceof ThreeDSecureError && error.code === 'user_canceled') {\n addCrumb(\n 'deposit',\n 'user has cancelled 3ds GPay verification step therefore deposit was not made'\n )\n\n return {\n wasUserCanceled: true,\n }\n }\n\n logLiabilityShiftError({\n accountNumber,\n transactionId,\n errorMessage: unwrapErrorMessage(coerceIntoError(error)),\n paymentMethod,\n flow,\n })\n return {\n wasUserCanceled: false,\n nonce: '',\n liabilityShiftStatus: 'verification_failed',\n }\n }\n}\n\n// region Types\ntype UseGooglePayDepositParams = {\n braintreeClient: MutableRefObject\n accountNumber: number\n transactionId: string\n}\n\ntype TokenizeParams = {\n depositAmount: number\n onSuccess?: (data: DepositRequestWithoutDeviceData) => void\n onFailure?: (result: OnFailureParams) => void\n onCancel?: VoidFunction\n}\n\ntype PaymentTokenParams = {\n accountNumber: number\n client: Client\n nonce: string\n details: GooglePaymentDetails\n depositAmount: number\n transactionId: string\n userData?: ContactDetails\n hostApi: HostApi\n flow: DepositFlow\n}\n\ntype PaymentTokenResult = UserCancelable<{\n nonce: string\n liabilityShiftStatus: 'shifted' | 'not_shifted' | 'did_not_ask' | 'verification_failed'\n}>\n// endregion\n","import { googlePayment, type Client } from 'braintree-web'\nimport { coerceIntoError, scriptLoader, unwrapErrorMessage } from '@mobi/utils'\nimport { isGooglePayAvailable, getGooglePaymentsClient } from '../../Utils'\nimport { reportErrorIfNeeded } from '../../../../Utils/sentry'\n\nconst enum LocalConstant {\n SCRIPT_URL = 'https://pay.google.com/gp/p/js/pay.js',\n POLL_TIME_MS = 250,\n POLL_TIMEOUT_TIME_MS = 5000,\n}\n\nexport async function initGooglePayWeb(): Promise {\n if (isGooglePayAvailable()) {\n return getGooglePayScriptElement()\n }\n\n return scriptLoader(LocalConstant.SCRIPT_URL)\n .then(scriptElement => {\n if (isGooglePayAvailable()) {\n return Promise.resolve(scriptElement)\n }\n\n let intervalId = -1\n let timeoutId = -1\n\n const pollPromise = new Promise(resolve => {\n intervalId = window.setInterval(() => {\n if (isGooglePayAvailable()) {\n window.clearInterval(intervalId)\n window.clearTimeout(timeoutId)\n\n return resolve(scriptElement)\n }\n }, LocalConstant.POLL_TIME_MS)\n })\n\n const timeoutPromise = new Promise((_, reject) => {\n timeoutId = window.setTimeout(() => {\n window.clearInterval(intervalId)\n reject(new Error('Loading timed out'))\n }, LocalConstant.POLL_TIMEOUT_TIME_MS)\n })\n\n return Promise.race([pollPromise, timeoutPromise])\n })\n .catch(err => {\n reportErrorIfNeeded({\n message: `Unable to load Google Pay script for web: ${unwrapErrorMessage(coerceIntoError(err))}`,\n })\n return Promise.reject(err)\n })\n}\n\nexport function isUserReadyToPay() {\n return getGooglePaymentsClient()\n .then(client => {\n return client.isReadyToPay({\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['CRYPTOGRAM_3DS', 'PAN_ONLY'],\n allowedCardNetworks: ['AMEX', 'MASTERCARD', 'VISA'],\n },\n },\n ],\n existingPaymentMethodRequired: true,\n })\n })\n .then(({ result: isReady }) => isReady)\n}\n\ntype TokenizeParams = {\n googlePayClient: google.payments.api.PaymentsClient\n braintreeClient: Client\n merchantId: string\n depositAmount: number\n}\n\nexport async function tokenize({\n depositAmount,\n braintreeClient,\n googlePayClient,\n merchantId,\n}: TokenizeParams) {\n const braintreeGooglePayClient = await googlePayment.create({\n client: braintreeClient,\n googlePayVersion: 2,\n googleMerchantId: merchantId,\n })\n\n const paymentDataRequest = await braintreeGooglePayClient.createPaymentDataRequest({\n merchantInfo: {\n merchantId,\n },\n transactionInfo: {\n totalPrice: depositAmount.toFixed(2),\n totalPriceStatus: 'FINAL',\n currencyCode: 'AUD',\n },\n })\n\n paymentDataRequest.allowedPaymentMethods = paymentDataRequest.allowedPaymentMethods.map(\n paymentMethod => {\n if (paymentMethod.type === 'CARD') {\n paymentMethod.parameters.billingAddressRequired = true\n paymentMethod.parameters.billingAddressParameters = {\n format: 'FULL',\n }\n paymentMethod.parameters.allowCreditCards = false\n }\n\n return paymentMethod\n }\n )\n\n const paymentData = await googlePayClient.loadPaymentData(paymentDataRequest)\n return braintreeGooglePayClient.parseResponse(paymentData)\n}\n\nexport function isGooglePayError(error: unknown): error is google.payments.api.PaymentsError {\n if (typeof error !== 'object' || !error) {\n return false\n }\n\n return 'statusCode' in error && typeof error.statusCode === 'string'\n}\n\nfunction getGooglePayScriptElement(): HTMLScriptElement {\n return window.document.head.querySelector(\n `script[src=\"${LocalConstant.SCRIPT_URL}\"]`\n ) as HTMLScriptElement\n}\n","import type { PayPalCheckout } from 'braintree-web'\n\ntype PayPal = typeof window.paypal\n\nlet loadedPayPalSdk: PayPal\n\nexport function getPayPal(): NonNullable {\n if (!loadedPayPalSdk) {\n throw new Error('PayPal has not been loaded yet, ensure the initialize call has been made')\n }\n\n return loadedPayPalSdk\n}\n\nexport async function loadSdk(sdkLoader: () => Promise): Promise {\n if (!loadedPayPalSdk) {\n // First we store the current implementation of the PayPal SDK, so\n // we can later restore it after we're done loading the version\n // Braintree needs to properly operate\n const prevPayPalSdk = window.paypal\n\n // Next, we clear window.paypal so Braintree to make room for Braintree\n // to call PayPal's initialization scripts, which will then populate\n // window.paypal. This needs to be clear to avoid a loading error\n Object.assign(window, {\n paypal: undefined,\n })\n\n // Now we can actually load PayPal's SDK. After which we cache\n // the resulting window.paypal object in memory. After that\n // we can restore the previously loaded PayPal SDK\n await sdkLoader()\n loadedPayPalSdk = window.paypal\n Object.assign(window, {\n paypal: prevPayPalSdk,\n })\n }\n}\n","// ====================\n// ! HEADS UP !\n// ====================\n// Several values in this file have an explicit any cast, this is for a reason.\n// PayPal's SDK doesn't support ES6 import syntax (https://github.com/paypal/paypal-checkout-components/issues/1109).\n// Also, sadly, the community typings for these are incorrect. Some of these types have been re-exported correctly\n// in paypal.d.ts, but that only goes so far. This will require fixing in the typings, or we have to export our own.\n\nimport { type MutableRefObject } from 'react'\nimport {\n paypalCheckout as braintreePayPalCheckout,\n type Client,\n type PayPalCheckout,\n} from 'braintree-web'\nimport type { CancellationData, AuthorizationData } from 'paypal-checkout-components'\nimport { getPayPal, loadSdk } from '../../Hooks/PayPal/paypalSdk'\nimport type { DepositRequestWithoutDeviceData } from '../../Hooks/useDeposit'\nimport { PayPalDepositRequest } from '@mobi/api-types'\n\ntype UnwrapRefObject = T extends MutableRefObject ? NonNullable : never\n\ntype TransactionDetails = { depositAmount: number; transactionId: string }\n\ntype InitParams = {\n braintreeClient: MutableRefObject\n buttonContainer: MutableRefObject\n getTransactionDetails: () => TransactionDetails\n onInit?: (data: AuthorizationData, actions: object) => void\n onSuccess: (data: DepositRequestWithoutDeviceData) => Promise\n onError?: (error: string | Error) => void\n onCancel?: (data: CancellationData, actions: object) => void\n onClick?: VoidFunction\n}\n\nexport async function init({\n buttonContainer,\n braintreeClient,\n getTransactionDetails,\n onInit,\n onCancel,\n onError,\n onSuccess,\n onClick,\n}: InitParams) {\n const { current: container } = buttonContainer\n const { current: client } = braintreeClient\n\n if (!client || !container) {\n const message = !client\n ? 'Attempted to initialize PayPal without a Braintree client'\n : 'Attempted to initialize PayPal without a button container'\n\n return Promise.reject(new Error(message))\n }\n\n const paypalCheckout = await braintreePayPalCheckout.create({\n client,\n })\n\n await loadSdk(() =>\n paypalCheckout.loadPayPalSDK({\n currency: 'AUD',\n intent: 'capture',\n commit: true,\n })\n )\n\n return renderButtons({\n paypalCheckout,\n braintreeClient: client,\n getTransactionDetails,\n onInit,\n onCancel,\n onSuccess,\n onError,\n onClick,\n buttonContainer: container,\n })\n}\n\ntype RenderParams = Omit & {\n paypalCheckout: PayPalCheckout\n braintreeClient: UnwrapRefObject\n buttonContainer: UnwrapRefObject\n}\n\nasync function renderButtons({\n buttonContainer,\n braintreeClient,\n getTransactionDetails,\n onInit,\n onClick,\n onSuccess,\n onError,\n onCancel,\n paypalCheckout,\n}: RenderParams) {\n const buttonRenderer = getPayPal().Buttons({\n fundingSource: 'paypal',\n style: {\n height: 40, // In line with the other buttons\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n size: 'responsive' as any,\n },\n onApprove: async data => {\n const response = await paypalCheckout.tokenizePayment(data)\n\n const {\n nonce,\n details: { firstName, lastName, email, payerId, billingAddress },\n } = response\n\n const { depositAmount: amount, transactionId } = getTransactionDetails()\n\n await onSuccess({\n amount,\n paymentMethodToken: braintreeClient.authorization,\n paymentMethodNonce: nonce,\n firstName,\n lastName,\n payPalAddress: billingAddress && {\n street: `${billingAddress.line1}${billingAddress.line2}`,\n city: billingAddress.city,\n postCode: billingAddress.postalCode,\n state: billingAddress.state,\n countryCode: billingAddress.countryCode,\n },\n payPalEmail: email,\n payPalPayerId: payerId,\n depositSource: 'PayPal',\n transactionId,\n })\n\n return response\n },\n onCancel,\n onError,\n onInit,\n onClick,\n createOrder: () => {\n const { depositAmount: amount } = getTransactionDetails()\n return paypalCheckout.createPayment({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flow: 'checkout' as any,\n currency: 'AUD',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n intent: 'capture' as any,\n amount,\n })\n },\n })\n\n // Last chance to check if the button container exists\n // It's entirely possible that the user will have closed the PayPal panel at this point\n // This can happen if the user's internet connection is a tad slow\n const id = `#${buttonContainer.id}`\n if (document.querySelector(id)) {\n buttonRenderer.render(id)\n }\n}\n","import type { MutableRefObject } from 'react'\nimport { Client } from 'braintree-web'\nimport type { PayPalDepositRequest } from '@mobi/api-types'\nimport { useDeposit } from '../../Hooks/useDeposit'\nimport { init } from './initPayPal'\n\nexport type UsePayPalDepositParams = {\n braintreeClient: MutableRefObject\n}\n\nexport function usePayPalDeposit({ braintreeClient }: UsePayPalDepositParams) {\n const { depositMutation } = useDeposit({ braintreeClient })\n return {\n init,\n deposit: depositMutation.mutateAsync,\n }\n}\n","import { useRef, useState } from 'react'\nimport { useDidMount, useWillUnmount } from 'rooks'\nimport { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\ntype ResponseApplePayAvailiability = {\n isAvailable: boolean\n}\n\ntype Availability = 'unknown' | 'available' | 'unavailable'\n\ntype DisposeFunction = VoidFunction\n\nexport const useApplePayAvailabilityInterop = () => {\n const [availability, setAvailability] = useState('unknown')\n const disposals = useRef([])\n\n useDidMount(() => {\n if (isReactNativeApp) {\n const { dispose } = subscribeToNative(\n 'RESPONSE_APPLE_PAY_AVAILABLE',\n (payload: ResponseApplePayAvailiability) => {\n setAvailability(payload.isAvailable ? 'available' : 'unavailable')\n }\n )\n disposals.current.push(dispose)\n }\n })\n\n useDidMount(() => {\n if (availability === 'unknown') {\n if (!isReactNativeApp) {\n setAvailability('unavailable')\n } else {\n sendToNative('REQUEST_APPLE_PAY_AVAILABLE')\n }\n }\n })\n\n useWillUnmount(() => {\n disposals.current.forEach(dispose => dispose())\n disposals.current.length = 0\n })\n\n return availability\n}\n","import { type MutableRefObject } from 'react'\nimport { type Client, applePay } from 'braintree-web'\nimport type { DepositRequest } from '@mobi/api-types'\nimport { isBraintreeError } from '../../Utils'\nimport type { DepositRequestWithoutDeviceData } from '../../Hooks'\n\ntype InitParams = {\n braintreeClient: MutableRefObject\n depositAmount: number\n transactionId: string\n onSuccess: (data: DepositRequestWithoutDeviceData) => Promise\n onCancel?: VoidFunction\n onError?: (error: string | Error) => void\n}\n\ntype ApplePayPaymentAuthorizedEvent = {\n payment: {\n token: unknown\n }\n}\n\nexport async function tokenize({\n braintreeClient,\n depositAmount,\n transactionId,\n onSuccess,\n onCancel,\n onError,\n}: InitParams): Promise {\n const { current: client } = braintreeClient\n\n if (!client) {\n return Promise.reject(new Error('Attempted to initialize Apple Pay without a Braintree client'))\n }\n\n const applePayClient = await applePay.create({ client })\n\n const request = applePayClient.createPaymentRequest({\n merchantCapabilities: ['supports3DS', 'supportsDebit'],\n total: {\n label: 'TABtouch',\n amount: depositAmount.toString(),\n },\n })\n\n const session = new ApplePaySession(3, request)\n\n session.onvalidatemerchant = async (event: { validationURL: string }) => {\n try {\n const merchantSession = await applePayClient.performValidation({\n displayName: 'TABtouch',\n validationURL: event.validationURL,\n })\n session.completeMerchantValidation(merchantSession)\n } catch (error) {\n if (isBraintreeError(error)) {\n onError?.('Failed to deposit with Apple Pay')\n }\n throw error\n }\n }\n\n session.oncancel = () => {\n onCancel?.()\n }\n\n session.onpaymentauthorized = async (event: ApplePayPaymentAuthorizedEvent) => {\n try {\n const { nonce: paymentMethodNonce } = await applePayClient.tokenize({\n token: event.payment.token,\n })\n\n await onSuccess({\n amount: depositAmount,\n paymentMethodNonce,\n depositSource: 'ApplePay',\n transactionId,\n })\n\n session.completePayment(ApplePaySession.STATUS_SUCCESS)\n } catch {\n onError?.('Failed to authorize deposit with Apple Pay')\n session.completeMerchantValidation(ApplePaySession.STATUS_FAILURE)\n }\n }\n\n session.begin()\n}\n","import { MutableRefObject } from 'react'\nimport { Client } from 'braintree-web'\nimport type { DepositRequest } from '@mobi/api-types'\nimport { tokenize } from './initApplePayWeb'\nimport { useDeposit } from '../../Hooks/useDeposit'\n\ntype UseApplePayDepositParams = {\n braintreeClient: MutableRefObject\n}\n\nexport function useApplePayDeposit({ braintreeClient }: UseApplePayDepositParams) {\n const { depositMutation } = useDeposit({ braintreeClient })\n return {\n tokenize,\n deposit: depositMutation.mutateAsync,\n }\n}\n","import { useRef } from 'react'\nimport { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\ntype RequestTokenCallbacks = {\n onSuccess?: (token: string) => void\n onCancel?: () => void\n onFailure?: (error: string) => void\n}\n\ntype DisposeFunction = VoidFunction\n\nexport const useApplePayInterop = (callbacks: RequestTokenCallbacks) => {\n const disposals = useRef([])\n\n const attachNativeSubscriptions = () => {\n if (isReactNativeApp) {\n const successSubscription = subscribeToNative('RESPONSE_APPLE_PAY_SUCCESS', payload => {\n callbacks?.onSuccess?.(payload.token)\n })\n const failureSubscription = subscribeToNative('RESPONSE_APPLE_PAY_FAILURE', payload => {\n callbacks?.onFailure?.(payload.error)\n })\n const cancelledSubscription = subscribeToNative('APPLE_PAY_CANCELLED', () => {\n callbacks?.onCancel?.()\n })\n disposals.current.push(\n successSubscription.dispose,\n failureSubscription.dispose,\n cancelledSubscription.dispose\n )\n }\n }\n\n const disposeNativeSubscriptions = () => {\n disposals.current.forEach(dispose => dispose())\n disposals.current.length = 0\n }\n\n const tokenize = (clientToken: string, depositAmount: number) => {\n sendToNative('REQUEST_APPLE_PAY_BEGIN_PAYMENT', {\n item: 'tabtouch',\n token: clientToken,\n price: depositAmount,\n })\n }\n\n return { tokenize, attachNativeSubscriptions, disposeNativeSubscriptions }\n}\n","import type { MutableRefObject } from 'react'\nimport type { Client } from 'braintree-web'\nimport { addCrumb, coerceIntoError, unwrapErrorMessage } from '@mobi/utils'\nimport { reportErrorIfNeeded } from '../../../../Utils/sentry'\nimport { useSelector } from 'react-redux'\nimport type { PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport { useDeposit } from '../../Hooks/useDeposit'\nimport { DepositError } from '../../Components'\nimport { generatePaymentNonce, ThreeDSecureError, verifyThreeDSecure } from '../../Utils'\nimport {\n logLiabilityShiftSuccess,\n logLiabilityShiftRejected,\n logLiabilityShiftError,\n} from '../../Utils/logging'\nimport type {\n ContactDetails,\n CreditCardDepositRequest,\n DepositResponse,\n InitialData,\n PaymentMethod,\n} from '@mobi/api-types'\nimport { type HostApi, useHostContext } from '../../../../Common/HostContext'\nimport { track } from '../../../../Utils/analytics'\nimport { useUserContactDetails } from '../useUserContactDetails'\nimport { selectDepositFlow } from '../../Store'\nimport type { UserCancelable, DepositFlow } from '../../typings/types'\n\ntype UseCreditCardDepositProps = {\n braintreeClient: MutableRefObject\n accountNumber: number\n mustUse3DSecure: boolean\n initialData: InitialData\n onDepositing: VoidFunction\n}\n\ntype DepositProps = Pick & {\n isUsingNewCard: boolean\n depositAmount: number\n}\n\nexport function useCreditCardDeposit({\n mustUse3DSecure,\n accountNumber,\n initialData,\n braintreeClient,\n onDepositing,\n}: UseCreditCardDepositProps) {\n const { depositMutation } = useDeposit({ braintreeClient })\n const flow = useSelector(selectDepositFlow)\n const hostApi = useHostContext()\n\n const { data: userData } = useUserContactDetails({\n accountNumber,\n flow,\n })\n\n const deposit = async ({ creditCard, depositAmount }: DepositProps): Promise => {\n const client = braintreeClient.current\n\n if (!client) {\n // TODO: Move error capture to callsite\n const message = 'Error Braintree client is uninitialized'\n reportErrorIfNeeded({\n message,\n })\n\n throw new Error(message)\n }\n\n const response = await prepareDeposit({\n accountNumber,\n creditCard,\n client,\n mustUse3DSecure,\n depositAmount,\n initialData,\n userData,\n hostApi,\n flow,\n })\n\n if (response.wasUserCanceled) {\n throw DepositError.canceled(initialData.transactionId)\n }\n\n onDepositing()\n\n const { paymentMethodToken, paymentMethodNonce } = response\n\n return depositMutation.mutateAsync({\n amount: depositAmount,\n transactionId: initialData.transactionId,\n paymentMethodNonce,\n paymentMethodToken,\n makeDefault: false,\n forceThreeDSecureClient: false,\n depositSource: 'ExistingPaymentMethod',\n })\n }\n\n return {\n deposit,\n }\n}\n\nasync function prepareDeposit({\n accountNumber,\n creditCard,\n client,\n initialData: { transactionId },\n mustUse3DSecure,\n depositAmount,\n userData,\n hostApi,\n flow,\n}: DepositParams): Promise> {\n const { token: paymentMethodToken } = creditCard\n\n const { isSuccess, nonce } = await generatePaymentNonce(\n paymentMethodToken,\n depositAmount,\n transactionId\n )\n\n if (!isSuccess) {\n throw new DepositError(\n 'unable_to_retrieve_tokens',\n transactionId,\n undefined,\n 'Failed to retrieve tokens'\n )\n }\n\n const paymentTokenResult = await getPaymentTokens({\n nonce,\n accountNumber,\n client,\n mustUse3DSecure,\n creditCard,\n depositAmount,\n userData,\n transactionId,\n hostApi,\n flow,\n })\n\n if (paymentTokenResult.wasUserCanceled) {\n return paymentTokenResult\n }\n\n const { nonce: paymentMethodNonce, liabilityShiftStatus } = paymentTokenResult\n\n if (liabilityShiftStatus !== 'did_not_ask' && liabilityShiftStatus !== 'shifted') {\n throw new DepositError(\n 'card_verification_failed',\n transactionId,\n undefined,\n 'Card verification failed'\n )\n }\n\n return {\n wasUserCanceled: false,\n paymentMethodNonce,\n paymentMethodToken,\n }\n}\n\nasync function getPaymentTokens({\n nonce,\n accountNumber,\n client,\n mustUse3DSecure,\n creditCard,\n depositAmount,\n userData,\n transactionId,\n flow,\n}: PaymentTokenParams): Promise> {\n const paymentMethod: PaymentMethods = 'CreditCard'\n\n if (!mustUse3DSecure) {\n track('deposit-non-3d-secure', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n })\n\n addCrumb(\n 'deposit',\n 'user account to not get verified with 3ds as it has been turned off in Goldmine'\n )\n\n return {\n wasUserCanceled: false,\n nonce,\n liabilityShiftStatus: 'did_not_ask',\n }\n }\n\n try {\n const threeDSecure = await verifyThreeDSecure(client, {\n nonce,\n bin: creditCard.bin ?? creditCard.number.slice(0, 6),\n depositAmount,\n userData,\n })\n\n if (threeDSecure.threeDSecureInfo.liabilityShifted) {\n logLiabilityShiftSuccess({\n accountNumber,\n transactionId,\n paymentMethod,\n flow,\n })\n\n return {\n wasUserCanceled: false,\n nonce: threeDSecure.nonce,\n liabilityShiftStatus: 'shifted',\n }\n } else {\n logLiabilityShiftRejected({\n accountNumber,\n transactionId,\n paymentMethod,\n flow,\n response: {\n wasUserCanceled: false,\n nonce: threeDSecure.nonce,\n threeDSecureInfo: threeDSecure.threeDSecureInfo,\n },\n })\n\n return {\n wasUserCanceled: false,\n nonce: threeDSecure.nonce,\n liabilityShiftStatus: 'not_shifted',\n }\n }\n } catch (error) {\n if (error instanceof ThreeDSecureError && error.code === 'user_canceled') {\n addCrumb(\n 'deposit',\n 'user has cancelled 3ds card verification step therefore deposit was not made'\n )\n\n return {\n wasUserCanceled: true,\n }\n }\n\n logLiabilityShiftError({\n accountNumber,\n transactionId,\n errorMessage: unwrapErrorMessage(coerceIntoError(error)),\n paymentMethod,\n flow,\n })\n\n return {\n wasUserCanceled: false,\n nonce: '',\n liabilityShiftStatus: 'verification_failed',\n }\n }\n}\n\n// region Types\ntype PaymentTokenParams = {\n client: Client\n accountNumber: number\n nonce: string\n mustUse3DSecure: boolean\n creditCard: PaymentMethod\n depositAmount: number\n transactionId: string\n userData?: ContactDetails\n hostApi: HostApi\n flow: DepositFlow\n}\n\ntype DepositParams = {\n accountNumber: number\n client: Client\n initialData: InitialData\n creditCard: PaymentMethod\n depositAmount: number\n mustUse3DSecure: boolean\n userData?: ContactDetails\n hostApi: HostApi\n flow: DepositFlow\n}\n\ntype PaymentTokenResult = {\n nonce: string\n liabilityShiftStatus: 'shifted' | 'not_shifted' | 'did_not_ask' | 'verification_failed'\n}\n\ntype PrepareDepositResult = {\n paymentMethodNonce: string\n paymentMethodToken: string\n}\n// endregion\n","import { useDispatch } from 'react-redux'\nimport { useDidMount } from 'rooks'\nimport { setLastUsedPaymentMethod } from '../Store'\nimport { tryGetLegacyLastUsedPaymentMethod } from '../Utils/localStorage'\n\nexport const useMigrateLegacyLocalStorage = (accountNumber: number) => {\n const dispatch = useDispatch()\n useDidMount(() => {\n const [paymentMethod, remove] = tryGetLegacyLastUsedPaymentMethod(accountNumber)\n if (paymentMethod !== 'NoneOrUnknown') {\n dispatch(setLastUsedPaymentMethod({ accountNumber, paymentMethod }))\n }\n remove()\n })\n}\n","import { useQuery } from 'react-query'\nimport { sortCardsByDefaultThenValidity } from '../Utils'\nimport {\n type InitialData,\n ZodError,\n initialDataSchema,\n type PaymentMethod,\n issuerNames,\n IssuerName,\n} from '@mobi/api-types'\nimport { reportErrorIfNeeded } from '../../../Utils/sentry'\nimport { DepositUrl, get } from '../../../Utils/network'\nimport { queryKeys } from '../../../Utils'\n\nexport const useInitialData = (accountNumber: number | null) => {\n return useQuery({\n queryKey: [queryKeys.depositInitialData, accountNumber],\n queryFn,\n refetchOnWindowFocus: false,\n enabled: accountNumber !== null,\n select: data => {\n data.paymentMethods.sort(sortCardsByDefaultThenValidity)\n return data\n },\n })\n}\n\nconst queryFn = async (): Promise => {\n const url = DepositUrl.InitialData\n try {\n const initialData = await get(url, initialDataSchema.parse)\n initialData.paymentMethods = initialData.paymentMethods.filter((paymentMethod: PaymentMethod) =>\n issuerNames.includes(paymentMethod.issuerName as IssuerName)\n )\n return initialData\n } catch (error) {\n const msg = 'failed to retrieve payment tokens'\n let exception = 'Unknown error'\n\n if (error instanceof ZodError) {\n exception = 'Invalid server response'\n } else if (error instanceof Error) {\n exception = error.message\n }\n\n reportErrorIfNeeded({\n message: `${url} exception: ${msg} - ${exception}`,\n })\n\n throw new Error(msg)\n }\n}\n","import { useQuery } from 'react-query'\nimport { BetAccount } from '@mobi/api-types'\nimport { queryKeys } from '../../../Utils'\nimport { get } from '../../../Utils/network'\n\ntype UseBetAccountProps = {\n queryKey?: string\n enabled?: boolean\n queryFn: () => Promise\n onSuccess?: (data: T) => void\n}\n\nexport function useBetAccount(options: UseBetAccountProps) {\n return useQuery({\n queryKey: options.queryKey || queryKeys.betAccount,\n queryFn: options.queryFn,\n cacheTime: 0, // Defer to rwwa-data-access for caching\n enabled: options.enabled,\n onSuccess: options.onSuccess,\n refetchOnWindowFocus: false,\n })\n}\n\nexport async function fetchBetAccount(): Promise {\n return await get(`/$_/api/account/getBetAccountDetails`)\n}\n","import braintree, { type Client } from 'braintree-web'\nimport { useEffect, useMemo, useCallback, useRef } from 'react'\nimport { withTimeout } from '@mobi/utils'\n\nexport function useBraintreeClient(token: string) {\n const client = useRef()\n const isReadyResolve = useRef<(isReady: true) => void | undefined>()\n const isReadyPromise = useMemo>(\n () =>\n new Promise(resolve => {\n isReadyResolve.current = resolve\n }),\n []\n )\n const isReady = useCallback(() => withTimeout(isReadyPromise, 5_000, false), [isReadyPromise])\n\n useEffect(() => {\n const currentClient = client.current\n\n if (currentClient) {\n currentClient.authorization = token\n } else {\n braintree.client\n .create({\n authorization: token,\n })\n .then(clientInstance => {\n client.current = clientInstance\n isReadyResolve.current?.(true)\n })\n }\n }, [token])\n\n return {\n client,\n isReady,\n } as const\n}\n","import { Client } from 'braintree-web'\nimport { useMutation } from 'react-query'\nimport { useSelector } from 'react-redux'\nimport type { MutableRefObject } from 'react'\nimport { getCurrentEnvironment } from '@mobi/utils'\nimport { getDeviceData, deposit } from '../Utils'\nimport { reportErrorIfNeeded } from '../../../Utils/sentry'\nimport { selectDepositState } from '../Store'\nimport type { DepositRequest, DepositResponse } from '@mobi/api-types'\n\nexport type UseDepositProps = {\n braintreeClient: MutableRefObject\n accountNumber?: number\n}\n\nexport type DepositRequestWithoutDeviceData = Omit\n\n/**\n * Hook for calling the deposit function, ensuring initial data cache is invalidated\n */\nexport function useDeposit({\n braintreeClient,\n accountNumber,\n}: UseDepositProps) {\n const { selectedPaymentMethod, lastUsedPaymentMethod } = useSelector(selectDepositState)\n const lastUsedPaymentMethodForAccount = accountNumber\n ? lastUsedPaymentMethod?.[accountNumber]\n : null\n\n if (!braintreeClient) {\n const message = `Braintree client is uninitialized`\n reportErrorIfNeeded({ message })\n throw new Error(message)\n }\n\n const depositMutation = useMutation>({\n mutationFn: async ({ amount, paymentMethodNonce, ...args }) => {\n const client = braintreeClient.current\n\n if (!client) {\n throw new Error('Braintree client is uninitialized')\n }\n\n if (\n getCurrentEnvironment() !== 'production' &&\n (selectedPaymentMethod || lastUsedPaymentMethodForAccount) == 'GooglePay'\n ) {\n paymentMethodNonce = 'fake-android-pay-visa-debit-nonce'\n }\n\n const deviceData = await getDeviceData(client)\n\n return deposit({ ...args, amount, paymentMethodNonce, deviceData })\n },\n })\n\n return {\n depositMutation,\n }\n}\n","import { type RefObject, useEffect, useRef } from 'react'\nimport {\n type HostedFields,\n hostedFields,\n type HostedFieldsTokenizePayload,\n type BraintreeError,\n} from 'braintree-web'\nimport { font } from '@mobi/component-library/Theme/Common'\nimport { HostedFieldsError } from '../Utils/HostedFieldsError'\nimport { useBraintreeClient } from './useBraintreeClient'\n\ntype HostedFieldRef = RefObject\n\nexport type TokenizeSuccessParams = Pick\n\ntype Params = {\n clientToken: string\n fields: {\n number: HostedFieldRef\n expiry: HostedFieldRef\n cvc: HostedFieldRef\n }\n onInitError: (error: HostedFieldsError) => void\n}\n\nexport function useHostedFields({\n clientToken,\n fields: { number, expiry, cvc },\n onInitError,\n}: Params) {\n const hostedFieldsRef = useRef(undefined)\n const { client, isReady } = useBraintreeClient(clientToken)\n\n const tokenize = async (): Promise => {\n const hostedFields = hostedFieldsRef.current\n\n if (!hostedFields) {\n throw HostedFieldsError.uninitialized()\n }\n\n const { fields } = hostedFields.getState()\n const { number, expirationDate, cvv } = fields\n\n const errors = [number, expirationDate, cvv]\n .filter(field => !field.isValid)\n .reduce>((errors, field) => {\n const fieldName = field.container.dataset.field\n\n if (fieldName) {\n errors[fieldName] = 'This field is invalid'\n }\n\n return errors\n }, {})\n\n if (Object.keys(errors).length > 0) {\n throw HostedFieldsError.validationErrors(errors)\n }\n\n try {\n const { nonce, details } = await hostedFields.tokenize()\n\n return {\n nonce,\n details,\n }\n } catch (err) {\n const error = err as BraintreeError\n\n switch (error.code) {\n case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n throw HostedFieldsError.tokenizationFailure()\n case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n throw HostedFieldsError.networkError()\n default:\n throw HostedFieldsError.unknown()\n }\n }\n }\n\n useEffect(() => {\n isReady().then(isReady => {\n if (!isReady) {\n return\n }\n\n hostedFields\n .create({\n client: client.current,\n styles: {\n input: {\n 'font-family': font.family.primary,\n // Braintree has the root font size set to 16px\n 'font-size': `calc(${font.size.md.fontSize} / 1.6)`,\n 'letter-spacing': `calc(${font.size.md.letterSpacing} / 1.6)`,\n 'line-height': `calc(${font.size.md.lineHeight} / 1.6)`,\n },\n },\n fields: {\n number: {\n container: number.current ?? undefined,\n placeholder: 'Card Number',\n },\n expirationDate: {\n container: expiry.current ?? undefined,\n placeholder: 'MM / YY',\n },\n cvv: {\n container: cvc.current ?? undefined,\n placeholder: 'CVV',\n },\n },\n })\n .then(fields => {\n hostedFieldsRef.current = fields\n })\n .catch((err: BraintreeError) => {\n const hostedFieldsError =\n err.code === 'HOSTED_FIELDS_TIMEOUT'\n ? HostedFieldsError.timeout()\n : HostedFieldsError.unknown()\n\n onInitError(hostedFieldsError)\n })\n })\n\n return () => {\n hostedFieldsRef.current?.teardown()\n hostedFieldsRef.current = undefined\n }\n }, [client, cvc, expiry, isReady, number, onInitError])\n\n return { tokenize }\n}\n","import { useQuery, type UseQueryOptions } from 'react-query'\nimport { type ContactDetails, contactDetailsSchema, ContactDetailsApiPath } from '@mobi/api-types'\nimport { queryKeys } from '../../../Utils'\nimport type { DepositFlow } from '../typings/types'\nimport { get } from '../../../Utils/network'\nimport { track } from '../../../Utils/analytics'\n\ntype Params = {\n accountNumber: number\n flow: DepositFlow\n} & Pick, 'onError' | 'onSuccess'>\n\nconst enum LocalConstants {\n TTL = 1000 * 60 * 60 * 8, // 8 hours\n}\n\nexport function useUserContactDetails({ accountNumber, flow, ...options }: Params) {\n const { userContactDetails: queryKey } = queryKeys\n return useQuery({\n queryKey,\n queryFn,\n ...options,\n staleTime: LocalConstants.TTL,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n onSuccess: () => {\n track('deposit-3d-secure-user-data-success', {\n accountNumber,\n depositVariant: flow,\n })\n },\n onError: () => {\n track('deposit-3d-secure-user-data-fail', {\n accountNumber,\n depositVariant: flow,\n })\n },\n })\n}\n\nconst queryFn = async () => {\n const parser = contactDetailsSchema.parse\n return await get(ContactDetailsApiPath, parser)\n}\n","import { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport type { PaymentMethods, PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\nimport { isSelfServePaymentMethod } from '@mobi/component-library/Deposit/helpers'\nimport { OnFailureParams } from '../Components/types'\nimport type { DepositFlow } from '../typings/types'\n\nexport type DepositStatus =\n | 'idle'\n | 'verifying' // performing verification\n | 'depositing' // depositing funds to account\n | 'success' // funds deposited\n | 'unsuccessful' // funds not deposited\n\ntype DepositInput = { inputValue: string } & (\n | { isValid: false }\n | { isValid: true; amount: number }\n)\n\nexport type State = {\n depositFlow: DepositFlow\n depositStatus: DepositStatus\n depositInput: DepositInput\n selectedPaymentMethod?: PaymentMethodsAll\n lastSelectedPaymentMethod: Record\n lastUsedPaymentMethod: Record\n depositFailure?: OnFailureParams\n}\n\ntype DepositState = {\n deposit: State\n}\n\nconst initialState: State = {\n depositFlow: 'account-deposit',\n depositStatus: 'idle',\n depositInput: { inputValue: '', isValid: false },\n lastSelectedPaymentMethod: {},\n lastUsedPaymentMethod: {},\n}\n\ntype SelectPaymentMethodPayload = { accountNumber: number; paymentMethod: PaymentMethodsAll }\n\ntype LastUsedPaymentMethodPayload = { accountNumber: number; paymentMethod: PaymentMethods }\n\ntype DepositSuccessPayload = { accountNumber: number }\n\nconst slice = createSlice({\n name: 'deposit',\n initialState,\n reducers: {\n setDepositInput(state, { payload }: PayloadAction) {\n state.depositInput = payload\n },\n\n selectPaymentMethod(state, { payload }: PayloadAction) {\n const { accountNumber, paymentMethod } = payload\n state.selectedPaymentMethod = paymentMethod\n state.lastSelectedPaymentMethod[accountNumber] = paymentMethod\n },\n setLastUsedPaymentMethod(state, { payload }: PayloadAction) {\n const { accountNumber, paymentMethod } = payload\n state.lastUsedPaymentMethod[accountNumber] = paymentMethod\n },\n verify(state) {\n if (state.depositStatus !== 'idle') {\n throw new Error('Invalid state transition')\n }\n if (!state.selectedPaymentMethod) {\n throw new Error('Missing payment method')\n }\n if (!state.depositInput.isValid || state.depositInput.amount === 0) {\n throw new Error('Zero deposit amount')\n }\n state.depositStatus = 'verifying'\n state.depositFailure = undefined\n },\n cancel(state) {\n if (state.depositStatus !== 'verifying') {\n throw new Error('Invalid state transition')\n }\n state.depositStatus = 'idle'\n },\n deposit(state) {\n if (state.depositStatus !== 'verifying') {\n throw new Error('Invalid state transition')\n }\n state.depositStatus = 'depositing'\n },\n depositSucceeded(state, { payload }: PayloadAction) {\n if (state.depositStatus !== 'depositing') {\n throw new Error('Invalid state transition')\n }\n state.depositStatus = 'success'\n if (state.selectedPaymentMethod && !isSelfServePaymentMethod(state.selectedPaymentMethod)) {\n state.lastUsedPaymentMethod[payload.accountNumber] = state.selectedPaymentMethod\n }\n },\n depositFailed(state, { payload }: PayloadAction) {\n if (state.depositStatus !== 'depositing' && state.depositStatus !== 'verifying') {\n throw new Error('Invalid state transition')\n }\n state.depositStatus = 'unsuccessful'\n state.depositFailure = payload\n },\n finished(state) {\n if (state.depositStatus !== 'success' && state.depositStatus !== 'unsuccessful') {\n throw new Error('Invalid state transition')\n }\n if (state.depositStatus === 'success') {\n state.depositInput = { inputValue: '', isValid: false }\n }\n state.depositStatus = 'idle'\n state.depositFailure = undefined\n },\n /** Used by Toolbox only */\n resetLastUsedPaymentMethod(state, { payload }: PayloadAction) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete state.lastUsedPaymentMethod[payload]\n },\n reset({ lastSelectedPaymentMethod, lastUsedPaymentMethod }) {\n return {\n ...initialState,\n lastSelectedPaymentMethod,\n lastUsedPaymentMethod,\n }\n },\n setDepositFlow(state, { payload }: PayloadAction) {\n state.depositFlow = payload\n },\n },\n})\n\nexport default persistReducer(\n {\n key: 'deposit',\n whitelist: ['lastSelectedPaymentMethod', 'lastUsedPaymentMethod'],\n storage,\n debug: !PRODUCTION,\n },\n slice.reducer\n)\n\nexport const {\n setDepositInput,\n setLastUsedPaymentMethod,\n selectPaymentMethod,\n verify,\n cancel,\n deposit,\n depositSucceeded,\n depositFailed,\n finished,\n resetLastUsedPaymentMethod,\n reset,\n setDepositFlow,\n} = slice.actions\n\nexport const selectDepositState = (state: DepositState) => state.deposit\n\nexport const selectDepositInput = (state: DepositState) => state.deposit.depositInput\n\nexport const selectDepositStatus = (state: DepositState) => state.deposit.depositStatus\n\nexport const selectLastSelectedPaymentMethod =\n (accountNumber: number | null) => (state: DepositState) => {\n return accountNumber ? state.deposit.lastSelectedPaymentMethod[accountNumber] : undefined\n }\n\nexport const selectLastUsedPaymentMethod =\n (accountNumber: number | null) => (state: DepositState) => {\n return accountNumber ? state.deposit.lastUsedPaymentMethod[accountNumber] : undefined\n }\n\nexport const selectIsBusy = (state: DepositState) => state.deposit.depositStatus !== 'idle'\n\nexport const selectIsDepositing = (state: DepositState) =>\n state.deposit.depositStatus === 'depositing'\n\nexport const selectDepositFlow = (state: DepositState) => state.deposit.depositFlow\n","export type HostedFieldsErrorCode =\n | 'uninitialized'\n | 'validation_error'\n | 'tokenization_error'\n | 'network_error'\n | 'timeout'\n | 'unknown'\n\nexport class HostedFieldsError extends Error {\n /**\n * Don't call the constructor directly, use the static initialization methods\n *\n * @private\n */\n private constructor(\n message: string,\n public readonly code: HostedFieldsErrorCode,\n public readonly fieldErrors: Record = {}\n ) {\n super(message)\n }\n\n public hasFieldError(fieldName: string) {\n return fieldName in this.fieldErrors\n }\n\n public static uninitialized() {\n return new HostedFieldsError('Hosted fields are not initialized', 'uninitialized')\n }\n\n public static validationErrors(fields: Record) {\n return new HostedFieldsError('One or more fields are invalid', 'validation_error', fields)\n }\n\n public static tokenizationFailure() {\n return new HostedFieldsError('Your card failed to verify', 'tokenization_error')\n }\n\n public static networkError() {\n return new HostedFieldsError('Card verification failed due to a network error', 'network_error')\n }\n\n public static unknown() {\n return new HostedFieldsError('An unknown error has occurred', 'unknown')\n }\n\n public static timeout() {\n return new HostedFieldsError('Hosted fields timed out trying to initialize', 'timeout')\n }\n}\n","import { type InitialData } from '@mobi/api-types'\n\nexport function customerMustUseThreeDSecure(\n { liabilityShiftExempt, minimumLiabilityShiftThreshold }: InitialData,\n depositAmount: number\n): boolean {\n return !liabilityShiftExempt && depositAmount >= minimumLiabilityShiftThreshold\n}\n\n/**\n * Detects if the Payment Request API is supported by the browser\n * Note: The Google Pay SDK uses the Payment Request API for payments.\n * @returns {boolean}\n */\nexport function isPaymentRequestApiSupported(): boolean {\n return !!window.PaymentRequest\n}\n","import type { BraintreeError } from 'braintree-web'\n\ntype ErrorCode = 'failed_to_initialize' | 'user_canceled' | 'card_verification_failed' | 'no_data'\n\nexport class ThreeDSecureError extends Error {\n public constructor(\n message: string,\n public readonly code: ErrorCode,\n public readonly previousError?: Error | BraintreeError\n ) {\n super(message)\n }\n\n public static failedToInitialize(previousError: Error) {\n return new ThreeDSecureError(\n 'Failed to initialize 3DS client',\n 'failed_to_initialize',\n previousError\n )\n }\n\n public static canceled() {\n return new ThreeDSecureError('User canceled the 3DS flow', 'user_canceled')\n }\n\n public static verificationFailed(previousError: BraintreeError) {\n return new ThreeDSecureError(\n 'Card verification failed',\n 'card_verification_failed',\n previousError\n )\n }\n\n public static noData() {\n return new ThreeDSecureError('3DS verification returned no data', 'no_data')\n }\n}\n","export const routes = {\n depositHome: '/',\n manageCards: '/manage-cards',\n} as const\n","import { creditCardExpirationPattern, parseExpirationDate } from '@mobi/utils'\nimport { z } from 'zod'\n\nexport const creditCardSchema = z.object({\n number: z\n .string()\n .regex(/^[\\d\\s]+$/, 'The given card number is not valid')\n .transform(value => value.replace(/\\s/g, '')),\n expiry: z\n .string()\n .regex(creditCardExpirationPattern, 'The given expiration date is not valid or malformed')\n .transform((value, ctx) => {\n const parsedDate = parseExpirationDate(value)\n\n if (parsedDate === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${value} is not a valid expiration date`,\n })\n\n return z.NEVER\n }\n\n return parsedDate\n }),\n cvc: z.string().min(3).max(4).regex(/^\\d+$/),\n})\n\nexport type CreditCardData = z.infer\n","import React from 'react'\nimport { type PayIdDetails } from '@mobi/api-types/src/account/betAccount'\nimport { addToast, ToastContent } from '@mobi/component-library/Feedback/Toast'\nimport { addCrumb } from '@mobi/utils'\nimport { reportErrorIfNeeded, track } from '../../../Utils'\n\nexport const FeedbackPayIdStatusChange = (\n accountNumber: number,\n status: PayIdDetails['CreationStatus'],\n processId: number\n) => {\n const timeStamp = new Date().toISOString()\n\n switch (status) {\n case 'active':\n addCrumb('deposit', 'PayId zepto active')\n track('deposit_payid_active', {\n accountNumber,\n timeStamp,\n processId,\n })\n addToast({\n id: 'payid-activation-success',\n isDismissable: true,\n content: ,\n })\n break\n case 'failed':\n reportErrorIfNeeded({ message: 'PayId zepto failed' })\n track('deposit_payid_failed', {\n accountNumber,\n timeStamp,\n })\n addToast({\n id: 'payid-activation-failure',\n isDismissable: true,\n content: (\n \n ),\n })\n break\n case 'deregistered':\n reportErrorIfNeeded({ message: 'PayId zepto deregistered' })\n track('deposit_payid_deregistered', {\n accountNumber,\n timeStamp,\n })\n break\n case 'disabled':\n reportErrorIfNeeded({ message: 'PayId zepto disabled' })\n track('deposit_payid_disabled', {\n accountNumber,\n timeStamp,\n })\n break\n }\n}\n","import { addToast, ToastContent } from '@mobi/component-library/Feedback/Toast'\nimport {\n AccountBalanceChangedPushEvent,\n AccountBalanceChangedExceptionPushEvent,\n} from 'tabtouch-push-contract'\nimport { isSelfServePaymentMethod } from '@mobi/component-library/Deposit/helpers'\nimport React from 'react'\n\nconst FeedbackBalanceChangeSuccess = () =>\n addToast({\n id: 'deposit-success',\n isDismissable: true,\n content: ,\n })\n\nconst FeedbackBalanceChangeError = (\n exception: AccountBalanceChangedExceptionPushEvent['exception']\n) => {\n let message = ''\n let title = ''\n\n switch (exception) {\n case 'DepositPrecommLimit':\n title = 'Daily deposit limit exceeded'\n message =\n 'Your deposit exceeded your daily limit. We have refunded the amount. Please try again with a value equal to or lower than your daily limit.'\n break\n case 'DepositMinNotMet':\n title = 'Minimum value not reached'\n message =\n 'Your deposit was lower than the minimum deposit value. We have refunded the amount. Please try again.'\n break\n case 'DepositExceptionOthr':\n default:\n title = 'Your deposit could not be completed'\n message =\n 'Please try again. If the issue persists, please contact your bank to check your account details or call us on 1300 36 36 88.'\n break\n }\n\n addToast({\n id: 'deposit-error',\n isDismissable: true,\n content: ,\n timeoutMs: 6_000, // 6s\n })\n}\n\nexport const FeedbackBalanceChange = (\n balanceChangeEvent: AccountBalanceChangedPushEvent | AccountBalanceChangedExceptionPushEvent\n) => {\n /*\n * We only want to show feedbacks for self serve deposits.\n * The feedback for internal deposits are already handled.\n */\n if (\n balanceChangeEvent.paymentMethod &&\n !isSelfServePaymentMethod(balanceChangeEvent.paymentMethod)\n )\n return\n\n if (\n 'exception' in balanceChangeEvent &&\n (balanceChangeEvent.exception === 'DepositMinNotMet' ||\n balanceChangeEvent.exception === 'DepositPrecommLimit' ||\n balanceChangeEvent.exception === 'DepositExceptionOthr')\n ) {\n FeedbackBalanceChangeError(balanceChangeEvent.exception)\n return\n }\n\n FeedbackBalanceChangeSuccess()\n}\n","import { getFromLocalStorage, setInLocalStorage } from '@mobi/utils'\n\nconst enum LocalConstant {\n STORAGE_KEY = 'successfulDepositCount',\n}\n\ntype CountMap = Record\n\nexport function initializeWithCountIfNotInitialized(accountNumber: number, count: number) {\n if (!(accountNumber in loadCounts())) {\n saveCount(accountNumber, count)\n }\n}\n\nexport function incrementSuccessCount(accountNumber: number): number {\n const count = loadCounts()[accountNumber]\n\n if (count === undefined) {\n return -1\n }\n\n const nextCount = count + 1\n\n saveCount(accountNumber, nextCount)\n\n return nextCount\n}\n\nfunction loadCounts(): CountMap {\n const item = getFromLocalStorage(LocalConstant.STORAGE_KEY)\n\n return JSON.parse(item ?? '{}')\n}\n\nfunction saveCount(accountNumber: number, count: number) {\n setInLocalStorage(\n LocalConstant.STORAGE_KEY,\n JSON.stringify({\n ...loadCounts(),\n [accountNumber]: count,\n })\n )\n}\n","import type { PaymentMethod } from '@mobi/api-types'\nimport { isCardValid } from '@mobi/component-library/Deposit/helpers'\n\n/**\n * Sort cards in the following order:\n *\n * - Default card\n * - Valid cards\n * - Invalid cards\n */\nexport function sortCardsByDefaultThenValidity(card1: PaymentMethod, card2: PaymentMethod) {\n const card1Score = Number(card1.isDefault) + Number(isCardValid(card1))\n const card2Score = Number(card2.isDefault) + Number(isCardValid(card2))\n\n return card2Score - card1Score\n}\n","import { getCurrentEnvironment } from '@mobi/utils'\nimport { initGooglePayWeb } from '../Hooks/GooglePay/initGooglePayWeb'\n\nlet googlePaymentClient: google.payments.api.PaymentsClient\n\nexport function getGooglePaymentsClient(): Promise {\n return initGooglePayWeb().then(() => {\n googlePaymentClient ??= new google.payments.api.PaymentsClient({\n environment: getCurrentEnvironment() === 'production' ? 'PRODUCTION' : 'TEST',\n })\n\n return googlePaymentClient\n })\n}\n\nexport function getGoogleMerchantId(): string {\n return getCurrentEnvironment() === 'production' ? 'BCR2DN4TUDD2N3BI' : '01234567890123456789'\n}\n\nexport function isGooglePayAvailable() {\n return window.google?.payments.api !== undefined\n}\n","/**\n * Detects if the Apple Pay JS API is supported by the browser (Safari only)\n */\nexport function isApplePayWebSupported(): boolean {\n try {\n return (\n !!window.ApplePaySession &&\n ApplePaySession.supportsVersion(3) &&\n ApplePaySession.canMakePayments()\n )\n } catch {\n return false\n }\n}\n","/* eslint-disable no-console */\nimport React, { useEffect } from 'react'\nimport { QueryClient, QueryClientProvider, setLogger, type Logger } from 'react-query'\n\nexport const createTestQueryClient = () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n cacheTime: Infinity,\n },\n },\n })\n\ntype WrapperProps = {\n client?: QueryClient\n logger?: Partial\n}\n\nconst defaultLogger: Logger = {\n warn: console.warn,\n\n log: console.log,\n\n error: console.error,\n}\n\nexport function createWrapper(props?: WrapperProps) {\n const Wrapper: React.FC = ({\n children,\n }: {\n children?: React.ReactNode\n }) => {\n useEffect(() => {\n setLogger({\n ...defaultLogger,\n ...(props?.logger ?? {}),\n })\n\n return () => {\n setLogger(defaultLogger)\n }\n }, [])\n\n return (\n \n {children}\n \n )\n }\n return Wrapper\n}\n","import {\n type ThreeDSecure,\n type ThreeDSecureVerifyPayload,\n type Client,\n threeDSecure,\n} from 'braintree-web'\nimport type { ThreeDSecureVerifyOptions } from 'braintree-web/modules/three-d-secure'\nimport type { ContactDetails } from '@mobi/api-types'\nimport { coerceIntoError } from '@mobi/utils'\nimport { ThreeDSecureError, isBraintreeError } from '.'\n\ntype VerifyParams = {\n nonce: string\n depositAmount: number\n bin: string\n userData?: ContactDetails\n}\n\nexport async function verifyThreeDSecure(\n client: Client,\n { bin, userData, nonce, depositAmount }: VerifyParams\n): Promise {\n const [threeDSClient, threeDSClientError] = await createThreeDSecureClient(client)\n\n if (threeDSClientError) {\n throw ThreeDSecureError.failedToInitialize(threeDSClientError)\n }\n\n let wasCancelled = false\n\n threeDSClient.on('lookup-complete', (_, next) => next?.())\n threeDSClient.on('customer-canceled', () => (wasCancelled = true))\n\n try {\n const data = await threeDSClient.verifyCard({\n nonce,\n bin,\n amount: depositAmount,\n ...formatAdditionalUserInformation(userData),\n })\n\n if (wasCancelled) {\n throw ThreeDSecureError.canceled()\n }\n\n if (!data) {\n throw ThreeDSecureError.noData()\n }\n\n return data\n } catch (error) {\n if (isBraintreeError(error)) {\n throw ThreeDSecureError.verificationFailed(error)\n }\n throw error\n } finally {\n threeDSClient.teardown()\n }\n}\n\nasync function createThreeDSecureClient(\n client: Client\n): Promise<[ThreeDSecure, undefined] | [undefined, Error]> {\n try {\n const threeDSClient = await threeDSecure.create({\n client,\n version: '2',\n })\n\n return [threeDSClient, undefined]\n } catch (error) {\n return [undefined, coerceIntoError(error)]\n }\n}\n\ntype AdditionalInfo = Pick<\n ThreeDSecureVerifyOptions,\n 'email' | 'mobilePhoneNumber' | 'billingAddress'\n>\n\nfunction formatAdditionalUserInformation(userData?: ContactDetails) {\n const additionalInfo: AdditionalInfo = {}\n\n if (!userData) {\n return additionalInfo\n }\n\n let streetAddress = [\n userData.PostalAddress.StreetNumber,\n userData.PostalAddress.StreetName,\n userData.PostalAddress.StreetType,\n ]\n .filter(part => null !== part)\n .join(' ')\n\n if (userData.PostalAddress.UnitNumber) {\n streetAddress = `${userData.PostalAddress.UnitNumber}/${streetAddress}`\n }\n\n additionalInfo.email = userData.Contact.Email ?? undefined\n additionalInfo.mobilePhoneNumber = userData.Contact.Mobile.PhoneNumber ?? undefined\n additionalInfo.billingAddress = {\n givenName: userData.NameDetails.FirstName ?? undefined,\n surname: userData.NameDetails.Surname ?? undefined,\n streetAddress,\n locality: userData.PostalAddress.Suburb ?? undefined,\n postalCode: userData.PostalAddress.Postcode ?? undefined,\n region:\n userData.PostalAddress.Country === 'Australia'\n ? `AU-${userData.PostalAddress.State}`\n : undefined,\n countryCodeAlpha2: userData.PostalAddress.Country === 'Australia' ? 'AU' : undefined,\n }\n\n return additionalInfo\n}\n","/**\n * Payment Processor decline codes as reported by Braintree\n *\n * These codes are the ones that require the customer to contact their bank and we have seen in Sentry\n *\n * @link https://developer.paypal.com/braintree/articles/control-panel/transactions/declines#authorization-decline-codes\n */\nconst paymentProcessorErrorCodes = [\n '2000', // Do Not Honor\n '2001', // Insufficient Funds\n '2015', // Transaction Not Allowed\n '2074', // Funding Instrument In The PayPal Account Was Declined By The Processor Or Bank, Or It Can't Be Used For This Payment\n] as const\n\nexport type PaymentProcessorErrorCode = (typeof paymentProcessorErrorCodes)[number]\n\nexport const isPaymentProcessorErrorCode = (\n errorCode: string\n): errorCode is PaymentProcessorErrorCode => {\n return paymentProcessorErrorCodes.includes(errorCode as PaymentProcessorErrorCode)\n}\n","import braintree, { type Client, type BraintreeError } from 'braintree-web'\n\nexport async function getDeviceData(client: Client) {\n const dataCollector = await braintree.dataCollector.create({\n client,\n kount: true,\n })\n\n return dataCollector.getDeviceData()\n}\n\nexport function isBraintreeError(error: unknown): error is BraintreeError {\n return ['code', 'message', 'type', 'details'].every(prop => prop in (error as BraintreeError))\n}\n","import {\n depositResponseSchema,\n paymentNonceResponseSchema,\n ZodError,\n type DepositRequest,\n type PaymentNonceResponse,\n type DepositResponse,\n type PaymentNonce,\n} from '@mobi/api-types'\nimport { DepositError } from '../Components'\nimport { addCrumb, unwrapErrorMessage, coerceIntoError } from '@mobi/utils'\nimport { DepositUrl, post, reportErrorIfNeeded } from '../../../Utils'\n\nexport async function generatePaymentNonce(\n token: string,\n paymentAmount: number,\n transactionId: string\n): Promise {\n try {\n const rawResponse = await post(DepositUrl.GeneratePaymentNonce, {\n token,\n amount: paymentAmount,\n })\n\n const response = paymentNonceResponseSchema.parse(rawResponse)\n\n if (response.isSuccess) {\n addCrumb('deposit', 'generate card nonce/token success')\n } else {\n reportErrorIfNeeded({\n message: `generate card nonce/token failed: trx:${transactionId}`,\n })\n }\n\n return response\n } catch (error) {\n reportErrorIfNeeded({\n message: `/generatePaymentMethodNonce exception: ${unwrapErrorMessage(coerceIntoError(error))} trx:${transactionId}`,\n })\n\n return {\n nonce: '',\n message: null,\n isSuccess: false,\n }\n }\n}\n\nexport async function deposit(data: TData): Promise {\n try {\n const parser = depositResponseSchema.parse\n const response = await post(DepositUrl.Deposit, data, parser)\n\n if (response.isSuccess) {\n addCrumb(\n 'deposit',\n `depositing success: type:${data.depositSource} amount:${data.amount} trx:${data.transactionId}`\n )\n } else {\n reportErrorIfNeeded({\n message: `depositing failed: ${JSON.stringify(response)}`,\n })\n }\n\n return response\n } catch (error) {\n let message = 'Unknown error'\n\n if (error instanceof ZodError) {\n message = 'Invalid server response'\n } else if (error instanceof Error) {\n message = error.message\n }\n\n reportErrorIfNeeded({ message: `/deposit exception: ${message}` })\n\n throw DepositError.coerce(message, data.transactionId)\n }\n}\n","import { type PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport { getFromLocalStorage, removeFromLocalStorage, setInLocalStorage } from '@mobi/utils'\n\nconst TOOL_TIP_LOCAL_STORAGE_KEY = 'tooltips_track_seen'\n\ntype LegacyLastUsedPaymentMethod = [\n paymentMethod: PaymentMethods | 'NoneOrUnknown',\n remove: VoidFunction,\n]\n\n/**\n * Get and parse Last Payment Method written to local storage by legacy Deposit\n * Note that ExistingPaymentMethod and NewPaymentMethod are converted to CreditCard\n * @deprecate\n */\nexport const tryGetLegacyLastUsedPaymentMethod = (\n accountNumber: number\n): LegacyLastUsedPaymentMethod => {\n const LegacyPaymentMethods = [\n 'ExistingPaymentMethod',\n 'NewCreditCard',\n 'PayPal',\n 'ApplePay',\n 'GooglePay',\n ]\n const key = `last-deposit-method/${accountNumber}`\n const remove = () => removeFromLocalStorage(key)\n const lastPayment = getFromLocalStorage(key)\n const paymentMethod = LegacyPaymentMethods.find(paymentMethod => lastPayment === paymentMethod)\n\n if (!paymentMethod) {\n return ['NoneOrUnknown', remove]\n }\n if (paymentMethod === 'ExistingPaymentMethod' || paymentMethod === 'NewCreditCard') {\n return ['CreditCard', remove]\n }\n return [paymentMethod as PaymentMethods, remove]\n}\n\nexport function hasTooltipBeenSeen(contextKey: string): boolean {\n const trackedData = getTooltipTrackedData()\n if (!trackedData) return false\n return trackedData[contextKey] || false\n}\n\nexport function setTooltipSeen(contextKey: string): void {\n const trackedData = getTooltipTrackedData() || {}\n trackedData[contextKey] = true\n setInLocalStorage(TOOL_TIP_LOCAL_STORAGE_KEY, JSON.stringify(trackedData))\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getTooltipTrackedData(): Record | null {\n const store = getFromLocalStorage(TOOL_TIP_LOCAL_STORAGE_KEY)\n if (!store) return null\n\n const trackedData = JSON.parse(store)\n if (typeof trackedData !== 'object') return null\n\n return trackedData\n}\n","import type { PaymentMethods } from '@mobi/component-library/Deposit/types'\nimport { track } from '../../../Utils'\nimport type { DepositFlow, VerifyThreeDSecureResponse } from '../typings/types'\nimport { addCrumb } from '@mobi/utils'\nimport { reportErrorIfNeeded } from '../../../Utils/sentry'\n\n/**\n * Asynchronously report deposit failure details and deposit events.\n *\n * This promise can safely be ignored\n *\n * @param {String} logType categorise the log entry (for reporting purposes)\n * @param details Any additional information that needs to be sent\n */\nexport function logClient(logType: string, details?: Record) {\n return fetch('/api/client-log/log', {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ logType, ...(details ?? {}) }),\n }).catch(() => {\n // best effort - ignore serialization, network errors, etc.\n })\n}\n\ntype LiabilityShiftParams = {\n accountNumber: number\n transactionId: string\n paymentMethod: PaymentMethods\n flow: DepositFlow\n}\n\ntype LiabilityShiftErrorParams = LiabilityShiftParams & {\n errorMessage: string\n}\n\ntype LiabilityShiftRejectedParams = LiabilityShiftParams & {\n response: VerifyThreeDSecureResponse\n}\n\nexport function logLiabilityShiftError({\n accountNumber,\n transactionId,\n paymentMethod,\n errorMessage,\n flow,\n}: LiabilityShiftErrorParams) {\n track('deposit-3d-secure-error', {\n accountNumber,\n paymentMethod,\n message: errorMessage,\n depositVariant: flow,\n })\n reportErrorIfNeeded({\n message: `user 3ds verification error: ${errorMessage} trx:${transactionId}`,\n })\n}\n\nexport function logLiabilityShiftRejected({\n accountNumber,\n transactionId,\n response,\n paymentMethod,\n flow,\n}: LiabilityShiftRejectedParams) {\n track('deposit-3d-secure-not-shifted', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n })\n\n addCrumb(\n 'deposit',\n `user has not successfully verified with 3ds: liability shift possible ${response.threeDSecureInfo.liabilityShiftPossible} trx:${transactionId}`\n )\n}\n\nexport function logLiabilityShiftSuccess({\n accountNumber,\n transactionId,\n paymentMethod,\n flow,\n}: LiabilityShiftParams) {\n track('deposit-3d-secure', {\n accountNumber,\n paymentMethod,\n depositVariant: flow,\n })\n addCrumb('deposit', `user has successfully verified with 3ds trx:${transactionId}`)\n}\n","import type { PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\n\nexport const paymentMethodTypeNameMap: Record = {\n ApplePay: 'Apple Pay',\n CreditCard: 'Debit Card',\n GooglePay: 'Google Pay',\n PayPal: 'PayPal',\n BPay: 'BPay',\n Cash: 'Cash',\n ScanMyBet: 'Scan My Bet',\n PayID: 'PayID',\n}\n","import { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport React, { ChangeEvent } from 'react'\n\ntype Props = {\n isBusy: boolean\n onChange: (e: ChangeEvent) => void\n}\nexport const DocumentPermission = ({ isBusy, onChange }: Props) => {\n return (\n onChange(e)}\n />\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { DocumentNextButton } from '@mobi/component-library/Verification/Documents'\nimport { FormLayout } from '@mobi/component-library/Verification/Common/Layouts'\nimport { DocumentBodyStyled } from '@mobi/component-library/Verification/Documents/DocumentScreen.styled'\nimport { InputField, ValidationErrorStyled } from '@mobi/component-library/Common/Input'\nimport { SelectField, SelectOption } from '@mobi/component-library/Common/Select'\nimport { GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { DocumentPermission } from './DocumentPermission'\nimport { daysInMonth, months } from '@mobi/utils/date'\nimport { range } from '@mobi/utils/array'\n\nexport const medicareCardColours = [\n { value: '', label: 'Card Colour' },\n { value: 'Green', label: 'Green' },\n { value: 'Blue', label: 'Blue' },\n { value: 'Yellow', label: 'Yellow' },\n]\n\nexport const medicareExpiryNext10Years = () => {\n const thisYear = new Date().getFullYear()\n return range(thisYear, thisYear + 10)\n}\n\nexport const Medicare = () => {\n const [number, setNumber] = useState('')\n const [cardColour, setCardColour] = useState('')\n const [reference, setReference] = useState('')\n const [middleNameOnCard, setMiddleNameOnCard] = useState(null)\n const [expiryDay, setExpiryDay] = useState(undefined)\n const [expiryMonth, setExpiryMonth] = useState(0) //not 0 based like js Date month value\n const [expiryYear, setExpiryYear] = useState(0)\n const [givePermission, setGivePermission] = useState(false)\n const [cardNumberError, setCardNumberError] = useState(false)\n const [referenceNumberError, setReferenceNumberError] = useState(false)\n const [cardExpiryError, setCardExpiryError] = useState('')\n\n const isMedicareCardExpiryValid =\n (cardColour === 'Green' && !!expiryMonth && !!expiryYear) ||\n (cardColour !== 'Green' && !!expiryDay && !!expiryMonth && !!expiryYear)\n const isCardNumberValid = !!number && number.length === 10 && +number\n const isReferenceNumberValid = !!reference && reference.length === 1 && +reference\n const isGreenMedicareCardSelected = !!cardColour && cardColour === 'Green'\n const EVERYTHING_EXCEPT_NUMBERS = /[^0-9]/g\n\n const allowToProceed =\n givePermission &&\n !!isCardNumberValid &&\n !!cardColour &&\n !!isReferenceNumberValid &&\n isMedicareCardExpiryValid &&\n !cardExpiryError\n\n useEffect(() => {\n if (expiryDay && expiryDay > daysInMonth(expiryYear, expiryMonth)) {\n //reset default if day selection is invalid\n setExpiryDay(undefined)\n }\n\n if (!isMedicareCardExpiryValid) {\n //user has not entered all necessary fields for selected card colour\n setCardExpiryError('')\n } else {\n const tempDay = isGreenMedicareCardSelected ? 31 : expiryDay //green colour does not require day\n const monthIndex = expiryMonth - 1 //monthIndex is 0 based\n\n const expiryDate = new Date(expiryYear, monthIndex, tempDay)\n const todayTemp = new Date()\n const today = new Date(todayTemp.getFullYear(), todayTemp.getMonth(), todayTemp.getDate())\n\n setCardExpiryError(expiryDate < today ? 'Enter a valid expiry date.' : '')\n }\n }, [expiryDay, expiryMonth, expiryYear, isGreenMedicareCardSelected, isMedicareCardExpiryValid])\n\n const days: SelectOption[] = !isGreenMedicareCardSelected\n ? [...Array(daysInMonth(expiryYear, expiryMonth))].map((_, i) => {\n const day = i + 1\n return { value: day.toString(), label: day.toString() }\n })\n : []\n\n return (\n \n
\n

Enter your medicare details

\n

We need these details to be able to verify your identity

\n
\n \n {\n setNumber(e.currentTarget.value.replace(EVERYTHING_EXCEPT_NUMBERS, ''))\n setCardNumberError(false)\n }}\n value={number}\n type='text'\n maxLength={10}\n inputMode='numeric'\n pattern='[0-9]*'\n onBlur={() => {\n setCardNumberError(isCardNumberValid ? false : true)\n }}\n errorMessage={cardNumberError ? 'Enter 10 digits only.' : ''}\n />\n\n {\n setReference(e.currentTarget.value.replace(EVERYTHING_EXCEPT_NUMBERS, ''))\n setReferenceNumberError(false)\n }}\n value={reference}\n type='text'\n maxLength={1}\n inputMode='numeric'\n pattern='[0-9]*'\n onBlur={() => {\n setReferenceNumberError(isReferenceNumberValid ? false : true)\n }}\n errorMessage={referenceNumberError ? 'Enter 1 digit only.' : ''}\n />\n\n setMiddleNameOnCard(e.currentTarget.value)}\n />\n\n colour.value !== '')}\n onChange={e =>\n setCardColour(prevState => {\n if (prevState === 'Green') {\n // green medicare does not require day\n setExpiryDay(undefined)\n }\n return e.target.value\n })\n }\n />\n\n
\n \n \n setExpiryDay(+e.target.value)}\n data-testid='expiryDay'\n />\n \n \n ({\n value: number.toString(),\n label: name,\n }))}\n onChange={e => setExpiryMonth(+e.target.value)}\n data-testid='expiryMonth'\n />\n \n \n ({\n value: year.toString(),\n label: year.toString(),\n }))}\n onChange={e => setExpiryYear(+e.target.value)}\n data-testid='expiryYear'\n />\n \n \n {cardExpiryError && (\n \n {cardExpiryError}\n \n )}\n
\n\n setGivePermission(e.target.checked)}\n />\n
\n
\n \n // eslint-disable-next-line no-console\n console.log({\n number,\n cardColour,\n reference,\n middleNameOnCard,\n expiryDay: expiryDay === undefined ? null : expiryDay,\n expiryMonth,\n expiryYear,\n })\n // onSubmit({\n // number,\n // cardColour,\n // reference,\n // middleNameOnCard,\n // expiryDay: expiryDay === undefined ? null : expiryDay,\n // expiryMonth,\n // expiryYear,\n // })\n }\n />\n
\n
\n )\n}\n","import type {\n AddressSuggestions,\n StreetTypeSuggestions,\n SuburbStateSuggestions,\n} from '@mobi/api-types'\nimport { get } from '../../../Utils'\n\nexport function searchSuburbStatePostcodes(search: string) {\n return get(\n `/$_/api/signup/GetSuburbStatePostcodeList/?searchString=${encodeURIComponent(search)}`\n )\n}\n\nexport function searchStreetTypes(search: string) {\n return get(\n `/$_/api/signup/GetStreetTypeList/?searchString=${encodeURIComponent(search)}`\n )\n}\n\nexport function searchAddresses(search: string) {\n return get(\n `/$_/api/signup/GetAddressList/?searchString=${encodeURIComponent(search)}`\n )\n}\n\ntype SearchFunction = (search: string) => Promise<{ value: string }[]>\n\nexport function withValueMapping(searchFn: SearchFunction) {\n return (search: string) =>\n searchFn(search).then(results =>\n results.map(({ value }) => {\n return {\n id: value,\n value,\n }\n })\n )\n}\n","import { useQuery } from 'react-query'\nimport type { CountryList } from '@mobi/api-types'\nimport { get, queryKeys, SignUpUrl } from '../../../Utils'\n\nexport const useCountryList = () => {\n return useQuery({\n queryKey: queryKeys.countryList,\n queryFn: getCountryList,\n staleTime: 360000,\n refetchOnWindowFocus: false,\n })\n}\n\nexport function getCountryList() {\n return get(SignUpUrl.CountryList)\n}\n","import { useHistory } from 'react-router-dom'\nimport { routes } from '../Utils/routes'\n\nexport function useSignUpNavigation() {\n const history = useHistory()\n\n const navigateTo = (route: keyof typeof routes) => history.push(routes[route])\n\n return {\n navigateTo,\n }\n}\n","import {\n AccountSignUp,\n InternetProspectResponse,\n Passport,\n VerificationResponse,\n} from '@mobi/api-types/src/account/signup'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport produce from 'immer'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport { FailedType } from '../Components/Message/FailedMessage'\n\ntype SignUpState = {\n signUp: State\n}\n\nexport type State = {\n signUp?: AccountSignUp\n internetProspect?: InternetProspectResponse\n verification?: VerificationResponse\n // This state field is used to communicate the partial/fully verified\n // status of the signup process to the completed signup page.\n // Pseudonym: isCompletedSignupFullyVerified\n rwwaRanking?: number\n failedType?: FailedType\n}\n\nconst initialState: State = {}\n\nconst slice = createSlice({\n name: 'sign-up',\n initialState: initialState,\n reducers: {\n setAccountSignUp(state, action: PayloadAction) {\n state.signUp = action.payload\n },\n\n setInternetProspect(state, action: PayloadAction) {\n state.internetProspect = action.payload\n },\n\n setVerification(state, action: PayloadAction) {\n state.verification = action.payload\n },\n\n setRwwaRanking(state, action: PayloadAction) {\n state.rwwaRanking = action.payload\n },\n\n setFailedType(state, action: PayloadAction) {\n state.failedType = action.payload\n },\n\n setPassportToAttemptVerification(\n state,\n action: PayloadAction<{ passportNumber: string; passportCountry: string }>\n ) {\n if (state.signUp) {\n state.signUp = produce(state.signUp, draft => {\n draft.AgeVerification = {\n Attempt: (state.signUp?.AgeVerification?.Attempt || 0) + 1,\n Passport: {\n PassportNumber: action.payload.passportNumber,\n BirthSurname: 'surname', //TODO: remove\n PlaceOfBirth: 'placeOfBirth', //TODO: remove\n CountryOfBirth: 'CountryOfBirth', //TODO: remove\n CitizenshipGivenName: 'CitizenshipGivenName', //TODO: remove\n CitizenshipSurname: 'CitizenshipSurname', //TODO: remove\n Country: action.payload.passportCountry,\n } as Passport,\n None: false, //TODO: whats this for?\n EnquiryId: '', //TODO: whats this for?\n }\n })\n }\n },\n },\n})\n\nexport const {\n setAccountSignUp,\n setInternetProspect,\n setVerification,\n setRwwaRanking,\n setPassportToAttemptVerification,\n setFailedType,\n} = slice.actions\n\nexport default persistReducer(\n {\n key: 'sign-up',\n whitelist: ['signUp', 'internetProspect'],\n storage,\n debug: !PRODUCTION,\n },\n slice.reducer\n)\n\nexport function getSignUpState(state: SignUpState): State | undefined {\n return state.signUp\n}\n\nexport function getRwwaRanking(state: SignUpState): number | undefined {\n return state.signUp.rwwaRanking\n}\n\nexport function getSignUpFailedType(state: SignUpState): FailedType | undefined {\n return state.signUp.failedType\n}\n","import { BamAccountHolder, BetAccount, DepositLimitFrequency } from '@mobi/api-types'\nimport { post, SignUpUrl } from '../../../Utils'\n\nexport type PrecommitmentModel = {\n BetAccountNumber: number\n OptInIndicator: boolean\n MaxBetAmount: string\n MaxWeeklyDepositLimit: string\n OptInMarketingIndicator: boolean\n UserCreditCardBlockedIndicator: boolean\n BlockPayPalIndicator: boolean\n AccountHolderId: number\n PreCommitmentMaxDepositAmount: number | null\n PreCommitmentMaxDepositFrequency: DepositLimitFrequency\n}\n\nexport async function savePrecommitmentDetails(\n model: PrecommitmentModel,\n onCompletion?: () => void\n): Promise {\n const body = { PreCommitmentDetails: model }\n await post(SignUpUrl.SavePrecommitments, body)\n if (onCompletion) {\n onCompletion()\n }\n}\n\nexport type PrecommitmentResponse = {\n BetLimit?: number\n ProposedBetLimit: { Amount: number; ActiveDate: string }\n ProposedCreditCardReleaseDate: string | null\n BlockCreditCardDeposits: boolean\n BlockCreditCardDepositsEnable: boolean\n CoolingOffPeriodDays: number\n CoolingOffDate: string\n BetLimitRange: { Min: number; Max: number }\n RwwaAccountsContactTel: string\n}\n\nexport type UpdateDepositLimitAnniversaryRequest = Pick &\n Pick & {\n Location: number\n Keep: boolean\n }\n\nexport async function updateDepositLimitAnniversary(\n model: UpdateDepositLimitAnniversaryRequest\n): Promise {\n await post(\n SignUpUrl.UpdateDepositLimitAnniversary,\n model\n )\n}\n","export const SIGNUP_ROOT_ROUTE = 'SignUp'\n\nexport const routes = {\n contactDetails: `/${SIGNUP_ROOT_ROUTE}`,\n contactDetailsError: `/${SIGNUP_ROOT_ROUTE}/error`,\n passwordForm: `/${SIGNUP_ROOT_ROUTE}/password`,\n biometrics: `/${SIGNUP_ROOT_ROUTE}/biometrics`,\n depositLimit: `/${SIGNUP_ROOT_ROUTE}/deposit-limit`,\n depositBonus: `/${SIGNUP_ROOT_ROUTE}/deposit-bonus`,\n verification: `/${SIGNUP_ROOT_ROUTE}/verification`,\n driversLicence: `/${SIGNUP_ROOT_ROUTE}/verification/drivers-licence`,\n passport: `/${SIGNUP_ROOT_ROUTE}/verification/passport`,\n medicare: `/${SIGNUP_ROOT_ROUTE}/verification/medicare`,\n verificationFailed: `/${SIGNUP_ROOT_ROUTE}/verification/failed`,\n signUpSuccess: `/${SIGNUP_ROOT_ROUTE}/success`,\n} as const\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Toggle } from '@mobi/component-library/Common/Input'\n\ninterface BiometricsToggleProp {\n text: string\n isDisabled?: boolean\n toggleState?: boolean\n toggleTitle?: string\n onToggle: () => void\n}\n\nexport function BiometricsToggle({\n text,\n isDisabled = false,\n toggleState = false,\n toggleTitle,\n onToggle,\n ...props\n}: BiometricsToggleProp) {\n return (\n \n \n {text}\n \n \n \n \n \n )\n}\n\nconst BiometricsToggleStyled = styled('div')({\n marginTop: '1rem',\n display: 'flex',\n})\n\nconst TextContainerStyled = styled('div')({\n display: 'flex',\n alignItems: 'center',\n})\n\nconst TextStyled = styled('span')({\n fontSize: '1.4rem',\n lineHeight: '1.6rem',\n})\n\nconst SwitchStyled = styled('div')({\n WebkitTapHighlightColor: 'transparent',\n})\n","export const isValidBsb = (bsb: string): boolean => {\n const validBsbRegExp = new RegExp(/^\\d{3}-?\\d{3}$/)\n return validBsbRegExp.test(bsb)\n}\n\nexport const formatBsb = (bsb: string): string => {\n if (!isValidBsb(bsb)) {\n return bsb\n }\n\n const validExactBsbRegExp = new RegExp(/^\\d{3}-{1}\\d{3}$/)\n return validExactBsbRegExp.test(bsb) ? bsb : bsb.substring(0, 3) + '-' + bsb.substring(3, 6)\n}\n\nexport const isValidAccountName = (accountName: string): boolean => {\n const validAccountNameRegExp = /^['\\-\\sa-zA-Z]+$/\n return validAccountNameRegExp.test(accountName)\n}\n\nexport const isAccountNameIncludingSurname = (\n accountName: string,\n accountHolderSurname: string\n): boolean => {\n return accountName.toLowerCase().includes(accountHolderSurname.toLowerCase())\n}\n\nexport const isValidAccountNumber = (accountNumber: string): boolean => {\n const validAccountNumberRegExp = /^[0-9]{2,9}$/\n return validAccountNumberRegExp.test(accountNumber)\n}\n","export const WITHDRAW_ROOT_ROUTE = 'account/withdrawal'\n\nexport const routes = {\n home: `/${WITHDRAW_ROOT_ROUTE}`,\n bankAccount: `/${WITHDRAW_ROOT_ROUTE}/bank-account`,\n bankAccountLegacy: `/account/bankaccount/edit`,\n} as const\n","import { FeatureFlags } from '@mobi/settings'\nimport React, { type ReactNode, createContext, useContext } from 'react'\nimport { DepositHostEventApi } from '../Areas/Deposit/typings/types'\n\n/**\n * Callbacks allowing the hosted component to report events to the host\n */\nexport type HostEventApi = DepositHostEventApi\n\nexport type HostFeaturesApi = {\n hasFeature: (featureName: keyof typeof FeatureFlags | (string & {})) => Promise\n}\n\nexport type Channel = 'mobile' | 'desktop'\n\n/**\n * HostApi serves two purposes:\n *\n * 1) Provide capabilities to the hosted component, i.e. navigation, feature toggles, analytics tracking\n * 2) Allow the hosted component to communicate with the host, e.g. notify the host when an event occurs\n *\n * The host should communicate state changes to the hosted component via props.\n *\n * Implementation to be provided by the channel host, i.e. Mobi, Desktop, other\n */\nexport type HostApi = {\n features?: HostFeaturesApi\n events?: HostEventApi\n channel: Channel\n}\n\nconst HostContext = createContext({ channel: 'mobile' })\n\nexport const useHostContext = (): HostApi => {\n return useContext(HostContext)\n}\n\ntype Props = {\n api: HostApi\n children?: ReactNode\n}\n\nexport const HostProvider = ({ api, children }: Props): JSX.Element => {\n return {children}\n}\n","import type { PaymentMethodsAll } from '@mobi/component-library/Deposit/types'\nimport { paymentMethodTypeNameMap } from '../Areas/Deposit/Utils/schema'\nimport type { DepositAnalyticsKeys } from '../Areas/Deposit/typings/types'\nimport type { WithdrawAnalyticsKeys } from '../Areas/Withdraw/typings/types'\nimport type { SignUpAnalyticsKeys } from '../Areas/SignUp/typings/types'\n\ntype AnalyticsEventData = {\n accountNumber: number\n paymentMethod?: PaymentMethodsAll\n [key: string]: unknown\n}\n\nexport type TrackAnalytics = (\n eventKey: DepositAnalyticsKeys | WithdrawAnalyticsKeys | SignUpAnalyticsKeys,\n data: AnalyticsEventData\n) => void\n\nexport const track: TrackAnalytics = (eventKey, data) => {\n const { accountNumber, paymentMethod, ...other } = data\n window.dataLayer?.push({\n event: eventKey,\n accountNumber,\n ...(paymentMethod && { depositMethod: paymentMethodTypeNameMap[paymentMethod] }),\n ...other,\n })\n}\n","export const queryKeys = {\n depositInitialData: `deposit/initial-data`,\n userContactDetails: 'user-contact-details',\n addCard: 'deposit/add-card',\n /*\n * The betAccount key is used to cache the bet account details outside of the @mobi/account package.\n * It uses the cache from the old state management. This cannot be invalidated wihout access to @core.\n */\n betAccount: 'bet-account',\n /*\n * The depositBetAccount key is used to cache the bet account details inside of the @mobi/account package.\n */\n depositBetAccount: 'deposit/bet-account',\n generatePayId: 'deposit/generate-payid',\n countryList: 'country-list',\n withdrawDetails: 'withdraw-details',\n getBsbDetails: 'get-bsb-details',\n createZeptoContact: 'create-zepto-contact',\n deleteZeptoContact: 'delete-zepto-contact',\n}\n","/**\n * Pattern to validate an amount\n *\n * This pattern can check for up to 8 digits and 2 decimal places if they are provided\n * Decimal places are optional unless a cent separator is given, from which the\n * decimal places become mandatory\n *\n * @example\n *\n * ```ts\n * amountInputValidationRegex.test('1') // true\n * amountInputValidationRegex.test('12') // true\n * amountInputValidationRegex.test('123') // true\n * amountInputValidationRegex.test('1.23') // true\n * amountInputValidationRegex.test('12.34') // true\n * amountInputValidationRegex.test('123.45') // true\n * amountInputValidationRegex.test('123.') // false\n * amountInputValidationRegex.test('123456789') // false\n * amountInputValidationRegex.test('123.1') // false\n * amountInputValidationRegex.test('$123') // false\n * amountInputValidationRegex.test('🦎') // false\n * amountInputValidationRegex.test('🍺') // false\n * ```\n */\nexport const amountInputValidationRegex = /^\\d{1,8}(?:\\.\\d{2})?$/\n","import {\n isAccountBalanceChangedPushEvent,\n isAccountBalanceChangedExceptionPushEvent,\n isPayIdStatusChangedPushEvent,\n PushEvent,\n} from 'tabtouch-push-contract'\nimport { FeedbackBalanceChange, FeedbackPayIdStatusChange } from '../Areas/Deposit/Utils'\nimport { QueryClient } from 'react-query'\nimport { queryKeys } from './constants'\n\nexport const balanceUpdate = (\n payload: PushEvent,\n queryClient: QueryClient,\n onSuccess: () => void\n) => {\n const isBalanceChangedSuccess = isAccountBalanceChangedPushEvent(payload)\n const isBalanceChangedError = isAccountBalanceChangedExceptionPushEvent(payload)\n if (!isBalanceChangedSuccess && !isBalanceChangedError) return\n\n FeedbackBalanceChange(payload)\n if (isBalanceChangedSuccess) {\n onSuccess()\n queryClient.invalidateQueries({\n queryKey: [queryKeys.depositInitialData],\n })\n }\n}\n\nexport const payIdUpdate = (\n payload: PushEvent,\n accountNumber: number,\n queryClient: QueryClient\n) => {\n /*\n * We are using a random number to track if the activation\n * event is getting fired over multiple tabs.\n */\n const processId = Math.round(Math.random() * 1e6)\n if (isPayIdStatusChangedPushEvent(payload)) {\n FeedbackPayIdStatusChange(accountNumber, payload.status, processId)\n // Refetch the PayId details\n queryClient.invalidateQueries({\n queryKey: [queryKeys.depositBetAccount],\n })\n }\n}\n","export enum DepositUrl {\n CreatePaymentMethod = '/$_/accountDeposit/payment-methods/createPaymentMethod',\n SetDefaultPaymentMethod = '/$_/accountDeposit/payment-methods/setDefault',\n DeletePaymentMethod = '/$_/accountDeposit/payment-methods/deletePaymentMethod',\n InitialData = '/$_/accountDeposit/payment-methods/initialData',\n GeneratePaymentNonce = '/$_/accountDeposit/payment-methods/generatePaymentMethodNonce',\n Deposit = '/$_/accountDeposit/payment-methods/deposit',\n}\n\nexport const WithdrawUrl = {\n withdrawDetails: (accountNumber: number) =>\n `/api/bet-account/accounts/${accountNumber}/withdraw-details`,\n withdraw: '/api/account/withdraw',\n createZeptoContact: '/api/eft-mgt/contact/create',\n deleteZeptoContact: '/api/eft-mgt/contact',\n getBsbDetails: (bsb: string) => `/api/account/getbankdetailsfrombsb/${bsb}`,\n}\n\nexport enum SignUpUrl {\n CheckForDuplicateAccountAndCreateProspect = '/api/SignUp/CheckForDuplicateAccountAndCreateProspect',\n SavePrecommitments = '/$_/api/account/updatePrecommitments',\n UpdateDepositLimitAnniversary = '/$_/api/account/updateDepositLimitAnniversary',\n GetContactDetails = '/api/contactDetails',\n CountryList = '/$_/api/SignUp/GetCountryList',\n}\n\ntype AccountUrls = DepositUrl | keyof typeof WithdrawUrl | SignUpUrl\n\ntype Parser = (json: string) => TResponse\n\nconst defaultParser = (json: string) => json as TResponse\n\nexport const get = async (\n url: AccountUrls | string,\n parser: Parser = defaultParser\n): Promise => {\n const response = await fetch(url, {\n method: 'GET',\n })\n if (response.ok) {\n const json = await response.json()\n return parser(json)\n } else {\n throw { status: response.status, statusText: response.statusText }\n }\n}\n\nexport const post = async (\n url: AccountUrls | string,\n body: TRequest,\n parser: Parser = defaultParser\n) => {\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(body),\n credentials: 'include',\n headers: JSONContentHeaders,\n })\n if (response.ok) {\n if (response.status === 204) {\n return undefined as TResponse\n }\n\n const json = await response.json()\n return parser(json)\n } else {\n throw { status: response.status, statusText: response.statusText }\n }\n}\n\nexport const put = async (\n url: AccountUrls | string,\n body: TRequest,\n parser: Parser = defaultParser\n) => {\n const response = await fetch(url, {\n method: 'PUT',\n body: JSON.stringify(body),\n credentials: 'include',\n headers: JSONContentHeaders,\n })\n\n if (response.ok) {\n if (response.status === 204) return null\n\n const json = await response.json()\n return parser(json)\n } else {\n throw { status: response.status, statusText: response.statusText }\n }\n}\n\nexport const del = async (\n url: AccountUrls | string,\n body: TRequest,\n parser: Parser = defaultParser\n) => {\n const response = await fetch(url, {\n method: 'DELETE',\n body: JSON.stringify(body),\n credentials: 'include',\n headers: JSONContentHeaders,\n })\n\n if (response.ok) {\n if (response.status === 204) return null\n\n const json = await response.json()\n return parser(json)\n } else {\n throw { status: response.status, statusText: response.statusText }\n }\n}\n\n/**\n * Constants\n */\n\nconst JSONContentHeaders = {\n 'Content-type': 'application/json; charset=UTF-8',\n Accept: 'application/json',\n}\n","import { reportError } from '@mobi/utils'\nimport { isPaymentProcessorErrorCode } from '../Areas/Deposit/Utils'\n\ntype Params = {\n errorCode?: string\n message: string\n}\n\nexport function reportErrorIfNeeded({ errorCode, message }: Params) {\n if (!errorCode || (errorCode !== 'validation_error' && !isPaymentProcessorErrorCode(errorCode))) {\n reportError('deposit', message)\n }\n}\n","import { z } from 'zod'\n\nexport const ContactDetailsApiPath = `/$_/api/contactDetails`\n\nexport const contactDetailsSchema = z.object({\n NameDetails: z.object({\n FirstName: z.string().nullable(),\n Surname: z.string().nullable(),\n }),\n PostalAddress: z.object({\n UnitNumber: z.string().nullable(),\n StreetNumber: z.string().nullable(),\n StreetName: z.string().nullable(),\n StreetType: z.string().nullable(), // Road, Avenue, etc\n Suburb: z.string().nullable(),\n Postcode: z.string().nullable(),\n State: z.string().nullable(),\n Country: z.union([z.literal('Australia'), z.string()]).nullable(),\n }),\n Contact: z.object({\n Email: z.string().nullable(),\n Mobile: z.object({\n PhoneNumber: z.string().nullable(),\n }),\n }),\n})\n\nexport type ContactDetails = z.infer\n\nexport interface NameDetails {\n Title: string\n FirstName: string\n MiddleName: string\n Surname: string\n PreferredName: string\n}\n\nexport interface PhoneNumber {\n CountryCode: string\n AreaCode?: string\n PhoneNumber: string\n}\n\nexport interface Address {\n UnitNumber: string\n StreetNumber: string\n StreetName: string\n StreetType: string\n Suburb: string\n Postcode: string\n State: string\n Country: string\n}\n\nexport interface DriversLicence {\n Number: string\n State: string\n CardNumber: string\n}\n\nexport interface Passport {\n Number: string\n PassportCountry: string\n}\n\nexport interface Medicare {\n BlueYellowMedicareExpiryDate?: Date\n GreenMedicareExpiry?: string\n MedicareCardColour?: string\n MedicareMiddleNameOnCard?: string\n Number?: string\n Reference?: string\n}\n\nexport type DepositLimitFrequency = 'Daily' | 'Weekly' | 'Fortnightly' | 'Monthly' | null\n\nexport interface BetAccountHolder {\n BetAccountHolderNumber: number\n NameDetails: NameDetails\n DateOfBirth?: Date\n Contact?: {\n HomePhone?: PhoneNumber\n WorkPhone?: PhoneNumber\n Mobile?: PhoneNumber\n Email?: string\n }\n ResidentialAddress?: Address\n PostalAddress?: Address\n PostalAddressSameAsResidential?: boolean\n DriversLicence?: DriversLicence\n Passport?: Passport\n Medicare?: Medicare\n ReverificationAlertDate?: Date | null\n ReverificationDueDate?: Date | null\n NameDateOfBirthChanged?: boolean\n ReverificationFirstAttemptDate?: Date | null\n PrimaryContact?: boolean\n PreCommitmentDetails: PreCommitmentDetails\n}\n\nexport interface PreCommitmentDetails {\n OptInIndicator: boolean\n ProposedOptInIndicator: boolean\n ProposedOptOutDate: Date | null\n MaxBetAmount: string\n ProposedMaxBetAmount: string\n ProposedMaxBetDate: Date | null\n MaxDepositAmount: number | null\n MaxDepositFrequency: DepositLimitFrequency\n ProposedMaxDepositAmount: number | null\n ProposedMaxDepositFrequency: DepositLimitFrequency\n ProposedMaxDepositDate: Date | null\n OptInMarketingIndicator: boolean\n UserCreditCardBlockedIndicator: boolean\n ProposedUserCreditCardBlockedDate: Date | null\n CreditCardDisputedIndicator: boolean\n BlockPayPalIndicator: boolean\n ProposedPayPalReleaseDate: Date | null\n}\n\nexport interface FullSingleBetAccountHolder {\n BetAccountHolderNumber?: number\n NameChanged: boolean\n Contact?: {\n HomePhone?: PhoneNumber\n WorkPhone?: PhoneNumber\n Mobile?: PhoneNumber\n Email?: string\n }\n ResidentialAddress?: Address\n PostalAddress?: Address\n PostalAddressSameAsResidential: boolean\n Medicare?: Medicare\n Passport?: Passport\n DriversLicence?: DriversLicence\n}\n","import { z } from 'zod'\n\n/**\n * Schema for endpoint:\n * GET /api/bet-account/primary-account-holder-details/:betAccountNumber\n */\n\nexport const addressSchema = z.object({\n unitNumber: z.string().optional(),\n streetNumber: z.string(),\n streetName: z.string(),\n streetType: z.string(), // Road, Avenue, etc\n suburb: z.string(),\n postcode: z.string(),\n state: z.string(),\n country: z.union([z.literal('Australia'), z.string()]),\n})\n\nexport type AccountHolderAddress = z.infer\n\nconst phoneNumberSchema = z.object({\n countryCode: z.string(),\n areaCode: z.string(),\n phoneNumber: z.string(),\n})\n\nconst accountHolderSchema = z.object({\n betAccountHolderNumber: z.number(),\n nameDateOfBirthChanged: z.boolean(),\n nameDetails: z.object({\n title: z.string(),\n firstName: z.string(),\n middleName: z.string(),\n surname: z.string(),\n preferredName: z.string(),\n }),\n dateOfBirth: z.string(),\n contact: z.object({\n homePhone: phoneNumberSchema,\n workPhone: phoneNumberSchema,\n mobile: z.object({\n phoneNumber: z.string().optional(),\n }),\n email: z.string().email().or(z.literal('')),\n }),\n residentialAddress: addressSchema,\n postalAddress: addressSchema,\n postalAddressSameAsResidential: z.boolean(),\n primaryContact: z.boolean(),\n initialIDVerificationDetail: z.object({\n isIDVerified: z.boolean(),\n isNameVerified: z.boolean(),\n isDOBVerified: z.boolean(),\n isAddressVerified: z.boolean(),\n remainingAttempts: z.number(),\n }),\n canNameOrDOBChange: z.boolean(),\n canNameOrDOBChangeSpecified: z.boolean(),\n numberOfAddressChanges: z.number().gte(0),\n numberOfAddressChangesSpecified: z.boolean(),\n})\n\nexport const primaryAccountHolderDetailsSchema = z.object({\n primaryAccountHolderDetails: accountHolderSchema,\n})\n\nexport type AccountHolderDetails = z.infer\n\nexport type PrimaryAccountHolderDetails = z.infer\n","import { z } from 'zod'\nimport { addressSchema } from './primaryAccountHolderDetails'\n\n/**\n * Schema for endpoint:\n * POST /api/bet-account/verify\n */\n\nexport const verifyRequestSchema = z.object({\n accountNumber: z.number(),\n driversLicenceDetails: z\n .object({\n number: z.string(),\n cardNumber: z.string(),\n state: z.string(),\n })\n .optional(),\n residentialAddressDetails: addressSchema.optional(),\n previousResidentialAddressDetails: addressSchema.optional(),\n nameAndBirthDateDetails: z\n .object({\n birthDate: z.string(),\n firstName: z.string(),\n middleName: z.string().optional(),\n surname: z.string(),\n })\n .optional(),\n passportDetails: z\n .object({\n number: z.string(),\n passportCountry: z.string(),\n })\n .optional(),\n medicareDetails: z\n .object({\n number: z.string().length(10),\n reference: z.string().length(1),\n middleNameOnCard: z.string().nullable(),\n cardColour: z.string(),\n expiryDay: z.number().nullable(),\n expiryMonth: z.number(),\n expiryYear: z.number(),\n })\n .optional(),\n})\n\nexport type VerifyRequest = z.infer\n\nexport const verifyResponseSchema = z\n .object({\n accountNumber: z.number(),\n canNameOrDOBChange: z.boolean(),\n isIDVerified: z.boolean(),\n isNameVerified: z.boolean(),\n isAddressVerified: z.boolean(),\n isDOBVerified: z.boolean(),\n remainingAttempts: z.number(),\n addressChangeCount: z.number(),\n })\n .readonly()\n\nexport type VerifyResponse = z.infer\n","import { z } from 'zod'\n\nconst errorCodes = [\n 'invalid_body',\n 'unknown_account',\n 'no_primary_contact',\n 'already_verified',\n 'exhausted_verification_attempts',\n 'name_or_dob_change_disallowed',\n 'no_data_from_upstream',\n 'duplicate_account_holder',\n] as const\n\nexport const verifyErrorMessageSchema = z.object({\n error: z.string({\n description: 'The error message returned from the backend',\n }),\n code: z.enum(errorCodes, {\n description: 'The error code that describes why the error happened',\n }),\n})\n\nexport type VerifyErrorMessage = z.infer\n","export enum PlanSeq {\n Unknown = 0,\n Win = 1,\n Place = 7,\n WinAndPlace = 8,\n\n Exacta = 27,\n ExactaWithRovingBanker = 122,\n\n Quinella = 19,\n\n Trifecta = 11,\n TrifectaWithRovingBanker = 123,\n\n First4 = 35,\n First4WithRovingBanker = 124,\n\n Double = 43,\n MysteryDouble1 = 44,\n MysteryDouble2 = 45,\n MysteryDouble3 = 46,\n MysteryDouble4 = 47,\n MysteryDouble5 = 48,\n MysteryDouble6 = 49,\n MysteryDouble7 = 50,\n\n Quaddie = 51,\n MysteryQuaddie1 = 52,\n MysteryQuaddie2 = 53,\n MysteryQuaddie3 = 54,\n MysteryQuaddie4 = 55,\n MysteryQuaddie5 = 56,\n MysteryQuaddie6 = 57,\n MysteryQuaddie7 = 58,\n\n Mystery$3Combo = 60,\n Mystery$10Combo = 61,\n\n AllUp = 91,\n\n FavouriteNumbers = 64,\n\n Footo = 89,\n FootyTipping = 92,\n SportsTipping = 93,\n\n FOBRacing = 94,\n\n FOBSports = 110,\n}\n","import { z } from 'zod'\n\n// https://github.com/colinhacks/zod/issues/2241\nexport { ZodError } from 'zod'\n\nexport const initialDataSchema = z.object({\n paymentMethods: z\n .object({\n number: z.string(),\n issuerName: z.string(),\n formattedExpiryDate: z.string().regex(/^\\d{2}\\/\\d{2}/), //Expiry date in MM/YY format\n isDefault: z.boolean(),\n isExpired: z.boolean(),\n isDebitCard: z.boolean(),\n token: z.string(),\n bin: z.string(),\n lastFour: z.string(),\n paypalPayerId: z.string().optional(),\n paypalEmail: z.string().optional(),\n })\n .array(),\n depositLimits: z.object({\n minimum: z.number(),\n maximum: z.number(),\n }),\n clientToken: z.string(),\n clientTokenThreeDSecure: z.string(),\n canDeposit: z.boolean(),\n transactionId: z.string(),\n isSecurityCompatibleClient: z.boolean(),\n liabilityShiftExempt: z.boolean(),\n minimumLiabilityShiftThreshold: z.number(),\n})\n\nexport type InitialData = z.infer\nexport type PaymentMethod = InitialData['paymentMethods'][number]\n\nexport const paymentNonceSchema = z.object({\n token: z.string(),\n amount: z.number(),\n})\n\nexport type PaymentNonce = z.infer\n\nexport const paymentNonceResponseSchema = z.object({\n isSuccess: z.boolean(),\n message: z.string().nullable(),\n nonce: z.string(),\n})\n\nexport type PaymentNonceResponse = z.infer\n\nexport const nonTransactionalCreditCardResponse = z.object({\n isSuccess: z.boolean(),\n message: z.string().nullable(),\n failureCode: z.string().nullish(),\n failureMessage: z.string().nullish(),\n})\n\nexport type NonTransactionalCreditCardResponse = z.infer\n\nexport const depositResponseSchema = nonTransactionalCreditCardResponse.extend({\n transactionId: z.string().nullable(),\n})\n\nexport type DepositResponse = z.infer\n\nexport type SetDefaultCardRequest = {\n paymentMethodToken: string\n}\n\nexport type DeleteCardRequest = SetDefaultCardRequest\n\nexport const createPaymentMethodSchema = z.object({\n paymentMethodNonce: z.string(),\n expirationMonth: z.string(),\n expirationYear: z.string(),\n})\n\nexport type CreatePaymentMethodRequest = z.infer\n","export const issuerNames = ['VISA', 'MASTER_CARD'] as const\nexport type IssuerName = (typeof issuerNames)[number]\n\nexport type DepositSource =\n | 'ExistingPaymentMethod'\n | 'NewCreditCard'\n | 'PayPal'\n | 'ApplePay'\n | 'GooglePay'\n\nexport type PayPalAddress = {\n street: string\n city: string\n postCode: string\n state: string\n countryCode: string\n}\n\nexport type DepositRequest = {\n amount: number\n depositSource: DepositSource\n paymentMethodNonce: string\n transactionId: string\n deviceData: string | object\n}\n\nexport type PayPalDepositRequest = DepositRequest & {\n paymentMethodToken: string\n payPalEmail?: string\n payPalPayerId?: string\n firstName?: string\n lastName?: string\n payPalAddress?: PayPalAddress\n}\n\nexport type CreditCardDepositRequest = DepositRequest & {\n paymentMethodToken: string\n makeDefault: boolean\n forceThreeDSecureClient: boolean\n}\n\nexport type GooglePayDepositRequest = DepositRequest & {\n forceThreeDSecureClient: boolean\n}\n","import { RacePageDataTransferObject, ResultsPageDataTransferObject } from './types'\n\nexport const isRacePageDto = (\n value: RacePageDataTransferObject | ResultsPageDataTransferObject\n): value is RacePageDataTransferObject => {\n return value.Tag === 'Starters'\n}\n\nexport const isResultsPageDto = (\n value: RacePageDataTransferObject | ResultsPageDataTransferObject\n): value is ResultsPageDataTransferObject => {\n return value.Tag === 'Results'\n}\n","export const RacePageApiPath = `/api/meetings/{meetingId}/{meetingDate}/race/{raceNumber}`\n\nexport enum ScratchType {\n Standard = 'Standard',\n Late = 'Late',\n}\n\nexport const FixedOddsMarketCodes = {\n OddsEvens: 'EO',\n InsideOutside: 'IO',\n HeadToHead: 'H2H',\n HalfVsHalf: 'HVH',\n RunnerVsField: 'RVF',\n Concession: 'CON',\n FavouriteOut: 'FAV',\n StartingPrice: 'SP',\n} as const\n\nexport type MarketCodesType = (typeof FixedOddsMarketCodes)[keyof typeof FixedOddsMarketCodes]\n\nexport enum PoolStatus {\n Open,\n Closed,\n Interim,\n Released,\n Abandoned,\n}\n\nexport enum RaceStatus {\n Open = 'Open',\n Abandoned = 'Abandoned',\n Released = 'Released',\n Interim = 'Interim',\n Closed = 'Closed',\n}\n\nexport type RacePageDTO = RacePageDataTransferObject | ResultsPageDataTransferObject\n\nexport type AcceptorDTO = StarterDataTransferObject | FinisherDataTransferObject\n\nexport type PageDataTransferObject = (PageDataBaseTagStarters | PageDataBaseTagResults) &\n PageDataBase\n\ntype PageDataBaseTagStarters = { Tag: 'Starters' }\ntype PageDataBaseTagResults = { Tag: 'Results' }\ntype PageDataBase = {\n AvailablePools: PoolDataTransferObject[]\n MeetingInformation: MeetingInformationDataTransferObject\n FixedOddsMarkets: MarketDataTransferObject[]\n IsMultiInProgress: boolean\n NumberOfMultiLegs: number\n FirstLegsOfQuaddiesInMeeting: number[]\n RacecourseSeq: number\n}\n\nexport type RacePageDataTransferObject = PageDataBaseTagStarters &\n PageDataBase & {\n BetType: string\n AvailableBetTypes: BetTypeDataTransferObject[]\n RaceStarters: { RaceKey: RaceKey; Starters: StarterDataTransferObject[] }[]\n SpecialOffersInfo: SpecialOfferInfo[]\n GiddyUpRaceKey: string\n GiddyUpFixtureKey: string\n HasDoubleProvDivs: boolean\n HasQuaddieProvDivs: boolean\n SkyTvChannelId: 'SR1' | 'SR2'\n }\n\nexport type ResultsPageDataTransferObject = PageDataBaseTagResults &\n PageDataBase & {\n SimplePlacings: string\n Finishers: FinisherDataTransferObject[]\n RaceStatus: RaceStatus\n ProtestStatus: string\n NoveltyDividends: NoveltyDividendDataTransferObject[]\n AvailableSubstitutePools: SubstitutePoolDataTransferObject[]\n AvailableScratchings: ScratchingDataTransferObject[]\n RaceReplay: RaceReplayDataTransferObject\n GiddyUpRaceKey: string\n GiddyUpFixtureKey: string\n }\n\nexport type RaceReplayDataTransferObject = {\n HasVideo: boolean\n VideoKey: string\n RaceLocation: string\n Date: string\n}\n\nexport type ScratchingDataTransferObject = {\n StarterNumber: string\n StarterName: string\n IsFixedOdds: boolean\n ScratchedDateTime: string\n IsRaceResulted: boolean\n WinDivDeduction: number\n PlaceDivDeduction: number\n}\n\nexport type SubstitutePoolDataTransferObject = {\n RaceNumber: number\n Name: string\n Legs: number[]\n AvailableSubstitutesInPool: SubstituteDataTransferObject[]\n}\n\nexport type SubstituteDataTransferObject = {\n LegNumber: number\n StarterNumber: number\n Name: string\n IsWinner: boolean\n IsLoser: boolean\n IsAbandoned: boolean\n IsUnallocated: boolean\n}\n\nexport type NoveltyDividendDataTransferObject = {\n PoolName: string\n RaceNumbers: number[]\n Dividends: DividendDataTransferObject[]\n}\n\nexport type DividendDataTransferObject = {\n Name: string\n Dividend: string\n}\n\nexport type MeetingInformationDataTransferObject = {\n MeetingCode: string\n MeetingCodeText: 'Races' | 'Trots' | 'Dogs'\n MeetingId: string\n MeetingName: string\n MeetingDate: string\n GeoLocationCode: string\n NextRaceNumber: number\n PreviousRaceNumber: number\n HasNextRace: boolean\n HasPreviousRace: boolean\n TrackCondition: string\n WeatherAtLocation: string\n SelectedRace: RaceDataTransferObject\n Races: RaceDataTransferObject[]\n}\n\nexport type RaceDataTransferObject = {\n Key: string\n Distance: number\n Tips: string\n Tipster: string\n RaceNumber: number\n RaceName: string\n RaceTime: string\n RaceType: string\n /** @deprecated Use PayoutInformation instead */\n PayoutInfomation?: string\n PayoutInformation: string\n ProvDivUpdateTime: string\n FixedPlacesPaying: number\n IsFixedOddsRace: boolean\n IsSpAvailable: boolean\n FixedOddsInfo: FixedOddsRaceInformationDataTransferObject\n HasSpecials: boolean\n HasJackpots: boolean\n HasPlacePool: boolean\n // TODO: Change this to RaceStatus. Legacy code is treating this interchangeably between a string and an int\n RaceStatus: keyof typeof RaceStatus | (string & {})\n RaceStatusText: keyof typeof PoolStatus\n}\n\nexport type FixedOddsRaceInformationDataTransferObject = {\n BettingConditions: string\n BettingRules: string\n BettingTerms: string\n IsSuspended: boolean\n IsClosed: boolean\n IsResulted: boolean\n IsPlaceAvailable: boolean\n IsFixedOddsOnly: boolean\n IsRaceAvailable: boolean\n PayoutInformation: string\n MarketSequence: number\n}\n\nexport type MarketDataTransferObject = {\n FixtureDate: Date\n FixtureId: string\n ContestNumber: number\n IsResulted: boolean\n IsSuspended: boolean\n MarketName: string\n MarketSequence: number\n BettingConditions: string\n BettingRules: string\n Propositions: PropDataTransferObject[]\n MarketCode: MarketCodesType\n}\n\nexport type PropDataTransferObject = {\n PlayerNo: number\n Description: string\n Price: number | null\n IsAvailable: boolean\n IsScratched: boolean\n PriceToDisplay: string\n PropositionSequence: number\n Number?: number\n}\n\nexport type RaceKey = {\n Key: string\n RaceNumber: number\n Leg: number\n StartTime: string\n Tips: string\n Tipster: string\n Distance: string\n Name: string\n Pay: string\n PoolInfo: RaceKeyPoolInfoDataTransferObject\n AllUpPools: PoolDataTransferObject[]\n IsDoubleLeg: boolean\n IsQuaddieLeg: boolean\n}\n\nexport type RaceKeyPoolInfoDataTransferObject = {\n HasPlacePool: boolean\n HasQuinellaPool: boolean\n HasWinPool: boolean\n HasWinPlacePool: boolean\n}\n\nexport type SpecialOfferInfo = {\n Title: string\n Description: string\n MaxRewardAmount: number\n Sequence: number\n}\n\nexport type PoolDataTransferObject = {\n Name: string\n Total: string\n HasJackpot: boolean\n JackpotTotal: string\n IsAbandoned: boolean\n PoolingIcon: string\n RaceNumbers: number[]\n JurisdictionDescription: string\n}\n\nexport type BetTypeDataTransferObject = {\n Type: string\n DisplayName: string\n PoolCode: string\n HasJackpot: boolean\n IsAbandoned: boolean\n}\n\nexport type AcceptorDataTransferObject = {\n Type: string\n Number: number\n Name: string\n SilkImages: SilkImagesDataTransferObject\n IsScratched: boolean\n ScratchType: ScratchType\n HasFixedOdds: boolean\n IsScratchedToteAndFob: boolean\n IsFixedOddsStarter: boolean\n IsFavourite: boolean\n DisplayWinDividend: string\n DisplayPlaceDividend: string\n StarterPersonName: string\n TrainerName: string | null\n IsEmergency: boolean\n MeetingCode: string\n\n EmergencyNumber: number\n HasPlacePool: boolean\n Rating: number\n IsFormDataEmpty: boolean\n IsRiderChanged: boolean\n\n // Race\n JockeyWeight: string\n LastFour: string\n Barrier: number\n\n // Dog\n Box: number\n StripeCount: number\n\n // Trot\n Handicap: string\n}\n\nexport type StarterDataTransferObject = AcceptorDataTransferObject & {\n IsToteEnabled: boolean\n ProvDivPools: ProvDivPoolDataTransferObject[]\n MarketMovers: MarketMoversDataTransferObject[]\n HasMarketMovers: boolean\n /** @deprecated use FixedOddsInfo property */\n FixedOddsStarterInfo: FixedOddsStarterInfoDataTransferObject\n FixedOddsInfo?: FixedOddsStarterInfoDataTransferObject\n}\n\nexport type FinisherDataTransferObject = AcceptorDataTransferObject & {\n Placing: number\n IsCountBack: boolean\n ToteWinDiv: number\n TotePlaceDiv: number\n ToteWinProvDiv: number\n TotePlaceProvDiv: number\n DisplayWinDividend: string\n DisplayPlaceDividend: string\n ShouldDisplayPlaceDividend: boolean\n /** @deprecated use FixedOddsInfo property */\n FixedOddsFinisherInfo: FixedOddsFinisherInfoDataTransferObject\n FixedOddsInfo?: FixedOddsFinisherInfoDataTransferObject\n SpWinPrice: number\n}\n\nexport type FixedOddsAcceptorInfoDTO =\n | FixedOddsStarterInfoDataTransferObject\n | FixedOddsFinisherInfoDataTransferObject\n\nexport type FixedOddsInfoDataTransferObject = {\n DisplayPlaceDividend: string\n DisplayWinDividend: string\n WinDividendDeduction: number | null\n PlaceDividendDeduction: number | null\n IsScratched: boolean\n IsSuspended: boolean\n IsFavourite: boolean\n ScratchedTime: string | null\n PropositionSequence: number\n}\n\nexport type FixedOddsStarterInfoDataTransferObject = FixedOddsInfoDataTransferObject & {\n FixedFlucs: FixedFlucsDataTransferObject\n HasPlaceDividend: boolean\n HasPlacePool: boolean\n HasWinDividend: boolean\n PlayerNo: number\n SameRaceMultiPrices?: SameRaceMultiPrices\n}\n\nexport type FixedOddsFinisherInfoDataTransferObject = FixedOddsInfoDataTransferObject & {\n PlaceDiv: number\n ShouldDisplayPlaceDividend: boolean\n WinDiv: number\n}\n\nexport type MarketMoversDataTransferObject = {\n MinutesToAst: number\n Dividend: number | null\n}\n\nexport type ProvDivPoolDataTransferObject = {\n Name: string\n ProvDivs: ProvDivDataTransferObject[]\n QuaddieProvDivLegNums: number[]\n}\n\nexport type ProvDivDataTransferObject = {\n Div: string\n Outcome: number[]\n}\n\nexport type SilkImagesDataTransferObject = {\n small: SilkImageDataTransferObject\n large: SilkImageDataTransferObject\n larger: SilkImageDataTransferObject\n largest: SilkImageDataTransferObject\n}\n\nexport type SilkImageDataTransferObject = {\n url: string\n size: SilkImageSizeDataTransferObject\n}\n\nexport type SilkImageSizeDataTransferObject = {\n width: number\n height: number\n y: number\n}\n\nexport type SameRaceMultiPrices = {\n Win?: number\n Top2?: number\n Top3?: number\n Top4?: number\n IsFavourite: boolean\n SrmTopLimit?: number\n}\n\nexport type FixedFlucsDataTransferObject = {\n WinOpeningDividend: number\n WinHighDividend: number\n WinLowDividend: number\n WinDividends: number[]\n}\n","import { z } from 'zod'\n\nconst webAppVersionDetailsSchema = z.object({\n version: z.string(),\n releaseDate: z.string().datetime({ offset: true }),\n username: z.string(),\n gitRefName: z.string(),\n gitCommitSha: z.string(),\n gitPipelineId: z.string(),\n gitPipelineIid: z.string(),\n gitProject: z.string(),\n gitProjectUrl: z.string(),\n gitJobId: z.string(),\n})\n\nexport type WebAppVersionDetails = z.infer\n\nexport const webAppVersionsSchema = z.object({\n versions: z.record(z.string(), webAppVersionDetailsSchema),\n versionsByReleaseDate: z.array(z.string()),\n})\n\nexport type WebAppVersions = z.infer\n","import { z } from 'zod'\n\nexport const serverConfigurationSchema = z.object({\n serverVersion: z.string(),\n machineIdentifier: z.string(),\n serverEnvironment: z.string(),\n enableSentryIo: z.boolean(),\n enableJsConsoleLogging: z.boolean(),\n sentryIoUrl: z.string(),\n enableAnalytics: z.boolean(),\n isInternalRequest: z.boolean(),\n launchDarklyClientID: z.string(),\n eventNotificationApi: z.object({\n url: z.string(),\n region: z.string(),\n identityPoolId: z.string(),\n }),\n racingWAStreamUrl: z.string(),\n})\n\nexport type ServerConfiguration = z.infer\n","import { z } from 'zod'\n\nexport const addressSuggestionsSchema = z.array(\n z.object({\n id: z.string(),\n value: z.string(),\n })\n)\n\nexport type AddressSuggestions = z.infer\n\nexport const streetTypeSuggestionsSchema = z.array(\n z.object({\n value: z.string(),\n })\n)\n\nexport type StreetTypeSuggestions = z.infer\n\nexport const suburbStateSuggestionsSchema = z.array(\n z.object({\n value: z.string(),\n })\n)\n\nexport type SuburbStateSuggestions = z.infer\n\nexport const countryListSchema = z.array(\n z.object({\n code: z.string(),\n description: z.string(),\n })\n)\n\nexport type CountryList = z.infer\n\nexport type AddressMonikerId = string\n\nexport const findByMonikerSchema = z.object({\n UnitNumber: z.string().optional(),\n StreetNumber: z.string(),\n StreetName: z.string(),\n StreetType: z.string(),\n Suburb: z.string(),\n Postcode: z.string(),\n State: z.string(),\n Country: z.string(),\n})\n\nexport type FindByMoniker = z.infer\n","import type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport type { BetError, BetErrorType, BetSlipResponse } from '@mobi/betslip/types'\n\nexport function mapErrorResponseCodeToType(code: number | string | BetErrorType): BetErrorType {\n if (typeof code === 'number' || Number.isInteger(+code)) {\n return betErrorTypes[`${code}`] || 'Unspecified'\n }\n return isValidBetErrorType(code) ? code : 'Unspecified'\n}\n\nexport function getBetErrorType(response?: { error: BetError | null }): BetErrorType | undefined {\n if (!response || !response.error) return undefined\n return mapErrorResponseCodeToType(response.error.type)\n}\n\nexport function getMultibetErrorDescription(\n multiBetResponse: BetSlipResponse | undefined\n): BetSlipBetsState['multiBetError'] {\n if (!multiBetResponse || multiBetResponse.success) return null\n\n const betErrorType = getBetErrorType(multiBetResponse) || 'Unspecified'\n const errorMessage =\n MultiErrorMapping[betErrorType] || multiBetResponse.error?.message || 'An error has occurred'\n return { betErrorType, errorMessage }\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst betErrorTypes: Readonly> = {\n '0': 'Unspecified',\n '1': 'Unauthorized',\n '2': 'InvalidBet',\n '3': 'IncorrectNumberOfLegs',\n '4': 'InsufficientFunds',\n '5': 'PricesChanged',\n '6': 'HandicapChanged',\n '7': 'SpecialsError',\n '8': 'Closed',\n '10': 'BetPlacementFault',\n '11': 'DuplicateBonusBet',\n '12': 'InvalidBonusBet',\n}\n\nconst MultiErrorMapping: Partial> = {\n InvalidBonusBet: 'Error using Bonus Bet',\n DuplicateBonusBet: 'Bonus Bet can only be used once',\n}\n\nfunction isValidBetErrorType(errorType: string | BetErrorType): errorType is BetErrorType {\n return Object.values(betErrorTypes).includes(errorType as BetErrorType)\n}\n","import type {\n BetError,\n BetErrorType,\n BetPrices,\n BetSlipItem,\n BetSlipResponse,\n BetSpecialOffer,\n FobSelection,\n Selection,\n} from '@mobi/betslip/types'\nimport {\n isFobBetReceiptResponse,\n isFobSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport { isFatalErrorType } from '@mobi/betslip/helpers/state'\nimport { getBetErrorType, mapErrorResponseCodeToType } from './errors'\n\n// TODO: Straight copy from web, see if can be improved\n\nexport function mapResponse(\n currentItem: BetSlipItem,\n responses: BetSlipResponse[],\n multiBetResponse: BetSlipResponse | undefined,\n isRefreshing = false,\n ignorePriceChanges = false\n): BetSlipItem {\n const modifiedItem = { ...currentItem }\n const hasMultiBetResponse = !!multiBetResponse && !!multiBetResponse.legs\n\n if (hasMultiBetResponse) {\n const matchedLegInMultiBetResponse = ((multiBetResponse && multiBetResponse.legs) || []).find(\n leg => leg.id === modifiedItem.id\n )\n\n if (matchedLegInMultiBetResponse) {\n const matchedSingleInResponse = responses.find(\n res => res.id === matchedLegInMultiBetResponse.id\n )\n const matchedSingleInResponseError = getBetErrorType(matchedSingleInResponse)\n const matchedLegInMultiBetErrorType = getBetErrorType(matchedLegInMultiBetResponse)\n\n const newSelection = buildSelection(\n modifiedItem,\n ignorePriceChanges,\n matchedLegInMultiBetResponse.prices\n )\n\n const newMultiBetLegError = mapMultiBetError(matchedLegInMultiBetErrorType)\n const hasFatalError: boolean =\n isFatalErrorType(matchedLegInMultiBetErrorType) ||\n isFatalErrorType(matchedSingleInResponseError) ||\n isFatalErrorType(newMultiBetLegError?.betErrorType)\n\n modifiedItem.selection = newSelection\n modifiedItem.multiBetLegError = newMultiBetLegError || null\n modifiedItem.isInMulti = hasFatalError ? false : modifiedItem.isInMulti\n\n if (hasFatalError) {\n modifiedItem.betErrorType = matchedLegInMultiBetErrorType\n modifiedItem.errorMessage = matchedLegInMultiBetResponse?.error?.message || ''\n }\n }\n }\n\n const response = responses.find(res => res.id === modifiedItem.id)\n if (!response) {\n return modifiedItem\n }\n\n const responseLeg = response && response.legs && response.legs[0]\n\n modifiedItem.selection = buildSelection(\n modifiedItem,\n ignorePriceChanges,\n responseLeg && responseLeg.prices\n )\n\n modifiedItem.specialOffers = updateSpecialOffersFromResponse(\n modifiedItem,\n response,\n isRefreshing\n ) as BetSpecialOffer[]\n\n modifiedItem.isSuperPickAvailable =\n modifiedItem.specialOffers && modifiedItem.specialOffers.length > 0\n\n modifiedItem.selectedSuperPickOffer =\n (modifiedItem.selectedSuperPickOffer &&\n modifiedItem.specialOffers &&\n modifiedItem.specialOffers.find(\n s =>\n s.specialSeq ===\n (modifiedItem.selectedSuperPickOffer && modifiedItem.selectedSuperPickOffer.specialSeq)\n )) ||\n null\n\n if (!response.success) {\n const betErrorType = getBetErrorType(response)\n const shouldClearSpecials = betErrorType && betErrorType === 'SpecialsError'\n\n modifiedItem.betErrorType = betErrorType\n modifiedItem.errorMessage = getErrorMessage(betErrorType, response.error)\n modifiedItem.investment = getNewInvestmentAfterResponse(modifiedItem, betErrorType)\n modifiedItem.selectedSuperPickOffer = shouldClearSpecials\n ? null\n : modifiedItem.selectedSuperPickOffer\n modifiedItem.isSuperPickAvailable = shouldClearSpecials ? false : true\n\n return modifiedItem\n }\n\n // Clear existing errors on successful response\n modifiedItem.errorMessage = ''\n modifiedItem.betErrorType = undefined\n\n // Check for receipt\n const receiptItem = response.receipt\n\n if (receiptItem) {\n const specialOffers =\n !isToteSelection(modifiedItem.selection) && isFobBetReceiptResponse(receiptItem)\n ? receiptItem.specialOffers\n : null\n\n modifiedItem.investment = getNewInvestmentAfterResponse(modifiedItem)\n modifiedItem.receipt = specialOffers ? { ...receiptItem, specialOffers } : receiptItem\n }\n\n return modifiedItem\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction updateSpecialOffersFromResponse(\n modifiedItem: BetSlipItem,\n response: BetSlipResponse,\n isRefreshing?: boolean\n) {\n // Refresh will update all specials\n if (isRefreshing) {\n return response.specialOffers || []\n }\n\n // Propose/Commit will only update selected specials\n const hasSelectedSpecialOfferOnResponse =\n modifiedItem.selectedSuperPickOffer && response.specialOffers && response.specialOffers[0]\n\n if (hasSelectedSpecialOfferOnResponse) {\n return modifiedItem.specialOffers.map(specialOffer =>\n specialOffer.specialSeq === (response.specialOffers && response.specialOffers[0].specialSeq)\n ? response.specialOffers && response.specialOffers[0]\n : specialOffer\n )\n }\n return modifiedItem.specialOffers\n}\n\nfunction buildSelection(\n item: BetSlipItem,\n ignorePriceChanges: boolean,\n responsePrices?: BetPrices\n): Selection {\n const selection = item.selection\n\n if (isFobSelection(selection) && !isStartingPriceSelection(selection)) {\n const newSelection: FobSelection = { ...selection }\n\n // * ignorePriceChanges: push prices are disgarded during bet confirmation/placement, so\n // take price changes on propose/confirm actions (but not refresh)\n // * or, if we haven't received a push price (eg. no price change since subscription)\n // then take this price\n const canOverwritePrices = !ignorePriceChanges || selection.priceSource !== 'push'\n\n if (canOverwritePrices && responsePrices) {\n if (responsePrices.placePrice) {\n newSelection.placePrice = responsePrices.placePrice\n }\n if (responsePrices.winPrice) {\n newSelection.winPrice = responsePrices.winPrice\n }\n newSelection.priceSource = 'api'\n }\n return newSelection\n } else {\n return item.selection\n }\n}\n\nfunction getErrorMessage(betErrorType?: BetErrorType | null, resError?: BetError | null): string {\n const SingleErrorMapping: Partial> = {\n HandicapChanged: 'Handicap changed. Bet is no longer valid.',\n InvalidBonusBet: 'Error using Bonus Bet',\n DuplicateBonusBet: 'Bonus Bet can only be used once',\n }\n\n if (!betErrorType) return ''\n return SingleErrorMapping[betErrorType] || resError?.message || 'Unknown error occurred'\n}\n\nfunction getNewInvestmentAfterResponse(\n item: BetSlipItem,\n errorType?: BetErrorType\n): BetSlipBetsState['items'][0]['investment'] {\n const shouldResetInvestment =\n !!item.receipt || isFatalErrorType(errorType) || errorType == 'InvalidBonusBet'\n return {\n win: {\n value: shouldResetInvestment || !item.investment.win ? 0 : item.investment.win.value,\n isBonusBet: shouldResetInvestment ? false : item.investment.win.isBonusBet,\n },\n place: {\n value: shouldResetInvestment || !item.investment.place ? 0 : item.investment.place.value,\n isBonusBet: shouldResetInvestment ? false : item.investment.place.isBonusBet,\n },\n bonusBet: shouldResetInvestment ? undefined : item.investment.bonusBet,\n }\n}\n\nfunction mapMultiBetError(\n betErrorType: BetErrorType | string | undefined\n): { betErrorType: BetErrorType; errorMessage: string } | undefined {\n if (betErrorType == undefined) return undefined\n const betError = mapErrorResponseCodeToType(betErrorType)\n\n if (isFatalErrorType(betError)) {\n return { betErrorType: betError, errorMessage: betError }\n }\n\n if (betError === 'PricesChanged') {\n return { betErrorType: betError, errorMessage: '' }\n }\n\n return { betErrorType: 'Unspecified', errorMessage: 'Invalid Leg' }\n}\n","import type { Draft } from '@reduxjs/toolkit'\nimport { Currency } from '@mobi/utils/money'\nimport type { FobSelection, InvestmentType, MultiInvestmentKey } from '@mobi/betslip/types'\nimport type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport { MAX_INVESTMENT_VALUE, MIN_INVESTMENT_VALUE } from '@mobi/betslip/helpers/constants'\nimport { calculateMultiReturn } from '@mobi/betslip/helpers/calculator/multis'\n\nexport function updateItemInvestment({\n investmentType,\n value,\n betId,\n state,\n}: UpdateItemInvestmentArgs) {\n const newValue = getValidBetAmount(new Currency(value).value)\n\n if (investmentType === 'Multi') {\n state.multiInvestment.value = newValue\n return\n }\n\n if (investmentType === 'MultiReverseStake') {\n const newStake = new Currency(value).divide(\n calculateMultiReturn(state.items, { shouldRound: true })\n )\n state.multiInvestment.value = newStake.value < 0.5 ? 0.5 : newStake.value\n return\n }\n\n if (multiComboInvestmentTypes.includes(investmentType)) {\n state.multiInvestment[betId as MultiInvestmentKey] = newValue\n }\n\n const selectedItem = state.items.find(item => item.id === betId)\n if (!selectedItem) return\n\n if (investmentType === 'ReverseStake') {\n const newStake = new Currency(value).divide((selectedItem.selection as FobSelection).winPrice)\n selectedItem.investment.win.value = newStake.value < 0.5 ? 0.5 : newStake.value\n return\n }\n\n if (investmentType === 'Win') {\n selectedItem.investment.win.value = newValue\n\n if (selectedItem.isEachWay) {\n selectedItem.investment.place.value = newValue\n }\n }\n\n if (investmentType === 'Place') {\n selectedItem.investment.place.value = newValue\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst multiComboInvestmentTypes: InvestmentType[] = [\n 'MultiComboDoubles',\n 'MultiComboPick4',\n 'MultiComboPick5',\n 'MultiComboSingles',\n 'MultiComboTrebles',\n]\n\nfunction getValidBetAmount(value: number): number {\n let newValue = new Currency(value).value\n\n if (newValue >= 0.01 && newValue < MIN_INVESTMENT_VALUE) {\n newValue = MIN_INVESTMENT_VALUE\n }\n if (newValue > MAX_INVESTMENT_VALUE) {\n newValue = MAX_INVESTMENT_VALUE\n }\n return newValue\n}\n\n// =====\n// Types\n// =====\n\ntype UpdateItemInvestmentArgs = {\n betId: string\n state: Draft\n investmentType: InvestmentType\n value: string\n}\n","import type { BetSlipResponse } from '@mobi/betslip/types'\n\nexport function getMultiBetResponse(responses: T[]): T | undefined {\n return responses?.find?.(res => !!res.legs && res.legs.length > 1)\n}\n","import { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport type {\n BetSlipItem,\n BetErrorType,\n MultiInvestment,\n InvestmentType,\n FobBetReceiptResponse,\n SportsDetails,\n FobSportsSelection,\n} from '@mobi/betslip/types'\nimport {\n isFobSportsSelection,\n isFobSelection,\n isFobSportsDetails,\n isAllUpSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport {\n confirmAllBets,\n proposeAllBets,\n refreshAllBets,\n} from '@mobi/betslip/Store/Workflow/asyncActions'\nimport { mapResponse } from './helpers/apiResponse/mapItemsWithResponse'\nimport { updateItemInvestment } from './helpers/investment/updateItem'\nimport { getMultiBetResponse } from './helpers/apiResponse/multi'\nimport { getMultibetErrorDescription } from './helpers/apiResponse/errors'\nimport {\n getBetsInMulti,\n getMultiLegEventOrRaceKey,\n hasNoFatalErrors,\n hasTooFewMultiLegs,\n hasTooManyMultiLegs,\n isSpecialUsed,\n} from '@mobi/betslip/helpers/state'\n\nexport const defaultBetSlipBetsState: BetSlipBetsState = {\n items: [],\n isSingleExpanded: true,\n isMultiExpanded: true,\n multiBetError: null,\n multiInvestment: {\n value: 0,\n f1: 0,\n f2: 0,\n f3: 0,\n f4: 0,\n f5: 0,\n bonusBetId: null,\n isBonusBet: false,\n },\n multiReceipt: undefined,\n}\n\nconst betsSlice = createSlice({\n name: 'betslip/bets',\n initialState: defaultBetSlipBetsState,\n reducers: {\n addItemsToBetSlip(state, { payload: items }: PayloadAction) {\n let itemIdsToDeselectIsInMulti: string[] = []\n const hasItemsEligibleForMulti = items.some(item => item.isInMulti)\n\n if (hasItemsEligibleForMulti) {\n const newMultiItems = items.flatMap(item => (item.isInMulti ? [item] : []))\n const currMultiKey = getBetsInMulti(state.items).map(item =>\n getMultiLegEventOrRaceKey(item.selectionDetails)\n )\n itemIdsToDeselectIsInMulti = newMultiItems.flatMap(item =>\n currMultiKey.includes(getMultiLegEventOrRaceKey(item.selectionDetails)) ? [item.id] : []\n )\n }\n if (itemIdsToDeselectIsInMulti.length > 0) {\n items.forEach(item => {\n if (itemIdsToDeselectIsInMulti.includes(item.id)) {\n item.isInMulti = false\n }\n })\n }\n state.items.push(...items)\n },\n\n clearAllBetSlipItems(state) {\n state.items = []\n state.multiBetError = null\n state.multiInvestment = { ...defaultBetSlipBetsState.multiInvestment }\n },\n\n removeItemFromBetSlipById(state, { payload }: PayloadAction) {\n state.items = state.items.filter(item => {\n if (payload.id) {\n return item.id !== payload.id\n } else if (payload.externalBetId) {\n return (\n isFobSportsSelection(item.selection) &&\n item.selection.externalBetId !== payload.externalBetId\n )\n }\n return true\n })\n if (hasTooFewMultiLegs(state.items) || hasTooManyMultiLegs(state.items)) {\n state.multiInvestment = { ...defaultBetSlipBetsState.multiInvestment }\n }\n },\n\n setInvestmentAmount(state, { payload }: SetInvestmentAmountArgs) {\n const { investmentType, itemId, value } = payload\n updateItemInvestment({ investmentType, value, state, betId: itemId })\n },\n\n setSelectedSpecialOffer(\n state,\n {\n payload,\n }: PayloadAction<{\n id: BetSlipItem['id']\n specialOffer: BetSlipItem['selectedSuperPickOffer']\n }>\n ) {\n const itemToUpdate = state.items.find(item => item.id === payload.id)\n if (itemToUpdate) {\n itemToUpdate.selectedSuperPickOffer =\n itemToUpdate.selectedSuperPickOffer?.specialSeq === payload.specialOffer?.specialSeq\n ? null\n : payload.specialOffer\n\n if (isSpecialUsed(itemToUpdate, state.items)) {\n state.items.map(item => {\n if (item.id === payload.id) return item\n if (\n item.selectedSuperPickOffer?.tokenId === itemToUpdate.selectedSuperPickOffer?.tokenId\n ) {\n item.selectedSuperPickOffer = null\n }\n return item\n })\n }\n }\n },\n\n clearAllReceiptsFromItems(state) {\n state.items.forEach(item => {\n item.receipt = undefined\n item.investment = {\n bonusBet: undefined,\n win: {\n value: 0,\n isBonusBet: false,\n isBonusCash: false,\n },\n place: {\n value: 0,\n isBonusBet: false,\n isBonusCash: false,\n },\n }\n })\n\n state.multiBetError = null\n state.multiReceipt = undefined\n state.multiInvestment.value = state.multiInvestment.isBonusBet\n ? 0\n : state.multiInvestment.value\n state.multiInvestment.bonusBetId = null\n state.multiInvestment.isBonusBet = false\n },\n\n removeItemsWithReceipt(state) {\n state.items = state.items.filter(item => !item.receipt)\n\n const hasMultiBeenPlaced = !!state.multiReceipt\n if (hasMultiBeenPlaced) {\n state.items = state.items.filter(item => !item.isInMulti)\n state.multiReceipt = undefined\n state.multiInvestment = { ...defaultBetSlipBetsState.multiInvestment }\n }\n },\n\n removeItemsWithFatalError(state) {\n state.items = state.items.filter(hasNoFatalErrors)\n },\n\n updateBetSlipFobRacingItemPrice(\n state,\n action: PayloadAction<{\n propositionId: number\n winPrice: number | null\n placePrice: number | null\n }>\n ) {\n const { propositionId, winPrice: newWinPrice, placePrice: newPlacePrice } = action.payload\n state.items.map(item => {\n if (\n isFobSelection(item.selection) &&\n item.selection.propositionSeq === propositionId.toString()\n ) {\n if (newWinPrice) item.selection.winPrice = newWinPrice\n item.selection.placePrice = newPlacePrice\n }\n })\n },\n\n updateBetSlipSportsItemPrice(\n state,\n action: PayloadAction<\n {\n winPrice: number | null\n } & Pick\n >\n ) {\n const { winPrice, eventId, marketId, outcomeId } = action.payload\n if (!winPrice) return\n\n state.items.map(item => {\n if (!isFobSportsDetails(item.selectionDetails)) return\n\n if (\n isFobSportsSelection(item.selection) &&\n item.selectionDetails.eventId === eventId &&\n item.selectionDetails.marketId === marketId &&\n item.selectionDetails.outcomeId === outcomeId\n ) {\n item.selection.winPrice = winPrice\n }\n })\n },\n\n toggleIsItemInMulti(\n state,\n { payload }: PayloadAction & { isInGroup?: boolean }>\n ) {\n const item = state.items.find(item => item.id === payload.id)\n if (!item) return\n\n const isToggleItemNowInMulti = !item.isInMulti\n\n if (isToggleItemNowInMulti && payload.isInGroup) {\n const groupKey = getMultiLegEventOrRaceKey(item.selectionDetails)\n const multiItems = getBetsInMulti(state.items)\n\n multiItems.map(item => {\n if (item.id === payload.id) return\n if (getMultiLegEventOrRaceKey(item.selectionDetails) === groupKey) {\n item.isInMulti = false\n }\n })\n }\n\n item.isInMulti = isToggleItemNowInMulti\n\n if (hasTooFewMultiLegs(state.items) || hasTooManyMultiLegs(state.items)) {\n state.multiInvestment = defaultBetSlipBetsState.multiInvestment\n }\n },\n\n toggleMultiItemBetLegType(state, { payload }: PayloadAction>) {\n const item = state.items.find(item => item.id === payload.id)\n if (!item) return\n item.multiLegBetType = item.multiLegBetType === 'W' ? 'P' : 'W'\n },\n\n toggleAllUpFormula(\n state,\n { payload }: PayloadAction & { formula: number }>\n ) {\n const selectedBet = state.items.find(item => item.id === payload.id)\n if (!selectedBet || !isAllUpSelection(selectedBet.selection)) return\n\n selectedBet.selection.formulas.map(formula => {\n if (formula.formula === payload.formula) {\n formula.isSelected = !formula.isSelected\n return formula\n }\n return formula\n })\n\n if (selectedBet.selection.formulas.every(formula => !formula.isSelected)) {\n selectedBet.selection.formulas[0].isSelected = true\n }\n },\n\n toggleIsEachWay(\n state,\n { payload }: PayloadAction & { isEachWay: boolean }>\n ) {\n const item = state.items.find(item => item.id === payload.id)\n if (!item) return\n item.isEachWay = payload.isEachWay\n item.investment.place.value =\n payload.isEachWay && item.investment.win.value ? item.investment.win.value : 0\n },\n },\n extraReducers: builder => {\n // =======\n // Refresh\n // =======\n builder.addCase(refreshAllBets.fulfilled, (state, action) => {\n const data = action.payload\n const multiBetResponse = getMultiBetResponse(data)\n const newItems = state.items.map(item => {\n return mapResponse(item, data, multiBetResponse, true, true)\n })\n\n const multiBetError = getMultibetErrorDescription(multiBetResponse)\n state.items = newItems\n state.multiBetError = multiBetError\n })\n\n // =======\n // Propose\n // =======\n builder.addCase(proposeAllBets.fulfilled, (state, action) => {\n const data = action.payload\n const multiBetResponse = getMultiBetResponse(data)\n const newItems = state.items.map(item => mapResponse(item, data, multiBetResponse))\n const multiBetError = getMultibetErrorDescription(multiBetResponse)\n\n state.items = newItems\n state.multiBetError = multiBetError\n state.multiInvestment =\n multiBetError && multiBetError.betErrorType === 'Unspecified'\n ? defaultBetSlipBetsState.multiInvestment\n : state.multiInvestment\n })\n\n // =======\n // Confirm\n // =======\n builder.addCase(confirmAllBets.fulfilled, (state, action) => {\n const data = action.payload\n const multiBetResponse = getMultiBetResponse(data)\n const newItems = state.items.map(item => mapResponse(item, data, multiBetResponse))\n const multiBetError = getMultibetErrorDescription(multiBetResponse)\n\n state.items = newItems\n state.multiBetError = multiBetError\n state.multiInvestment =\n multiBetError && multiBetError.betErrorType === 'Unspecified'\n ? defaultBetSlipBetsState.multiInvestment\n : state.multiInvestment\n\n let newMultiReceipt: FobBetReceiptResponse | undefined = undefined\n if (multiBetResponse && multiBetResponse.success) {\n newMultiReceipt = multiBetResponse.receipt as FobBetReceiptResponse\n }\n\n const singleBetCampaignActivatedInd = newItems.some(x =>\n x.receipt ? !!x.receipt.campaignActivatedInd : false\n )\n const multiBetCampaignActivatedInd = newMultiReceipt && newMultiReceipt.campaignActivatedInd\n if (singleBetCampaignActivatedInd || multiBetCampaignActivatedInd) {\n // fetchCampaignsAsync()\n }\n\n state.multiReceipt = newMultiReceipt\n })\n },\n})\n\n// =============\n// Slice Exports\n// =============\n\nexport const {\n addItemsToBetSlip,\n clearAllBetSlipItems,\n removeItemFromBetSlipById,\n setInvestmentAmount,\n setSelectedSpecialOffer,\n clearAllReceiptsFromItems,\n removeItemsWithReceipt,\n updateBetSlipFobRacingItemPrice,\n updateBetSlipSportsItemPrice,\n removeItemsWithFatalError,\n toggleIsItemInMulti,\n toggleMultiItemBetLegType,\n toggleAllUpFormula,\n toggleIsEachWay,\n} = betsSlice.actions\n\nconst allowPersistForKeys: (keyof BetSlipBetsState)[] = ['items']\n\nexport default persistReducer(\n {\n version: 1,\n key: 'betslip/bets',\n storage,\n debug: !PRODUCTION,\n whitelist: allowPersistForKeys,\n },\n betsSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface BetSlipBetsState {\n items: BetSlipItem[]\n\n isMultiExpanded: boolean\n isSingleExpanded: boolean\n multiBetError: { betErrorType: BetErrorType; errorMessage: string } | null\n multiInvestment: MultiInvestment\n multiReceipt?: FobBetReceiptResponse\n}\n\ntype SetInvestmentAmountArgs = PayloadAction<{\n itemId: BetSlipItem['id']\n investmentType: InvestmentType\n value: string\n}>\n\ntype BetSlipOrSportId = Partial & Pick>\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nexport const initialState: BetSlipConfigState = {\n presetKeypadAmounts: [\n { default: 5, user: null },\n { default: 10, user: null },\n { default: 20, user: null },\n ],\n}\n\nconst configSlice = createSlice({\n name: 'betslip/config',\n initialState,\n reducers: {\n setUserPresetDenomination(\n state,\n { payload }: PayloadAction<{ index: number; value: number | null }[]>\n ) {\n payload.forEach(({ index, value }) => {\n const preset = state.presetKeypadAmounts[index]\n if (preset && value !== null) {\n preset.user = value\n }\n })\n },\n },\n})\n\n// =============\n// Slice Exports\n// =============\n\nexport const { setUserPresetDenomination } = configSlice.actions\n\nconst allowPersistForKeys: (keyof BetSlipConfigState)[] = ['presetKeypadAmounts']\n\nexport default persistReducer(\n {\n version: 1,\n key: 'betslip/config',\n storage,\n debug: !PRODUCTION,\n whitelist: allowPersistForKeys,\n },\n configSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport type BetSlipConfigState = {\n presetKeypadAmounts: [\n { default: number; user: number | null },\n { default: number; user: number | null },\n { default: number; user: number | null },\n ]\n}\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport type { AppState } from '@mobi/betslip/Store'\nimport { BetSlipErrorResponse, BetSlipResponse } from '@mobi/betslip/types'\n\nexport const proposeAllBets = createAsyncThunk<\n BetSlipResponse[],\n void,\n { state: AppState; rejectValue: BetSlipErrorResponse }\n>('betslip/proposeAllBets', async (_, thunkAPI) => {\n const hostHelpers = getHostHelpers()\n const response = await hostHelpers.postAllBetsToServer(\n 'propose',\n thunkAPI.getState().betslip.bets\n )\n\n return response\n})\n\nexport const confirmAllBets = createAsyncThunk<\n BetSlipResponse[],\n void,\n { state: AppState; rejectValue: BetSlipErrorResponse }\n>('betslip/confirmAllBets', async (_, thunkAPI) => {\n const hostHelpers = getHostHelpers()\n const response = await hostHelpers.postAllBetsToServer(\n 'confirm',\n thunkAPI.getState().betslip.bets\n )\n\n return response\n})\n\nexport const refreshAllBets = createAsyncThunk<\n BetSlipResponse[],\n void,\n { state: AppState; rejectValue: BetSlipErrorResponse }\n>('betslip/refreshAllBets', async (_, thunkAPI) => {\n const hostHelpers = getHostHelpers()\n const betsState = thunkAPI.getState().betslip.bets\n\n if (betsState.items.length === 0) return []\n const response = await hostHelpers.postAllBetsToServer('refresh', betsState)\n\n return response\n})\n","import type { Draft } from '@reduxjs/toolkit'\nimport type { BetSlipErrorResponse } from '@mobi/betslip/types'\nimport { mapErrorResponseCodeToType } from '@mobi/betslip/Store/Bets/helpers/apiResponse/errors'\nimport type { BetSlipWorkflowState } from '..'\n\nexport function handleSettingServerCallRejectionState(\n state: Draft,\n errorResponse: BetSlipErrorResponse\n) {\n state.isBusy = false\n state.currentStatus = 'ready'\n\n if (mapErrorResponseCodeToType(errorResponse.code) === 'Unauthorized') {\n return\n }\n state.apiErrorMessage =\n errorResponse.response && errorResponse.response.message\n ? errorResponse.response.message\n : 'Unable to verify bet(s) - Please try again'\n}\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit'\nimport { Currency } from '@mobi/utils/money'\nimport type { BetSlipErrorResponse, InvestmentType } from '@mobi/betslip/types'\nimport { determineValueFromKeypad } from './helpers/determineValueFromKeypad'\nimport { refreshAllBets, confirmAllBets, proposeAllBets } from './asyncActions'\nimport { MAX_INVESTMENT_VALUE } from '@mobi/betslip/helpers/constants'\nimport { handleSettingServerCallRejectionState } from './helpers/stateSetters'\n\nexport const initialState: BetSlipWorkflowState = {\n activeInvestment: null,\n keypadActiveValue: null,\n isBusy: false,\n currentStatus: 'ready',\n apiErrorMessage: null,\n hostAccountBalance: null,\n isBettingDisabled: false,\n isHostUserLoggedIn: false,\n canShowInducements: false,\n visibleBettingSection: 'Singles',\n desiredBettingSection: null,\n}\n\nconst workflowSlice = createSlice({\n name: 'betslip/workflow',\n initialState,\n reducers: {\n setActiveInvestment(state, { payload }: PayloadAction) {\n state.keypadActiveValue = null\n state.activeInvestment = payload\n },\n\n setDesiredBettingSection(state, { payload }: PayloadAction<'Singles' | 'Multi' | null>) {\n state.desiredBettingSection = payload\n },\n\n setKeypadActiveValue(\n state,\n { payload: { keypadInput, isInitValue } }: PayloadAction\n ) {\n if (isInitValue) {\n const stringValue = new Currency(keypadInput.value).toString()\n const [dollars, cents] = stringValue.split('.')\n state.keypadActiveValue = new Currency(cents).value > 0 ? stringValue : dollars\n return\n }\n const currentValue = state.keypadActiveValue\n const newValue = determineValueFromKeypad({ keypadInput, currentValue })\n if (new Currency(newValue).value > MAX_INVESTMENT_VALUE) return\n state.keypadActiveValue = newValue\n },\n\n setWorkflowStatusToReady(state) {\n state.currentStatus = 'ready'\n state.apiErrorMessage = null\n },\n\n setBettingDisabledStatus(state, { payload }: PayloadAction) {\n if (payload) state.currentStatus = 'ready'\n state.isBettingDisabled = payload\n },\n\n setBetSlipUserAccountBalanceSync: (state, { payload }: PayloadAction) => {\n state.hostAccountBalance = payload\n },\n\n setBetSlipIsUserLoggedInSync(state, { payload }: PayloadAction) {\n state.isHostUserLoggedIn = payload\n },\n\n setBetSlipCanShowInducementsSync(state, { payload }: PayloadAction) {\n state.canShowInducements = payload\n },\n\n setVisibleBettingSection(\n state,\n { payload }: PayloadAction\n ) {\n state.visibleBettingSection = payload\n },\n },\n\n extraReducers: builder => {\n // ============\n // Propose Bets\n // ============\n builder.addCase(proposeAllBets.pending, state => {\n state.isBusy = true\n state.apiErrorMessage = null\n state.activeInvestment = null\n })\n\n builder.addCase(proposeAllBets.fulfilled, state => {\n state.isBusy = false\n state.currentStatus = 'proposed'\n })\n\n builder.addCase(proposeAllBets.rejected, (state, action) => {\n handleSettingServerCallRejectionState(state, action.payload as BetSlipErrorResponse)\n })\n\n // ============\n // Confirm Bets\n // ============\n builder.addCase(confirmAllBets.pending, state => {\n state.isBusy = true\n state.apiErrorMessage = null\n })\n\n builder.addCase(confirmAllBets.fulfilled, state => {\n state.isBusy = false\n state.currentStatus = 'bets-placed'\n })\n\n builder.addCase(confirmAllBets.rejected, (state, action) => {\n handleSettingServerCallRejectionState(state, action.payload as BetSlipErrorResponse)\n })\n\n // ============\n // Refresh Bets\n // ============\n builder.addCase(refreshAllBets.pending, state => {\n state.isBusy = true\n state.apiErrorMessage = null\n })\n\n builder.addCase(refreshAllBets.fulfilled, state => {\n state.isBusy = false\n })\n\n builder.addCase(refreshAllBets.rejected, (state, action) => {\n handleSettingServerCallRejectionState(state, action.payload as BetSlipErrorResponse)\n })\n },\n})\n\nexport const {\n setActiveInvestment,\n setKeypadActiveValue,\n setWorkflowStatusToReady,\n setBettingDisabledStatus,\n setBetSlipUserAccountBalanceSync,\n setBetSlipIsUserLoggedInSync,\n setBetSlipCanShowInducementsSync,\n setVisibleBettingSection,\n setDesiredBettingSection,\n} = workflowSlice.actions\n\nexport default workflowSlice.reducer\n\n// =====\n// Types\n// =====\n\nexport type BetSlipWorkflowState = {\n activeInvestment: ActiveInvestment\n keypadActiveValue: string | null\n isBusy: boolean\n currentStatus: WorkflowStep\n apiErrorMessage: string | null\n hostAccountBalance: number | null\n isBettingDisabled: boolean\n isHostUserLoggedIn: boolean\n visibleBettingSection: BettingSection\n desiredBettingSection: BettingSection | null\n canShowInducements: boolean\n}\n\nexport type BettingSection = 'Singles' | 'Multi'\n\nexport type KeypadInput =\n | { type: 'denomation'; value: number }\n | { type: 'numeric'; value: string }\n | { type: 'action'; value: 'clear' | 'del' | '.' }\n\ntype WorkflowStep = 'ready' | 'proposed' | 'bets-placed'\ntype ActiveInvestment = { itemId: string; investmentType: InvestmentType } | null\ntype SetKeypadActiveValueArgs = { keypadInput: KeypadInput; isInitValue?: boolean }\n","import { Currency } from '@mobi/utils/money'\nimport type { KeypadInput } from '@mobi/betslip/Store/Workflow'\n\nexport function determineValueFromKeypad({ keypadInput, currentValue }: Args): string {\n const currValue = currentValue || '0'\n switch (keypadInput.type) {\n case 'action': {\n if (keypadInput.value === 'clear') return '0'\n if (keypadInput.value === 'del') return currValue.slice(0, -1).toString()\n if (keypadInput.value === '.') {\n return currValue.includes('.') ? currValue : `${currValue}.`\n }\n break\n }\n\n case 'numeric': {\n if (currValue.includes('.')) {\n const decimalValues = currValue.split('.')[1]\n return decimalValues.length >= 2 ? currValue : `${currValue}${keypadInput.value}`\n }\n return `${new Currency(currValue).value === 0 ? '' : currValue}${keypadInput.value}`\n }\n\n case 'denomation': {\n const [dollars, cents] = new Currency(currValue).add(keypadInput.value).toString().split('.')\n return `${dollars}${new Currency(cents).value > 0 ? '.' + cents : ''}`\n }\n }\n\n return '0'\n}\n\n// =====\n// Types\n// =====\n\ntype Args = { keypadInput: KeypadInput; currentValue: string | null }\n","import { Currency } from '@mobi/utils/money'\nimport type { BetLegType, BetSpecialOffer } from '@mobi/betslip/types'\n\nexport function determineLegTypeFromInvestments(\n winInvestment: number,\n placeInvestment: number\n): BetLegType {\n if (winInvestment > 0 && placeInvestment === 0) return 'W'\n if (winInvestment === 0 && placeInvestment > 0) return 'P'\n if (winInvestment > 0 && placeInvestment > 0) return 'WP'\n return 'W'\n}\n\nexport function calculateBoosts(selectedSuperPickOffer: BetSpecialOffer | null) {\n let winBoost = 0\n let placeBoost = 0\n if (selectedSuperPickOffer) {\n const elementWithPriceIncrease = selectedSuperPickOffer.elements?.find(\n element => element.priceIncrease !== null\n )\n if (elementWithPriceIncrease) {\n const priceIncrease = elementWithPriceIncrease.priceIncrease\n winBoost = priceIncrease?.win || 0\n placeBoost = priceIncrease?.place || 0\n }\n }\n return [winBoost, placeBoost]\n}\n\nexport function roundDownDecimal(value: number) {\n return new Currency(Math.floor(value * 100) / 100).value\n}\n","import { Currency } from '@mobi/utils/money'\nimport type {\n BetSlipItem,\n FobPropositionSelection,\n FobSelection,\n MultiInvestment,\n MultiInvestmentKey,\n} from '@mobi/betslip/types'\nimport { getBetsInMulti, hasTooManyMultiLegs, isValidMulti } from '@mobi/betslip/helpers/state'\nimport {\n MAX_LEGS_FOR_MULTI_FORMULA,\n MIN_LEGS_IN_MULTI,\n MULTI_FORMULA_COMBINATIONS,\n} from '@mobi/betslip/helpers/constants'\nimport { roundDownDecimal } from './misc'\n\nexport function calculateMultiReturn(\n items: BetSlipItem[],\n { shouldRound }: { shouldRound: boolean } = { shouldRound: true }\n): number {\n const multiItems = getBetsInMulti(items)\n const tooManyBets = hasTooManyMultiLegs(multiItems)\n const isValidNumberOfMultiLegs = multiItems.length >= MIN_LEGS_IN_MULTI && !tooManyBets\n\n if (!isValidNumberOfMultiLegs) {\n return 0\n }\n\n const multiReturn = multiItems.reduce((total: Currency, item: BetSlipItem) => {\n const { winPrice, placePrice } = item.selection as FobSelection\n const price = item.multiLegBetType === 'P' ? placePrice || 0 : winPrice || 0\n return total.multiply(price)\n }, new Currency(1))\n\n return shouldRound ? roundDownDecimal(multiReturn.rawValue) : multiReturn.value\n}\n\nexport function calclulateCombinedMultiInvestment(\n multiItems: BetSlipItem[],\n multiInvestment: MultiInvestment\n) {\n if (!isValidMulti(multiInvestment, null, multiItems)) {\n return 0\n }\n\n let formulaTotal = 0\n const multiItemsCount = multiItems.length\n\n if (multiItemsCount >= MIN_LEGS_IN_MULTI && multiItemsCount <= MAX_LEGS_FOR_MULTI_FORMULA) {\n for (let i = 1; i <= Math.max(1, Math.min(multiItemsCount - 1, 5)); i++) {\n const multiInvestmentKey = `f${i}` as MultiInvestmentKey\n const legKey =\n `${multiItemsCount}` as keyof (typeof MULTI_FORMULA_COMBINATIONS)[typeof multiInvestmentKey]\n\n formulaTotal += new Currency(multiInvestment[multiInvestmentKey]).multiply(\n MULTI_FORMULA_COMBINATIONS[multiInvestmentKey][legKey]\n ).value\n }\n }\n return formulaTotal + multiInvestment.value\n}\n\nexport function calculateMultiFormulaReturn(\n prices: number[],\n formulaNumber: number,\n currentInvestment: number\n) {\n return generateMultiFormulaCombos(prices, formulaNumber).reduce((total, combo) => {\n const amount = combo.reduce((prev, cur) => new Currency(prev).multiply(cur).value, 1)\n const comboCalc = new Currency(amount).multiply(100).multiply(currentInvestment).value\n\n return new Currency(Math.floor(comboCalc)).divide(100).add(total).value\n }, 0)\n}\n\nexport function calculateMultiProjectedPay(\n multiItems: BetSlipItem[],\n multiInvestment: MultiInvestment,\n shouldExcludeFormulas?: boolean\n): number {\n const multiItemsCount = multiItems.length\n if (!isValidMulti(multiInvestment, null, multiItems)) {\n return 0\n }\n\n // Calculate multi projected pay\n const multiProjectedPay =\n multiInvestment.value > 0\n ? new Currency(calculateMultiReturn(multiItems))\n .multiply(multiInvestment.value)\n .subtract(multiInvestment.bonusBetId ? multiInvestment.value : 0).rawValue\n : 0\n const finalMultiProjectedPay = roundDownDecimal(multiProjectedPay)\n\n if (shouldExcludeFormulas) {\n return finalMultiProjectedPay\n }\n\n // Calculate formula projected pay total\n const prices = multiItems.map(item =>\n item.multiLegBetType === 'W'\n ? (item.selection as FobPropositionSelection).winPrice\n : (item.selection as FobPropositionSelection).placePrice\n ) as number[]\n\n let formulaProjectedPay = 0\n\n const isValidLegsForFormula =\n multiItemsCount >= MIN_LEGS_IN_MULTI && multiItemsCount <= MAX_LEGS_FOR_MULTI_FORMULA\n if (isValidLegsForFormula) {\n for (let i = 1; i <= Math.max(1, Math.min(multiItemsCount - 1, 5)); i++) {\n const multiInvestmentKey = `f${i}` as MultiInvestmentKey\n const currentInvestment = multiInvestment[multiInvestmentKey]\n if (currentInvestment > 0) {\n formulaProjectedPay += calculateMultiFormulaReturn(prices, i, currentInvestment)\n }\n }\n }\n\n const finalFormulaProjectedPay = new Currency(formulaProjectedPay).value\n\n return finalMultiProjectedPay + finalFormulaProjectedPay\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction generateMultiFormulaCombos(prices: number[], formulaNumber: number) {\n const combos: number[][] = []\n function doGenerateCombinations(offset: number, combo: number[]) {\n if (combo.length === formulaNumber) {\n combos.push(combo)\n return\n }\n for (let i = offset; i < prices.length; i++) {\n doGenerateCombinations(i + 1, combo.concat(prices[i]))\n }\n return\n }\n doGenerateCombinations(0, [])\n return combos\n}\n","import type { MultiInvestmentKey } from '@mobi/betslip/types'\n\nexport const MIN_LEGS_IN_MULTI = 2\n\nexport const MAX_LEGS_IN_RACE_MULTI = 10\nexport const MAX_LEGS_IN_SPORT_MULTI = 16\n\nexport const MAX_LEGS_FOR_MULTI_FORMULA = 6\n\nexport const MULTI_FORMULA_COMBINATIONS: Readonly<\n Record>\n> = {\n f1: { '2': 2, '3': 3, '4': 4, '5': 5, '6': 6 },\n f2: { '3': 3, '4': 6, '5': 10, '6': 15 },\n f3: { '4': 4, '5': 10, '6': 20 },\n f4: { '5': 5, '6': 15 },\n f5: { '6': 6 },\n}\n\nexport const MIN_INVESTMENT_VALUE = 0.5\nexport const MAX_INVESTMENT_VALUE = 99_999.99\n","import { TypedStartListening } from '@reduxjs/toolkit'\nimport type { BetSlipBetsState } from '../Store/Bets'\nimport type { BetSlipItem, BetSlipResponse } from '../types'\nimport type { AppState } from '../Store'\n\nlet hostHelpers: HostHelpers\n\n/** Set host functions in module scope (NOT inside react) */\nexport function setHostHelpers(initHelpers: HostHelpers) {\n hostHelpers = initHelpers\n}\n\nexport function getHostHelpers(): HostHelpers {\n return hostHelpers\n}\n\n// =====\n// Types\n// =====\n\nexport type HostHelpers = {\n redux: { startListening: TypedStartListening }\n postAllBetsToServer: (\n queryType: 'propose' | 'confirm' | 'refresh',\n state: BetSlipBetsState\n ) => Promise\n\n /** Primarily used in MOBI */\n toggleBetSlipDrawer?(isOpen: boolean): void\n\n hostRoutes: {\n Sports: string\n Meetings: string\n Deposit: string\n }\n\n handleShareBet: (\n items: BetSlipItem[],\n data: { title: string; message: string },\n shareMyBetEl: HTMLDivElement | null\n ) => Promise\n\n canShareBet: (items: BetSlipItem[]) => boolean\n\n showLogin: () => void\n}\n","import type { BetSlipItem, EventDetails, MultiInvestment } from '../types'\nimport type { BetSlipBetsState } from '../Store/Bets'\nimport {\n isToteSelection,\n isFobDetails,\n isRaceDetails,\n isStartingPriceSelection,\n isSameRaceMultiSelection,\n isFobSportsDetails,\n} from './typeGuards'\nimport {\n MIN_LEGS_IN_MULTI,\n MAX_LEGS_IN_RACE_MULTI,\n MAX_LEGS_IN_SPORT_MULTI,\n} from '../helpers/constants'\n\nexport const isSelectionAllowedInMulti = (selection: BetSlipItem['selection']): boolean => {\n return (\n !isToteSelection(selection) &&\n !isStartingPriceSelection(selection) &&\n !isSameRaceMultiSelection(selection)\n )\n}\n\nexport const isFatalErrorType = (betErrorType: BetSlipItem['betErrorType']): boolean => {\n if (!betErrorType) return false\n return betErrorType === 'Closed' || betErrorType === 'HandicapChanged'\n}\n\nexport const isNonHandledError = (betErrorType: BetSlipItem['betErrorType']): boolean =>\n betErrorType !== undefined && betErrorType !== 'PricesChanged'\n\nexport const isFatalMultiBetLegError = (item: BetSlipItem): boolean =>\n isFatalErrorType(item.multiBetLegError?.betErrorType)\n\nexport const hasErrors = (item: BetSlipItem): boolean => !!item.betErrorType\n\nexport const isValidMultiInvestmentForLegs = (\n multiInvestment: MultiInvestment,\n multiItemsCount: number,\n { shouldCheckOnlyFormulas }: { shouldCheckOnlyFormulas?: boolean } = {}\n): boolean =>\n Array.from(Array(Math.min(multiItemsCount, 6)).keys()).some(cur => {\n if (cur === 0 && !shouldCheckOnlyFormulas) return !!multiInvestment.value\n if (cur === 1 && !shouldCheckOnlyFormulas) return false\n return !!multiInvestment[`f${cur}` as keyof MultiInvestment]\n })\n\nexport const isValidMulti = (\n multiInvestment: MultiInvestment,\n multiError: BetSlipBetsState['multiBetError'] | null,\n multiItems: BetSlipItem[]\n): boolean => {\n const hasValidInvestment = isValidMultiInvestmentForLegs(multiInvestment, multiItems.length)\n\n return (\n hasValidInvestment &&\n !hasTooFewMultiLegs(multiItems) &&\n !hasTooManyMultiLegs(multiItems) &&\n !hasInvalidLegsOnMulti(multiItems) &&\n !multiError?.betErrorType\n )\n}\n\nexport const hasNoFatalErrors = (item: BetSlipItem): boolean => !isFatalErrorType(item.betErrorType)\n\nexport const hasBeenPlaced = (item: BetSlipItem): boolean => !!item.receipt\n\nexport const hasWinBoostedSuperPick = (item: BetSlipItem): boolean =>\n (item &&\n !!item.selectedSuperPickOffer &&\n item.selectedSuperPickOffer.isBoostOffer &&\n item.selectedSuperPickOffer.legTypeCode === 'W') as boolean\n\nexport const hasPlaceBoostedSuperPick = (item: BetSlipItem): boolean =>\n (item &&\n !!item.selectedSuperPickOffer &&\n item.selectedSuperPickOffer.isBoostOffer &&\n item.selectedSuperPickOffer.legTypeCode === 'P') as boolean\n\nexport const hasInvestment = (item: BetSlipItem): boolean =>\n (!!item.investment.win && item.investment.win.value > 0) ||\n (!!item.investment.place && item.investment.place.value > 0)\n\nexport const hasTooFewMultiLegs = (multiItems: BetSlipItem[]): boolean =>\n multiItems.filter(item => item.isInMulti).length < MIN_LEGS_IN_MULTI\n\nexport const hasTooManyMultiLegs = (multiItems: BetSlipItem[]): boolean => {\n const isRaceMulti = multiItems.some(\n item => item.isInMulti && isRaceDetails(item.selectionDetails)\n )\n return isRaceMulti\n ? multiItems.filter(item => item.isInMulti).length > MAX_LEGS_IN_RACE_MULTI\n : multiItems.length > MAX_LEGS_IN_SPORT_MULTI\n}\n\nexport const getBetsToPlace = (items: BetSlipItem[]): BetSlipItem[] => {\n return items.flatMap(item => {\n if (!hasNoUnspecifiedErrors(item)) return []\n if (item.betErrorType === 'DuplicateBonusBet') return []\n if (item.betErrorType === 'BetPlacementFault') return []\n if (!hasNoFatalErrors(item)) return []\n if (hasBeenPlaced(item)) return []\n if (!hasInvestment(item)) return []\n\n return [item]\n })\n}\n\nexport const getBetsInMulti = (items: BetSlipItem[]): BetSlipItem[] =>\n items.filter(item => item.isInMulti)\n\nexport function isSpecialUsed(item: BetSlipItem, items: BetSlipItem[]): boolean {\n if (Array.isArray(item.specialOffers) && item.specialOffers.length > 0) {\n return items.some(\n bet =>\n !!bet.selectedSuperPickOffer &&\n bet.selectedSuperPickOffer.tokenId === item.specialOffers[0].tokenId &&\n bet.id !== item.id\n )\n }\n return false\n}\n\nexport function getMultiLegEventOrRaceKey(selectionDetails: EventDetails) {\n if (isRaceDetails(selectionDetails)) {\n return selectionDetails.races[0].key\n }\n\n if (isFobDetails(selectionDetails)) {\n return selectionDetails.event\n }\n\n if (isFobSportsDetails(selectionDetails)) {\n return `${selectionDetails.sportId}.${selectionDetails.eventId}`\n }\n\n return 'UNHANDLED'\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction hasInvalidLegsOnMulti(items: BetSlipItem[]): boolean {\n const uniqueKeys = new Set()\n const selectedMuliItems = getBetsInMulti(items)\n\n return selectedMuliItems.some((item): boolean => {\n if (!isSelectionAllowedInMulti(item.selection)) return true\n\n const key = getMultiLegEventOrRaceKey(item.selectionDetails)\n\n if (uniqueKeys.has(key)) {\n return true\n } else {\n uniqueKeys.add(key)\n return false\n }\n })\n}\n\nconst hasNoUnspecifiedErrors = (item: BetSlipItem): boolean => item.betErrorType !== 'Unspecified'\n","import type {\n RacingBetType,\n AllUpSelection,\n FobMatchedSelection,\n FobPropositionSelection,\n FobSelection,\n FobSportsSelection,\n MysterySelection,\n SameRaceMultiSelection,\n Selection,\n StartingPriceFOOSelection,\n StartingPriceMatchedSelection,\n ToteSelection,\n EventDetails,\n RaceDetails,\n FobDetails,\n SportsDetails,\n FobBetReceiptResponse,\n BetSlipResponse,\n} from '../types'\n\nexport function isFobPropositionSelection(\n value: Selection | null\n): value is FobPropositionSelection {\n return !!value && (value as FobPropositionSelection).type === 'fob-proposition'\n}\n\nexport function isFobSelection(value: Selection | null): value is FobSelection {\n if (!value) return false\n const type = (value as FobSelection).type\n const fobProductTypes: FobSelection['type'][] = [\n 'fob-proposition',\n 'fob-matched',\n 'same-race-multi',\n 'fob-sports',\n ]\n return fobProductTypes.includes(type)\n}\n\nexport function isFobSportsSelection(value: Selection | null): value is FobSportsSelection {\n return !!value && (value as FobSelection).type === 'fob-sports'\n}\n\nexport function isFobMatchedSelection(value: Selection | null): value is FobMatchedSelection {\n return !!value && (value as FobMatchedSelection).type === 'fob-matched'\n}\n\nexport function isSameRaceMultiSelection(value: Selection | null): value is SameRaceMultiSelection {\n return !!value && (value as SameRaceMultiSelection).type === 'same-race-multi'\n}\n\nexport function isToteSelection(value: Selection | null): value is ToteSelection {\n return !!value && !!(value as ToteSelection).betType\n}\n\nexport function isAllUpSelection(value: Selection | null): value is AllUpSelection {\n return !!value && !!(value as AllUpSelection).formulas\n}\n\nexport function isMysterySelection(value: Selection | null): value is MysterySelection {\n return !!value && (value as MysterySelection).mysteryOption !== undefined\n}\n\nexport function isNoveltyBetType(value: RacingBetType): boolean {\n return (\n value === 'Exacta' ||\n value === 'Quinella' ||\n value === 'Trifecta' ||\n value === 'First 4' ||\n value === 'Double' ||\n value === 'Quaddie'\n )\n}\n\n// TODO: Determine if local helper can replace\nexport function isMysteryComboBetType(selection: Selection | MysterySelection | null): boolean {\n return selection && isMysterySelection(selection) && selection.bets\n ? selection.productCode.toLowerCase() === 'combo'\n : false\n}\n\nexport function isStartingPriceSelection(\n selection: Selection | null\n): selection is StartingPriceMatchedSelection | StartingPriceFOOSelection {\n return !!(selection && 'marketCode' in selection && selection.marketCode === 'SP')\n}\n\nexport function isStartingPriceMatchedSelection(\n selection: Selection | null\n): selection is StartingPriceMatchedSelection {\n if (!isStartingPriceSelection(selection)) return false\n return 'fixtureId' in selection\n}\n\n// =============\n// Event Details\n// =============\n\nexport function isRaceDetails(details: EventDetails | null): details is RaceDetails {\n if (!details || typeof details !== 'object') return false\n const asRaceDetails = details as RaceDetails\n if (!asRaceDetails.races || !Array.isArray(asRaceDetails.races)) return false\n if (asRaceDetails.races.length > 0) return 'raceNumber' in asRaceDetails.races[0]\n return true\n}\n\nexport function isFobDetails(details: EventDetails | null): details is FobDetails {\n if (\n !details ||\n typeof details !== 'object' ||\n typeof (details as FobDetails).propositionName !== 'string'\n )\n return false\n return true\n}\n\nexport function isFobSportsDetails(details: EventDetails | null): details is SportsDetails {\n if (!details || typeof details !== 'object') return false\n return Boolean('sportName' in details && 'eventName' in details)\n}\n\n// ================\n// BetSlip Response\n// ================\n\nexport function isFobBetReceiptResponse(\n receipt: BetSlipResponse['receipt']\n): receipt is FobBetReceiptResponse {\n if (!receipt) return false\n return (\n ('winInvestment' in receipt && 'projectedWinPayout' in receipt) ||\n ('placeInvestment' in receipt && 'projectedPlacePayout' in receipt)\n )\n}\n","import React, { memo, type ComponentPropsWithoutRef } from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { PillButton } from '@mobi/component-library/Common/V2/Buttons'\nimport { Input } from '@mobi/component-library/Common/V2/Inputs'\nimport styled from '@emotion/styled'\nimport { newTheme as theme } from '@mobi/component-library/Theme'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\ntype Props = {\n name: string\n inputValue: string\n helpText: string\n onClearButtonPress: React.MouseEventHandler\n onInputValueChange: React.ChangeEventHandler\n} & Omit, 'type' | 'suffix'>\n\nconst allowedKeys = [\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '.',\n 'Backspace',\n 'ArrowLeft',\n 'ArrowRight',\n]\n\nexport const MoneyInput = memo(\n ({ name, inputValue, helpText, onClearButtonPress, onInputValueChange, ...inputProps }) => {\n const renderSuffix = () =>\n inputValue !== '' && (\n \n \n \n )\n\n const inputWidth = React.useMemo(() => {\n const numbersWidth = inputValue.replace('.', '').length\n const decimalWidth = inputValue.includes('.') ? 0.5 : 0\n return numbersWidth + decimalWidth\n }, [inputValue])\n\n return (\n {\n if (!allowedKeys.includes(e.key)) {\n e.preventDefault()\n }\n }}\n {...inputProps}\n />\n )\n }\n)\n\nMoneyInput.displayName = 'MoneyInput'\n\nconst MoneyInputStyled = styled(Input)<{\n inputWidth: number\n}>(props => ({\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n\n '& > span': {\n textAlign: 'center',\n marginTop: spacing.smx1,\n ...font.size.sm,\n },\n\n '& > div': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: colors.surface[50],\n boxShadow: 'none',\n border: '0',\n height: '7.2rem',\n width: '19.9rem',\n ...theme.font.size.xl8,\n\n '& > span': {\n color: props.inputWidth > 0 ? 'inherit' : colors.neutral[400],\n },\n\n '& > input': {\n width: props.inputWidth > 0 ? `${props.inputWidth}ch` : '4ch',\n maxWidth: '7ch',\n flex: 'none',\n\n '&::placeholder': {\n color: colors.neutral[400],\n },\n\n '&:not(:first-child)': {\n marginInlineStart: '0.25ch',\n\n '@supports not (margin-inline-start: 0)': {\n marginLeft: '0.25ch',\n },\n },\n\n '&:not(:last-child)': {\n marginInlineEnd: '0.25ch',\n },\n },\n },\n}))\n\nconst PillButtonStyled = styled(PillButton)({\n backgroundColor: colors.neutral[200],\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Button } from '../../Common/V2'\nimport { defer } from '@mobi/utils'\nimport { gapX, gapY } from '../../Utils/gap'\nimport { MoneyInput } from './MoneyInput'\n\ntype ShortcutAmount = { amount: number; label: string }\nconst defaultShortcutAmounts: ShortcutAmount[] = [\n { amount: 5, label: '$5' },\n { amount: 10, label: '$10' },\n { amount: 20, label: '$20' },\n { amount: 50, label: '$50' },\n { amount: 100, label: '$100' },\n]\n\nexport type PaymentAmountProps = {\n helpText: string\n isDisabled: boolean\n maximumAmount: number\n inputValue: string\n shortcutAmounts?: ShortcutAmount[]\n onAmountChange: (value: string) => void\n}\n\nexport const fiveDigitMoneyInputRegex = /^(\\d{0,5}(\\.\\d{0,2})?)?.*/\nexport function sanitizeInput(input: string, regex: RegExp) {\n return input.replace(regex, '$1')\n}\n\nexport const PaymentAmount = ({\n helpText,\n isDisabled,\n inputValue,\n shortcutAmounts = defaultShortcutAmounts,\n onAmountChange,\n}: PaymentAmountProps) => {\n const onInputValueChanged = (inputValue: string) => {\n const sanitizedValue = sanitizeInput(inputValue, fiveDigitMoneyInputRegex)\n onAmountChange(sanitizedValue)\n }\n\n const onAddDefinedAmount = (amount: number) => {\n const currentAmount = (+inputValue || 0) * 100\n const amountToAdd = amount * 100\n const newAmount = (currentAmount + amountToAdd) / 100\n onAmountChange(newAmount.toFixed(2))\n }\n\n // Tack on cents if not entered by user\n const onBlur = (inputValue: string) => {\n if (inputValue.length > 0 && !inputValue.includes('.')) {\n onAmountChange(inputValue.concat('.00'))\n }\n }\n\n return (\n \n \n onAmountChange('')}\n onInputValueChange={e => {\n onInputValueChanged(e.currentTarget.value)\n }}\n onBlur={e => {\n // ensures onBlur callback is queued only after onClearButtonPress\n defer(() => {\n onBlur(e.target.value)\n })\n }}\n isDisabled={isDisabled}\n />\n \n\n \n {shortcutAmounts.map(({ amount, label }) => (\n {\n onAddDefinedAmount(amount)\n }}\n disabled={isDisabled}\n >\n {label}\n \n ))}\n \n \n )\n}\n\nconst PaymentAmountContainerStyled = styled.div(\n {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n gapY('3rem')\n)\n\nconst InputContainerStyled = styled.div({\n width: '32rem',\n})\n\nconst AmountButtonsContainerStyled = styled.div(\n {\n width: '100%',\n display: 'flex',\n margin: 'auto',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n gapX('1rem')\n)\n\nconst AmountButtonStyled = styled(Button)({\n width: '0',\n flex: '1 1 0px',\n})\n","import React, { CSSProperties, ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '../Theme/Common'\nimport { Button, Icon } from '../Common/V2'\n\nexport type AccountHeaderProps = {\n alignItems: 'start' | 'center' | 'end'\n title: string | ReactNode\n description?: string | ReactNode\n onClose?: ()=>void\n style?: CSSProperties\n}\n\nexport const AccountHeader = ({ alignItems, title, description, onClose, style }: AccountHeaderProps) => {\n return (\n \n {onClose && \n \n \n \n }\n \n \n {title}\n \n {description && {description}}\n \n \n )\n}\n\nconst AccountHeaderWrapper = styled.header>(\n ({ onClose, alignItems }) => ({\n flex: '0 0 10vh',\n display: onClose ? 'grid' : 'flex',\n gridTemplateColumns: onClose ? '1fr 10fr 1fr' : 'auto',\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: alignItems,\n textAlign: getTextAlign(alignItems),\n margin: `0 0 ${spacing.md}`,\n a: {\n color: colors.studio[500],\n },\n })\n)\n\nconst TextWrapper = styled.div>(\n ({ alignItems }) =>({\n display:'flex',\n flexDirection: 'column',\n alignItems: alignItems,\n textAlign: getTextAlign(alignItems),\n width: '100%',\n}))\n\nconst ButtonWrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n marginRight: spacing.sm\n})\n\nexport const MainTitle = styled.div({\n fontFamily: font.family.primary,\n color: colors.studio[900],\n ...font.size.xl4,\n})\n\nexport const Description = styled.div({\n fontFamily: font.family.primary,\n color: colors.neutral[800],\n marginTop: spacing.sm,\n ...font.size.lg,\n})\n\nconst getTextAlign = (alignItems: 'start' | 'center' | 'end'): 'left' | 'center' | 'right' => {\n if (alignItems === 'start') return 'left'\n if (alignItems === 'end') return 'right'\n return 'center'\n}\n","import styled from '@emotion/styled'\n\nexport interface BaseButtonProps {\n isDesktop?: boolean\n}\n\nexport const BaseButtonStyled = styled('button')(({ isDesktop }) => ({\n border: '0.1rem solid transparent',\n boxSizing: 'border-box',\n display: 'inline-block',\n fontFamily: 'inherit',\n lineHeight: 1,\n fontSize: isDesktop ? '1.4rem' : '1.2rem',\n fontWeight: 'bold',\n textAlign: 'center',\n verticalAlign: 'middle',\n padding: '0.8rem 1rem',\n transition: 'background-color 200ms',\n touchAction: 'manipulation',\n}))\n","import { darken, lighten, transparentize } from 'polished'\nimport { hexColors } from '@mobi/settings'\n\nexport type ButtonColor =\n | 'primary'\n | 'secondary'\n | 'light'\n | 'dark'\n | 'muted'\n | 'danger'\n | 'link'\n | 'tab'\n | 'tab_invert'\n\nexport type ButtonTypes = Record\n\n// We lock down the signature of the button object to ensure that all buttons share the\n// same properties to assign a color to. This enables us to safely use it as follows:\n// `colors.buttons[color]`\ntype ButtonType = {\n text: string\n background: string\n gradientBackgroundTop?: string\n gradientBackgroundBottom?: string\n border: string\n hover: {\n background: string\n }\n selected: {\n background: string\n text?: string\n border?: string\n hover: {\n background: string\n }\n }\n disabled: {\n text?: string\n background: string\n }\n}\n\nexport const buttonColors: ButtonTypes = {\n primary: {\n text: hexColors.white,\n background: hexColors.sushi,\n border: 'transparent',\n hover: {\n background: darken(0.1, hexColors.sushi),\n },\n selected: {\n background: darken(0.2, hexColors.sushi),\n hover: {\n background: darken(0.3, hexColors.sushi),\n },\n },\n disabled: {\n background: lighten(0.3, hexColors.sushi),\n },\n },\n secondary: {\n text: hexColors.nightRider,\n background: hexColors.white,\n border: hexColors.veryLightGrey,\n hover: {\n background: hexColors.whiteSmoke,\n },\n selected: {\n background: darken(0.2, hexColors.whiteSmoke),\n hover: {\n background: darken(0.3, hexColors.whiteSmoke),\n },\n },\n disabled: {\n text: lighten(0.3, hexColors.nightRider),\n background: lighten(0.3, hexColors.whiteSmoke),\n },\n },\n light: {\n text: hexColors.black,\n background: hexColors.white,\n border: 'transparent',\n hover: {\n background: darken(0.1, hexColors.white),\n },\n selected: {\n background: darken(0.2, hexColors.white),\n hover: {\n background: darken(0.3, hexColors.white),\n },\n },\n disabled: {\n background: darken(0.2, hexColors.white),\n },\n },\n dark: {\n text: hexColors.white,\n background: hexColors.nero,\n border: 'transparent',\n hover: {\n background: hexColors.charCoal,\n },\n selected: {\n background: lighten(0.1, hexColors.charCoal),\n hover: {\n background: lighten(0.2, hexColors.charCoal),\n },\n },\n disabled: {\n background: lighten(0.2, hexColors.charCoal),\n },\n },\n muted: {\n text: hexColors.black,\n background: hexColors.whiteSmoke,\n border: 'transparent',\n hover: {\n background: darken(0.1, hexColors.whiteSmoke),\n },\n selected: {\n background: darken(0.2, hexColors.whiteSmoke),\n hover: {\n background: darken(0.3, hexColors.whiteSmoke),\n },\n },\n disabled: {\n background: darken(0.2, hexColors.whiteSmoke),\n },\n },\n danger: {\n text: hexColors.white,\n background: hexColors.freeSpeechRed,\n border: 'transparent',\n hover: {\n background: darken(0.1, hexColors.freeSpeechRed),\n },\n selected: {\n background: darken(0.2, hexColors.freeSpeechRed),\n hover: {\n background: darken(0.3, hexColors.freeSpeechRed),\n },\n },\n disabled: {\n text: transparentize(0.15, hexColors.charCoal),\n background: hexColors.veryLightGrey,\n },\n },\n link: {\n text: hexColors.studio,\n background: 'transparent',\n border: 'transparent',\n hover: {\n background: lighten(0.1, hexColors.gainsboro),\n },\n selected: {\n background: lighten(0.2, hexColors.gainsboro),\n hover: {\n background: lighten(0.3, hexColors.gainsboro),\n },\n },\n disabled: {\n text: transparentize(0.15, hexColors.charCoal),\n background: hexColors.veryLightGrey,\n },\n },\n tab: {\n text: hexColors.white,\n background: hexColors.blueDiamond,\n border: 'transparent',\n hover: {\n background: lighten(0.2, hexColors.blueDiamond),\n },\n selected: {\n background: darken(0.1, hexColors.blueDiamond),\n hover: {\n background: darken(0.1, hexColors.blueDiamond),\n },\n },\n disabled: {\n background: hexColors.darkGrey,\n },\n },\n tab_invert: {\n text: hexColors.blueDiamond,\n background: hexColors.white,\n border: 'transparent',\n hover: {\n background: darken(0.2, hexColors.white),\n },\n selected: {\n background: darken(0.1, hexColors.white),\n hover: {\n background: darken(0.1, hexColors.white),\n },\n },\n disabled: {\n background: hexColors.darkGrey,\n },\n },\n}\n","import { css } from '@emotion/react'\nimport styled from '@emotion/styled'\nimport { darken } from 'polished'\nimport { BaseButtonStyled } from './ButtonsBase.styles'\nimport { buttonColors, ButtonTypes } from './themes'\nimport { hexColors } from '@mobi/settings'\n\nexport interface ButtonProps {\n color?: keyof ButtonTypes\n selected?: boolean\n uppercaseText?: boolean\n}\n\nexport const ButtonStyled = styled(BaseButtonStyled)(\n ({ color = 'primary', selected, uppercaseText }) => ({\n backgroundColor: selected\n ? buttonColors[color].selected.background\n : buttonColors[color].background,\n borderColor: buttonColors[color].border,\n color: buttonColors[color].text,\n textTransform: uppercaseText ? 'uppercase' : undefined,\n userSelect: 'none',\n\n '&:hover': {\n backgroundColor: selected\n ? buttonColors[color].selected.background\n : buttonColors[color].background,\n },\n\n '&:active': {\n backgroundColor: selected\n ? buttonColors[color].selected.hover.background\n : buttonColors[color].hover.background,\n },\n\n '&[disabled]': {\n backgroundColor: buttonColors[color].disabled.background,\n color: buttonColors[color].disabled.text\n ? buttonColors[color].disabled.text\n : buttonColors[color].text,\n\n '&:hover': {\n backgroundColor: buttonColors[color].disabled.background,\n },\n },\n })\n)\n\nexport const ButtonBlockStyled = styled(ButtonStyled)<{ isDesktop?: boolean }>(\n {\n height: '4rem',\n textAlign: 'center',\n width: '100%',\n },\n ({ isDesktop }) => ({\n margin: isDesktop ? '0 0.5rem' : undefined,\n fontSize: isDesktop ? '1.2rem' : undefined,\n lineHeight: isDesktop ? '1.4rem' : undefined,\n })\n)\n\nexport const ButtonSubTextStyled = styled('span')({\n display: 'block',\n})\n\nexport interface ButtonWithIconProps {\n color?: 'dark' | 'light'\n}\n\nexport const ButtonWithIconStyled = styled('button')(\n {\n backgroundColor: 'transparent',\n border: 0,\n cursor: 'pointer',\n padding: 0,\n },\n\n ({ color = 'dark' }) => ({\n color: color === 'dark' ? hexColors.black : hexColors.white,\n })\n)\n\nexport const ButtonCloseStyled = styled('button')({\n backgroundColor: hexColors.grey,\n border: 0,\n color: hexColors.white,\n cursor: 'pointer',\n fontSize: '1rem',\n height: '3.4rem',\n position: 'absolute',\n right: '0',\n top: '0',\n width: '3.4em',\n})\n\nconst BaseMaterialButtonStyled = styled('a')({\n fontFamily: '\"PF Square Sans Pro\", Arial, sans-serif',\n fontSize: '1.6rem',\n fontWeight: '300',\n marginTop: '0.5rem',\n borderRadius: '0.4rem',\n boxShadow: '0px 0.5rem 1rem rgba(0, 0, 0, 0.1)',\n marginBottom: '0.5rem',\n flex: '1',\n height: '3rem',\n textAlign: 'center',\n verticalAlign: 'middle',\n display: 'inline-block',\n transition: 'background-color 200ms',\n touchAction: 'manipulation',\n lineHeight: 1,\n paddingTop: '1.5rem',\n textDecoration: 'none',\n '& svg': {\n verticalAlign: 'middle',\n marginRight: '0.8rem',\n marginTop: '-0.25rem',\n },\n '&:disabled': {\n backgroundColor: hexColors.darkGrey,\n },\n})\n\nexport const SecondaryButtonStyled = styled(BaseMaterialButtonStyled)({\n color: hexColors.nero,\n backgroundColor: hexColors.white,\n '&:active:not(:disabled)': {\n backgroundColor: darken(0.1, hexColors.white),\n },\n})\n\nexport const PrimaryButtonStyled = styled(BaseMaterialButtonStyled)({\n color: hexColors.white,\n backgroundColor: hexColors.studio,\n '&:active:not(:disabled)': {\n backgroundColor: darken(0.1, hexColors.studio),\n },\n})\n\n// ================\n// Button Selection\n// ================\n\n// FIXME: Change this to just reference hexColors directly\nconst {\n default: { background: defaultBackground, color: defaultColor, borderColor: defaultBorderColor },\n selected: {\n background: selectedBackground,\n color: selectedColor,\n borderColor: selectedBorderColor,\n },\n disabled: { background: disabledBackground, color: disabledColor },\n} = {\n default: {\n background: `linear-gradient(to bottom, ${hexColors.white}, ${hexColors.whiteSmoke})`,\n color: hexColors.nero,\n borderColor: hexColors.veryLightGrey,\n },\n selected: {\n background: hexColors.nero,\n color: hexColors.white,\n borderColor: hexColors.nero,\n },\n disabled: {\n background: hexColors.gainsboro,\n color: hexColors.grey,\n },\n}\n\nexport interface ButtonSelectionStyled {\n isSelected: boolean\n isDisabled?: boolean\n}\n\nexport const ButtonSelectionStyled = styled('button')(\n {\n position: 'relative',\n boxSizing: 'border-box',\n\n padding: 0,\n borderRadius: '0.3rem',\n\n fontFamily: 'inherit',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n lineHeight: 1,\n textAlign: 'right',\n cursor: 'pointer',\n },\n ({ isSelected, isDisabled = false }) => ({\n background: isSelected\n ? selectedBackground\n : isDisabled\n ? disabledBackground\n : defaultBackground,\n color: isSelected ? selectedColor : isDisabled ? disabledColor : defaultColor,\n border: isSelected\n ? `0.1rem solid ${selectedBorderColor}`\n : `0.1rem solid ${defaultBorderColor}`,\n boxShadow: isDisabled ? 'none' : '0 0.1rem 0.1rem rgba(0,0,0,0.1)',\n })\n)\n\n/**\n * CSS reset from modern-normalize\n *\n * @see https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L160\n * @see https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L179\n * @see https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L188\n */\nexport const buttonReset = css({\n fontFamily: 'inherit',\n fontSize: '100%',\n lineHeight: 1.15,\n margin: 0,\n textTransform: 'none',\n WebkitAppearance: 'button',\n})\n\nexport const ButtonResetStyled = styled.button(buttonReset)\n\nexport const UnstyledButton = styled.button([\n buttonReset,\n {\n background: 'none',\n border: 'none',\n padding: 0,\n },\n])\n","import React, { type FC } from 'react'\nimport { ButtonStyled } from './Buttons.styles'\nimport type { ButtonProps } from './types'\n\nexport const Button: FC = ({\n onClick,\n children,\n color = 'primary',\n selected = false,\n uppercaseText = false,\n disabled = false,\n ...buttonProps\n}) => (\n \n {children}\n \n)\n","import React, { type FC } from 'react'\nimport { BusyIndicator } from '@mobi/component-library/Feedback/BusyIndicator'\nimport { ButtonBlockStyled } from './Buttons.styles'\nimport type { ButtonBlockProps } from './types'\n\nexport const ButtonBlock: FC = ({\n onClick,\n children,\n color = 'primary',\n selected = false,\n uppercaseText = false,\n disabled = false,\n isDesktop = false,\n isBusy = false,\n busyIndicatorColour,\n ...buttonProps\n}) => (\n \n {isBusy ? : children}\n \n)\n","import React, { ButtonHTMLAttributes, type FC } from 'react'\nimport { ButtonWithIconStyled } from './Buttons.styles'\n\ntype Props = Pick, 'onClick'> & {\n icon: JSX.Element\n color?: 'dark' | 'light'\n}\n\nexport const ButtonWithIcon: FC = ({ onClick, icon, color = 'dark' }) => (\n \n {icon}\n \n)\n","import React, { type ButtonHTMLAttributes, type FC } from 'react'\nimport { ButtonCloseStyled } from './Buttons.styles'\n\ntype Props = Pick, 'onClick'> & {\n icon: JSX.Element\n}\n\nexport const CloseButton: FC = ({ onClick, icon }) => (\n {icon}\n)\n","import styled from '@emotion/styled'\nimport { GridCellProps, GridProps } from './Grid'\n\nconst supportMap = {\n valign: {\n top: 'flex-start',\n middle: 'center',\n bottom: 'flex-end',\n },\n align: {\n left: 'flex-start',\n right: 'flex-end',\n center: 'center',\n },\n}\n\nexport const GridStyled = styled('div')(\n {\n display: 'flex',\n flexWrap: 'wrap',\n },\n ({ padding }) =>\n padding\n ? {\n margin: `-${padding}`,\n width: 'auto',\n flex: 1,\n }\n : {\n width: '100%',\n },\n\n ({ margin, maxWidth }) => ({\n margin,\n maxWidth,\n })\n)\n\nexport const GridCellStyled = styled('div')(\n {\n display: 'flex',\n flex: 1,\n },\n ({ width, valign = 'top', align = 'left', minWidth, flexGrow, flexBasis }) => ({\n minWidth: width || minWidth || 0,\n maxWidth: width || 'none',\n alignItems: supportMap.valign[valign],\n justifyContent: supportMap.align[align],\n textAlign: align || 'left',\n flexGrow,\n flexBasis,\n })\n)\n\nexport const GridCellInnerStyled = styled('div')(\n {\n boxSizing: 'border-box',\n },\n ({ align }) => ({\n width: align ? 'auto' : '100%',\n }),\n ({ padding }) => ({\n padding: padding || undefined,\n })\n)\n\nexport const GridRowStyled = GridStyled.withComponent('div')\n","import React, { type CSSProperties } from 'react'\nimport { GridStyled, GridCellStyled, GridCellInnerStyled, GridRowStyled } from './Grid.styles'\n\nexport type GridProps = {\n padding?: CSSProperties['padding']\n margin?: CSSProperties['margin']\n children?: React.ReactNode\n maxWidth?: CSSProperties['maxWidth']\n}\n\nexport type GridCellProps = {\n width?: CSSProperties['width']\n padding?: CSSProperties['padding']\n minWidth?: CSSProperties['minWidth']\n flexGrow?: CSSProperties['flexGrow']\n flexBasis?: CSSProperties['flexBasis']\n valign?: 'top' | 'middle' | 'bottom'\n align?: 'left' | 'right' | 'center'\n children?: React.ReactNode\n onClick?: () => void\n}\n\nfunction passPropsToChildren(props: GridProps) {\n const propsToPass = { ...props }\n delete propsToPass.children\n return React.Children.map(props.children, child => {\n if (child) {\n return React.cloneElement(child as React.ReactElement, { ...propsToPass })\n } else {\n return child\n }\n })\n}\n\nexport function Grid(props: GridProps): JSX.Element {\n const children = passPropsToChildren(props)\n return {children}\n}\n\nexport function GridRow(props: GridProps): JSX.Element {\n const children = passPropsToChildren(props)\n return {children}\n}\n\nexport function GridCell(props: GridCellProps): JSX.Element {\n return (\n \n {props.children}\n \n )\n}\n","import styled, { type CSSObject } from '@emotion/styled'\n\ntype SvgIconProps = {\n color?: string\n size: string\n transformation?: string\n valign?: string\n height?: string | number\n width?: string | number\n}\n\nexport const SvgIconStyled = styled.svg(\n ({\n color,\n size,\n transformation,\n valign = 'bottom',\n height = '1em',\n width = '1em',\n }: SvgIconProps) => {\n // height and width are done in a separate object, so it doesn't update 110 snapshots\n const sizes: CSSObject = {}\n\n if (typeof width === 'string') {\n sizes.width = width\n }\n\n if (typeof height === 'string') {\n sizes.height = height\n }\n\n const style: CSSObject = {\n display: 'inline-block',\n fill: color || 'currentColor',\n fontSize: size,\n ...sizes,\n verticalAlign: valign,\n transform: transformation,\n }\n\n return style\n }\n)\n","export const add = 'M114.06,236.12h27.88V19.41H114.06ZM19.64,113.82v27.89H236.36V113.82Z'\n","export const allraces =\n 'M255.3 181.6c-18-1.4-38.7-9.9-46-20.5-12.1-7.3-38.6-8-50.5 2.1-30.3-.8-20 14.8-32.7 23.4 3-29.8 8.2-62.4 8.2-62.4s-14-16-4.4-31.6c-6.8 18.1 3.9 36.5 25 34.6 24.4 10.8 28.3 15 28.3 15s4.5 12.3 14.7 12.3 7.8-1.5 6.8-4.9c3.9 1 5.9-1 10.2-8.3 4.5-7.4 7.4-6.4 1-20a325.3 325.3 0 0 0-46-61.9c-22.2-23.9-5.3-10.7-5.3-39.3-6 5.3-9.2 12.2-9.2 12.2s1-10.8-2.9-20.4c-4.9 9.8-12.7 22.4-11.7 28.3a50.4 50.4 0 0 0-42-1.5 77 77 0 0 1 21.4 8.4s-20-6.5-48.4 1.8c14.7 2.5 19 4.5 19 4.5s-26 5.3-40 15c0 0 13.2-1.4 18.5-1-15.5 3.4-36.6 21-45.8 34.7 18-8.8 24.5-7.8 24.5-7.8s-13.7 8.8-26 34.6C11 152 2 150.7.4 150.3c2.3.7 19.6 6 31.4-3.5 25.8 26.6 95.6 123.9 142.7 72.3 19.7-16.4 66 1 65-9.7l-2-.1c1.5-.5 3.6-10.2-.1-5.5-1.3 2.6-4.6 2.2-4.6 2.2-3.8-4.7-3.4.8-6-4.8l-3.6 1.2.2-1.4c-5.8.5-1.4-2.2-6.8-1.5-1.4-3.2-1.5-2.3-4.5-1.6l.5-3.8c-1.8.7-2.1.5-3.2-1l-3.9 3.1c-3.2-4 6.8-4.8 9.2-5.9l.3 1.6c2-.5 4.7-1.2 6.5.1 2.7-1.5 3 .8 6-1.4l1.8 2.6c2.7-2.1 3.4 0 5.6 1.4 2-1.7 2.7-.6 4.6.5.5-.7 1.7-2.2 2-3l2.2 1-1.6 5.7s3.4-1.5 4.8-5.8c10.2.5 10-10.3 8.5-11.4ZM.3 150.8c-.2 0-.3-.2-.3-.2s.1.2.3.2Z'\n\nexport const racesall = allraces\n","export const asterisk =\n 'M128 11.27a14.59 14.59 0 0114.59 14.59v76.87l66.57-38.44a14.59 14.59 0 1114.76 25.18l-.17.1L157.18 128l66.57 38.43a14.59 14.59 0 01-14.42 25.37l-.17-.09-66.57-38.44v76.87a14.59 14.59 0 01-29.18 0v-76.87l-66.57 38.44a14.59 14.59 0 11-14.76-25.18l.17-.1L98.82 128 32.25 89.57a14.59 14.59 0 0114.59-25.28l66.57 38.44V25.86A14.59 14.59 0 01128 11.27z'\n","export const backspace =\n 'M 250,208 68.088033,208 0,123.40578 68.088033,39.15543 250,39.15543 250,208 Z m -173.658872,-17.19395 156.808802,0 0,-134.45667 -156.808802,0 -54.332875,67.0564 54.332875,67.40027 z M 198.07428,92.80055 186.03851,80.76479 155.43329,111.37001 124.82806,80.76479 112.7923,92.80055 l 30.60522,30.60523 -30.26134,30.26134 12.03576,12.03577 30.26135,-30.26135 30.26135,30.26135 12.03576,-12.03577 -29.91747,-30.60522 30.26135,-30.26135 z'\n","export const bankAccount =\n 'M287.966 52.782H28.7C12.883 52.782 0 65.663 0 81.5h316.67c0-15.828-12.875-28.7-28.703-28.7zM0 235.184c0 15.83 12.883 28.7 28.7 28.7h259.257c15.828 0 28.7-12.88 28.7-28.7V124.482H.006L0 235.183z'\n","export const betslip =\n 'M62.3 15.81L30.77 53.22H62.3zm162.93 20.44a20.28 20.28 0 0 0-17.42-20.18 3.37 3.37 0 0 0-1-.26H75.24V66.4H30.77v173.79l22.48-24.32L77.31 240l24.31-24.32L125.93 240l24.8-24.83L175.54 240l24.8-24.83L225.15 240V38c0-.34-.09-.67-.09-1a2.32 2.32 0 0 0 .17-.75zm-59.32 125.91a26.29 26.29 0 0 1-8.46 10.3 27 27 0 0 1-13.27 4.65c-3.32.42-11.29.59-23.9.67H86.85V78.05h39.24a108.66 108.66 0 0 1 17.34 1 24.19 24.19 0 0 1 17.67 12.43 23 23 0 0 1 3 11.73 23.69 23.69 0 0 1-13.86 21.62 25.3 25.3 0 0 1 13.77 9 24.23 24.23 0 0 1 4.82 15 26.14 26.14 0 0 1-2.92 13.33zm-31.77-44.76a13.22 13.22 0 0 0 8-3.54A10.76 10.76 0 0 0 145 106a11.19 11.19 0 0 0-2.49-7.51c-1.66-1.95-4.23-3-7.47-3.47-2-.17-7.63-.33-16.92-.33h-11.36v23.13h13c7.66-.08 12.47-.25 14.38-.42zm6.05 18.41c-2.73-.93-8.46-1.43-17.5-1.43h-15.93v26.68h18.34c7.13 0 11.69-.17 13.6-.59a11.76 11.76 0 0 0 10-12.41 13.33 13.33 0 0 0-2.07-7.6 13.07 13.07 0 0 0-6.44-4.65z'\n","export const blackbook =\n 'M219 52.36v191.28a4.76 4.76 0 01-4.87 4.86H73.72C53 250.77 35 232.29 36 212.45V28.07C37.2 15.19 47.41 5 61.11 5.5h134.51c3.91.62 2.23 4.83 0 5H62c-26.74-3.59-25.28 38.41 0 37h79.1c10.8-5.93 2.39 124.61 4.9 126.48l18.38-18.14L183 174V52.34a4.64 4.64 0 00-4.9-4.84h36q4.9.24 4.9 4.86z'\n","export const calendar =\n 'M230.9,53.34H213.39V66.07c0,8.76-11.94,8.76-20.7,8.76s-22.29.79-22.29-8.76V53.34H83.64V66.07c0,8.76-12.74,8.76-21.49,8.76s-21.49.79-21.49-8.76V53.34H23.94C15.19,53.34,8,60.5,8,70.05V215.72c0,8.75,7.17,16.71,15.92,16.71h207c8.75,0,15.92-7.16,15.92-16.71V70.05C246.82,61.3,239.65,53.34,230.9,53.34Zm.79,163.17h-47c19.9-11.14,35.82-27.86,47-48.55Zm0-108.25c0,59.7-47.76,108.25-105.86,108.25H23.15V89.15H231.69Zm-39-44.58c4.78,0,11.14,0,11.14-3.18v-31c0-3.19-6.36-3.19-11.14-3.19s-11.14,0-11.14,3.19v31C182.34,63.68,187.91,63.68,192.69,63.68Zm-129.75,0c4.78,0,11.15,0,11.15-3.18v-31c0-3.19-6.37-3.19-11.15-3.19s-10.34,0-10.34,3.19v31C52.6,63.68,58.17,63.68,62.94,63.68Zm87.56,62.89h18.31v19.1H150.5Zm-32.63,0h18.31v19.1H117.87Zm-31.84,0h18.31v19.1H86ZM150.5,160h18.31v19.1H150.5Zm-32.63,0h18.31v19.1H117.87ZM86,160h18.31v19.1H86Z'\n","export const checked =\n 'M 239,17.00001 239,239 l -221.999999,0 0,-221.99999 M 256,1.08e-5 0,1.08e-5 0,256 256,256 256,1.08e-5 Z M 31.700001,142.70001 57.5,116.80001 l 38.800001,38.9 L 198.5,53.500013 225,80.000013 97.300001,207.7 l -65.6,-64.99999 z'\n","export const closeAccount =\n 'M256,256H0c0-69.65,99.56-48.75,99.56-69.65,0-27.86-25-27.86-25-55.72V88.84c0-27.86,25-41.78,53.4-41.78l1.31,0a69.16,69.16,0,0,0-.54,8.44A68.39,68.39,0,0,0,181.4,122v8.65c0,27.86-25,27.86-25,55.72C156.44,207.25,256,186.35,256,256ZM252.36,55.52A55.3,55.3,0,1,1,197.07.23,55.29,55.29,0,0,1,252.36,55.52Zm-44.35,0,19.85-19.84-11-10.95L197.07,44.58,177.22,24.73l-10.94,11,19.84,19.84L166.28,75.37l10.94,10.94,19.85-19.84,19.84,19.84,11-10.94Z'\n","export const comment =\n 'M61 182.41h90v-26H61v26Zm0-39h135v-26H61v26Zm0-38h135v-26H61v26Zm-45 150.4V54.91c0-7.01 2.2-13.02 6.59-18.02 4.38-4.99 9.65-7.48 15.81-7.48h179.2c6.16 0 11.44 2.49 15.83 7.48 4.38 5 6.57 11 6.57 18.02v153c0 7.01-2.19 13.02-6.57 18.02-4.39 4.99-9.67 7.48-15.83 7.48H60.8L16 255.81Zm23-41.46 13.15-6.94H218v-154H39v160.94Z'\n","export const cross =\n 'M19.8,211.3l30.8,30.8l77.3-77.3l77.3,77.3l30.8-30.8L158.8,134l77.3-77.3l-30.8-30.8L128,103.2L50.7,25.8L19.8,56.7L97.2,134L19.8,211.3z'\n\nexport const crossCircledSolid =\n 'M128.28 12a115.5 115.5 0 1 0 115.5 115.5A115.5 115.5 0 0 0 128.28 12Zm70.46 158.44-28.3 28.3L128 156.29l-42.44 42.45-28.3-28.3L99.71 128 57.26 85.56l28.3-28.3L128 99.71l42.44-42.45 28.3 28.3L156.29 128Z'\n","export const depositLimits =\n 'M209,95.78h-8.82l.14-8.76c.28-19-1-30-4.72-40.58a67.42,67.42,0,0,0-9.49-17.25,73.39,73.39,0,0,0-17.43-16.63A72.44,72.44,0,0,0,136.45.41a129.13,129.13,0,0,0-13.2-.36,67,67,0,0,0-21.61,4.78,75.13,75.13,0,0,0-38.72,35.9,70,70,0,0,0-6.11,18.49c-.9,5.35-1,7.17-1,22.2l0,14.36H38.36l-.14,40.66c-.1,29-.08,42.89.14,54.58v65H217.84V95.78Zm-80.92,0H85.93V93.92c0-1-.18-4.94-.4-8.74C84.77,72,85.09,66.35,87,60.3c2-6.54,7.48-14.82,13.13-19.87,7.4-6.58,15.6-10.22,24.77-11a54.16,54.16,0,0,1,9.4.48A43.93,43.93,0,0,1,164.11,49.8a34.93,34.93,0,0,1,5.16,17.27c.12,3,.6,17.69.8,24.55l.12,4.16Zm53.29,91.6H138.81v42.18H116.46V187.38H74.64V165h41.82V122.84h22.35V165h42.55Z'\n","export const dog =\n 'M256 88.6c.4 2-1.8 4-4 3.6a5 5 0 0 1-2.4 2.8l.7-2.8-1-.3a9.9 9.9 0 0 1-.7 1.3l-1.3-.8-.8.5-1.8-1-.8.6-1-1.3-1 .5-1-.3-.7.3a5.7 5.7 0 0 0-2.8 0l-.3-.8a24.3 24.3 0 0 0-4.6 1.6 1.7 1.7 0 0 0 .5 1.2l1.8-1.5.5.8.8-.3v1.8l1.3-.5.5 1.3 1.2-.3.6.8h1.2v.8l1.6-.5.7 1.2h1.3c.4 1.2 2.5 1.3 3.1 0 .2-.7.4-1 .6-.7.7.5-.2 2.4-.6 3h.8c1.2 4.3-15.7-.5-19.6 1.2-11.6.5-18 11.3-26 18.2-11.6 10.3-30.5 26.9-47.4 24.7a99.2 99.2 0 0 0-4.4 22.7c4.3 1.3 7.3 0 11.5 3.8 1.6 1 3.3 1.1 4.1 3.1a14 14 0 0 1-11.8.3 6.2 6.2 0 0 1-4.8-.6c.7 6.4-7.5 7.5-12.6 7a39 39 0 0 1-16.9-2.4c-.6 1.4-1.3 3.3-2.8 3.4-2.6-2.8-5.7-8-4.8-11.8q-10.8-5.6-11.6-6.7h-14c-6 .5-14.4 1.6-19.5-1.4v-.1c10.9-8.4 11.8-4 24-3.8-4.7-5 14.4-14.2 14.4-24.6-10.5 0-30.3-2.5-29.2-15.6-5.7 4-14 20.5-24.5 24.4a48.6 48.6 0 0 1-39-1.9q-6.4-3.6-9.7-3.6c-5.4.2-5-5 .5-4.6 16.4 5.6 23 9.9 41.4 6.4 12.5-2.4 20.4-17.9 28-26.9C78 101.6 80.8 89 92 85c39.7-18.9 74.4 21.1 101.1 6.8 9-4.3 5.9-15.2 18.5-13.2 5.8-5 16.5-4.4 23-1 3.6 5.6 14 9 21 9.5a12.2 12.2 0 0 0 .3 1.5Zm-147.5 60.1 9.5-6.9-.5-1.8a48.8 48.8 0 0 0-9 8.7Zm34 23.8.3-1.5c-5.8-.8-16.7-1.8-21-5.5-1.6-2.5-1-10.8-1.8-13.2-2.9 1.5-9.6 6-12 7.2 2.6 2.3 6.5 5.1 9.8 5.9 2 .7 2.5 3.4 3 6.1.6.9 4.8-1 5.1.5 4.3 2.8 12.4 3.5 16.7.5Zm-6.3-10c2.4 1 4.5 2.5 7.1 2.9-.6-6.7-1.6-15.8-1-22.8-4.1 0-8.8 3.2-12.3 5.1a31.2 31.2 0 0 0 5 14.6l1.2.3Z'\n\nexport const dogs = dog\n","export const envelopeOpen =\n 'M238.89 99.39a22.6 22.6 0 00-10.44-19.28L128 20 27.55 80.11A22.69 22.69 0 0017 99.39v113.43c0 12.47 10 22.68 22.2 22.68h177.6c12.21 0 22.2-10.21 22.2-22.68zM128 156.36L36.21 97.83 128 42.93l91.79 54.9z'\n","export const error =\n 'M138.9.5l4.9.5 4.8.7 4.9.8 4.8 1.1L163 5l4.7 1.4 4.6 1.6 4.7 1.8 4.5 2L186 14l4.4 2.3 4.3 2.6 4.3 2.7 4.1 2.9 4 3 4 3.3 3.9 3.4 3.7 3.7 3.6 3.8 3.5 4 3.3 4 3.1 4.2 3 4.3 2.7 4.4 2.5 4.4 2.4 4.5L245 76l2 4.7 1.7 4.6 1.6 4.8 1.4 4.8 1.2 4.8 1 4.9.8 4.8.6 5 .4 4.8.3 5v4.9l-.1 4.9-.4 4.9-.5 4.9-.7 4.8-.9 4.9-1 4.8-1.3 4.8-1.4 4.7-1.6 4.6-1.8 4.7-2 4.5-2.2 4.5-2.3 4.4-2.6 4.3-2.7 4.3-2.9 4.1-3 4-3.3 4-3.5 3.9-3.6 3.7-3.8 3.6-4 3.5-4 3.3-4.2 3.1-4.3 3-4.4 2.7-4.4 2.5-4.5 2.4-4.6 2.1-4.7 2-4.7 1.7-4.7 1.6-4.8 1.4-4.8 1.2-4.9 1-4.8.8-5 .6-4.8.4-5 .3H127l-4.9-.1-4.9-.4-4.9-.5-4.8-.7-4.9-.9-4.8-1L93 251l-4.8-1.4-4.6-1.6-4.6-1.8-4.6-2-4.5-2.2-4.4-2.3-4.3-2.6-4.3-2.7-4.1-2.9-4-3-4-3.3-3.9-3.5-3.7-3.6-3.6-3.8-3.5-4-3.3-4-3.1-4.2-3-4.3-2.7-4.4-2.5-4.4-2.4-4.5L11 180l-2-4.7-1.7-4.7-1.6-4.7-1.4-4.8-1.2-4.8-1-4.9-.8-4.8-.6-5-.4-4.8-.3-5V127l.1-4.9.4-4.9.5-4.9.7-4.8.8-4.9 1.1-4.8L5 93l1.4-4.7L8 83.6 9.7 79l2-4.6 2.2-4.5 2.3-4.4 2.6-4.3 2.7-4.3 2.9-4.1 3-4 3.3-4 3.4-3.9 3.7-3.7 3.8-3.6 4-3.5 4-3.3 4.2-3.1 4.3-3 4.4-2.7 4.4-2.5 4.5-2.4L76 11l4.7-2 4.6-1.7 4.8-1.6 4.8-1.4 4.8-1.2 4.9-1 4.8-.8 5-.6 4.8-.4 5-.3h4.9l4.9.1 4.9.4zM120 32l-3.9.4-3.8.5-3.8.7-3.8.9-3.6 1-3.7 1-3.5 1.3-3.5 1.4-3.4 1.6-3.4 1.6-3.3 1.8-3.1 1.9-3.2 2-3 2.2-3 2.2-2.8 2.4-2.8 2.4L60 60l-2.6 2.6-2.4 2.8-2.4 2.9-2.3 3-2 3-2.1 3-1.9 3.3-1.8 3.2-1.6 3.4-1.6 3.4-1.4 3.5-1.2 3.5-1.1 3.7-1 3.6-.9 3.8-.7 3.8-.5 3.8-.4 3.9-.3 4v7.9l.3 3.9.4 3.9.5 3.8.7 3.8.9 3.8 1 3.6 1 3.6 1.3 3.6 1.4 3.5 1.6 3.4 1.6 3.4 1.8 3.2 1.9 3.2 2 3.2 2.1 3 2.3 3 2.4 2.8 2.4 2.8L60 196l2.6 2.6 2.8 2.4 2.9 2.4 3 2.2 3 2.2 3 2 3.3 1.9 3.2 1.8 3.4 1.6 3.4 1.6L94 218l3.5 1.3 3.7 1.1 3.6 1 3.8.9 3.8.7 3.8.5 3.9.4 4 .3h7.9l3.9-.3 3.9-.4 3.8-.5 3.8-.7 3.8-.9 3.6-1 3.6-1 3.6-1.3 3.5-1.4 3.4-1.6 3.4-1.6 3.2-1.8 3.2-1.9 3.2-2 3-2.2 3-2.2 2.8-2.4 2.8-2.4 2.6-2.6 2.6-2.7 2.4-2.7 2.4-2.9 2.2-3 2.2-3 2-3 1.9-3.3 1.8-3.2 1.6-3.4 1.6-3.4 1.3-3.5 1.3-3.6 1.1-3.6 1-3.7.9-3.7.7-3.8.5-3.8.4-3.9.3-4V124l-.3-3.9-.4-3.9-.5-3.8-.7-3.8-.9-3.8-1-3.6-1-3.7-1.3-3.5-1.4-3.5-1.6-3.4-1.6-3.4-1.8-3.3-1.9-3.1-2-3.2-2.2-3-2.2-3-2.4-2.8-2.4-2.8L196 60l-2.7-2.6-2.7-2.4-2.9-2.4-3-2.2-3-2.2-3-2-3.3-1.9-3.2-1.8-3.4-1.6-3.4-1.6-3.5-1.4-3.6-1.2-3.6-1.1-3.7-1-3.7-.9-3.8-.7-3.8-.5-3.9-.4-4-.3H124l-3.9.3zM82.2 192l45.8-45.7 45.7 45.7 18.2-18.2-45.6-45.8L192 82.3 173.8 64 128 109.8 82.3 64 64 82.3l45.8 45.7L64 173.8 82.2 192z'\n","export const errorCircled =\n 'M 45.518816,30.123105 C -8.5394419,75.675399 -15.430903,156.42389 30.1243,210.48214 75.679502,264.53749 156.42508,271.43186 210.48334,225.87666 264.53869,180.32437 271.43015,99.57588 225.87785,45.517622 180.32556,-8.5377274 99.577075,-15.432097 45.518816,30.123105 Z M 54.341864,190.07539 C 23.451015,153.41596 24.611713,100.45149 54.909122,65.249482 L 177.45727,210.67414 C 137.62992,234.56298 85.232713,226.73191 54.341864,190.07539 Z M 201.09594,190.75028 78.547793,45.328536 C 118.37514,21.436781 170.77235,29.267854 201.66611,65.927283 232.55405,102.5838 231.39044,155.55118 201.09594,190.75028 Z'\n","export const externalLink =\n 'M143 35a16 16 0 0 1 16.5-15.6H225a17.2 17.2 0 0 1 12.2 4.5c3.2 3.1 4.3 7 4.8 11v62c0 8.6-7.4 15.5-16.5 15.5S209 105.4 209 97V72.4l-87.3 82c-6.5 6-16.9 6-23.3 0-6.5-6-6.5-15.9 0-22l87.3-82h-26.2c-9.1 0-16.5-7-16.5-15.5ZM14 65.4c0-17.2 14.6-31 32.6-31h49c8.9 0 16.1 6.8 16.1 15.4s-7.2 15.5-16.2 15.5H47v140h146v-46.7c0-8.6 7.4-15.6 16.5-15.6s16.5 7 16.5 15.6v46.6a31.9 31.9 0 0 1-32.6 31.1H46.6a32 32 0 0 1-32.6-31v-140Z'\n","export const favouriteNumbers =\n 'M58.3 252.4c9.3-.7 16.2 1.5 18.2-1.8 1.5-.4 20.6-77.5 20.9-77.5a193 193 0 0 1 33.6-.4c.2.2-2.5 12.8-8.9 37.2s-9.4 37.4-9.4 38.5c2.1 6.6 10.6 3.6 21 4.5 11 0 17-.5 18.3-1.6 3.2-4 16.3-59 19.5-71.3.9-4.3 2-6.4 3.5-7 1-.9 31.9-.6 35.2-.8 8.3-.1 6-4.8 10.9-17.8 5.9-22.8 7.2-16.4-17.7-18-6.4-.4-15.6.4-19.7-.7 1.1-7.2 5.7-21.5 7.5-29.3h19.2c18.1-1.5 20 4.5 25.4-9.3q7.1-23.6 5.8-25.4c-2.6-.2-3.2-.5-1.4-.7s.5-.1-3.5-.5c-7.3-.2-10-.2-15.9-.1 0 0-20 .3-20-.4s2.7-11.3 8-32c5.3-22.8 9.9-31.1 6.7-33.3.8-1.8-40-1.7-39.1 0-5.4 9.4-13 48.6-18.4 65.7-8.1.8-24.7 1.2-32.9 1C123 73 141.3 8 138.8 4.2c-.2-1.8-39.6-1.9-39.5.3-1.8 1.3-15 53.8-18 66-8 0-39.6-.7-41.1 1.8-.9 1-11.7 30.8-9.1 31.8-.8 4 36.3.6 40.5 3.7 0 .8-5.3 22.8-6.6 28l-20 .5c-16.3 1-21-1.6-23.2 4.5a158 158 0 0 0-7.5 30.3c4.8 2.6 9.7.7 20.6 1.3 10.6.4 15.4-.6 20.5.8 0 .9-3 13.8-9.4 38.4-2.9 12.3-8.1 29.7-9 38.3 3.1 4.7 8 2.1 21.3 2.5Zm83.6-117c-6.7 0-26 0-30.8-.2-2.3 0-3.5-.3-3.5-.6 0-1.1 5.5-23.8 6.7-29.2 5.9 0 35.2-.2 35 .5l-7.4 29.5Z'\n","export const featureraces =\n 'M175.8,127.5c34.2-14.8,64.3-51.3,64.3-92.5c0-22.7-8.8-24.5-8.8-24.5h-104h-104c0,0-8.8,1.8-8.8,24.5 c0,41.1,30,77.7,64.3,92.5c34.2,14.8,40.7,31,40.7,40.2c0,20.8-8.3,25.9-21.7,39.8c-13.4,13.9-29.6,12.9-29.6,19 c0,6,21.3,17.1,59.2,17.1c37.9,0,59.2-11.1,59.2-17.1c0-6-16.2-5.1-29.6-19c-13.4-13.9-21.7-19-21.7-39.8 C135.2,158.5,141.6,142.3,175.8,127.5z M200.8,58.1c0-12.9-3.2-15.7-3.2-25c0-9.2,6-14.8,17.6-14.8s30,13.9,3.2,61 c-26.8,47.2-61.5,49.9-61.5,49.9S200.8,98.4,200.8,58.1z M36.2,79.4c-26.8-47.2-8.3-61,3.2-61S57,23.9,57,33.2c0,9.2-3.2,12-3.2,25 c0,40.2,43.9,71.2,43.9,71.2S63,126.6,36.2,79.4z'\n","export const fixed =\n 'M128.22,3.73A124.41,124.41,0,0,0,3.73,128.22c0,68.38,55.67,124.05,124.49,124.05,68.38,0,124.05-55.67,124.05-124C252.27,59.4,196.6,3.73,128.22,3.73ZM177,85.62H107.51v34h60V144h-60v61.09h-29V61.3H177Z'\n","export const fixedHollow =\n 'M128.2,28.6c54.6,0,99.2,44.5,99.2,99.6c0,54.7-44.5,99.2-99.2,99.2c-55.2,0-99.6-44.6-99.6-99.2C28.6,73.1,73.1,28.6,128.2,28.6z M252.3,128.2c0-68.8-55.7-124.5-124.1-124.5C59.4,3.7,3.7,59.4,3.7,128.2c0,68.4,55.7,124.1,124.5,124.1C196.6,252.3,252.3,196.6,252.3,128.2z M78.3,61.7v142.3H107v-60.5h59.4v-24.1H107V85.8h68.8V61.7H78.3z'\n","export const futurefinalfield =\n 'M126.7,244c-64.3,0-116.5-52.2-116.5-116.5C10.2,63.2,62.4,11,126.7,11c64.3,0,116.5,52.2,116.5,116.5 C243.2,191.8,191.1,244,126.7,244z M126.7,36.9c-50,0-90.6,40.6-90.6,90.6c0,50,40.6,90.6,90.6,90.6c50,0,90.6-40.6,90.6-90.6 C217.3,77.5,176.8,36.9,126.7,36.9z M147.4,189.5h-38.8l49.2-62.1l-49.2-62.1h38.8l49.2,62.1L147.4,189.5z M106,179.2H67.2 l38.8-51.8L67.2,75.6H106l38.8,51.8L106,179.2z'\n","export const giddyup =\n 'M72.2,113.2l3.9-0.8c9.9-2.3,16.1-9.1,22.4-16.3c1-1.1,2.1-2.3,3.1-3.4c8.7-9.8,17.6-20.3,26.1-30.5l3.2-3.8c7-8.4,9.6-18.7,12.4-29.6l0.4-1.4c1.8-7.1,3.7-13,5.9-18.2c1.5-3.7,6.5-6.4,10-6.6c15.3-0.7,26.3,9.3,28.6,25.9c2.3,16.5-3.4,31.7-10,47c-2.6,5.9-4.9,11.7-5.4,18.5h54.9c9.2,0,17.3,3.7,22.3,10.3c4.8,6.3,6.2,14.4,3.9,22.8c-2,7.4-4.7,11.7-9.6,15.2c4.4,9.9,7.3,23.2-4.3,36.7c0,0.2,0,0.5,0.1,0.7c4.2,11.7,1.9,22.3-6.9,32.5c-0.4,0.5-1.3,1.9-1.7,5.3c-0.2,1.8-0.3,3.6-0.3,5.6c-0.1,2.9-0.1,5.8-0.8,8.8c-3.1,13.8-13.6,21.2-31.9,22.6c-4.4,0.3-9,0.5-13.5,0.5c-26.6,0-54.9-5.6-84.3-16.5c-6.1-2.3-14.1-3.8-22-5.5l-6.4-1.2V113.2z M29.8,218.6c-7.9,0-14.3-6.4-14.3-14.4s6.4-14.4,14.3-14.4s14.3,6.4,14.3,14.4S37.7,218.6,29.8,218.6 M53,113.1c-10.5-0.3-21.2,0-31.7-0.1c-10.2-0.1-18,8.3-17.9,17.8c0.4,28.3,0.3,55.3-0.1,83.6c-0.1,9.6,7.3,18.1,18.1,18c8-0.1,16.6,0.4,24.6-0.1c3-0.2,5.9-0.2,9.3,0V113C51.9,113.1,53.6,113.1,53,113.1'\n","export const greysboxchallenge =\n 'M214.9,10.7L11.4,40.2L25,133.5c10.3-6.1,16.4-13.2,18-16c4-7,5-27,37-24c16-14,52.1-13,68.6-3c10,14.5,38,26,62.6,28 c2,1.5,2.5,16.3-11.4,15.9c-1.9,6-6.4,7.9-6.4,7.9l2.2-7.9c0,0-1.1-0.5-3-1.2l-0.7,1.4l-1.9,2.6l-3.7-2.1l-2.6,1.5L179,133l-3,1.5 l-2.4-3.6l-3.2,1.5l-3-0.5l-2.3,0.9l-3.4-1.3l-5.4,1.1l-0.4-2.2c-4.4,0.9-8.9,2.4-13.5,4.7c-0.3,1.6,0.2,2.6,1,3.3l5.2-4.2l1.7,2 l2.6-0.7l-0.6,5.3l4.3-1.1l1.7,3.4l3.7-0.2l1.3,2.2h4.1l-0.2,1.9l4.7-1.5l2.3,3.7c0,0,3.8-0.4,3.8,0.2s2.4,2.6,2.4,2.6 s4.5,0.5,6.2-3c1.7-3.6,3.8-1.5,3,1.5c-0.6,2.5-2,4.9-2.8,5.8c1,0.1,1.9,0.2,2.8,0.2c0,3,2.2,7.1-19.5,4.5 c-21.8-2.6-56.7-7.9-85.2,21.8C75,193,58.4,209.8,38.5,227l2.4,16.7l203.5-29.5L214.9,10.7z'\n","export const hamburger = 'M4,20V51H253V20Zm0,93v31H253V113Zm0,92v31H253V205Z'\n","export const help =\n 'M143.3 71.5a17.4 17.4 0 0 1 .7 5 17 17 0 0 1-1.1 6.2 16.1 16.1 0 0 1-3.3 5.3 15.2 15.2 0 0 1-5 3.5 14.4 14.4 0 0 1-5.9 1.2 14.2 14.2 0 0 1-5.9-1.3A15 15 0 0 1 118 88a16 16 0 0 1-3.3-5.2 16.7 16.7 0 0 1-1.2-6.2 16.5 16.5 0 0 1 2-8.1 15.8 15.8 0 0 1 5.7-5.9 14.3 14.3 0 0 1 7.6-2.2 14.6 14.6 0 0 1 4.9.8 14 14 0 0 1 4.2 2.4 18.1 18.1 0 0 1 3.2 3.4 15 15 0 0 1 2.2 4.5zm-5.4 41a12.6 12.6 0 0 0-4.1-3 11.7 11.7 0 0 0-10 0 12.8 12.8 0 0 0-4.2 3.1 14.6 14.6 0 0 0-2.8 4.7 16 16 0 0 0-1 5.6V181a16 16 0 0 0 1 5.5 14.6 14.6 0 0 0 2.8 4.8 12.9 12.9 0 0 0 4.2 3.1 11.8 11.8 0 0 0 11.4-.9 14 14 0 0 0 4.7-5.3 15.4 15.4 0 0 0 1.8-7.2v-58.2a15.9 15.9 0 0 0-1-5.6 14.4 14.4 0 0 0-2.8-4.6zm103.6 15A112.8 112.8 0 1 1 128.8 14.9a112.9 112.9 0 0 1 112.7 112.8zm-12.4 0A100.4 100.4 0 1 0 128.8 228 100.5 100.5 0 0 0 229 127.6z'\n","export const house =\n 'M215.6,230.4V128l40.4-0.5L127.7,25.6L0,127.5h40.4v102.9H108v-73.7H148v73.7H215.6z'\n","export const info =\n 'M128,228a21.6,21.6,0,0,1-11.12-3,22.37,22.37,0,0,1-8.13-8.12,21.66,21.66,0,0,1-3-11.13V116.5a21.78,21.78,0,0,1,1.75-8.62A21.81,21.81,0,0,1,119.38,96,21.78,21.78,0,0,1,128,94.25a22.19,22.19,0,0,1,22.25,22.25v89.25A22.19,22.19,0,0,1,128,228Zm0-155.5a22.19,22.19,0,0,1-22.25-22.25,22.77,22.77,0,0,1,1.13-7A20.29,20.29,0,0,1,110,37.13a25.43,25.43,0,0,1,4.75-4.75,20.49,20.49,0,0,1,6.13-3.25A22.35,22.35,0,0,1,128,28a21.66,21.66,0,0,1,11.13,3,22.37,22.37,0,0,1,8.12,8.13,21.6,21.6,0,0,1,3,11.12,21.83,21.83,0,0,1-1.75,8.63,21.86,21.86,0,0,1-11.87,11.87A21.83,21.83,0,0,1,128,72.5Z'\n","export const infoCircled =\n 'M141.88,104.46h-27.5v88.88h27.5ZM214,55A111.69,111.69,0,0,0,55.79,41.49C8.36,81.74,2.38,153.09,42.24,201.31c39.85,47.83,110.8,53.81,157.83,13.55A114,114,0,0,0,214,55ZM127.93,213.27c-46.63,0-84.1-38.26-84.1-85.29s37.47-85.3,84.1-85.3S212.43,81,212.43,128,174.56,213.27,127.93,213.27ZM141.88,62.61h-27.5v27.5h27.5Z'\n","export const infoCircledInvert =\n 'M55.78,42.2C8.29,82.04,2.31,152.66,42.21,200.39c39.9,47.34,110.93,53.26,158.02,13.41c47.48-39.84,53.47-110.46,13.57-158.19C173.89,8.27,103.26,2.36,55.78,42.2z M141.97,192.5h-27.53v-87.97h27.53V192.5zM141.97,90.72h-27.53V63.11h27.53V90.72z'\n","export const infoInvert =\n 'M218,15.5H38a21.62,21.62,0,0,0-15.87,6.63A21.62,21.62,0,0,0,15.5,38V218a21.66,21.66,0,0,0,6.63,15.88A21.65,21.65,0,0,0,38,240.5H218A22.6,22.6,0,0,0,240.5,218V38a21.65,21.65,0,0,0-6.62-15.87A21.66,21.66,0,0,0,218,15.5Zm-75,165a15,15,0,1,1-30,0v-60a15,15,0,1,1,30,0Zm-15-90a14.94,14.94,0,0,1-15-15,15,15,0,1,1,30,0,14.89,14.89,0,0,1-2,7.5,14.53,14.53,0,0,1-5.5,5.5A14.89,14.89,0,0,1,128,90.5Z'\n","export const jockeychallenge =\n 'M221.1,106.6c-10.4-3.8-21.7-6.5-29.6-7.2c-0.6-5.7-3.3-23.9-12.7-42.3c-13.5-26.4-35.1-41.6-62.7-44.3 c-1.7-3.4-6.5-5.3-13.5-5.3c-1.4,0-2.9,0.1-4.4,0.3c-6.9,0.8-14.1,3.6-15.9,8.1c-26.9,8-47.2,29.5-59.4,63.6 C11.2,112,11,143.9,11,145.3l0,9.5l6.5-7c0.1-0.1,2.3-2.4,7-5.6c4.3,6.4,31.2,44.4,73.2,51.6c-0.4,29,8.2,51.4,8.6,52.5l12.6-4.9 c-0.1-0.3-11.4-30.1-6.4-63.6c4.5-30.2,0.7-49.8-1-56.6c1,0,2,0,2.9,0c9.5,0.1,23.9,1.3,39.5,5.9c13.9,4.1,37.9,10,61.5,7.8 c23.6-2.3,28.7-8.2,28.7-12C244,121,244,114.9,221.1,106.6z M86.8,30.7c-10.5,13.9-25.3,46.9-18.5,86.6c-2.5,0.5-5,1-7.3,1.6 C52.5,66.4,86.8,30.7,86.8,30.7z M99.1,175.8c-0.3,2-0.5,4-0.7,5.9c-35-6.7-58.9-38.9-63.6-45.6c12.7-6.4,32.9-13.3,62.2-14.6 C98.8,127.9,103.3,148.2,99.1,175.8z M112.7,28c0,0,39,27.8,40,82.5c-2.3,0.4-4.8,0.8-7.4,1.1C145.6,60.9,123.2,38.9,112.7,28z M151.2,118.4c30.1-4.6,38.5-13.2,39.6-14.5l1-1.2C191.8,102.7,214.3,115.6,151.2,118.4z'\n","export const logout =\n 'M45.17647 230.35331H75.29411C83.62345 230.35331 90.35294 223.62352 90.35294 215.29449C90.35294 206.96395 83.62345 200.23567 75.29411 200.23567H45.17647C36.86113 200.23567 30.11764 193.49232 30.11764 185.17684V64.70595C30.11764 56.39062 36.86113 49.64713 45.17647 49.64713H75.29411C83.62345 49.64713 90.35294 42.90349 90.35294 34.58831C90.35294 26.27297 83.62345 19.52948 75.29411 19.52948H45.17647C20.22580 19.52948 0 39.75529 0 64.70595V185.17684C0 210.11727 20.22580 230.35331 45.17647 230.35331ZM237.55294 116.70588L169.74155 52.70588C166.45872 49.61039 161.64743 48.76468 157.50625 50.54403C153.36357 52.33076 150.67708 56.41216 150.67708 60.92047L150.63491 94.80282L90.39917 94.80237C82.07450 94.80237 75.33086 101.54586 75.33086 109.86119V139.97884C75.33086 148.29417 82.07917 155.03811 90.39917 155.03811L150.63491 155.03811L150.67708 188.49731C150.67708 193.00442 153.36357 197.08536 157.50625 198.87284C161.64894 200.6528 166.46174 199.80649 169.74155 196.71190L237.55294 132.71145C242.07058 128.89404 242.07058 120.98831 237.55294 116.70588Z'\n","export const listen =\n 'M85 157.4c3.7 28.3 44.5 17.8 63.4 19.6 11.1 0 21.4-8.8 22.7-19.6l5.4-44.8c3.5-23.2-2.8-60.7-5.4-84C167.3.3 126.6 10.8 107.7 9A23.2 23.2 0 0 0 85 28.6l-5.4 44.7c-3.5 23.3 2.8 60.8 5.4 84ZM207.4 88h-20c1.2 18.3-4.7 52.6-6.5 70.6a33 33 0 0 1-32.5 28.4c-25.6-.7-68.7 7.7-73.4-28.4-1.7-18.1-7.6-52-6.4-70.6h-20c-1.1 19.7 4.5 53.9 6.6 73.1 3.4 30.4 33.3 49.4 62.8 45.9v20H88v20h80v-20h-30v-20c29.6 3.5 59.5-15.5 62.8-45.9 2-19.4 7.6-53.3 6.6-73.1Z'\n\nexport const watch =\n 'M20,24H236c6.65,0,12,5.89,12,13.15v137.7c0,7.26-5.38,13.15-12,13.15H146v17h24c6.64,0,12,5.83,12,13v13H74V218c0-7.2,5.38-13,12-13h24V188H20c-6.65,0-12-5.89-12-13.15V37.15C8,29.89,13.38,24,20,24Zm6,20V168H230V44Z'\n\nexport const blog =\n 'M92 9.3v29.9C160 39 216.7 95.7 216.1 164h30C247 80.8 176.3 8.4 92 9.3ZM94.4 62H92v29.3a73.7 73.7 0 0 1 72.3 72.2c1.7 1 27.6.5 29.4.3 1.5-53.7-46-102.4-99.3-101.8ZM29 63.3c-11.1.3-19.5 8.7-19 21.5V174c-5 61.1 70.8 98.9 111.4 51.6 32.8-31.7 21.1-93.4-23.6-107-11.6-2.8-28.7-7.8-37.7 3.4-5.2 7-6 14.3-2.4 22 3.3 7 9.3 10.6 18 10.4 18-.9 29.5 14.8 25 31.4-6.8 30.1-50.5 25.8-51.5-4.8-.3-4.2-.2-80-.2-98.1.3-12-9-19.7-19.9-19.6Z'\n\nexport const play =\n 'M207.86 117.05L65.57 21.21c-10-6.85-22.76 0-22.76 10.95v191.68c0 10.95 12.8 17.8 22.76 10.95L207.86 139a13.91 13.91 0 000-21.9z'\n\nexport const stop =\n 'M237.51 229.69a7.34 7.34 0 01-6.88 7.82H26.31a7.34 7.34 0 01-7.82-6.88V26.31a7.34 7.34 0 016.88-7.82h204.32a7.34 7.34 0 017.82 6.88v204.32z'\n","export const minus = 'M14,111v35H241V111Z'\n","export const minusCircled =\n 'M225.8,45.6C180.2-8.5,99.7-15.5,45.6,30.2s-61.1,126.2-15.4,180.3s126.2,61.1,180.3,15.4C264.5,180.5,271.5,99.7,225.8,45.6C225.8,45.9,225.8,45.9,225.8,45.6z M128.1,224.4c-53.2,0-96.2-43-96.2-96.2S74.9,32,128.1,32s96.2,43,96.2,96.2S181.4,224.4,128.1,224.4L128.1,224.4z M196.2,112.4H60.1v31.4h136.1V112.4z'\n","export const more =\n 'M157.38 39.88c0-16.16-13.22-29.38-29.38-29.38S98.62 23.72 98.62 39.88 111.84 69.26 128 69.26s29.38-13.22 29.38-29.38Zm0 176.25c0-16.16-13.22-29.38-29.38-29.38s-29.38 13.22-29.38 29.38 13.22 29.38 29.38 29.38 29.38-13.22 29.38-29.38Zm0-88.12c0-16.16-13.22-29.38-29.38-29.38s-29.38 13.22-29.38 29.38 13.22 29.38 29.38 29.38 29.38-13.22 29.38-29.38Z'\n","export const mystery =\n 'M91.4,223.9c0,17.9,16.5,31.2,32.4,31.2s31.7-12.5,31.7-31.9S138.8,192,123.6,192C106.4,192,91.4,206,91.4,223.9zM179.9,130.9c15.5-11.5,35.9-27.4,35.9-59.8S188.4,1.3,129.1,1.3S42.8,34.7,42.8,60.6c0,25.9,25.4,38.9,46.4,38.9c20.9,0,33.4-13,33.4-16s-2-3-5-3c-3.5,0-10-6.5-10-12.5c0-6,7-18.5,22.9-18.5c16,0,23.4,13,23.4,24.4s-6.5,21.4-25.4,40.4c-18.9,18.9-28.4,31.4-28.4,40.9c0,9.5,0,9.5,0,14c0,4.5,5,11.5,14.5,11.5h19.4c6.5,0,10-3,10.5-12C145,159.9,164.5,142.4,179.9,130.9z'\n","export const notificationAdd =\n 'M106,238c-6.1,0-11.2-2.2-15.5-6.5C86.2,227.2,84,222,84,216h44c0,6-2.2,11.2-6.5,15.5C117.2,235.8,112.1,238,106,238z M183,139v-33h-33V84h33V51h22v33h33v22h-33v33H183z M18,205v-22h22v-77c0-15.6,4.7-29.2,14-40.8c9.3-11.6,21.2-19.3,35.5-23v-7.7c0-4.6,1.6-8.5,4.8-11.7c3.2-3.2,7.1-4.8,11.7-4.8s8.5,1.6,11.7,4.8c3.2,3.2,4.8,7.1,4.8,11.7v7.7c3.5,0.7,6.8,1.8,10,3.2c3.2,1.4,6.1,3,8.7,4.8c-5.3,6.4-9.3,13.4-12,20.9c-2.7,7.5-4,15.5-4,23.9c0,15.6,4.3,29.3,12.8,41.1c8.5,11.8,19.9,20.5,34,26V183h22v22H18z'\n","export const notifications =\n 'M217 200.15c-6.69-7.86-16.69-14.17-20.5-23.4-.22-43.45 8.59-103.73-42.3-121.2-7.23-1.86-9.13-2.68-8-10.95 0-8.16-7-15.28-15.35-16.1h-.75c-6.55 0-12.44 3.65-14.6 9.45-4.86 2.57-3.4 9.66-3.65 13.95l-.74.75c-.75 0-.75.75-1.5.75-1.5 0-2.15.74-3.65 1.49-.75 0-.75 0-1.5.75-12.48 2.9-22.68 13-29.86 23.21a.73.73 0 01-.74.75c0 .75-.75.75-.75 1.5-16.41 24.73-10.51 55.85-11.61 84-.64 5.22 1.6 11.67-1.49 16.1-4.4 4.4-8.8 9.45-13.86 13.85-7.87 6.81-6.8 7.65-6.64 17.5h178.2c-.71-3.8 1.29-9.3-.71-12.4zM71.71 30.14c5-2.84 1.14-9.54-3-6.64h-.65c-5.8 3.65-16.09 8.79-27 24-10.34 14.4-21.53 39.9-12.35 41.7 2.15 0 3.65-.75 3.65-2.9.51-15.95 21.47-49.83 39.35-56.16zm9.54 19.61C76 51.41 70 55.52 62.27 65.83 55 76.77 52.73 88.45 52.08 91.44c0 1.41-1.5 2.9-3.65 2.9-8.59-1.61.69-21.28 8.7-32.91 8-10.94 16.08-15.33 20.38-18.32 4.7-1.67 9.21 3.89 3.74 6.64zm149.5 35.06c-.75-5.8-4.4-21.88-16.08-38-11.47-15.4-21.29-19.88-27.67-24.74a3.79 3.79 0 00-3.64 6.64l.74 1.5c17.83 6.23 38.9 40.47 39.35 56.19.29 5.33 9.01 3.14 7.3-1.59zm-56.94-35.06c33 17.25 25.85 47.52 32.81 44.5a3.3 3.3 0 003.65-4.39c-.87-15.65-16.78-39.29-32.07-46.66-5.2-1.63-8.45 3.27-4.39 6.55zm-67 169.75c-1.06 29.48 45.65 27.67 44.51 0z'\n","export const notificationsActive =\n 'M18,106c0-16.1,3.3-31.4,9.8-45.8C34.3,45.8,43.6,33.4,55.7,23l15.7,15.4C61.4,47,53.7,57.1,48.2,68.7C42.7,80.4,40,92.8,40,106H18z M216,106c0-13.2-2.8-25.6-8.2-37.3c-5.5-11.6-13.2-21.8-23.1-30.4L200.3,23c12.1,10.4,21.4,22.9,27.9,37.3c6.5,14.4,9.8,29.6,9.8,45.8H216z M40,205v-22h22v-77c0-15.2,4.6-28.7,13.7-40.6c9.2-11.8,21.1-19.6,35.7-23.2v-7.7c0-4.6,1.6-8.5,4.8-11.7c3.2-3.2,7.1-4.8,11.7-4.8c4.6,0,8.5,1.6,11.7,4.8c3.2,3.2,4.8,7.1,4.8,11.7v7.7c14.7,3.7,26.6,11.4,35.7,23.2C189.4,77.3,194,90.8,194,106v77h22v22H40z M128,238c-6.1,0-11.2-2.2-15.5-6.5c-4.3-4.3-6.5-9.5-6.5-15.5h44c0,6-2.2,11.2-6.5,15.5C139.2,235.8,134.1,238,128,238z'\n","export const offer =\n 'M14.3 91.22L38.92 83 31 58.46h26l.23-25.74 24.43 7.72 7.91-24.33 20.94 15 15.09-20.85 15.13 20.82 20.93-15 7.91 24.33L194 32.72v25.74h26.65l-8 25.11 24.57 8.18-15 21.06L242.88 128l-20.59 15.21 15 21.06-24.57 8 8 24.29h-25.6l-.23 25.74-24.62-7.72-8 24.34-21.1-15-15.24 20.83-15.24-20.83-21.09 15-8-24.34-24.6 7.7-.23-25.74-25.77-.23 8-24.58-24.62-8 15-21.06-20.7-15.17 20.63-15.21zm74.15 29.55a26.26 26.26 0 004.1 8.54 23.87 23.87 0 005.61 5.62 25.85 25.85 0 007.61 3.27 49.49 49.49 0 008.3 1.64c2.42.23 5.5.43 9.25.58l4.44.36a32.92 32.92 0 014.1.7 10.49 10.49 0 014.32 1.87 6.94 6.94 0 012.34 3.39 6.71 6.71 0 01-.58 4.45 8.3 8.3 0 01-3.16 3.39 23.5 23.5 0 01-4.91 2.22 26.31 26.31 0 01-17.79-1.63L107.87 176q11 3.27 24.8.7l4.45 15.21 11.47-3.27-4.22-15.21a26.18 26.18 0 0015.68-14.63 31.73 31.73 0 001.41-22.11 24.38 24.38 0 00-15.56-17.09 49.6 49.6 0 00-10.9-1.87q-2.34-.24-6.31-.24a58.56 58.56 0 01-6.09-.23 43.82 43.82 0 01-4.68-.82 9.39 9.39 0 01-4-1.75 7.06 7.06 0 01-2.11-3.28 8.07 8.07 0 011.76-7.72A13.94 13.94 0 01121 99q11.46-3.29 25.73 4l4.92-21.76q-6.09-3-17.08-4a44 44 0 00-17.08 1.4l-4.22-15L101.55 67 106 82.63q-24.33 14.04-17.55 38.14z'\n","export const pencil =\n 'M153.9,41.2l60.9,60.9l-142,142l-60.9-60.9L153.9,41.2z M1.8,254.2h40.6L1.8,213.6V254.2z M224.9,10.8c0,0-20.3-20.2-40.6,0C164,31,164,31,164,31l60.9,60.9c0,0,0,0,20.3-20.3c20.3-20.3,0-40.6,0-40.6L224.9,10.8z'\n","export const pending =\n 'M237 105.23h-82.12l33.18-34.15C155 38.38 101.47 37.17 68.41 69.87a83.24 83.24 0 000 118.56 85 85 0 00119.65 0c16.47-16.22 24.71-35.24 24.71-59.22H237c0 24-10.66 55.11-32 76.18-42.51 42.15-111.54 42.15-154 0S8.21 95.06 50.72 53a108.86 108.86 0 01153.21 0L237 19zM134.05 79.56V131l42.39 25.19-8.72 14.65-51.84-30.76V79.56z'\n","export const person =\n 'M0,228.2h128h128c0-8.5-1.4-16.1-4.3-22.6c-2.8-6.5-6.6-11.7-11.2-15.5c-4.6-3.8-10-7.1-15.9-10c-6-2.8-12.1-4.9-18.3-6.1c-6.3-1.2-12.4-2.5-18.3-3.7c-6-1.2-11.3-2.3-15.9-3.1c-4.6-0.9-8.4-2.1-11.2-3.7c-2.8-1.6-4.3-3.7-4.3-6.4c0-5.1,0.9-9.7,2.6-13.8s3.8-7.5,6.3-10.4c2.5-2.8,4.9-5.6,7.4-8.4s4.6-6.2,6.3-10.2s2.6-8.8,2.6-14.1V57.5c0-13.5-5.1-23.9-15.4-31.4S143.2,14.8,128,14.8c-15.2,0-27.9,3.7-38.1,11.2S74.5,44,74.5,57.5v42.7c0,5.3,0.9,10,2.6,14.1c1.7,4.1,3.8,7.5,6.3,10.2c2.5,2.7,4.9,5.5,7.4,8.4c2.5,2.8,4.6,6.3,6.3,10.4c1.7,4.1,2.6,8.7,2.6,13.8c0,2.8-1.8,5.2-5.5,7c-3.7,1.8-8.4,3.2-14.2,4.3c-5.8,1-12.2,2.2-19.3,3.4s-14.2,3.1-21.3,5.5c-7.1,2.5-13.6,5.6-19.3,9.4S9.2,195.9,5.5,203C1.8,210.1,0,218.5,0,228.2z'\n\nexport const personMinimal =\n 'M128 128C110.39999 128 95.33333 121.73333 82.8 109.2C70.26666 96.66666 64 81.6 64 64C64 46.4 70.26666 31.33333 82.8 18.8C95.33333 6.26666 110.39999 0 128 0C145.6 0 160.66666 6.26666 173.2 18.8C185.73333 31.33333 192 46.4 192 64C192 81.6 185.73333 96.66666 173.2 109.2C160.66666 121.73333 145.6 128 128 128ZM0 256V211.2C0 202.13333 2.336 193.79733 7.008 186.192C11.66933 178.59733 17.86666 172.79999 25.59999 168.79999C42.13333 160.53333 58.93333 154.33066 76 150.192C93.06666 146.064 110.39999 144 128 144C145.6 144 162.93333 146.064 180 150.192C197.06666 154.33066 213.86666 160.53333 230.4 168.79999C238.13333 172.79999 244.33066 178.59733 248.992 186.192C253.664 193.79733 256 202.13333 256 211.2V256H0Z'\n\nexport const jockey =\n 'M152.5 152.71s-10.43 9.43-8.18 16.35c11.68 1.99 49.16 26.14 57.24 49.06H54.38c.02-36.41 21.67-60.73 21.67-60.73s4.51-4.61 6.77-23.07c-28.44-51.12 1.29-96.09 32.89-96.09s66.42 8.43 66.42 40.72c0 0 2.64 1.87 17.77.23 1.35-.15 2.26 1.28 1.38 2.32-7.55 8.85-21.4 8.99-21.4 8.99v6.92c0 13.84 9.03 13.84 9.03 20.76 0 9.23-9.03 4.61-9.03 4.61s1.68 20.69-2.83 29.92-24.53 0-24.53 0Z'\n","export const phone =\n 'M59.74 112.23a192 192 0 0083.53 83.53l27.88-27.89a12.61 12.61 0 0112.93-3 144.63 144.63 0 0045.31 7.23A12.64 12.64 0 01242 184.73V229a12.73 12.73 0 01-12.75 12.68C110.3 241.6 13.9 145.2 13.86 26.25A12.73 12.73 0 0126.54 13.5H70.9a12.65 12.65 0 0112.67 12.6 143.84 143.84 0 007.23 45.32 12.73 12.73 0 01-3.17 12.93z'\n","export const plus = 'M110,242h35V15H110ZM14,111v35H241V111Z'\n","export const plusCircled =\n 'M225.8,45.6C180.2-8.5,99.7-15.5,45.6,30.2C-8.5,75.8-15.5,156.3,30.2,210.4c45.6,54.1,126.2,61.1,180.3,15.4C264.5,180.5,271.5,99.7,225.8,45.6z M128.1,224.4c-53.2,0-96.2-43-96.2-96.2S74.9,32,128.1,32s96.2,43,96.2,96.2C224.4,181.4,181.4,224.4,128.1,224.4z M144.2,58.5h-32.1v53.6H58.5v32.1h53.6v53.6h32.1v-53.6h53.6v-32.1h-53.6V58.5z'\n\nexport const plusCircledFill =\n 'M225.58 45.1C179.98-9 99.48-16 45.38 29.7c-54.1 45.6-61.1 126.1-15.4 180.2 45.6 54.1 126.2 61.1 180.3 15.4 54-45.3 61-126.1 15.3-180.2Zm-28 98.6h-53.6v53.6h-32.1v-53.6h-53.6v-32.1h53.6V58h32.1v53.6h53.6v32.1Z'\n","export const pushNotification =\n 'M223.2,200.6c-7-7-14-14-20.3-21.1c-0.8-0.8-1.6-3.1-1.6-3.9c0-19.5,0-39,0-57.7c0-8.6-0.8-16.4-3.1-25c-7-22.6-20.3-39-42.1-46.8c-2.3-0.8-6.2-1.6-7.8-3.1c-1.6-1.6-0.8-5.5-0.8-8.6c0-8.6-7-15.6-15.6-17.2h-0.8l0,0h-0.8l0,0c-7,0-13.3,3.9-15.6,10.1c-3.1,1.6-3.1,3.9-3.9,7c0,0.8,0,0.8,0,1.6c0,1.6,0,3.1,0,3.9s0,1.6,0,1.6v0.8L110,43c-0.8,0-0.8,0.8-1.6,0.8c-1.6,0-2.3,0.8-3.9,1.6c-0.8,0-0.8,0-1.6,0.8h-0.8c-9.4,3.1-17.9,8.6-24.2,16.4l-0.8,0.8L76.5,64c-2.3,2.3-3.9,4.7-5.5,7c0,0,0,0.8-0.8,0.8c0,0.8-0.8,0.8-0.8,1.6c0,0,0,0-0.8,0.8c-6.1,10.9-10,21.8-10.8,34.3c0,3.1-0.8,6.2-0.8,9.4c0,2.3,0,3.9,0,6.2c0,13.3,0,25.7,0,39c0,4.7,0,8.6,0,13.3c0,1.6-0.8,3.1-1.6,3.9c-4.7,4.7-9.4,10.1-14.8,14.8c-1.6,1.6-3.9,3.9-5.5,5.5c-0.8,0.8-1.6,1.6-1.6,2.3c0,0.8,0,1.6,0,2.3c0,3.1,0,5.5,0,8.6c32,0,64,0,95.2,0c32,0,64,0,95.2,0c0-3.1,0-6.2,0-9.4C224.7,202.9,224,201.3,223.2,200.6z M67.9,18.8L67.9,18.8c2.3-1.6,3.1-3.9,2.3-5.5c-0.8-2.3-3.9-3.1-5.5-1.6H64c-6.2,3.9-17.2,9.4-28.9,25.7C22.7,53.9,18.8,71,18,77.3c0,2.3,1.6,3.9,3.1,4.7c0,0,0,0,0.8,0c2.3,0,3.9-0.8,3.9-3.1c0.8-4.7,3.9-21.1,15.6-36.7C52.3,27.4,61.7,21.9,67.9,18.8z M78.1,39.8h-0.8c-4.7,2.4-11.7,6.3-19.5,17.2C50,68.7,47.6,81.2,46.9,84.4c0,1.5-1.6,3.1-3.9,3.1c-0.8,0-0.8,0-0.8,0c-1.5-0.8-3.1-2.4-3.1-4.7c0.7-4.7,3.9-18,13.2-30.5c8.6-11.7,17.2-16.4,21.8-19.6h0.8c1.6-0.7,3.9,0,5.5,1.6C81.2,36.7,80.4,39,78.1,39.8z M238,77.3c-0.8-6.2-4.7-23.4-17.2-40.6C209.1,21.1,198.2,14.9,192,11l-0.8-0.8c-1.6-0.8-4.7,0-5.5,1.6s0,4.7,1.6,5.5l0.8,1.6c6.2,3.1,15.6,8.6,26.5,23.4c11.7,15.6,14.8,32,15.6,36.7c0,2.3,2.3,3.9,3.9,3.1c0,0,0,0,0.8,0C237.2,82,238.8,79.6,238,77.3z M177.1,39.8L177.1,39.8c5.5,3.1,12.5,7,20.3,17.2c8.6,11.7,10.9,23.4,10.9,27.3c0,2.3,2.3,3.9,3.9,3.1c0,0,0,0,0.8,0c2.3,0,3.9-2.3,3.1-4.7c-0.8-4.7-3.1-17.9-12.5-30.4c-8.6-11.7-17.2-16.4-21.8-19.5H181c-1.6-0.8-4.7,0-5.5,1.6C174.8,36.7,175.6,39.1,177.1,39.8z M105.4,221.6c-0.8,13.3,10.9,24.2,25,23.4c12.5-0.8,24.2-12.5,22.6-23.4C136.6,221.6,121,221.6,105.4,221.6z'\n","export const races =\n 'M255.4 100.4c-2.4 2.5-2.8 4.9-5.3 3.6 1 2.2-.5 2.3-2.3 2.4-1.4.3-1.7.6-3.3 0-4-2.6-10-6-15-7-3.8-1-6.1-2.1-9.7-2.6-8.8 4.9-12.6 16.7-20 23.3.3 4-2.8 12-9.5 24.3 5.2 7.3 23.3 10.8 22.8 20.1-2.3 5.7-4 18.6-10 25h-.5c1.5 3.2-3.2 13.9-6.7 14-2.3-2.7-3.6-8.9-.8-11.5a13 13 0 0 0 3.3-.3l.3-7c7.6-12 11-25.3-9.3-24-9.5-3.4-8.5-2.2-15.5-4-6.7-1.7-12.2-1.2-8.6 6.6 1.9 8.3 8.8 26.7-3.9 28-3.4 0-8.9 0-16.6-.2.8 3 1.7 7 .4 10-2.5-.5-5.8-3-9.7-7.4l1.5-2.3-1.8-1.8h-3.6c-4.9-5-13.3-8.4-21.4-11.2 4.6 2.7 6.1 8.5 7.2 13.5 2 5.8.1 10.4-6 10.2a7 7 0 0 0-1.9-5c-5-5.7 4.9-7-2-11-5-2-10.8-7.4-15.7-10.2-2.9-2.7-9.1-2.3-12.3-4-5.3-5.3 5-13.6 5.5-19 .4-3.4 1-4.2-1-6.4-5.8-4-17.8-8.7-20.2-13.8a13.1 13.1 0 0 1-8.1 13.3c1.6-1.9 2.5-4.5 1.3-6.4-2.2 1.9.1 1-2.2 3-3.5 3.5-6.3 6-10.8 7 4.3-3.4 6.6-7 6.9-10.7-7 7-19.3 11.9-30 10.2 1.4 0 5-2.5 5.8-3.3-9.1 1.4-14.7 1.2-17-.5 6.4.5 10.6-.4 12.6-2.6-5.5.8-13.7-1.2-18-3.1 4.4.6 15.4 1.4 18.7-1-6.4-.2-19-2.9-23-7.6a61 61 0 0 0 23.2 2c-3-1.3-10-5.2-11.2-9 19.5 14.9 43.9-1.8 56-18 12.1-14 31.3-16 48.6-13.1 6.6-4.3 20 2.5 29 .5l1-1.5c-13.2 1.2-32.6-8-16.8-19.9-.4-1.5 1.8-3 2.8-3.6-.5-12.4 28.5-11.1 36.4-7.4 4.4-.2 2.5-3.7 6.7-6.1 7.8-6.5 17.2 2.2 12.5 10.6l2 1.7c-5.3-1-3.3 0-6.4 2.5l-1.3-.3c-1.9 1.8-4.7 4.3-7.7 4.4l-1.8-2-1.5.3c-.7 1.2.2 3 .8 4.1-.1.4 3.4 1.3 3.4 1.4l5.3 2a6.3 6.3 0 0 1 6.3 2.7c1-1 0-2.7-3.3-4.9a50.3 50.3 0 0 0 5.1 1c0-1.9-.8-2.8-2-2.8l3.6 1c-.7-2-2.3-3-4.9-3 2.5-1 5.8-.8 7.7.4a3 3 0 0 0-2-3l4.1 1.4c.2-.9-1-2.2-1.8-2.8a8 8 0 0 1 4 1.8c-.7-1.6-2.6-3.6-4.8-3 2.3-1.1 7.1-.2 9 1-.5-.8-2.5-1.8-3.2-2.4l.3-.3c1.7.2 4-.4 5.4.7a12.6 12.6 0 0 0-4.6-2.5 20.1 20.1 0 0 1 12.5 4.8h2.3c-1.9-1.7-3.6-3.5-4-6.1a15.6 15.6 0 0 1 6.6 2.2c5.3-.2 10 .1 14.2 3.5 2.3 2.5 15.6 13.3 15.4 17.6 7.7 6 10.5 10.4 8.5 13.6Zm-154.2 47.2q-5.7 11.5-8.6 14.1c-2 6.5 1.5 10 7 11-.2-3.6 1.5-7.8 3.4-11.4 0-7.9-.5-12.4-1.8-13.7Zm58.8 37.7c-.3-3.4-2.6-5.8-4.3-9-3.6-8.3-5.7-20-14.4-25-2.3.8-5.1 1.2-7.2-.1-3-2.4-4.5-1.9-15.3-6.4 1.6 9-12.3 24 1 29.5 3.5 1.2 10 5.7 13.5 2.6 4.4 1 1.5 5.2 5.1 5.3a6 6 0 0 1 4.1 1.3 112 112 0 0 0 17.5 1.8Z'\n","export const racingspecials =\n 'M37,131.2l2.9,2.8c3.1-1.5,6-2.6,8.8-3.2C45.9,130.5,40.8,130.8,37,131.2z M249.5,99.5l-84.6-12.3L127,10.5L89.2,87.2 L4.5,99.5l30.7,29.9c13.3-7.6,33.2-11.7,33.2-11.7s-4-1.8-17.5-4c26-7.6,44.4-1.8,44.4-1.8s-8.1-4.9-19.7-7.6 c4.9-2.7,23.8-7.2,38.5,1.3c-0.9-5.4,6.3-17,10.7-26c3.6,9,2.7,18.8,2.7,18.8s3.1-6.3,8.5-11.2c0.4,10.3-5.4,21.1-5.4,21.1 s-0.4,5.4,10.3,15.2c10.8,9.9,36.3,44.4,42.1,56.9c5.8,12.5,3.1,11.7-0.9,18.4c-4,6.7-5.8,8.5-9.4,7.6c0.9,3.1,3.1,4.5-6.3,4.5 c-9.4,0-13.4-11.2-13.4-11.2s-3.6-4-26-13.9c-19.3,1.8-29.1-15.2-22.9-31.8c-9,14.3,4,29.1,4,29.1s-6.8,15-8.9,35l27.6-14.5 l75.7,39.8l-14.5-84.3L249.5,99.5z'\n","export const redo =\n 'm202.1 31.51 29.03-29.03c1-1 1.9-1.36 2.69-1.07.79.29 1.18 1.22 1.18 2.79v77.83c0 1.43-.54 2.69-1.61 3.76s-2.33 1.61-3.76 1.61H151.8c-1.58 0-2.51-.39-2.8-1.18s.07-1.68 1.08-2.69l28.6-28.59C163.06 44.05 146 38.6 127.51 38.6c-17.5 0-33.61 4.53-48.33 13.58a91.292 91.292 0 0 0-29.9 29.9C40.23 96.8 35.7 112.91 35.7 130.41s4.53 33.61 13.58 48.33a91.292 91.292 0 0 0 29.9 29.9c14.72 9.05 30.83 13.58 48.33 13.58s33.61-4.53 48.33-13.58a91.292 91.292 0 0 0 29.9-29.9c9.05-14.72 13.58-30.83 13.58-48.33h32.25c0 16.77-3.26 32.82-9.78 48.16-6.52 15.34-15.34 28.56-26.45 39.67-11.11 11.11-24.33 19.92-39.67 26.44-15.34 6.52-31.39 9.78-48.16 9.78s-32.82-3.26-48.16-9.78-28.56-15.34-39.67-26.44c-11.11-11.11-19.92-24.33-26.45-39.67-6.52-15.34-9.78-31.39-9.78-48.16s3.26-32.82 9.78-48.16c6.52-15.34 15.34-28.56 26.45-39.67 11.11-11.11 24.33-19.92 39.67-26.45 15.34-6.52 31.39-9.78 48.16-9.78 27.52 0 52.39 8.39 74.61 25.15Z'\n","export const remove =\n 'M211.37,236,236,211.37,44.63,20,20,44.63ZM20,211.37,44.63,236,236,44.63,211.37,20Z'\n","export const resulted =\n 'M6.15 164.2q4.06-14.62 7.31-25.72a113.08 113.08 0 0124.64.52c-1.37 4.77-5.84 20.81-7.31 25.72a113.08 113.08 0 00-24.64-.52zm14.62-51.72c1.33-4.72 6.23-20.77 7.31-25.72A115.42 115.42 0 0153 87.3q-1.9 6.49-7.59 25.7a120.11 120.11 0 00-24.64-.52zm40.89 31.41A148.45 148.45 0 0038.1 139c2.14-8.13 5.62-17.84 7.31-26A137.84 137.84 0 0169 118.17q-4.63 15.7-7.34 25.72zM53 87.3c1.11-5.11 6-21 7.31-26a125.36 125.36 0 0123.28 5.14q-2.43 9.21-7.31 25.72A149.49 149.49 0 0053 87.3zM43 34.77a125.91 125.91 0 0124.64.81c-2.56 8.61-5 17.08-7.31 25.73a111.87 111.87 0 00-24.64-.54c1.76-5.67 4.98-18.87 7.31-26zM213 223c-8.15 1-16.51.47-24.64-.54 1.77-6.35 6.06-21.59 7.31-25.73a139.38 139.38 0 0024.64.54c-1.94 8.58-4.85 16.86-7.31 25.73zm22.21-77.44c-2.78 8.28-5 17.28-7.31 25.72a115.9 115.9 0 01-24.9-.58c1.58-4.87 5.93-20.93 7.59-25.72a141.27 141.27 0 0024.64.54zm14.64-51.76q-.27 1.08-7.31 25.72a113.08 113.08 0 01-24.64-.52c2.28-8.35 4.88-17.65 7.31-26a125.86 125.86 0 0024.64.8zM76.82 178a179.76 179.76 0 00-22.47-8.12c2.18-7.68 5.22-18.4 7.31-26a221.54 221.54 0 0122.47 8.4c-1.19 3.99-6.13 21.35-7.31 25.72zM69 118.17c2.12-7.84 5.23-18.23 7.31-26a188.92 188.92 0 0122.48 8.4c-2.38 8.4-4.73 17.35-7.31 25.72q-11.95-4.87-22.48-8.12zm44.41 18.41q-4.06 14.63-7.31 25.73c-7.78-3.71-14.4-6.85-21.94-10 1.37-4.75 5.85-21.11 7.32-26 7.3 3.33 14.66 6.58 21.9 10.27zm-14.62-36c2.28-7.88 5.47-18 7.31-26q9.48 4.07 22.2 10.29c-3 8.76-4.75 16.69-7.58 25.73q-12.72-6.23-21.96-10.03zM90.9 40.46a239.3 239.3 0 0122.75 8.39c-3 7.77-4.65 17.85-7.58 25.72a182.06 182.06 0 00-22.48-8.12C85.1 62 89.54 45.24 90.9 40.46zm29.52 158.67c-8-4.25-12.6-6.49-21.66-10.83 1.18-4.6 6.07-21.87 7.31-26 4.19 2.31 17.62 8.64 21.93 10.83-3.27 9.95-4.23 15.02-7.58 26zm-7-62.55c1.28-5 6.19-20.88 7.31-26 9.67 4.83 9 4.52 21.93 10.83-1.32 4.92-6.26 21.29-7.31 26-6.47-3.58-15.35-7.56-21.97-10.83zm43.86 20.85c-2.11 7.84-5.23 18.23-7.31 26q-9.19-4.06-21.93-10.29c2.27-8.54 4.65-17.34 7.31-25.73q12.65 6.23 21.89 10.02zm-14.62-36q4.33-15.17 7.31-26 12.73 6.51 21.94 10.29c-1.42 4.94-5.88 20.84-7.32 26q-9.24-4.07-21.97-10.3zm-7-62.55c4 2.25 17.61 8.58 21.66 10.83-1.54 4.83-6 20.89-7.31 25.72-4.32-1.76-17.44-8.67-21.66-10.56 1.16-4.82 5.54-20.63 7.23-26zm29.44 158.66c-7-2.67-15.81-4.93-22.48-8.39q1.9-7 7.31-25.72 11.92 4.86 22.48 8.12c-1.68 4.92-6.14 20.84-7.31 25.99zm-.55-85.83q11.92 4.88 22.48 8.12c-2.09 8.63-5 17.15-7.31 25.72a180.44 180.44 0 01-22.48-8.12q5.15-18.67 7.31-25.72zm7.86 59.84c2.06-8.72 4.86-17.2 7.31-26 6.24 2 16.73 4.76 23.28 5.15-1.36 4.75-5.84 21.1-7.31 26a163.13 163.13 0 01-23.28-5.15zm21.93-77.71A119.83 119.83 0 00217.9 119c-1.51 4.42-6 21.22-7.31 26a173.55 173.55 0 01-23.59-5.17q5.18-18.13 7.34-25.99zm-15.16-34.12a173 173 0 0022.47 8.39c-1.91 7.81-5.05 18-7.31 25.73a181.51 181.51 0 01-22.47-8.13q1.35-4.6 7.31-25.99z'\n","export const scanMyBet =\n 'm101.3 111.4-9.9 1.2 4 31.8 9.8-1.2Zm-25.7 3.2 10.3-1.3 3.9 31.8-10.3 1.3Zm-25.5 3-7.1.9 3.9 31.7 7.1-.8ZM31.3 120l7-.8 3.8 31.7-7 .9Zm30.8-3.8 4.9-.5 3.9 31.8-4.9.5Zm-8 1 3.2-.4 4 31.8-3.3.4Zm198.5-28.8a2.7 2.7 0 0 0-1.5-1.7L150.7 44a3.7 3.7 0 0 0-1.1-.2 4.3 4.3 0 0 0-1.1.2c-.5 0-.8.3-1.2.4a3 3 0 0 0-.6.9L115 118.5v.2c.3.5 10.2 80.3 10.6 80.5l65.7 27.9a3.7 3.7 0 0 0 1 .1 4.3 4.3 0 0 0 1.2-.2 2.3 2.3 0 0 0 1-.6 3 3 0 0 0 .5-.9l57.6-135a2.9 2.9 0 0 0 0-2.1Zm-9.4 6.8L192.5 214a2.4 2.4 0 0 1-.5.8 2.1 2.1 0 0 1-.8.5 3.7 3.7 0 0 1-1 .2 3.1 3.1 0 0 1-1-.2l-60-24.7-8.4-69.4 29.2-66a2.6 2.6 0 0 1 .5-.8l1-.4a3.8 3.8 0 0 1 1-.2 3.2 3.2 0 0 1 1 .2L242 91.8a2.3 2.3 0 0 1 1.3 1.4 2.5 2.5 0 0 1 0 2ZM132.3 215 109.8 30.9a14.6 14.6 0 0 0-16.3-12.7L16 27.6A14.7 14.7 0 0 0 3.2 44l22.6 184A14.6 14.6 0 0 0 42 240.7l77.6-9.4a14.6 14.6 0 0 0 12.7-16.3Zm-102-12.4L14 68.1l91.3-11.2 16.5 134.6Zm182-73-9.1-4-12.6 29.4 9 4Zm-23.7-10.3 9.5 4.1-12.7 29.3-9.4-4Zm-23.5-10-6.6-2.9-12.6 29.3 6.5 2.8Zm-17.4-7.6 6.5 2.7-12.6 29.3-6.4-2.7Zm28.6 12.3 4.5 1.9-12.7 29.3-4.5-2Zm-7.5-3.2 3 1.3-12.7 29.3-3-1.3Z'\n","export const shareIos =\n 'm167.4 48.59-14.34 14.57L137 46.84v81.67h-20V46.84l-16.06 16.32L86.6 48.59 127 7.53ZM209 72v112.47A20.59 20.59 0 0 1 188.47 205H65.5A20.51 20.51 0 0 1 45 184.47V71.53A20.53 20.53 0 0 1 65.53 51L66 72v112h123V72l-.4-21c11.22 0 20.4 9.35 20.4 21Z'\n\nexport const shareAndroid =\n 'M196 175.2a33 33 0 0 0-22.21 8.72L93 136.9a37 37 0 0 0 1-7.9 36.89 36.89 0 0 0-1-8l79.9-46.57A33.92 33.92 0 1 0 162 49.64a36.89 36.89 0 0 0 1 7.93l-79.9 46.58a34 34 0 1 0 0 49.63l80.69 47.14a31.85 31.85 0 0 0-.91 7.37A33.09 33.09 0 1 0 196 175.2Z'\n\nexport const shareWeb =\n 'M201 182H55V75h33.12s8.12-11.35 24.59-22H43.29A11.3 11.3 0 0 0 32 64.29v128.45A11.31 11.31 0 0 0 43.32 204h169.39A11.3 11.3 0 0 0 224 192.71v-62.48l-23 18.08Zm-35-77v37.58l75.28-56.17L166 29.76v35.11c-91 0-94.1 96.63-94.1 96.63C97.66 119.45 116.6 105 166 105Z'\n\nexport const twitter =\n 'm225.9 80.5.1 6.5c0 66.7-50.8 143.7-143.7 143.7A143 143 0 0 1 5 208a102.7 102.7 0 0 0 12 .7 101.5 101.5 0 0 0 62.8-21.6A50.5 50.5 0 0 1 32.5 152a50.3 50.3 0 0 0 22.8-.9 50.5 50.5 0 0 1-40.5-49.5v-.6a50 50 0 0 0 22.9 6.3A50.6 50.6 0 0 1 22 40a143.3 143.3 0 0 0 104 52.8 50.5 50.5 0 0 1 86.1-46.1 101.5 101.5 0 0 0 32-12.3 50.8 50.8 0 0 1-22.1 28 100.6 100.6 0 0 0 29-8 102.8 102.8 0 0 1-25.2 26.2Z'\n\nexport const facebook =\n 'M236.8 124.8A109.8 109.8 0 0 0 129.6 17.5C68.8 16.6 19.2 66.5 19.2 128A110 110 0 0 0 111 237.3V160H83v-32h28v-24c0-27.7 16.4-42.9 41.4-42.9a167.5 167.5 0 0 1 24.6 2.1v28h-14c-13.8 0-18 8.5-18 17.3v19.8h30.2l-4.8 32H145v77.3c53-8.5 93.4-56 91.8-112.7Z'\n\nexport const instagram =\n 'M128 20.6c-40.2 1-44-2.4-70.8 5.6C33 36 21.3 57.4 20.5 84.3c-1 9-.8 80 0 89 .8 26.9 12.6 48.4 36.7 58 27 8 30.5 4.7 70.8 5.6 40.2-1 44 2.4 70.8-5.7 24.1-9.6 35.9-31 36.7-57.8 1-9.1.8-80 0-89.2-.8-26.8-12.6-48.3-36.7-57.8-27-8-30.5-4.8-70.8-5.7Zm0 19.4c48.9 1 84.3-7 88 45 1 9 .8 78.4 0 87.4-1.6 17.4-2.8 22-11.9 32.5-20.6 17.4-38.3 10.8-76.3 12.5-38.1-1.7-55.8 4.8-76.4-12.6-9.2-10.5-10.2-15.2-12-32.6-.7-9.1-.6-78.3 0-87.4 4-52.2 39.2-44 88.2-45Zm0 33.1c-73 1.3-73 109.9 0 111 73-1.1 73-109.7 0-111Zm0 91.6c-47.1-.2-47.1-71.9 0-72 47.1.2 47.1 71.8 0 72ZM198.7 71c0 17-25.9 17-26 0 .1-17 26-17 26 0Z'\n","export const sports =\n 'M137.3 162.8c3.1-18.3 16.8-33.9 29.7-46.8-8.4-4.8-4.7-7.7 2.3-2.3l4.2-4.5a40.3 40.3 0 0 0-5-3c-1.2-.5-1-1 .3-1.7 2.6-.6 4.6 1.1 7 2.8 1.5-2 2.1-2 4.5-4-2.4-1.4-4-2.3-5.2-2.8s-1-1 .2-1.5c2.5-1.2 5.1 1.1 7.5 2.2 1-.7 2.5-1.5 3.7-2.5a22.3 22.3 0 0 0-5.2-2.7c-1-.3-1.1-.8-.3-1.3 2.7-1.2 6.3 1 8.3 2.3a33 33 0 0 1 3.5-2 13.7 13.7 0 0 0-4.8-2c-5.4-1.8 5.2-1.8 7 .8a23 23 0 0 1 3-1.3c-1.5-1.3-4.3-1.6-5.5-2.5a9.9 9.9 0 0 1 7.7 1.5 37.4 37.4 0 0 1 13.3-2.7C183.2 76 142.2 106 134 135.3c-3 9.3-3 21.3 3.2 27.5Zm-49 11.5c32.7 1 56.1-36.3 42.2-65.6a39.1 39.1 0 0 1-2.7 3h-.3A61.2 61.2 0 0 0 115 98.2c0-3.6-1.6-7-3.3-10l-.5-.2a11.8 11.8 0 0 0 1.3.5c-9.7-5.9-23.8-10-33.5-2.2-25.3-3.3-42.2 29.7-36 52a21.8 21.8 0 0 0-30-6l30.3 30.5a21.1 21.1 0 0 0 3.5-14 46.7 46.7 0 0 0 41.5 25.5ZM113 135q8.5-1.7 13.3-5.2a22 22 0 0 1 2.2 14.2c-1.1 2.6-1.7 3-3.7 6.1-2.2 2.7-4.7 6.5-7.5 8a47.2 47.2 0 0 1-10-5.8A43.8 43.8 0 0 0 113 135ZM83 96.3a82.4 82.4 0 0 1 17.8 6.7c.7 4.8.3 12.4-.3 18.3a97.4 97.4 0 0 1-19.5 4A70.7 70.7 0 0 1 70.7 110q2.8-5 12.3-13.8Zm-7.8 48a91 91 0 0 0 13 13.2 80 80 0 0 0-7.5 10.3v.2c-16.5-4.3-20.2-5.8-21-21 4.5-.5 11.3-1.4 15.5-2.7Zm-32.7-13.5a51.9 51.9 0 0 1 4.5-23.3l4.7-4.5a22 22 0 0 0 3.3 10.8c-3.6 5.4-4.7 12-5.8 18a22.8 22.8 0 0 1-6.7-1ZM247.8 152c-7 0-13.3-6.2-20.4-5-14.2 3.3-12.3 21.4 1.1 24.5-17.6-4-15.4-25.2 1.1-26.4 4.2-1.4 21 10.2 23 3.4a20 20 0 0 0-27.8-16.8c11.3-19 1.7-51-23.5-39.2 1.4 1 4.6 3.9 3 4.5-1.7-.3-2.7-2.7-5-3.8-.6.5-2.7.9-3 1.5 1.1 1.1 4 3.6 3.2 5.3-.3.5-.9.3-1.7-.5a19.9 19.9 0 0 0-3.8-3.8 32.9 32.9 0 0 0-3.5 2c.9 1.2 5.2 4.1 3 6-2-.7-3.2-3-5.8-4.2a30.4 30.4 0 0 0-3.7 2.7c1.6 1.1 5.5 3.9 3.7 6-2.4 1-3.3-2.5-6.2-4a46.6 46.6 0 0 0-4.8 3.8c2 1 7.2 5.2 4 6.7-2.3-1-3.6-3.6-6.2-4.7a61.7 61.7 0 0 1-4.5 4.2c1.3 1.2 7.3 4.7 4 6-2.8.3-3.3-1.7-6.3-3.5-12.6 13-27 29.6-29.5 47.3 15.6 19.4 58 1 73-13.8-2.2 13.1 10.1 22.6 22 22.3 10.1.2 23-12 19.3-23.3-.6 2.2-2.4 2.8-4.8 2.8ZM7 138l30.8 30.5.7-.5-31-30.8a4 4 0 0 1-.5.8Zm34.8 26.8-31-30.8v-.2c-.9-.9-3.7 1.9-2.6 2.7l31 31c.5.8 3.8-2 2.6-2.5Zm-32.3 1.5A22 22 0 0 0 37 169L6.5 138.8a22 22 0 0 0 3 27.5Zm2-33 30.8 31a2.8 2.8 0 0 1 .5-.8l-30.5-30.7a2 2 0 0 1-.8.5Z'\n","export const statement =\n 'M208.4,70.5l-56.2-57.6c-1.4-1.4-3.3-2.4-5.2-2.4H47.4c-3.8,0-7.1,3.3-7.1,7.1v212.5c0,3.8,3.3,7.1,7.1,7.1h155.8c3.8,0,7.1-3.3,7.1-7.1V75.2C210.3,73.3,209.3,71.9,208.4,70.5z M153.6,34.6l31.6,32.6h-31.6V34.6z M54.5,223V24.7h85v49.6c0,3.8,3.3,7.1,7.1,7.1h49.6V223H54.5z M84.4,111.6c0,1.9,1.4,3.8,3.8,3.8s3.8-1.4,3.8-3.8v-3.8c8-1.4,14.2-8,14.2-15.6c0-8.5-8-16.1-17.9-16.1c-6.1,0-10.4-3.8-10.4-9c0-4.7,4.7-9,10.4-9s10.4,3.8,10.4,9c0,1.9,1.4,3.8,3.8,3.8s3.8-1.4,3.8-3.8c0-7.6-6.1-14.2-14.2-15.6v-3.8c0-1.9-1.4-3.8-3.8-3.8s-3.8,1.9-3.8,3.8v3.8c-8,1.4-14.2,8-14.2,15.6c0,9,7.6,16.1,17.9,16.1c6.1,0,10.4,4.7,10.4,9c0,4.7-4.7,9-10.4,9s-10.4-3.8-10.4-9c0-1.9-1.4-3.8-3.8-3.8c-2.4,0-3.8,1.4-3.8,3.8c0,7.6,6.1,14.2,14.2,15.6V111.6z M173.2,147H87.7c-3.8,0-7.1,3.3-7.1,7.1s2.8,7.1,7.1,7.1h85.5c3.8,0,7.1-3.3,7.1-7.1S177,147,173.2,147z M173.2,104.5h-35.4c-3.8,0-7.1,3.3-7.1,7.1c0,3.8,3.3,7.1,7.1,7.1h35.4c3.8,0,7.1-3.3,7.1-7.1C180.3,107.8,177,104.5,173.2,104.5z M173.2,189.5H87.7c-3.8,0-7.1,3.3-7.1,7.1s2.8,7.1,7.1,7.1h85.5c3.8,0,7.1-3.3,7.1-7.1S177,189.5,173.2,189.5z'\n\nexport const stm = statement\n","export const tab =\n 'M253,150.5q0,16.25-11.75,26.88t-30,10.62H170a14.3,14.3,0,0,1-7.88-1.88,8.13,8.13,0,0,1-3.62-4.38,22.25,22.25,0,0,1-.75-6.25V134l16-66h36.5q18,0,27.88,8.25T248,99.5a28.58,28.58,0,0,1-2.88,12.5,25.1,25.1,0,0,1-8.12,9.75,30.66,30.66,0,0,1,8.62,7,29.33,29.33,0,0,1,5.5,9.88A37.31,37.31,0,0,1,253,150.5ZM208.25,94.75h-20.5v17h19.75q10,0,10-9a7.48,7.48,0,0,0-2.38-5.88Q212.75,94.75,208.25,94.75Zm.5,41.75h-21V161h21a18,18,0,0,0,6.38-1,10,10,0,0,0,3.88-2.38,12.82,12.82,0,0,0,2.12-3.25,10.31,10.31,0,0,0,1-3.12,21.43,21.43,0,0,0,.12-2.25,12.08,12.08,0,0,0-3.5-9.12q-3.5-3.37-10-3.38ZM112.25,165l-4,16.5a8.07,8.07,0,0,1-1.88,3.25,10.76,10.76,0,0,1-3.12,2.38,8.26,8.26,0,0,1-3.75.88H73.75l29-120H141.5a14.45,14.45,0,0,1,8.62,3,12.43,12.43,0,0,1,5.12,7.25L160,96.76,143.5,165H112.25Zm17.25-60h-2.75l-8.5,34.25H137.5ZM71.25,97v69.75l-5,21.25H44.75Q38,188,38,182V97H9.25Q3,97,3,91.25V74q0-6,6.25-6h86l-7,29h-17Z'\n","export const tabLocator =\n 'M192.8 36.9a91.4 91.4 0 0 0-132.4 3.3c-35.3 38.1-32.6 99.7 9 131.4C88 185.8 100 203.3 112 222l15.8 24.8c3.7-5.4 6.3-9 8.7-12.7 15.1-24 30-46.9 53.3-65.6 40.2-32.2 39.6-95.2 3-131.7Zm-66 141.4a75.8 75.8 0 0 1-74.8-77A75.5 75.5 0 0 1 128.6 26a76.3 76.3 0 0 1 75.8 76.1c0 42.4-35 76.8-77.5 76.2Zm42.2-22.6c-11-13.2-4.6-36-8.7-36.2 4.7.3-10.4-6.2-12.6-9.7-3.7-11-17.5-16.7-18.2-29.1 2.4 5.3 6 13 12 12.3-5.3-4.7-5.3-4.7-5.6-6.3 3.8 2.4 11.4 1.4 11.6 7.4 3.8-8.3-11.3-13.4-8.8-21.2 1.6 6.4 5 10.8 11 13.1-6.8-6.6-9-13.4-6.3-20.8 4.5 9.7-1-7.3-2.6-11.5l2.7 3.9c-1-4.9-3.8-7.7-7.1-11.4 4 .5 6.1 3.2 8.2 5.7-2.2-7-6.6-12.3-12.3-16.7 7.3.7-9.7-2.3-7.7-7.3l-3.1 3.7c2.5-4.7-27.3-.8-10 .7l-3.7.8c11.4 1-12.1 6.2-8.1 12.8 3.8 5.3 11-2.2 16.5 0-1.4 6.7-4.4 12.4-11 15.1-7.5 4.4-4 11-13.5 3-8-1.3-8.8 12.5-9 18 2.7 5.4 6 11 11.2 14.2 3-2.9 3-6.8-1.2-8.6-4.6-32.5 18.6 19 26.1 22.6 4.5 4.8-3 11.3 1.4 16.8 15.8 24 10.7 26.2 1.4 47.4 16.5.7 10.4-10.2 15-20.2 6-17-5-17.8 11-36.8-1.3 10.1-5.6 20-.8 30.4 1.5-21.6-.7 17.5 15.5 15.4a14.1 14.1 0 0 1-6.6-6.5c4.1 2.5 11 1.8 12.3 7.1 3.3-8.1-11.6-13-9.2-21.5 2.7 8.3 6.6 13.2 10.2 13.4Z'\n","export const tabtouchLogoCompact =\n 'M37 188h-8v26.5c0 3 .3 3.8 2.7 3.8 1.5.2 6.4-1 6.3 1.8v8.7c0 1-.9 1.7-2 2-33.7 6.8-24.8-20.2-26-43-1.7-.7-8.6-.8-8.5-3.6.6-10.2-2.9-10.5 8.5-10.2v-8.4a2.3 2.3 0 0 1 2-2l14.8-2.6c1.8-.3 2.2.8 2.2 1.9V174h7.1a2 2 0 0 1 1.9 2v9.7a2 2 0 0 1-2 2M68.5 232c-19.1.7-27.6-14-25.9-32.5 0-17.3 9.5-26.7 26-26.7 19.1-.7 27.5 14.1 25.8 32.5 0 17.3-9.4 26.7-25.9 26.7m6.5-32.5c1-14.6-14.9-14.6-14 0v5.7c-.9 14.6 15 14.8 14 0Zm74 31.5h-14.3c-2.3 0-2-2.7-2-4.2-15.7 11.3-35.4 3.8-33.7-17.4v-33.2a2 2 0 0 1 2-2.2h14.8a2.3 2.3 0 0 1 2.2 2.2v33.4c-1 9 8.3 7.8 14 4.8v-38.2a2 2 0 0 1 2-2.2h15a2.3 2.3 0 0 1 2.1 2.2V229a2 2 0 0 1-2 2m45-.6c-24.5 6-39.4-4.3-37-31.7-1-23.3 19.3-29.5 37-24.3 1.3.3 2 .7 2 2v11.1c0 1.2-.6 2.1-2 1.9-7.4-.1-18.7-4.6-18.1 9.3-.8 19 2.2 18.1 18 16.7 1.5-.2 2.1.6 2.1 1.8v11.1c0 1.3-.7 1.8-2 2m57 .7h-15a2 2 0 0 1-2-2v-34c.3-8.8-8.5-7.2-14-4.3v38.2a2 2 0 0 1-1.9 2.1h-14a2.2 2.2 0 0 1-2.1-2.2V157a2 2 0 0 1 1.9-2h14a2 2 0 0 1 2 2v20c16.7-9.3 34.3-2.2 33 18.4v33.8a2 2 0 0 1-2 2M160.4 53c-3.4-10.6-3.4-29-19-29H102L72.4 145h26.4c3.8 0 7.7-2.9 8.6-6.5l4-16.5h32.2Zm-42.6 43c11.4-46.3 8.3-46.3 19.5 0Zm120.3-17.4a28.1 28.1 0 0 0 11.2-22.4c1.5-38-48-31.4-75.3-31.6L157.8 91c.9 62.9-10.9 53.8 54.2 54 38.9 3 58.3-47.6 26-66.3M188 51h21c6 0 9.2 2.9 9.2 8.1 0 6-3.4 8.9-10 8.9H188V51Zm22 67h-22V93h21.8c16-1.6 21.3 24.3 0 25m-144 27.6 5.2-21.3V54h17.2l7-29H7.8c-4.4 0-6.3 1.7-6.3 5.9C1 62.2-.8 52.4 37 54v85.7c0 3.9 2.4 6 7 6h21.8Z'\n","export const tickCircled =\n 'M 225.87617,45.51558 C 180.3213,-8.53936 99.57633,-15.43368 45.518476,30.12118 -8.5393781,75.673136 -15.430787,156.42102 30.124075,210.47887 75.678936,264.53963 156.42391,271.43104 210.48176,225.87618 264.54253,180.31841 271.42812,99.573439 225.87617,45.51558 Z m -97.87896,178.8072 c -53.199699,0 -96.32555,-43.12585 -96.32555,-96.32555 0,-53.199701 43.125851,-96.32555 96.32555,-96.32555 53.1997,0 96.32264,43.125849 96.32264,96.32555 0,53.1997 -43.12294,96.32555 -96.32264,96.32555 z M 194.90701,87.2713 171.21324,66.506893 102.09552,148.1042 67.306849,118.383 l -18.72811,23.59777 58.479531,50.47979 z'\n\nexport const tickCircleSolid =\n 'M128.5 12A115.5 115.5 0 1 0 244 127.5 115.5 115.5 0 0 0 128.5 12Zm-17 187.25-65.69-56.7 21-26.51 39.07 33.38 77.64-91.65 26.66 23.33Z'\n","export const trackConditions =\n 'M191.15,83.08H102.68L132,50.94,100.69,16.63,29,94.93a55.11,55.11,0,0,0-14.36,14.35q-6.4,9.06-10.53,23.09A105.74,105.74,0,0,0,0,162.32a93,93,0,0,0,3.84,27.45q3.84,12.48,9.39,20.13a65.78,65.78,0,0,0,13.22,13.56,69.91,69.91,0,0,0,14.08,8.74,94.68,94.68,0,0,0,13.37,4.68,96.08,96.08,0,0,0,9.39,2.19,29,29,0,0,0,3.84.3h53.76v-48H79.78l-3.69-.78A13.32,13.32,0,0,1,71,188.67a60.65,60.65,0,0,0-5.41-3.43q-4-2.34-5.12-5.46a77.51,77.51,0,0,0-3.7-8.12,17.23,17.23,0,0,1-1.56-10.92,46.28,46.28,0,0,1,.85-9.2,29.05,29.05,0,0,1,2.43-7.33A27.64,27.64,0,0,1,62,138.75a24.5,24.5,0,0,1,4.13-3.9,31.46,31.46,0,0,1,4.27-2.66,25.8,25.8,0,0,1,4.12-1.71,33.58,33.58,0,0,1,3.56-.94,11.69,11.69,0,0,1,2.42-.31h96.43a7.37,7.37,0,0,1,1.14.16c.57.1,1.61.36,3.13.78a17.76,17.76,0,0,1,4.4,1.87,29.9,29.9,0,0,1,4.7,3.59,22,22,0,0,1,4.41,5.62,35.38,35.38,0,0,1,3.13,8.26,44.4,44.4,0,0,1,1.28,11.23,41.79,41.79,0,0,1-2.42,14.82q-2.43,6.39-5.41,9.2a24.12,24.12,0,0,1-6.82,4.52,23.06,23.06,0,0,1-5.27,1.88,18.16,18.16,0,0,1-2.27.16H135.11v48h56a22.55,22.55,0,0,0,2.27-.15c1-.11,2.89-.47,5.84-1.09a80.31,80.31,0,0,0,8.67-2.34,74.54,74.54,0,0,0,10.1-4.37A79.32,79.32,0,0,0,229,224.7,63.15,63.15,0,0,0,239.22,215a60.91,60.91,0,0,0,8.67-13.26,80.64,80.64,0,0,0,5.83-17.47,99,99,0,0,0,2.28-22,103,103,0,0,0-2.28-22.15,74.62,74.62,0,0,0-6-17.63,78.36,78.36,0,0,0-8.53-13.42A56.59,56.59,0,0,0,229,99a91.87,91.87,0,0,0-10.82-7,71.84,71.84,0,0,0-10.24-4.68,89.69,89.69,0,0,0-8.67-2.65,60,60,0,0,0-6.12-1.25Z'\n","export const trash = 'M155 39V21h-54v18H47v27h162V39zm41 198V82H60v155'\n","export const trot =\n 'M256 174.2a76.2 76.2 0 0 1-9 3.6c-2.7-2-3.2-2.3-3.5-6-2.8.3-5-.3-6.7-3-3.3-3.2-6.7-6.1-10.4-9-5.9-3.8-15.8-7.4-21.3-11.7-2.5-2-7-2.4-9.6-3.7-.6-.6-1.5-1.5-2.4-1.4a13.2 13.2 0 0 1-8 2.8c-.1 1.7-2.3 15.2-1.8 17.1.3 5.5-4.8 9-10 7.7-25.7 1.4-6.1 2-30.4-8.4 2.8-2.1 11.9-7 12 .5 2.2 2.2 16 4.4 20.5 1.3-.1-3-2.7-10.2-2.3-13.6s-1-5.3-1.8-8.2c-13.9 1.4-27.3-5.4-39.4-8.7 1 9.6-8.6 22-2.3 29.6 4.6 3.3 15.6 11.4 15.3 12.6.2 1 8 7.9 7.4 11.4 1 4.6-6.8-.3-9.4-.9-1-2-1-3.7 0-5.1-3.7 1-7-5-8.5-6.7-2.4-1.5-6.9-5.7-9.7-7.6-19.2-8.5-.4-16.2-10.2-27.7a10 10 0 0 1-8.5 4.6q.7-.3.2-.2a136 136 0 0 0-14.9 5.4c-7.7 3-13.8 4-21.6 8.7 14.8 21.6-9 47-32.9 34.6-16.7-10.5-14.9-40.8 6.3-44.9v-2c-6.6 1.5-14.1 1.7-20.7 2.6l-.5-2a6.2 6.2 0 0 1-2.6-.3c-2-1.7-3.5-4.7-5.1-7.2-7.6-4.6-15.8-17-13.7-26.5 1.4-5 3.2-6.1 4.3-10.4-9.9-17 14.2-21.7 16.6-9a26 26 0 0 1 3 .5c-.6 1.4-2.7 1.4-3.8 1.8-.8 1.7.5 3.2 1.3 4.4l-1.5.5-1 5.9c-.3 1.9-2.1-.2-2.6-.5v2c2.7.2 9.2 6.6 8.7 9.7a7 7 0 0 0 2.3 1.8 68.3 68.3 0 0 0 8-4.8c1-2.7 2.4-4 5-4.4.7-.2.9.3.8.8.8-.1 1.4.9 1.8 1.2l57.8-9.4c12.6-6 20-5.6 35.3-5.6 17.2-.2 34.5 2.5 48.6-7.7-.1-.5-1.7-1-4.6-1.3 3.1-2 10.2-4 13.6-4.6-3.3-1.5-6.5-.8-11.5-.7a41.6 41.6 0 0 1 14.2-5c1.8-.6 7.7-.3 9.6-.4-2.6-1.7-6.4-2-10-2.3a32.3 32.3 0 0 1 17.4-1.3c-2.2-2-5.3-3-8.2-3.6a21.9 21.9 0 0 1 13.5.5q-1.2-3-6.1-5.3c4.2.3 9.9 1.8 12 5.9a11.2 11.2 0 0 1 2.3-9.8q2 1.3 2.8 5.4a13.8 13.8 0 0 1 2.6-4.3c.1 3.3.5 7.2-.5 10.5 9.1 7.7 17.8 19.5 23.2 29.6-.5 1.8-4 4-4 4.3-.7 1.5-2.2.7-3.4-.5-.3 2-4 4-6.2 1.7a75.5 75.5 0 0 0-19.1-10.9c-17.9 13.9-8.5 25.8-14.6 37.6 3.6 3.5 5.4 6.7 8.8 10 4.4 3.5 14 10.8 13.5 12.6 8.3 6 16.5 11.3 25.6 17.4ZM43.4 113.6c0 .7-.2 3-1 3.3a60.2 60.2 0 0 0 12.3-4.6V111c-3.2.2-7.3 1.4-11.3 1.8Zm-.5 9.2 5.4-.6c2.3-1.5 5.5-.7 7.6 1.6-2.3-3.1-2.7-2-3.8-4.9q1 1.3 4.4 2.3c-2.2-.8-3.3-4.6-5-5.1 2.3 0 3.2 3 5.7 2.6-1.6-1-2-2-3-2.9a6 6 0 0 0 2.5 0c-.7 0-2.2-.4-2.3-1.2a5.2 5.2 0 0 0 2.3 0c0-.5-.4-1-1.3-1.3a81.2 81.2 0 0 1-15.6 5.9c-1.3 1.1-1 1-2 1.2a6.6 6.6 0 0 1-1.8 1.3c-.5-.2-4.2 3.9-4.9 4.4a92.5 92.5 0 0 0 11.8-3.3ZM69.5 147h-.3c-3-1.4-9-4-12.5-6.4l-2.6 1.2.3.5L50 144v2.6a29 29 0 0 1 14.9 5.6 20.6 20.6 0 0 0 4.6-5.1Zm13.4-25.2c.3-.8.4-3 .7-4-4.6 1.5-8.7 10-11.8 12.2l4.3.3 4.1-1.8q.3-4.6 2.6-6.1a2 2 0 0 1 .1-.6Zm-3-9.8 6.2-5c-6.8 1.4-21.6 4.5-28.2 6.4 4.7 11.5 15.2 4.6 22.1-1.4Zm13.5 1.2c.8-2.2 1-2.8 1.9-3.8-4 .4-9.1 7.9-3.6 8.7l1.7-5Z'\n\nexport const trots = trot\n","export const unchecked =\n 'M 239,17.00001 239,239 l -221.999999,0 0,-221.99999 M 256,1.08e-5 0,1.08e-5 0,256 l 256,0 z'\n","export const visibilityoff =\n 'M128,75.3c29.4,0,53.3,23.9,53.3,53.3c0,6.9-1.4,13.4-3.8,19.5l31.2,31.2c16.1-13.4,28.8-30.8,36.6-50.7c-18.5-46.8-64-80-117.4-80c-14.9,0-29.2,2.7-42.5,7.5l23,23C114.5,76.8,121.1,75.3,128,75.3z M21.3,46.3l24.3,24.3l4.9,4.9C32.9,89.2,19,107.5,10.6,128.7c18.5,46.8,64,80,117.3,80c16.5,0,32.3-3.2,46.8-9l4.5,4.5l31.1,31.1l13.6-13.5L34.9,32.7C34.9,32.7,21.3,46.3,21.3,46.3z M80.3,105.2l16.5,16.5c-0.5,2.3-0.8,4.6-0.8,7c0,17.7,14.3,32,32,32c2.4,0,4.7-0.3,6.9-0.8l16.5,16.5c-7.1,3.5-15,5.7-23.4,5.7c-29.4,0-53.3-23.9-53.3-53.3C74.6,120.2,76.8,112.3,80.3,105.2z M126.2,96.8l33.6,33.6l0.2-1.8c0-17.7-14.3-32-32-32C128,96.7,126.2,96.8,126.2,96.8z'\n","export const visibilityon =\n 'M245,128c-18.4-46.8-63.8-80-117-80c-53.2,0-98.6,33.2-117,80 M11,128c18.4,46.8,63.8,80,117,80c53.2,0,98.6-33.2,117-80 M128,181.3c-29.4,0-53.2-23.9-53.2-53.3S98.6,74.7,128,74.7s53.2,23.9,53.2,53.3S157.4,181.3,128,181.3zM128,96c-17.6,0-31.9,14.3-31.9,32s14.3,32,31.9,32s31.9-14.3,31.9-32S145.6,96,128,96z'\n","export const warningCircled =\n 'M214 55A111.7 111.7 0 0 0 55.8 41.5a114.3 114.3 0 0 0-13.6 159.8A111.2 111.2 0 0 0 200.1 215 114 114 0 0 0 214 55zm-86 158.3c-46.7 0-84.2-38.3-84.2-85.3S81.3 42.7 128 42.7 212.4 81 212.4 128s-37.8 85.3-84.5 85.3zM114.3 62.6h27.5v88.9h-27.5zm0 103.2h27.5v27.5h-27.5z'\n","export const weatherCloudy =\n 'M228.17,137.62a6.06,6.06,0,0,0,.43-1.13,5.89,5.89,0,0,1,.43-1.14,5.89,5.89,0,0,0,.43-1.14,4.94,4.94,0,0,0,.14-1.14,16.63,16.63,0,0,0-.71-7.82,21.27,21.27,0,0,0-4.27-7.25,37.8,37.8,0,0,0-7.11-6.27A43,43,0,0,0,208,106.9a55.45,55.45,0,0,0-11.38-2.85,12,12,0,0,1-2.27-.28,24.77,24.77,0,0,0-.58-5.26A33.15,33.15,0,0,0,192,93a29,29,0,0,0-3-5.54A53.4,53.4,0,0,0,184.79,82a48.16,48.16,0,0,0-5.41-5.13,64.5,64.5,0,0,0-6.12-4.4q-17.35-10.53-32.44-6.55-15.93-12.8-39.54-9.1a55.55,55.55,0,0,0-17.35,5.54A49.22,49.22,0,0,0,70.7,72.05a36,36,0,0,0-7.82,12.52,27.5,27.5,0,0,0-1.42,14.08v.57a20.07,20.07,0,0,0-8-1.71,21.12,21.12,0,0,0-15.36,6.12,20.08,20.08,0,0,0-6.27,14.94v.28A34.62,34.62,0,0,0,9.25,129.52,31.12,31.12,0,0,0,0,151.85q0,13.67,10.39,23.47a35.34,35.34,0,0,0,25.18,9.82,35.85,35.85,0,0,0,19.06-5.41,15,15,0,0,0,2.13,3.56,36.41,36.41,0,0,0,2.71,3,20.43,20.43,0,0,0,3.13,2.56,16.34,16.34,0,0,0,3.69,1.85c1.33.47,2.66.9,4,1.28a28.47,28.47,0,0,0,4.83.15,24.83,24.83,0,0,0,4.56-.71,21.29,21.29,0,0,0,4.27-1.57,18.79,18.79,0,0,0,3.69-2.42A18.37,18.37,0,0,0,90.76,184a36.85,36.85,0,0,0,17.65,13.09,47,47,0,0,0,24.18,2.27,50,50,0,0,0,20.33-8.24A39.16,39.16,0,0,0,166.15,176a34.61,34.61,0,0,0,2.56,2.85,19.86,19.86,0,0,0,3.13,2.56,17.53,17.53,0,0,0,3.7,1.85,19.15,19.15,0,0,0,4,1A20.5,20.5,0,0,0,198.87,178a50.73,50.73,0,0,0,17.35,5.69q15.08,2,26.75-3.27t12.8-14.94q2-12.52-13.09-21.91a52.21,52.21,0,0,0-14.52-6Z'\n","export const weatherFine =\n 'M30.22,128a12.11,12.11,0,0,1-3.85,9.06,12.79,12.79,0,0,1-9.2,3.71,12.33,12.33,0,0,1-9.06-3.71,12.77,12.77,0,0,1,9.06-21.83,12.78,12.78,0,0,1,9.2,3.7A12.12,12.12,0,0,1,30.22,128Zm12.91,64.41a12.6,12.6,0,0,0-5.22,1.1q-7.68,3.28-7.69,11.81a12.15,12.15,0,0,0,1.1,5q3.3,7.95,11.81,8a12.36,12.36,0,0,0,9.06-3.85,12.54,12.54,0,0,0,3.85-9.2,12.12,12.12,0,0,0-3.85-9.06A12.58,12.58,0,0,0,43.13,192.41ZM56,50.83h0Zm146.52,7.54a12.8,12.8,0,0,0,2.75,2.75,13,13,0,0,0,3.57,1.79,12.88,12.88,0,0,0,13.18-21.28,12.59,12.59,0,0,0-15.52-2.07,12.54,12.54,0,0,0-6.32,11.12,15.48,15.48,0,0,0,.55,4.12A10.9,10.9,0,0,0,202.56,58.37ZM128,32.83a11.85,11.85,0,0,0,3.44-.55,14.07,14.07,0,0,0,3.16-1.37,11,11,0,0,0,2.47-2.06,27.72,27.72,0,0,0,2.05-2.61,9.08,9.08,0,0,0,1.37-3,13.33,13.33,0,0,0,.42-3.3,12.91,12.91,0,0,0-22-9.2,12.08,12.08,0,0,0-3.85,9.06,12.6,12.6,0,0,0,3.85,9.2A12.36,12.36,0,0,0,128,32.83Zm11.11,196.78a14.25,14.25,0,0,0-4.66-4.67,12,12,0,0,0-6.45-1.78,11.48,11.48,0,0,0-5.08,1.1,14.28,14.28,0,0,0-4,2.75,13.49,13.49,0,0,0-2.75,4.12,12.14,12.14,0,0,0-1.09,5,14.16,14.16,0,0,0,1.09,5.22Q119.48,249,128,249a12.36,12.36,0,0,0,2.33-.27c.83-.18,1.56-.36,2.2-.56a10.25,10.25,0,0,0,1.93-.82,8.22,8.22,0,0,0,1.78-1.37c.54-.56,1-1.11,1.51-1.66s.92-1.14,1.37-1.78a6.81,6.81,0,0,0,1-1.93c.19-.63.37-1.37.55-2.19a10.49,10.49,0,0,0,.28-2.34h0A12,12,0,0,0,139.11,229.61ZM247.89,118.93a12.46,12.46,0,0,0-9.2-3.71,13.38,13.38,0,0,0-4.95,1,11.89,11.89,0,0,0-4.12,2.62,13.2,13.2,0,0,0-2.75,4.12,12.49,12.49,0,0,0,2.75,14.15,12.79,12.79,0,0,0,9.2,3.71A12.67,12.67,0,0,0,251.59,128h0A12.33,12.33,0,0,0,247.89,118.93ZM43.13,37.78a12.76,12.76,0,0,0-5.22,1.1q-7.68,3.3-7.69,11.81a13,13,0,0,0,1.65,6.45,13,13,0,0,0,11.26,6.45,12.58,12.58,0,0,0,9.06-3.71A12.07,12.07,0,0,0,56,50.83a12.58,12.58,0,0,0-3.85-9.2A12.36,12.36,0,0,0,43.13,37.78Zm181,160.94a11.6,11.6,0,0,0-4.67-4.67A13,13,0,0,0,213,192.4a13.34,13.34,0,0,0-6.45,1.65,11.48,11.48,0,0,0-4.67,4.67,13.51,13.51,0,0,0-1.65,6.59,12.65,12.65,0,0,0,3.71,9.06,11.94,11.94,0,0,0,8.93,3.85,12.08,12.08,0,0,0,4.12-.69,13.12,13.12,0,0,0,3.57-1.92,16.39,16.39,0,0,0,2.88-2.75,9.53,9.53,0,0,0,1.79-3.57,15.68,15.68,0,0,0,.55-4h0A13.46,13.46,0,0,0,224.11,198.72Zm-35-106.43A69.73,69.73,0,0,0,178,77.87,71.64,71.64,0,0,0,163.7,66.74a67.82,67.82,0,0,0-16.9-7A72.48,72.48,0,0,0,128,57.26q-29.4,0-50.12,20.74T57.13,127.85a68.83,68.83,0,0,0,5.64,27.6,69.68,69.68,0,0,0,37.76,37.63A69.13,69.13,0,0,0,128,198.72q27.74,0,48.33-18.95,22.53-21.15,22.53-51.91h0a67.14,67.14,0,0,0-2.61-18.67A74.65,74.65,0,0,0,189.1,92.29Z'\n","export const weatherOvercast =\n 'M31.17,74.48a12.94,12.94,0,0,1,0-18.32,12.48,12.48,0,0,1,9.16-3.8A12.5,12.5,0,0,1,52.45,60a13,13,0,0,1,1.12,5.35,12.24,12.24,0,0,1-4,9.16,13,13,0,0,1-9.29,3.8A12.53,12.53,0,0,1,31.17,74.48Zm181.7,3.8a12.64,12.64,0,0,0,9.29-3.8A12.48,12.48,0,0,0,226,65.32h0a14,14,0,0,0-1.7-6.62A9.89,9.89,0,0,0,222.17,56a18.08,18.08,0,0,0-2.67-2,11.62,11.62,0,0,0-3.1-1.27,14,14,0,0,0-3.39-.42,12.82,12.82,0,0,0-9.43,3.8,12.92,12.92,0,0,0,0,18.32A12.64,12.64,0,0,0,212.87,78.28ZM126.68,47a13,13,0,0,0,13.09-13.1,13.1,13.1,0,1,0-26.19,0A13,13,0,0,0,126.68,47ZM229.77,152.93a12.91,12.91,0,0,0,18.59,0,12.93,12.93,0,0,0,3.8-9.29h0a12.5,12.5,0,0,0-3.8-9.16,12.81,12.81,0,0,0-9.44-3.81,12.58,12.58,0,0,0-4.93,1,13.07,13.07,0,0,0-4.23,2.82,13.1,13.1,0,0,0,0,18.45Zm15.92,31.79a20.86,20.86,0,0,0-4.78-1.69,10.47,10.47,0,0,0,.83-2.21q.57-4.78-4.22-9a23.27,23.27,0,0,0-12.12-5.35h-1.13a14.77,14.77,0,0,0-2.82-8.17,26.06,26.06,0,0,0-7.61-7.33q-8.73-5.35-16.05-3.38-7.89-6.19-19.43-4.5a25.36,25.36,0,0,0-15.08,7.46q-5.78,6.06-4.65,13.1v.28a10.67,10.67,0,0,0-1.83-.43,15.46,15.46,0,0,0-2.11-.14,10.84,10.84,0,0,0-5.35,1.41,10.19,10.19,0,0,0-5.36,9A17.19,17.19,0,0,0,132.72,179a15.39,15.39,0,0,0-4.51,11.12,15.13,15.13,0,0,0,5.21,11.55,17.53,17.53,0,0,0,12.25,4.79,18.27,18.27,0,0,0,9.58-2.54,9.5,9.5,0,0,0,7.61,5.92,9.89,9.89,0,0,0,5.78-.57,10.44,10.44,0,0,0,4.36-3.38,17.93,17.93,0,0,0,8.74,6.62,22.88,22.88,0,0,0,12.11,1q11.84-2.25,16.34-11.55a14.39,14.39,0,0,0,3.1,2.82,10.52,10.52,0,0,0,6.34,1.55,11.82,11.82,0,0,0,4.93-1.69,10.07,10.07,0,0,0,2-1.55,32.08,32.08,0,0,0,8.45,2.82,21.87,21.87,0,0,0,7,0,27.38,27.38,0,0,0,6.06-1.69,13,13,0,0,0,4.51-3.11,7.55,7.55,0,0,0,2.11-4.22Q255.84,189.22,245.69,184.72Zm-134.22-5.45a25.87,25.87,0,0,1,6.91-4.93,22.05,22.05,0,0,1,8.45-2.26,14.43,14.43,0,0,1,14.37-14.36,11.45,11.45,0,0,1,2,.14,13.17,13.17,0,0,1,1.7.42l1.69.57v-.28q-1.41-9.85,6.48-18t20.57-10.14q13.8-2.25,24.5,4.51A70.36,70.36,0,0,0,174.45,90q-20.28-18.17-47.89-18.17-29.58,0-50.7,21.13t-21.13,50.7a69.07,69.07,0,0,0,19.15,48.73Q93,212.94,120.65,215.19a22.63,22.63,0,0,1-11.13-8,20.77,20.77,0,0,1-4.36-12.82h0a20.49,20.49,0,0,1,1.7-8.17A22.09,22.09,0,0,1,111.47,179.27Zm-87.9-44.79a12.69,12.69,0,0,0-9.29-3.81A12.54,12.54,0,0,0,5,134.48a12.5,12.5,0,0,0-3.81,9.16A13,13,0,0,0,5,152.93a12.37,12.37,0,0,0,9.29,3.95,12.48,12.48,0,0,0,9.29-3.95,12.94,12.94,0,0,0,3.81-9.29A12.42,12.42,0,0,0,23.57,134.48ZM142,213.22a6.18,6.18,0,0,1-2.26,1.12c.94-.18,1.79-.37,2.54-.57v-.27ZM50.9,214.33a13,13,0,0,0-2.82-2.82,14,14,0,0,0-3.52-1.83,13,13,0,0,0-13.39,3.1,12.84,12.84,0,0,0-3.8,9.44,12.41,12.41,0,0,0,1.12,5.08q3.39,7.88,11.84,7.88a12.93,12.93,0,0,0,9.29-3.8,12.24,12.24,0,0,0,4-9.16h0a12.43,12.43,0,0,0-.7-4.23A13.83,13.83,0,0,0,50.9,214.33Z'\n","export const weatherShowery =\n 'M192.38,163.5h0q0-19.27-3.06-49T186,77.19q-.3-5.82-.3-15.46t.15-19q.16-9.34.16-17.9t.3-14.09V5.56Q183.2,9.54,178,16T161.32,36.18Q149.84,50,144,56.69,138.51,62.81,116.63,83T82.19,117.29q-11.94,14.08-16.53,36.57T66.58,195q11,35.81,39.79,49.27a59,59,0,0,0,27.55,6.12q19.29-.3,33.36-11.93a65.84,65.84,0,0,0,19.43-27.24Q193,195,192.38,163.5Zm-21.57,21a71.92,71.92,0,0,1-.77,10.56v0a47.53,47.53,0,0,1-1.68,8,17.16,17.16,0,0,1-2.91,5.66q-1.84,2.29-2.91,3.37a20.24,20.24,0,0,1-3.51,2.61,21.34,21.34,0,0,0-3.07,2.14,10.47,10.47,0,0,1-3.52,1.84,12.9,12.9,0,0,1-3.82.62,22.74,22.74,0,0,1-3.68-.3,20.35,20.35,0,0,1-3.83-1.07,12.77,12.77,0,0,1-3.51-2c-2.45-2-4-3.78-4.6-5.2a30.13,30.13,0,0,1-1.52-7.65v-1.84a34.1,34.1,0,0,1,.61-13,24.18,24.18,0,0,1,5.82-10.55c1.63-1.84,3.37-3.63,5.2-5.36s3.42-3.22,4.74-4.44,2.7-2.55,4.13-4l3.68-3.67a27.46,27.46,0,0,0,3.06-4q1.84-2.76,3.52-5.67t3.06-5.51q1.4-2.61,2.3-4.44l.92-1.84c0,1.23.1,2.86.3,4.9s.51,5.81.92,11.32.72,10.61.92,15.31S170.91,179.71,170.81,184.5Z'\n","export const weatherUnkown =\n 'M210.94,240.31a56.13,56.13,0,0,0-.42-6.15c-.27-2.47-.41-4-.41-4.52v-9q-3.56,4.38-5.2,6.3a6.86,6.86,0,0,1-1.64,1.64,12.65,12.65,0,0,0-1.92,1.78,21.94,21.94,0,0,1-2,2c-.82.73-1.59,1.46-2.33,2.19q-3.56,4.11-1.92,9.85a15.52,15.52,0,0,0,1.92,3.69,7,7,0,0,0,3,2.33,9.1,9.1,0,0,0,3.56.83,6.19,6.19,0,0,0,4.1-1.37q3.29-2.75,3.29-9.58Zm-2.75,4.1a5.06,5.06,0,0,1-1.91,2.74,3.13,3.13,0,0,1-1.37.27,2.83,2.83,0,0,1-.82-.55,1.84,1.84,0,0,1-.82-1.64V245a7,7,0,0,1,.14-1.5,2.43,2.43,0,0,1,.68-1.24,2.63,2.63,0,0,1,.82-1,7.13,7.13,0,0,0,.82-.68l.56-.56,1.64-2.74ZM248.42,213v-1.36l-.14-1.51c-.09-1-.14-1.46-.14-1.37s0-.36-.14-1.36-.14-1.46-.14-1.37-.05-.32-.14-1.23-.14-1.28-.14-1.1V191.89l-.55.55-1,1.23-1.36,1.78c-.28.36-.78,1-1.51,1.78s-1.18,1.32-1.37,1.5a28.91,28.91,0,0,1-3.55,3.56,55.91,55.91,0,0,0-4.65,4.65q-3.84,4.38-1.92,10.4a10.64,10.64,0,0,0,1.78,3.83,9.4,9.4,0,0,0,3.42,2.74,5.47,5.47,0,0,0,1.24.42l1.23.27a6,6,0,0,0,1.1.14,15,15,0,0,0,2.46-.69,23,23,0,0,0,2.19-1q3.28-3,3.28-10.12Zm-3,4.38a4.48,4.48,0,0,1-1.92,2.74.93.93,0,0,1-.68.27h-.69a2.44,2.44,0,0,1-1.09-.27,3.75,3.75,0,0,1-.82-1.92,10.73,10.73,0,0,1,.14-1.91,2.45,2.45,0,0,1,.68-1.37l1.36-1.37,1.1-.95c.73-.64,1-1,.68-1s0-.41.68-1.23.83-1.05.28-.68Zm-205.76-.28L39,208.84l-.42-6v-12a2.29,2.29,0,0,0-.41.56,3.89,3.89,0,0,1-.68.82,15.32,15.32,0,0,0-1.1,1.23c-.36.46-.77,1-1.23,1.51a15.34,15.34,0,0,0-1.23,1.65,9.51,9.51,0,0,1-1.24,1.5l-1.23,1.24a23.09,23.09,0,0,1-2.6,2.74c-1.19,1.09-2.47,2.28-3.84,3.55a43.83,43.83,0,0,0-3.69,3.84,13,13,0,0,0-2.74,5.88,12.85,12.85,0,0,0,.27,7,11.63,11.63,0,0,0,6.56,7.93,9.73,9.73,0,0,0,4.38,1.1,7.91,7.91,0,0,0,3-.56,10.81,10.81,0,0,0,2.46-1.36q4.38-3.56,4.38-12.31Zm-3.83,5.2a4.36,4.36,0,0,1-1.92,3.28c-.18,0-.27.09-.27.28l-1.91.27a2.68,2.68,0,0,1-1.37-.55,2.55,2.55,0,0,1-.68-1,9,9,0,0,1-.27-1.51,4.76,4.76,0,0,1,.14-2,5,5,0,0,1,.95-1.78,12.23,12.23,0,0,1,1.65-1.65c.64-.54,1.06-.91,1.23-1.09l2.19-3.56ZM174.27,112.8a119.75,119.75,0,0,0-15.74,13.28,45.74,45.74,0,0,0-9,14,48,48,0,0,0-3.43,18.75v13.69a13.08,13.08,0,0,1-.14,2l-.27,1.92-.68,1.65c-.46,1.1-.87,1.51-1.24,1.23s-.91,0-1.64.83-1.42.91-2.05.27H104.48a17.13,17.13,0,0,1-2.33-.14,11,11,0,0,1-1.77-.41A3.5,3.5,0,0,1,99,179a8.87,8.87,0,0,1-1.09-1.36,6.45,6.45,0,0,1-.83-1.92c-.18-.74-.37-1.56-.55-2.46a126.05,126.05,0,0,1-1.09-18.06,100.3,100.3,0,0,1,2.33-23A53.52,53.52,0,0,1,106,113.91a105,105,0,0,1,11.9-14.5q6-6,16.69-14.78a48.85,48.85,0,0,0,9-9.17,15.25,15.25,0,0,0,2.74-8.89q0-9-6.56-13t-22.16-4q-12.87,0-34.48,2.18a17.38,17.38,0,0,1-6.71.28,4.39,4.39,0,0,1-3-1.78,15.59,15.59,0,0,1-1.24-4.52L70.27,24.7A12.8,12.8,0,0,1,70,22.24V20.06l.27-1.78c.18-1.19.45-1.64.82-1.37s.82-.18,1.37-1.36,1.18-1.6,1.91-1.24L77.11,13q20.25-8.22,49.53-8.22,25.17,0,42.68,6.71T196,31.28q9.17,13.14,9.17,32a52.64,52.64,0,0,1-2.6,17,41.83,41.83,0,0,1-8.22,14.09,99.71,99.71,0,0,1-9.44,9.71q-3.82,3.28-10.67,8.75ZM121.19,250.16A42.29,42.29,0,0,1,106.55,248a17.05,17.05,0,0,1-8.62-6.29,25.12,25.12,0,0,1-3.69-8.34,43.71,43.71,0,0,1-.95-9.71q0-12.31,6.29-19.29t21.62-7a50.86,50.86,0,0,1,11.9,1.23,21.56,21.56,0,0,1,8.07,3.56,18.62,18.62,0,0,1,4.93,5.74,23.17,23.17,0,0,1,2.6,7.12,47.45,47.45,0,0,1,.68,8.62q0,12-5.88,19.28t-22.3,7.25ZM224.34,139.07a13.46,13.46,0,0,0,1.37-4.38A17.71,17.71,0,0,0,222.15,122q-4.38-6.15-12.86-10.26a23.43,23.43,0,0,1-5.74,5.47Q194,124.31,188.63,129a69.18,69.18,0,0,0-10,10.94,37.75,37.75,0,0,0-6.42,13.55,73.21,73.21,0,0,0-1.78,17.1v10.67a13.83,13.83,0,0,0,2.19,1.37,18,18,0,0,0,2.33.95,8,8,0,0,0,2.6.41,18.86,18.86,0,0,0,18.6-6,54.49,54.49,0,0,0,7.81,3.42,40.1,40.1,0,0,0,8.89,2q14.5,2.19,25.73-3t12.31-14.5q1.36-8.48-6.3-16.14t-20.25-10.68ZM67.83,165.61q0-21.62,4-36.39A74.42,74.42,0,0,1,84,103.5q8.2-10.95,23.8-23.81c1.65-1.28,3.15-2.46,4.52-3.55s2.33-1.87,2.87-2.33,1-.88,1.51-1.24a4.19,4.19,0,0,0,.95-.95,1.8,1.8,0,0,0,.28-1c0-.91-.69-1.41-2-1.5a27.59,27.59,0,0,0-4.79.14q-2.19,0-6,.27c-2.55.18-4.79.32-6.7.41l-6.3.27q-3.42.14-6.84.41t-6.42.27A38.67,38.67,0,0,0,66.6,85,27,27,0,0,0,64,101.58v.55a19.25,19.25,0,0,0-7.66-1.64,20.66,20.66,0,0,0-6.57,1.09,19,19,0,0,0-5.74,3A25.22,25.22,0,0,0,39.65,109a19.8,19.8,0,0,0-3,5.47,18.32,18.32,0,0,0-1.1,6.3V121a33.29,33.29,0,0,0-21.75,10.26,30.61,30.61,0,0,0,1.1,44.19,34.22,34.22,0,0,0,24.22,9.31,36,36,0,0,0,18.33-4.93,20.27,20.27,0,0,0,11.22,10.4Q67.84,181.75,67.83,165.61Z'\n","export const accumulator =\n 'M190.5,90.5l50-50-25-25-50,50-25-25v75h75Zm-125,75-50,50,25,25,50-50,25,25v-75h-75Zm150-25h-75v75l25-25,50,50,25-25-50-50Zm-175-125-25,25,50,50-25,25h75v-75l-25,25Z'\n\nexport const ACC = accumulator\n","export const alpinesports =\n 'M95.26,3a81,81,0,0,1-3.63,22.25,153.44,153.44,0,0,1-8.75,23.25Q77.77,59.26,72.51,68.63T63.76,83.39Q60.27,88.76,60,88.76L77.75,83A125.16,125.16,0,0,1,69,105.39a125,125,0,0,1-10.88,18.12q-5.39,7.24-10.38,12.87t-8,8.37l-3,2.75,23.25-6q-6.5,11.5-13.75,22.38T33.38,182.14q-5.62,7.37-10.38,13t-7.25,8.25L13.25,206l70.25-5.75L77.75,253H113l-6-52.75L177.5,206q-4.5-4.5-11.75-13l20.75-2L183,230.26h21L200.5,191l42.25,4.25q-14-17.5-28-48.25l14,4.5q-.75-.75-2-2.12t-4.63-6a108,108,0,0,1-6.38-9.88,115.6,115.6,0,0,1-6.38-13.5A112.93,112.93,0,0,1,204,103.25l.63.25,1.5.63q1.5.63,2,.87l2.25,1,2.12.87,1.5.63.75.25q-.5-1-1.25-2.38t-3-5.75q-2.25-4.37-4.25-8.87t-4.37-10.88q-2.38-6.38-4.13-12.13a119.6,119.6,0,0,1-3-12.25,63.92,63.92,0,0,1-1.25-12q0,11.75-5.25,27.75a185.83,185.83,0,0,1-10.5,26.25l-5.25,10.25,10.5-4.5A114.36,114.36,0,0,1,173.64,129q-6.12,12-10.62,17.25l-4.75,5.25,14.25-4.5a309.42,309.42,0,0,1-17.25,32.25,358.5,358.5,0,0,1-24.75-37.75q0,.25,5.88,1.62T148.15,146l5.88,1.5q-1.25-1-3.25-2.88T143,136.49a148.49,148.49,0,0,1-10.75-13.12,127.62,127.62,0,0,1-10.5-17.88A129.07,129.07,0,0,1,113,83q-.25,0,1.62.5T119,84.87q2.51.87,5.12,1.75t4.63,1.62l1.75.5q-1.5-2-3.87-5.62t-8.37-14.25q-6-10.63-10.62-20.63a177.87,177.87,0,0,1-8.5-22.75Q95.27,12.73,95.28,3Z'\n\nexport const ALP = alpinesports\n","export const athletics =\n 'M252.74,173.6q0,2.75-3,6.25a25.82,25.82,0,0,1-6.38,5.5q-3.38,2-5.12,1.5.25,3-8.25,5.38t-11,1.12q-1.25,3.75-20.75.5a2.94,2.94,0,0,0-1.25.37,7.28,7.28,0,0,0-1.75,1.38,23.15,23.15,0,0,1-2.12,1.88q-1.12.87-2.88,2.5t-3,2.88a6.7,6.7,0,0,1-.37,3.37,4.56,4.56,0,0,1-2.5,2.5,9.7,9.7,0,0,1-4.87.63q-1,4.5-10,3.5-2.25,3.75-19.25,2A153.84,153.84,0,0,1,116,213q-17.5-2.88-25-6.88-5,.5-13.25-3.75T67,195.85a.45.45,0,0,1-.5-.5,16.58,16.58,0,0,1-2.62.25H61.5q-26,0-43.5-19.25A57.57,57.57,0,0,1,3,137.09,56.48,56.48,0,0,1,18.76,97.22a56,56,0,0,1,38.5-18.38v-1.5a16.73,16.73,0,0,1-3.87-1.5,26,26,0,0,1-3.5-2.25A15.34,15.34,0,0,1,47,70.7a21.33,21.33,0,0,1-2.12-3.37,17.49,17.49,0,0,1-1.38-3.87,19.05,19.05,0,0,1-.5-4.37,18.36,18.36,0,0,1,18.5-18.5,19,19,0,0,1,4.87.63,17.85,17.85,0,0,1,4.5,1.88,16.62,16.62,0,0,1,3.75,3,24.37,24.37,0,0,1,2.88,3.75,16,16,0,0,1,1.88,4.37A18.9,18.9,0,0,1,80,59.09a19.57,19.57,0,0,1-1,6.25,16.37,16.37,0,0,1-3,5.38,21.59,21.59,0,0,1-4.63,4.13,18,18,0,0,1-5.62,2.5v1.5a53.85,53.85,0,0,1,23.75,7l2-3.25-2.75-1.5,6.5-10.75L106,76.59l-6.5,11-2.75-1.75L95,89.09a57.82,57.82,0,0,1,18.25,20.75A57.37,57.37,0,0,1,120,137.09q0,2.75-.25,5.75a57.1,57.1,0,0,1,5.5-4l1.75-1.5a41.08,41.08,0,0,0,8,.63q6.25.13,8.25.37L145.9,141l2.25,2.38q2.25,2.38,1.75,1.88t1.5,1.38q2,1.88,1.12.87t.87.5l.75.25.75-.13q.75-.13.87-.5,1.25-1,0-3.13a14.27,14.27,0,0,0-3-3.63l-2-1.75a1.27,1.27,0,0,1,.63.25,13.64,13.64,0,0,0,1.5.75,11.22,11.22,0,0,1,2.12,1.25l3.25-3.5q-7.75-2.75-12.25-3l-1-1-1.12-.75q-1.12-.75-1.12-.63t-.75-.37l-.25-.25-2,2.25h-.87l-2.25.13q-2.25.13-3.37.13h-1.75q3.75-2.5,6.25-4.5l12.75-.25.25.13.75.5,1,.75,1.25,1,3,2.5,1.38,1.25q1.38,1.25,1.25,1.38t1.12,1.25q2.75,3.75,5.75,2.5,1.75-.5.25-3a19.35,19.35,0,0,0-2.62-3.5,13.82,13.82,0,0,0-2.88-2.5l-1.25-.75,5,1.75,3.5-3q-1-.5-2.5-1.12a45.72,45.72,0,0,0-5.5-1.62,28.73,28.73,0,0,0-6.75-1,2.44,2.44,0,0,1-1-.63,6.86,6.86,0,0,0-1-.75l-.87-.37a1.06,1.06,0,0,0-1.12.13,5.15,5.15,0,0,0-1,1.12,56.94,56.94,0,0,1-6.25.25l1-1,1-1.12,1-1.12q9.25-.25,13.5,0a51.73,51.73,0,0,1,7.37,5q3.37,2.75,5.25,4.5a10.16,10.16,0,0,0,2.62,2q2,.75,2.25-1.5a4.39,4.39,0,0,0-1.25-3.5,19.05,19.05,0,0,0-2.62-2.62q-1.38-1.12-2.12-1.62l-1-.5,6.25,1.75a2,2,0,0,0,.37-.5,4.9,4.9,0,0,0,.25-1.25,5.56,5.56,0,0,0,0-1.62,2.8,2.8,0,0,0-.87-1.38,3.36,3.36,0,0,0-2.12-.87q-1.37-.13-3-.37a31.13,31.13,0,0,1-3.13-.63q-1.49-.38-2.75-.63a15.67,15.67,0,0,1-2-.5l-.75-.25-4.25-4L152,116.36l3,2.75-7.25.25.37-.37.13-.37q1.75-2.25,2.75-3.75a55.7,55.7,0,0,0,9.75-3.25,53.52,53.52,0,0,1,10.12,5.75,101.3,101.3,0,0,1,8.37,6.62A22.94,22.94,0,0,0,184,127.6q3,1.75,3.75-.75.75-2-2-4.5-1-1-2.5-2.25T180,117.48q-1.76-1.38-3.25-2.5T174,113a4.92,4.92,0,0,0-1.5-.87q1.5.25,3.13.63a28.48,28.48,0,0,1,3,.87q1.38.49,3,1.12t3,1.12q1.38.49,2.75,1.12t2.38,1.12q1,.49,2.12,1t1.75.75a3,3,0,0,1,1.12.75q3,1.5,3.75-.75.5-1.75-2.5-3.75-15.5-9.5-32.5-8.25a42.36,42.36,0,0,0-6.5-2.25h0a5.36,5.36,0,0,0,1.38-1.25q.87-1,1.12-1.25a11.14,11.14,0,0,1,1.12-.87,6.12,6.12,0,0,1,1.62-.87q.75-.25,2.12-.63a23.39,23.39,0,0,1,3.37-.63,21.76,21.76,0,0,1,7.75-6.25,20.07,20.07,0,0,1,7-1.88,12.4,12.4,0,0,1,6.75,2.12,34.8,34.8,0,0,1,5.25,3.63q1.49,1.38,4.75,4.75l3.25,3.37q6.25-9.25,9.5-11.13a7.64,7.64,0,0,1,7-.37q7.25,2.5,13.5,4,3,.75,4.63,5.12a23.17,23.17,0,0,1,1.62,8.13q1.5,2.75,2.5,9,0,.25,1.88,7.87a87.67,87.67,0,0,1,2.38,15.13q5.25,7.75,5.75,19a3.76,3.76,0,0,1,1.38,2,7.37,7.37,0,0,1,.37,1.88q0,.62-.13,3.13t-.13,4ZM76.5,59.1a12,12,0,0,0-.63-3.87,22.83,22.83,0,0,0-1.5-3.5,12.59,12.59,0,0,0-2.25-3,17.15,17.15,0,0,0-3-2.38,12.31,12.31,0,0,0-3.63-1.5,17.17,17.17,0,0,0-4-.5,14.15,14.15,0,0,0-7.37,2,15.21,15.21,0,0,0-5.38,5.38,14.15,14.15,0,0,0-2,7.37,14.82,14.82,0,0,0,1.38,6.25,15.37,15.37,0,0,0,3.75,5.12,12.62,12.62,0,0,0,5.38,2.88v-3h-4V53.61H70V70.36H65.74v3a13.88,13.88,0,0,0,7.75-5.25A14.55,14.55,0,0,0,76.5,59.1Zm-15,32A44.31,44.31,0,0,0,29,104.61a45.86,45.86,0,0,0,0,65,44.31,44.31,0,0,0,32.5,13.5h2.62l2.88-.25a20.89,20.89,0,0,1,.25-3.13,25.19,25.19,0,0,1,.63-3,27,27,0,0,1,.87-2.62,10.47,10.47,0,0,1,1-2,15,15,0,0,1,1.5-2.12,4.19,4.19,0,0,1,1.88-1.25,11,11,0,0,1,2.25-.5,23.62,23.62,0,0,1,2.62-.13q1-.25,2.62-.75t6.88-2.75q5.26-2.25,10.5-5l-5-2.75,1.25-2,5.75,3.25-.5.75a15.94,15.94,0,0,1,1.75-1,15.94,15.94,0,0,0,1.75-1,47,47,0,0,0,3.37-9.62,45.07,45.07,0,0,0,1.12-10.12A44.31,44.31,0,0,0,94,104.61a44.31,44.31,0,0,0-32.5-13.5ZM139,143.6l-1.75-1.75a3.5,3.5,0,0,0-4.75-.75q-2.5,1.5-1,3.25h-2.38l-1.88-.5-3.75-1q-2.5,0-4.25,3.5v.5a2.46,2.46,0,0,0,2.25.5,34.2,34.2,0,0,1,6.38,1.88,61.57,61.57,0,0,1,8.63,3.63,14.39,14.39,0,0,0,5.12,2.12,5.59,5.59,0,0,0,3.63-1.38q1-1-.87-2.62a24.85,24.85,0,0,0-4.13-2.88l-2.25-1,6.75,1.5q2.25-1.75,3.5-2.75a15.48,15.48,0,0,0-1.62-.63,17.87,17.87,0,0,0-2.38-.63l-2.5-.5-2-.25Zm-40.25-7.5h6.5v2.25h-6.5ZM93,117.6l5.75-3.25,1.25,2-5.75,3.25ZM79,104.35l3.25-5.5,2,1L81,105.6Zm-16.5,36.76.25,7.5h-2.5l.25-7.5a3.75,3.75,0,0,1-3.25-4q0-3.25,3.5-4l.75-32,.75,32q3.5.75,3.5,4a3.75,3.75,0,0,1-3.25,4ZM60.24,93.6h2.5v6.5h-2.5ZM38.75,174.36l3.25-5.5,2,1-3.25,5.75Zm0-74.51,2-1,3.25,5.5-2,1.25Zm24,81h-2.5v-6.5h2.5ZM23.24,158.1l5.5-3.25,1.25,2-5.75,3.25Zm0-41.75,1-2L30,117.6l-1.25,2Zm1,22h-6.5v-2.25h6.5Z'\n\nexport const ATL = athletics\n","export const badminton =\n 'M28.14,178.86q-3.75,3.75-5.75,6a34.5,34.5,0,0,0-4.5,7.37,19.4,19.4,0,0,0-2.25,9.62q.26,4.5,3.5,11.13a54.11,54.11,0,0,0,10.25,13.75,50.74,50.74,0,0,0,13.75,10.38q6.74,3.25,11.25,3.5a18.92,18.92,0,0,0,9.5-2.25,38.84,38.84,0,0,0,7.37-4.5q2.38-2,6.12-5.75l8.75-8.75L36.89,170.11Zm212.25-53a15.94,15.94,0,0,0-1.75-1,13.32,13.32,0,0,0-1.75-.75l-1.62-.5q-.87-.26-1.5-.37a6.85,6.85,0,0,0-1-.13,2.28,2.28,0,0,1-.87-.25h-.25a33.52,33.52,0,0,0,8.75-14.5,26.3,26.3,0,0,0-17.5,0,22.55,22.55,0,0,0,3.25-3.5,56.72,56.72,0,0,0,4.75-8.13q3-5.88,2.75-10.12a24,24,0,0,0-10.12-2.88,31.44,31.44,0,0,0-8.87.37l-3.25,1q1.25-1.75,3.25-4.5T219,70.36q2.37-7.5.87-13.25a19.63,19.63,0,0,0-11.25-.75,60.62,60.62,0,0,0-8.87,2.38,41.21,41.21,0,0,0-5.12,2.38A26.58,26.58,0,0,0,197.26,56a53.69,53.69,0,0,0,2.25-8.87,22,22,0,0,0-.63-11.25,21.59,21.59,0,0,0-8-.5,29.34,29.34,0,0,0-7.63,2,51.39,51.39,0,0,0-6.38,3.13q-2.75,1.62-4.5,2.88l-1.5,1.25q.5-1.5,1-3.75a36.41,36.41,0,0,0,.25-8.13,22.9,22.9,0,0,0-3-10.62,19.46,19.46,0,0,0-4.25.5A23.34,23.34,0,0,0,160.63,24a30.66,30.66,0,0,0-4,2.12q-2,1.25-3.63,2.38t-2.88,2.12q-1.25,1-2,1.5l-.75.75a12,12,0,0,0,.87-2.62,38.32,38.32,0,0,0,.5-6.25,22.52,22.52,0,0,0-1.38-8.63,35.28,35.28,0,0,0-4.75,2,36.24,36.24,0,0,0-4.13,2.38q-1.63,1.12-3,2.12a8.2,8.2,0,0,0-1.88,1.75l-.75.5a17.71,17.71,0,0,0-3-8.75q-4.75,1.75-9.62,7.25a66.17,66.17,0,0,0-8.75,12.75q-3.87,7.24-7.5,15.75t-6.25,16.5q-2.62,8-4.63,14.62t-3,10.62l-1,4.25-35,54.25,50.25,50.25,54.5-35q0,.25,7.5-1.75t18.75-5.75q11.25-3.75,22.75-8.63A111.36,111.36,0,0,0,228.76,139q9.38-6.62,11.63-13.12ZM137.14,158.1h6.75a2,2,0,0,0-.37.5,8.84,8.84,0,0,0-.37,1q-.25.75-.5,1.75l-18.5,11.5-3.75-3.5Zm-39.25-46v6.75l-11,16.75-3.75-3.75,11.5-18.5Zm-7.75-6.25-.5,3.75-11,17.75-1-1Zm-29.25,47.5,14.75-24,1.25,1-15,24Zm5.5,5.25,14.75-23.75,3.75,3.75-15.25,23Zm36.75-34.75a8.41,8.41,0,0,0,2,.25,10.48,10.48,0,0,0,1.75-.13,7.07,7.07,0,0,0,1.38-.37,3,3,0,0,1,.87-.25h.25q-.25,0-.5.5a11.76,11.76,0,0,0-.63,2.38,22.64,22.64,0,0,0-.37,4.37L96.13,145.1l-4.5-4.5Zm-29,42.25,15.5-22.75,4.5,4.25L76.89,168.84Zm9.25,9-2.5-2.5,18-20,4.5,4.5Zm22.51-20.25-4.75-4.75,12-13.5a20,20,0,0,0,8.5-2.25l.25-.5v.5l-.25.25a9.8,9.8,0,0,0-.87,1.62,22.29,22.29,0,0,0-.87,2.75,14.94,14.94,0,0,0-.5,3.87Zm-16,27-2.75-2.75,21.25-17.25,4.25,4.5Zm21-22,14.5-11.75a17.9,17.9,0,0,0,2.25-.13l1.75-.25q.75-.12,1.38-.25t1-.25a4.32,4.32,0,0,0,.63-.25l.25-.13.25-.25a1.74,1.74,0,0,0-.37.87q-.13.63-.37,2.25a11.63,11.63,0,0,0,0,3.37l-16.5,11.25ZM94.39,186.6l23.25-15.5,3.5,3.75L97.39,189.61Zm8.25,8.5-1-1,24-14.75,1,1Zm27-16.5-1-1.25,17.75-10.75a6.91,6.91,0,0,0,1.38-.13,5.69,5.69,0,0,1,1.12-.13,1.72,1.72,0,0,0,.75-.13,2,2,0,0,0,.5-.37h.25Zm-90.25-11,49.25,49.25,13.25-13L52.63,154.6Z'\n\nexport const BDM = badminton\n","export const bandy =\n 'M127.3 223.8h0c-2.1 0-4.1.5-6 1.3-5.3 2.7-8 6.9-8 12.8-.1 3.8 1.4 7.5 4.1 10.1 4.5 4.6 11.6 5.4 17.1 2.1 2.1-1.3 3.9-3.1 5.1-5.3 1.2-2.1 1.9-4.5 1.9-7a14.09 14.09 0 0 0-4.1-9.9c-2.6-2.7-6.3-4.2-10.1-4.1zm11.4 14c0 2-.5 3.9-1.5 5.6s-2.4 3.2-4.1 4.2c-4.4 2.6-10.1 1.9-13.7-1.7a10.79 10.79 0 0 1-3.3-8.1c0-4.7 2.1-8.1 6.4-10.2 1.5-.6 3.1-1 4.8-1 3.1 0 6 1.1 8.1 3.3 2.1 2.1 3.3 4.9 3.3 7.9zm111.6-13.5c-.6-.9-1.4-1.7-2.3-2.4-1.2-.7-2.5-1.2-3.9-1.4-1.9-.3-3.8.4-5.1 1.8-1.5 1.1-2.6 2.8-3 4.6-.3 1.6-.5 3.2-.5 4.8.1 1.1-.2 2.1-1 2.9-1.8 1.5-3.8 1.3-6-.8-2.2-2-6.2-6.8-12-14.5-4.3-5.7-7.8-10.2-10.5-13.5-17.5-22.5-40.5-50.9-69-85.3l-.8-.8a6.42 6.42 0 0 1-1-1.3L171 71.1c-.3.6 1.5-1.8 5.6-7.1l6.1-8 18.8-24.4 5.3-6.9c2.8-3.9 6.1-7.5 9.7-10.7l.5-1c.5-.5 1-1.1 1.5-1.8.4-.5.8-1 1.3-1.5l.3-.8c.1-.7 0-1.5-.4-2.1-.6-1.1-1.4-2.1-2.4-2.9-.9-.7-1.9-1.1-3-1.1-.8-.1-1.6-.1-2.4 0-.3 0-.6.2-.9.4l-3.5 4.2-.3.5c-.1.4-.3.9-.5 1.3-.4.8-.9 1.5-1.4 2.3-.6.8-1.3 2-2.3 3.4-1 1.5-2.1 3-3.4 4.4l-6 7.6c-3 3.7-6 7.6-9 11.5l-12.4 15.9-16.4 21-28 34.5c-3.7-4.2-7.8-9.1-12.5-14.9L99.8 75.3 56 19.3c-.9-1-1.8-2.1-2.6-3.3a25.53 25.53 0 0 0-1.9-2.6 17.61 17.61 0 0 1-1.4-2.3c-.3-.6-.6-1.1-1-1.6-.3-.3-.5-.7-.6-1.1l-.3-.8v.2L45 3.5l-.3-.3-.4-.1-.8-.1h-1.1c.1-.2-.3-.2-1.1.1l-1.3.6-1.2.6c-2.5 2-3.4 3.9-2.5 5.7.5.5.9 1.1 1.3 1.7l1.3 1.6c.2.3.5.6.6 1l.5.3 1.4 1.3c.6.6 1.2 1.3 2 2.1l2.7 3.1c1 1.2 2.1 2.5 3.1 3.9l17.6 22.8 18.1 23.5c4.4 5.5 16.3 21.3 35.8 47.3-.6.6-1.2 1.3-1.8 2l-69 85.3c-2.7 3.3-6.2 7.8-10.5 13.5-5.8 7.7-9.8 12.5-12 14.5s-4.2 2.3-6 .8c-.7-.5-1-2.2-1.1-5.1 0-2.8-1.2-5.4-3.4-7.1-4-3.2-7.8-2.5-11.3 2a13.67 13.67 0 0 0-2.1 4.6c-.6 2.1-.3 5.1 1 9s4 7.5 8.1 10.9c2.9 2.3 6.3 3.8 10 4.3 3.1.4 6.3-.3 9-1.9 2.3-1.3 4.5-2.8 6.5-4.5 1.6-1.3 3-2.8 4.3-4.4L71.8 203l56.3-74.7 37 49.3 34.6 46.3 13.9 18.5c1.3 1.6 2.7 3.1 4.3 4.4 2 1.7 4.2 3.2 6.5 4.5 2.7 1.6 5.9 2.2 9 1.9 3.7-.5 7.1-1.9 10-4.3h0c4.7-3.8 7.6-8.1 8.8-12.8 1-5.1.4-9-1.9-11.8z'\n\nexport const BDY = bandy\n","export const baseball =\n 'M247.05,247a19.92,19.92,0,0,1-6.88,5,11.44,11.44,0,0,1-6.38,1,8.28,8.28,0,0,1-4.5-2.25Q182.79,204,150.79,165q-14.25-17.5-29.38-34.38T98.29,105.47L18.79,26a35.43,35.43,0,0,0-6.25-5.25Q10,19.23,9,19.6a4.94,4.94,0,0,1-2.25.25,3.69,3.69,0,0,1-2.25-1.12,5.77,5.77,0,0,1-1.12-1.5,3.38,3.38,0,0,1-.37-1.5,4.16,4.16,0,0,1,.37-1.62q.37-.87.63-1.5A6.46,6.46,0,0,1,5.17,11Q6,10,6.55,9.47L8.05,8Q9.8,6.21,10.81,5.34a16.46,16.46,0,0,1,2.5-1.75A4.18,4.18,0,0,1,16.18,3a4.9,4.9,0,0,1,2.62,1.5,3.61,3.61,0,0,1,1.12,2.25A5.14,5.14,0,0,1,19.68,9q-.36,1,1.12,3.5A34.81,34.81,0,0,0,26,18.72V19h.25v.25h.25v.25h.25l.25.25v.25h.25v.25h.25l.25.25v.25H28v.25l.25.25h.25v.25l.25.25H29l.25.25v.25h.25l.25.25v.25l.25.25h.25l.5.5v.25l.5.5h.25l.5.5v.25l.75.75H33l1.75,1.75v.25l1.5,1.5.5.25,2,2,.25.5.75.75.5.25.75.75.25.5.5.5.5.25.5.5.25.5.25.25.5.25.5.5.25.5.25.25.5.25.25.25.25.5.25.25.5.25.25.25.25.5.5.25.25.25.25.5.25.25.5.25.25.5.25.25.5.25.25.25.25.5.5.25.25.5.25.25.5.25.25.5.25.25.5.25.25.5.5.25.25.25.25.5.5.25.25.5.5.25.25.5.25.25.5.25.25.5.5.25.25.5.5.25.25.5.5.25.25.5.5.25,1,1,.25.5.5.25.25.5.5.25,1.25,1.25.25.5.5.25.25.5.5.25.25.5.5.25.25.5.5.25.25.5.5.5.5.25.25.5.5.25.25.5.5.25.5.5.25.5.5.25.25.5.5.5.5.25.25.5.5.25.5.5.25.5.5.25.25.5.5.5.5.25.25.5.5.5.5.25.5.5.25.5.5.25.5.5.25.5.5.25.5.5.25.5.5.5.5.25.5.5.25.5.5.25,1,1,.25.5.5.25,1,1L84,77l.5.5.5.25.5.5.25.5.5.5.5.25,1,1L88,81l.5.5.5.25,1,1,.25.5,1,1,.5.25L93.3,86l.25.5,1,1,.5.25,1,1,.25.5.5.25.25.25q28.5,28.75,67.75,60.75,17.5,14.25,39.37,34.38t30.75,28.75q8.89,8.62,15.63,15.37,3,2.5,2.25,7.63t-6,10.12ZM50.3,185.46a24.08,24.08,0,0,1,6.88,1,26.32,26.32,0,0,1,6.25,2.75,22.93,22.93,0,0,1,5.12,4.25.74.74,0,0,1-.25.5h-.25q-.25-1.75-1.5-1.75a1.12,1.12,0,0,1,.5.13,1.33,1.33,0,0,1,.5.63,1.09,1.09,0,0,1,0,1h-.5q.25-1.5-1-1.75,1,.75.5,1.5h-.75a1,1,0,0,1-.25-.75v-.25a.83.83,0,0,0-.37-.75,1.56,1.56,0,0,0-.87-.25l.25,2a.74.74,0,0,1-.5-.25v-.25l.25-.5a.49.49,0,0,0-.25-.75,1.88,1.88,0,0,0-.75-.25l.25.5a.59.59,0,0,1,.13.63,1.09,1.09,0,0,1-.63.63h-.25a2,2,0,0,0-.75-.25v-.5q.25-1-.5-1.25-.25-.25-.25.13v.63a1.44,1.44,0,0,1-.5,1,1.12,1.12,0,0,1-.5-.13,1.12,1.12,0,0,0-.5-.13l.5-1.25q0-.25-.5-.37t-.5.37q-.5,1-.75,1H57.32l1-1.5q-.75-1-1.75.5a.22.22,0,0,0-.25.25.72.72,0,0,0-.25.5,7.73,7.73,0,0,0-1.25-.25,2.38,2.38,0,0,1,1-1.25q-1.25-.75-2.25,1h-.25a1,1,0,0,1-.75-.25q0-.5,1-1a2.76,2.76,0,0,0-1.38-.13,1.77,1.77,0,0,0-1.12.87h-.5l-.75-.25a.74.74,0,0,1,.25-.5,2.93,2.93,0,0,1,1.25-.5,2.36,2.36,0,0,0-1.25-.13,2.56,2.56,0,0,0-.87.37,5,5,0,0,0-.63.5h-.25l-.63-.13-.63-.13a6.27,6.27,0,0,1,1.75-.75q-1.75,0-2.25.75l-1.5-.25,1.5-1a.76.76,0,0,0-.75-.13,4.42,4.42,0,0,0-1,.37,1.65,1.65,0,0,0-.75.75l-.25-.25h-1q0-.25.37-.5a4.6,4.6,0,0,1,1.38-.5,1.39,1.39,0,0,0-1.25.13,2.14,2.14,0,0,0-1,.87l-1.5-.25a10,10,0,0,1,1.75-1,4.15,4.15,0,0,0-1.25.25,1.62,1.62,0,0,0-1,.75H39.09a.4.4,0,0,1,.25-.37,3.76,3.76,0,0,1,.63-.25,5.26,5.26,0,0,0,.87-.37,3.37,3.37,0,0,0-2.5,1H37.6l1.5-1a2.89,2.89,0,0,0-2,1h-.75l1.25-.75-.13.13-.37.13a23.39,23.39,0,0,1,13.25-4ZM68.8,194Zm.5.5-.5-.5Q69.3,194.2,69.3,194.46Zm-34-3.75h.25q-1.25.75-1,1.75a3,3,0,0,1,1.5-2h.75a2.15,2.15,0,0,0-1.25,2.25,21.59,21.59,0,0,1,1.75-2.25h.5A5.8,5.8,0,0,0,37,192.7a1.53,1.53,0,0,1,.37-.75q.37-.5.63-.87a5,5,0,0,1,.5-.63h1.5a3.06,3.06,0,0,0-.75,2.25,3.45,3.45,0,0,1,1.25-2.25h1.5a1.66,1.66,0,0,0-.25,2.5,3.76,3.76,0,0,1,1-2.25h1.25v.25a2.48,2.48,0,0,0,.5,2.5,2.48,2.48,0,0,1,.5-2.5,13,13,0,0,1,1.5.25v1.75q.25,1.25.75.25a4.09,4.09,0,0,0,0-2l.75.25h.75a12.43,12.43,0,0,1,1,2.75q.5,0,.25-2.5l1.5.25a6.4,6.4,0,0,1,1,3q1.25-.5.25-2.75a5.23,5.23,0,0,1,.87.13,5.23,5.23,0,0,0,.87.13,7,7,0,0,0,.5.87,5,5,0,0,1,.5,1,3,3,0,0,1,.25.87,2,2,0,0,0,.25-1.62,2.92,2.92,0,0,0-.5-.87l.5.25a5.07,5.07,0,0,1,2.25,2q.75-.25-.25-1.5a.74.74,0,0,1-.5-.25l-.25-.25h.25l2.25.5.25.25.75,1a2.65,2.65,0,0,0,.5.75,1.18,1.18,0,0,0,.13-.87,1.52,1.52,0,0,0-.37-.63l-.5-.5h.25l1,.25a5.12,5.12,0,0,1,1.25,1l.75.75a1.79,1.79,0,0,0-1-1.75,2.83,2.83,0,0,1,1.25.25.44.44,0,0,1,.5.5q1.5,2.25,1.25,1,0-1-1.25-1.5H66l.75.75-.25-.5-.25-.25h.75a2.26,2.26,0,0,1,1.5,1.5l.25.75a2.4,2.4,0,0,0-1.5-2.25h.25q1.25.25,2.25,2.25,0-1.25-1.75-2.25h.25a1.58,1.58,0,0,0,.63.37,1.2,1.2,0,0,1,.63.5,4,4,0,0,0,.5.63.74.74,0,0,0-.25-.5,22.94,22.94,0,0,1,4.75,14.25,23.68,23.68,0,0,1-3,11.5,5.21,5.21,0,0,0,0-2.25,3.14,3.14,0,0,0,.75-1.5l-.75,1.25a1.12,1.12,0,0,0-.13-.5,1.12,1.12,0,0,1-.13-.5q.5-.25.5-1.25a.4.4,0,0,1-.25.37,1.42,1.42,0,0,0-.5.63,2.65,2.65,0,0,0-.5-.75,2,2,0,0,0,.37-.5,1.12,1.12,0,0,0,.13-.5,1,1,0,0,0-.25-.75.74.74,0,0,1-.25.5q0,.75-.25.75a3,3,0,0,0-.75-.5q.25-.75.37-1.25a1.62,1.62,0,0,0-.37-1.25q0,1.75-.5,2a1.12,1.12,0,0,1-.5-.13,2,2,0,0,1-.5-.37v-.25a1.75,1.75,0,0,0,.13-1.12,1.16,1.16,0,0,0-.63-.87l.25,1.25-.25.5v.25l-1.25-.25-.25-.25a2.51,2.51,0,0,0,.25-1.12,1.55,1.55,0,0,0-.5-1.12l-.25,1.75v.5a4.86,4.86,0,0,1-1.5-.25v-.75a2,2,0,0,0-.37-1.25,1.08,1.08,0,0,0-.87-.5,2.41,2.41,0,0,1,.5,1.25v1.25H62.07a3.14,3.14,0,0,1-.75-1.5q-.25-1.25-1-1a3.36,3.36,0,0,0,.13.75q.13.5.25.87a5.81,5.81,0,0,0,.37.87H59.32q-.5-.25-.75-1.5a1.59,1.59,0,0,0-1.25-1,3.45,3.45,0,0,0,.75,2.5l-1.5.25a.74.74,0,0,1-.5-.25l-.5-.5a4.19,4.19,0,0,0-.63-1.25.64.64,0,0,0-.87-.25,8.87,8.87,0,0,0,.5,1.25,2.9,2.9,0,0,0,1,1,4.15,4.15,0,0,1-1.25.25q-.75,0-1.62-1.25t-1.12,0l.25.75a5.49,5.49,0,0,0,1.25,1q-1,.25-2.25.5-.5,0-.75-1a.72.72,0,0,1-.25-.5q-.5-1-1-.75l-.25,1q.5,1.5,1.25,1.75l-1,.5a3.19,3.19,0,0,1-1.5-1.5q-1-1-1.25-.25a2,2,0,0,0,.25.75,2.41,2.41,0,0,0,.75.87,7.06,7.06,0,0,0,1,.63,7.79,7.79,0,0,1-.87.37,1.68,1.68,0,0,0-.63.37,3.1,3.1,0,0,1-1.75-.75q-1-1.25-1.25-1v.37l.13.63q.13.63.63.63a2.15,2.15,0,0,1,1.25.63l-1,.75a4.2,4.2,0,0,1-2.75-1.75l-.25.25a3.81,3.81,0,0,0,2.5,2,7,7,0,0,0-.87.5,5,5,0,0,0-.63.5,5.12,5.12,0,0,1-2.25-1.5q-.75-1.5-.75-.25a1.78,1.78,0,0,0,1,1.75,2.68,2.68,0,0,0,1.5.5,3.82,3.82,0,0,1-1,.75,3.79,3.79,0,0,1-2-1.25.6.6,0,0,0-.75-.37q-.5.13,0,.87a3.29,3.29,0,0,0,1.12.75q.62.25,1.12.5l-1,1a2.83,2.83,0,0,1-2-1l-1-1q0,2,2.5,2.5a6.65,6.65,0,0,0-1.38,1.25,15,15,0,0,0-1.12,1.5,1.56,1.56,0,0,1-.87-.25,4,4,0,0,1-.63-.5l-1.5-1.5q.25,1.75,2.75,2.5a3,3,0,0,0-.5.75.22.22,0,0,1,.25-.25,3.4,3.4,0,0,1-2.5-1.5q.25,1.75,2.25,1.75a3,3,0,0,0-.5.75H35a1.06,1.06,0,0,0-.37-.63,1,1,0,0,0-.63-.37l.37.13-.75-.75q-.75-.75-.63-.87,0,.25.5.75a23,23,0,0,1,1.75-35Zm3.25,32.75a3.47,3.47,0,0,1-3-1.75v.63l.63.75a2,2,0,0,0,1.88.63Zm-1.75,1.76.25-.5a2.26,2.26,0,0,1-1-.25,3.12,3.12,0,0,1-.87-.63q-.37-.38-.37-.5t-.25-.37v.63l.63.87A1.63,1.63,0,0,0,36.8,225.21Zm-3.25.49a.74.74,0,0,0,.25.5h0A.72.72,0,0,1,33.55,225.7Zm3.51-.49q1,2,1.75,1A2.23,2.23,0,0,1,37.3,225a7.4,7.4,0,0,1,1-.75,1.31,1.31,0,0,0,.5,1.12.91.91,0,0,0,1,.13q0-.25-.75-1a1,1,0,0,1-.25-.75l.5-.5a4.18,4.18,0,0,0,1.25,1.25q.5,0,.37-.25a3,3,0,0,0-.5-.63,3.7,3.7,0,0,1-.63-.87,2.9,2.9,0,0,0,1-1q.25,1.75,1.25,1.75.5-.25-.25-1.25l-.5-.75h.25l.75-.75a1.15,1.15,0,0,0,.75,1.25q0,.25.25.13a.39.39,0,0,0,.25-.37l-.25-.25a1,1,0,0,1-.25-.75v-.5a3.82,3.82,0,0,1,1-.75,1.69,1.69,0,0,0,.5,1.25q.5.5.75.25a2.09,2.09,0,0,0-.13-.63,2.09,2.09,0,0,1-.13-.63,4.1,4.1,0,0,1-.25-1,1.27,1.27,0,0,0,.63-.25,3.41,3.41,0,0,0,.63-.5v.63l.25.63q.25.5.5.37a.38.38,0,0,0,.25-.37,7.44,7.44,0,0,0-.13-.87,1,1,0,0,1,.13-.87,1.58,1.58,0,0,1,.63-.37,1.58,1.58,0,0,0,.63-.37q-.25,1.5.5,1.75v-.87l.25-1.38,1.5-.5a2.26,2.26,0,0,0,.75,2,2,2,0,0,0,.25-1.25,3.56,3.56,0,0,1,.25-1.5,4.15,4.15,0,0,0,1.25-.25,2.51,2.51,0,0,0-.25,1.12V217q.25-.5.75-1.38t.75-1.38a2.83,2.83,0,0,0,1.25-.25q-.5,1.5-.63,1.75t.37.5q.25,0,.5-.75.75-1,1.25-1.75h1.5a2.75,2.75,0,0,1-1,1.75q1.5.5,2.25-1.75l1.25-.25h.25l-1.5,1.75h1.5a5,5,0,0,0,.63-.87q.38-.63.63-.63h1a2,2,0,0,0-.37.5,1.39,1.39,0,0,1-.5.5,1.9,1.9,0,0,0-.63.75,4,4,0,0,0,1.75-.5,1.58,1.58,0,0,0,.37-.63,1.58,1.58,0,0,1,.37-.63l.75.25a2,2,0,0,1,.75.25l-2.25,1.5a2.22,2.22,0,0,0,2.5-.75l.25-.75a1.12,1.12,0,0,1,.5.13,1.12,1.12,0,0,0,.5.13,2.78,2.78,0,0,1-1,1,7.4,7.4,0,0,0-1,.75q1,.25,2.25-1,0-.25.13-.25t.13-.25l.75.5.25.25q.25.25-.75.75a2.65,2.65,0,0,0-.75.5h-.25a1.63,1.63,0,0,0,1.25,0,2.67,2.67,0,0,0,1-.5v-.5l.13.13L70,216v.75L68.52,218h1a1.34,1.34,0,0,0,1-1.5.51.51,0,0,0,.13.37.51.51,0,0,1,.13.37q.25.75,0,1a2.56,2.56,0,0,1-1,.5q-.25,0,0,.13a1.07,1.07,0,0,0,.5.13q.75,0,.75-1.25l.25.5q0,.75-1.25,1.5a1.56,1.56,0,0,0,.87-.25q.37-.25.37-.5a2.26,2.26,0,0,1,.25,1,1,1,0,0,1-.25.75.87.87,0,0,1-1,1,.74.74,0,0,0-.5.25q.5.5,1-.25a3.82,3.82,0,0,1-.75,1l-.5.5h.25a23.34,23.34,0,0,1-11.87,8.37,25.25,25.25,0,0,1-7.63,1.12,24.15,24.15,0,0,1-14-4.5q.5.5.75.25a1.7,1.7,0,0,1-1.25-1.5l-.25.25a1.12,1.12,0,0,0,.13.5,2,2,0,0,0,.37.5l-.25-.25-.75-.5a27.83,27.83,0,0,0,2-2.25Zm34.24-4.76v-.25L70,221q.25.25.75,0T71.3,220.45ZM37.06,225.7l-.25.25a1.2,1.2,0,0,0,.37.87,3.06,3.06,0,0,0,1.38.63A2.3,2.3,0,0,1,37.06,225.7ZM38,228a1.68,1.68,0,0,1-.75-.13,3,3,0,0,1-.63-.5,1.15,1.15,0,0,1-.37-.87l-.25.25q.5,1.75,2,1.25Zm-2,.26'\n\nexport const BSB = baseball\n","export const basketball =\n 'M53.53,148.94a54.5,54.5,0,0,1-.37-9q.13-5.75.37-11l.25-5.5a4.84,4.84,0,0,1,2.38.13,20.36,20.36,0,0,0,6.38-.37q4.5-.75,9.38-2a64.14,64.14,0,0,0,11.37-4.37,66.27,66.27,0,0,0,12.5-7.87q2.25-1.75,5.88-4.5t5.38-4.13q1.75-1.38,4.5-3.63t4.25-3.37q1.49-1.12,4-2.88l4.13-2.88q1.62-1.12,3.87-2.62T132.15,82q2.12-1.38,4.63-2.88t5.5-3q5.5-3.25,10.12-5.88T163,64.67q6-3,11-5.12a106.8,106.8,0,0,1,10.75-3.87,80.24,80.24,0,0,1,10.38-2.5,42.51,42.51,0,0,1,9.12-.5,23.36,23.36,0,0,1,8,1.75q4.75,5.75,8.63,11.5a101.81,101.81,0,0,1,6.75,11.5,116.57,116.57,0,0,1,5,11.5,106.92,106.92,0,0,1,3.63,11.87q1.49,6.12,2.38,12a109.69,109.69,0,0,1,1.12,12.37,54.32,54.32,0,0,1-6.62,5.25,76,76,0,0,1-10.75,5.5,109.21,109.21,0,0,1-19.75,6,296.45,296.45,0,0,1-29.38,4.75A601.1,601.1,0,0,1,113.15,151q-25.88.37-59.63-2.12Zm58-60q-4.5,3-11.25,8.25t-10.5,7.87a107.38,107.38,0,0,1-9.38,5.75,41,41,0,0,1-11.75,4.37A82.55,82.55,0,0,1,55,116.68,192.14,192.14,0,0,1,65.28,76.31q7-18.37,16.37-31.13a86.06,86.06,0,0,1,20.5-20.37,54.77,54.77,0,0,1,23.13-9.38,120.61,120.61,0,0,1,28.25,2.75,92.54,92.54,0,0,1,23.75,8.5A139.32,139.32,0,0,1,195,37.81a100.49,100.49,0,0,1,13.5,12.13,22.56,22.56,0,0,0-9.12-1.75,57.19,57.19,0,0,0-10.5,1,79.41,79.41,0,0,0-11.75,3.25q-6.38,2.25-12.25,4.87t-12.37,6.12q-6.51,3.5-12,6.62t-11.25,6.88q-5.76,3.75-9.75,6.5ZM49.78,115.69a19.34,19.34,0,0,1-8.5-2.88,23.75,23.75,0,0,1-7.87-7.87,28.92,28.92,0,0,1-4.25-12.25q-.87-7,2.88-17.12T44.79,54.2A95.22,95.22,0,0,1,65,35.2,105.41,105.41,0,0,1,85.67,23.57a110.86,110.86,0,0,1,19-5.62q9.87-2,13-2.25t5.38-.25Q95.54,19.21,75.92,47T49.79,115.7ZM49,121.94l-.25,25.75q-24.25-3.25-29-8.5a14.85,14.85,0,0,1-2.38-3.75,11.57,11.57,0,0,1-1-3.75q-.13-1.75-.13-3.5v-3q-.5-5.5,2.75-21a87.61,87.61,0,0,1,10.5-27.5q-5.25,16.25-1,29.25,4.75,13.5,20.5,16Zm2.74,55.74a23,23,0,0,0-12.37,1.5q-6.37,2.51-7.13,5.5a67.26,67.26,0,0,1-4.5-8.25q-2.5-5.25-4.75-11.13a122.92,122.92,0,0,1-3.87-11.87,52.4,52.4,0,0,1-1.88-10.25q9.5,8.5,31.5,11.5v.63l.13,1.38q.13,1.38.13,2t.13,2.5l.25,3,.37,3.25a21,21,0,0,0,.5,3.37,23.68,23.68,0,0,1,.63,3.5q.5,3.38.87,3.37ZM54,183.43q1.25,9,10.25,24.13T85,231.19q-30.5-12.75-49.75-41.5,1.75-8.75,17.5-6.5Zm5.25.76a30.37,30.37,0,0,0,3,1q2.5.76,5.25,1.5t6.88,2.25q4.13,1.5,8.5,3.37t9.88,4.63q5.5,2.76,10.75,6a145.21,145.21,0,0,0,15,8.13,137.08,137.08,0,0,0,17.38,6.62,115.07,115.07,0,0,0,19,4.25,92.33,92.33,0,0,0,19.87.37,69.82,69.82,0,0,0,20-4.63Q157,245.69,114,239.44a61.69,61.69,0,0,1-13.75-3.25q-23-7.5-37.5-42-3.5-8.75-3.5-10ZM131,210.44q-13.25-4.5-34.38-15.37A249.93,249.93,0,0,0,57,178.44a156.29,156.29,0,0,1-3.25-23.25q2,.25,5.88.5t15.13.87q11.25.62,22,.75t25.12-.13q14.37-.26,26.12-1.5,18.25-1.75,29.38-3.25t23.37-4.13a122.46,122.46,0,0,0,21.5-6.5,103.08,103.08,0,0,0,17.5-9.38,96.5,96.5,0,0,1-4.13,27.63,106.06,106.06,0,0,1-12,26.38,108,108,0,0,1-18.88,22.5q-28.5,17-73.75,1.5Z'\n\nexport const BB = basketball\n","export const boxing =\n 'M32.63,112.74a42.22,42.22,0,0,0-5.75,6.88q-2,3.13-1.75,4.63v1.25q-6.25,5.75-8.25,16.75-5.75,33.5,13.5,58.25A67.17,67.17,0,0,0,45.52,215a56,56,0,0,0,16.37,8,39.81,39.81,0,0,0,15.5,1.38,25.45,25.45,0,0,0,12.75-4.87,14,14,0,0,0,8.37-4.37,34.43,34.43,0,0,0,5.88-7.5,51.66,51.66,0,0,0,3.5-7.87,12.89,12.89,0,0,1-3-.75q-1.25-.5-2.88-1.25a20.91,20.91,0,0,1-3.25-1.88q-1.62-1.13-3.87-3t-4.75-4.13a71.71,71.71,0,0,0,18.5,8.25l.25-.75a5.58,5.58,0,0,0,1.12-.13,6.71,6.71,0,0,0,2.25-1.75,11.49,11.49,0,0,0,2.62-4.63,2.55,2.55,0,0,0,1.88.75,3.3,3.3,0,0,0,1.88-.5l.75-.25a6,6,0,0,1,1,.63q.5.38.13,2.25T117.38,197a30.56,30.56,0,0,0-4.37,5,27.52,27.52,0,0,0-3.87,8.13,23.86,23.86,0,0,0-1,9.62q.5,4.75,5.38,9.62t14.12,7.87a29.51,29.51,0,0,0,15.5,1.25,30.22,30.22,0,0,0,13.38-6.62,61.52,61.52,0,0,0,11.13-12.37,91.5,91.5,0,0,0,8.75-16,130.82,130.82,0,0,0,6.12-17.62,122.94,122.94,0,0,0,3.37-17.12q4-7,7-13.25A64.85,64.85,0,0,0,197,145.12q1.13-4.13,1.75-7.13a25.4,25.4,0,0,0,.63-4.5v-1.25a.74.74,0,0,1,.25-.5,6.25,6.25,0,0,0,.75-1.25q.5-1,.87-1.88a11.14,11.14,0,0,0,.63-2.38,16.3,16.3,0,0,0,.25-2.88,16.07,16.07,0,0,0-.37-3.13,13.32,13.32,0,0,0-1.12-3.25q3,.5,11.37-5.12A86.29,86.29,0,0,0,227.12,99a21.2,21.2,0,0,0,4.13-.37,11.86,11.86,0,0,0,2.88-.87l1.75-.87,1-.87.25-.25,1.75-1a8.43,8.43,0,0,0,1.5-3q.75-2.5-8.63-20T216.12,45q-1.5-2-3.5-4.25t-3.87-4.13l-7.5-7.5L198.37,26q-2.88-3.13-2.12-2.88t-.87-2.62q-.75-6-10.25-1.75a3.5,3.5,0,0,0-1.88,1.75,3.86,3.86,0,0,0,0,2.38,8.88,8.88,0,0,1-.13,3.87q-9.25-2-25.5,15.75-5.75,1.75-14,7.5t-8.5,9.5l-4.75-1a12.37,12.37,0,0,0-7.75,2.5,21.79,21.79,0,0,0-9.25,1.25A59.51,59.51,0,0,0,102.48,67a34.58,34.58,0,0,0-8.63,6.5q-5,.5-13.62,4.63T65.1,86a67.93,67.93,0,0,0-6.25,3.75l-1.62.75A15.26,15.26,0,0,0,54,92.87,9.52,9.52,0,0,0,51.1,97q-4-1.5-11.5,6.25a49.63,49.63,0,0,0-7,9.5Z'\n\nexport const BOX = boxing\n","export const commonwealthgames =\n 'M191,228.13q-1.75,0-3.25-.13l-3-.25-2.88-.37Q179,227,179,226.75t-2.88-.87l-2.75-1-2.62-1.12a25.21,25.21,0,0,1-2.5-1.12,52,52,0,0,0,5.5-6.5,47.13,47.13,0,0,0,8.37,2.75,39.59,39.59,0,0,0,8.87,1,40.8,40.8,0,0,0,35.74-20.63,41.33,41.33,0,0,0,5.5-20.87A41.41,41.41,0,0,0,191,137.14a41.21,41.21,0,0,0-20.25,5.25,69.77,69.77,0,0,0-6.25-6,50.06,50.06,0,0,1,51.24-.87,49.48,49.48,0,0,1,24.75,42.87,49.62,49.62,0,0,1-2.5,15.75,46.87,46.87,0,0,1-7.13,13.62,55.4,55.4,0,0,1-10.75,10.75,46.7,46.7,0,0,1-13.62,7.13,49.16,49.16,0,0,1-15.5,2.5Zm-16.25-99.24q-.25-5.5,4.75-30.62t10.12-47.87q5.13-22.75,5.12-22.5a3.18,3.18,0,0,0,1.38.25h4l6.5.13q6.5.13,8.63.13h11q-1.5,10.25-4.5,25t-5.62,26.25q-2.62,11.5-6.38,27.25t-5,21.75q-16-4.25-30,.25ZM160,51.63l-4.5,20.75q-2.5,11.5-4.63,20.37t-4.5,19.5q-2.37,10.62-3.87,16.37a57.17,57.17,0,0,0-9.12-1.75,64.56,64.56,0,0,0-10.75-.13A47.73,47.73,0,0,0,111,128.86q-.25-5.75,5-32.37t10.5-50q5.25-23.38,5.5-23.87a13,13,0,0,1,1.5.13q1,.13,4.25.13h6.75l9.12.13q9.12.13,11.37.13a13.83,13.83,0,0,1-.25,2.38q-.25,1.38-.5,2.88h23.5l2,15.75q-.75,2.5-1.88,6.62t-4.13,15.5q-3,11.37-5.38,20.87l-4.75,19-2.88,13.5q-1.25-6.75-2.5-14.25t-2.38-14.12q-1.13-6.62-2.25-14.25t-1.88-13.38q-.76-5.75-1.75-12Zm-63.75.5q-2.5,11.75-5.62,26t-6.75,29.38Q80.26,122.63,79,128.63q-16-4.25-30,.25-.5-5.5,4.63-30.62T63.88,50.38Q69,27.63,69,27.88q8.75.25,23.75.5-.25-1.75-.5-3.13A11.6,11.6,0,0,1,92,23.14h32.75l2,16.5q-17.5,64.75-20,79.5-4.75-25.75-10.5-67ZM30.76,28.38H62l2,15.75q-16.75,61.5-19,75.5-2.5-13.75-13.75-88.75a15,15,0,0,0-.5-2.5ZM91,136.13a42.85,42.85,0,0,0-6.25,6,40.9,40.9,0,0,0-19.75-5,39.69,39.69,0,0,0-29.12,12.13,41.33,41.33,0,0,0,0,58.5A39.73,39.73,0,0,0,65,219.88a39.66,39.66,0,0,0,16.5-3.5,33.94,33.94,0,0,0,2.75,3.37q1.5,1.62,3,3.13a49.66,49.66,0,0,1-47-1.38,48.5,48.5,0,0,1-18.12-18.12,49.23,49.23,0,0,1-6.62-25,47.69,47.69,0,0,1,14.5-35,47.69,47.69,0,0,1,35-14.5,51.62,51.62,0,0,1,26,7.25ZM80,214.38a36.19,36.19,0,0,1-7.25,2.25,39.67,39.67,0,0,1-7.75.75A37.31,37.31,0,0,1,37.63,206a38.94,38.94,0,0,1,0-55A37.31,37.31,0,0,1,65,139.64a39.24,39.24,0,0,1,9.5,1.12,41,41,0,0,1,8.5,3.13A64.07,64.07,0,0,0,75.75,155,57.82,57.82,0,0,0,80,214.38Zm92.25-70.25q2.25-1,4.37-1.88a35.92,35.92,0,0,1,4.5-1.5,30.81,30.81,0,0,1,4.87-.87q2.5-.25,5-.25a38,38,0,0,1,14.88,3,41.39,41.39,0,0,1,12.63,8.25,46.12,46.12,0,0,1,6,8,37.52,37.52,0,0,1,3.87,9.25,39.06,39.06,0,0,1,1.38,10.25A37.63,37.63,0,0,1,218.4,206,37.26,37.26,0,0,1,191,217.37a39.22,39.22,0,0,1-15.75-3.25,53.66,53.66,0,0,0,7.63-15.5,59,59,0,0,0,2.62-17.5,61.33,61.33,0,0,0-1.5-13.62,51.12,51.12,0,0,0-4.5-12.37,65.56,65.56,0,0,0-7.25-11ZM128,233.39a52.08,52.08,0,0,1-52.26-52.13,50.66,50.66,0,0,1,15.25-37,50.14,50.14,0,0,1,37-15.37A51.13,51.13,0,0,1,148.38,133,52.62,52.62,0,0,1,165,144.14a53.24,53.24,0,0,1,15.25,37,51.19,51.19,0,0,1-7,26.25,51.9,51.9,0,0,1-19,19,51.19,51.19,0,0,1-26.25,7Zm0-95.75a43.52,43.52,0,0,0-43.5,43.5,43.52,43.52,0,0,0,43.5,43.5,43.52,43.52,0,0,0,43.5-43.5,43.52,43.52,0,0,0-43.5-43.5Zm29,72.5a40.58,40.58,0,0,1-8.25,6.38,41.71,41.71,0,0,1-9.88,4.13,40.28,40.28,0,0,1-10.88,1.5,41,41,0,0,1-41-41,41,41,0,0,1,41-41,39.51,39.51,0,0,1,29,12,40.84,40.84,0,0,1,12,29,39.51,39.51,0,0,1-12,29Z'\n\nexport const CWG = commonwealthgames\n","export const cricket =\n 'M193.29,219.75q2-1.5,3.75-2.75L39,59a9.27,9.27,0,0,1-1.25,1.88q-.75.87-1.5,1.88ZM48.54,207.5a112.48,112.48,0,0,0,93.62,32.25,112.52,112.52,0,0,0,47.13-17.25L33.54,66.74a112.32,112.32,0,0,0-17.25,47.13,112.48,112.48,0,0,0,32.25,93.62ZM217,197q1.25-1.75,2.75-3.75l-157-157a14.43,14.43,0,0,1-1.12,1l-1.25,1L59.05,39ZM66.8,33.5,222.55,189.26a110.56,110.56,0,0,0,11.37-22.88,111.83,111.83,0,0,0,5.88-24.5,113.4,113.4,0,0,0,.25-25,111.33,111.33,0,0,0-5.25-24.5,113.4,113.4,0,0,0-10.88-23.13A113.3,113.3,0,0,0,164,21.38a110.58,110.58,0,0,0-50.12-5.12A112.52,112.52,0,0,0,66.8,33.5ZM45.29,45.26a15.16,15.16,0,0,0-3.75,5.62q-1,2.87.25,4.13a.72.72,0,0,0,.5.25H42l159,159q1.25,1.25,4.25.25a13.92,13.92,0,0,0,5.62-3.75,15.82,15.82,0,0,0,3.63-5.62q1-2.87-.25-4.13L55,41.74q-1.25-1.25-4.13-.25a15.05,15.05,0,0,0-5.62,3.75Z'\n\nexport const CRT = cricket\n","export const cycling =\n 'M182,133.8,177.24,135l-4.5-13q13,.5,16.75-2a73.81,73.81,0,0,0,13.75.25q7.74-.5,7.25-3-.25-.75-2.62-1.38a24.29,24.29,0,0,0-6.62-.5,47.24,47.24,0,0,0-8.75,1.12,11.15,11.15,0,0,0-2-1.62q-1-.62-1.5-.87l-.5-.25-.5-3.5a17.38,17.38,0,0,0,2.12.5,32.83,32.83,0,0,0,5.12.25,15.84,15.84,0,0,0,6.5-1.25q2.25,2.25,8.75-.5.75,2,1.75,2.12T214,110l6.5-1.5,2.5-.25.5-.5a1,1,0,0,0,.37-1,1.11,1.11,0,0,0-.63-.75l-.25-.25-1.5-5.75v-.5l-1-.75a3.88,3.88,0,0,0-2.88-.5,23.61,23.61,0,0,1-5.62-.25,52.49,52.49,0,0,0-6.5-.5l-3-.5a44.22,44.22,0,0,1-10.75-.25l-11.5-3.25q-.25-1.25-.75-3.25t-1.88-6.5A63,63,0,0,0,175,76.54q3-6,1.25-15.25l3.25.25.5,4,3.25-.25V62.54q6.75,3.5,7-1,1.75,0,2.25-.75a1.64,1.64,0,0,0,0-1.75,3.58,3.58,0,0,0,2.12-.37,5.58,5.58,0,0,0,.87-1.88q4,1,4.25-1.25,2.5-.75,3.87-4t1.38-10a20.92,20.92,0,0,0-.75-3.87l-1.25-4a14.62,14.62,0,0,0-1.88-4,31.62,31.62,0,0,0-2.75-3.37,11.71,11.71,0,0,0-3.87-2.75,25.68,25.68,0,0,0-5.25-1.62,29.79,29.79,0,0,0-6.88-.5,49.32,49.32,0,0,0-8.63,1.12q-6,1.5-15.75,7t-9.5,7.75q-6.5-1.25-10.5-1.62A45.89,45.89,0,0,0,121.2,37a52.86,52.86,0,0,0-15.63,6.5A73.14,73.14,0,0,0,89.7,57a43.25,43.25,0,0,0-8,11,20.23,20.23,0,0,0-2.38,9,29.58,29.58,0,0,0,1.12,7.25h-3.5q-3-.25-4.13-.25a16.09,16.09,0,0,0-3,.37q-1.87.37-1.5,1.5a10.83,10.83,0,0,1,.37,3.13,3.13,3.13,0,0,1,.5,1.25,5,5,0,0,0,.5,1.38,1.83,1.83,0,0,0,.87.63,3.48,3.48,0,0,0,1.38.25q2-.25,2.25-.63a11.72,11.72,0,0,0,.75-2.38h2q1.25,2.5,2,3.75,1,1.25,1.75.75l1,2a.4.4,0,0,0,.25.37q.25.13.87.37a3.14,3.14,0,0,0,1.12.25l5.75,22.5,3,1.75,1,5.75-4.5,1,2.25,9a6.3,6.3,0,0,0-1.5.75,7.79,7.79,0,0,0-1.88,2.38,5.49,5.49,0,0,0-.63,4.13l-1.25.75q-15.5-15.25-36.75-11a33.56,33.56,0,0,0-5.88,1.88,58.42,58.42,0,0,0-8.25,4.37,35.44,35.44,0,0,0-8.63,7.5,58.7,58.7,0,0,0-7.13,11.13A38.15,38.15,0,0,0,15.68,174a96.16,96.16,0,0,0,1.25,20q4,19.5,19.63,29.5t31.63,6.75q20.75-4.25,31-26,5.25,1.75,7.5,2.25a17.53,17.53,0,0,0,3,.5,22,22,0,0,0,3.25-.5q1.75-.5,3.13-1a10.14,10.14,0,0,0,2.12-1l.5-.5a46,46,0,0,1,2.25,7q.75,5,3.25,4.5a2.51,2.51,0,0,0,1.5-.37l.5-.37v-.25a25.29,25.29,0,0,1,8-1.75,2.26,2.26,0,0,0,.25-1v-1l5,.5a1.27,1.27,0,0,0,.63-.25,4.18,4.18,0,0,0,1-1.5q.62-1.26-.63-3.5-4.25-1.25-9.25-6.25t-6.75-9a13.77,13.77,0,0,0-.63-4.37q-.63-1.88-.87-2.38l-.5-.5q32-38.25,37.25-45.25a19.35,19.35,0,0,1,3-3.25,13.86,13.86,0,0,1,2.5-1.75,13.32,13.32,0,0,1,1.75-.75q.75-.25,1,0h.25l1.5,5.5q-.5.25-1.12.63t-2.88,2a40.74,40.74,0,0,0-4.13,3.37q-1.87,1.75-4.63,4.63a33.54,33.54,0,0,0-4.63,6q-1.87,3.13-4.13,7.5a29.7,29.7,0,0,0-3,8.87q-.74,4.5-1.25,10.38a32,32,0,0,0,1.25,11.87,50.7,50.7,0,0,0,11.63,24.13,49.33,49.33,0,0,0,21,14.38,47.67,47.67,0,0,0,24.63,2,49.1,49.1,0,0,0,14.75-6.25,59.46,59.46,0,0,0,13.38-11.5q6.12-7,8.63-17.88a55,55,0,0,0,0-23.37q-3.25-16.5-13.88-26.88t-22-13.25a48.18,48.18,0,0,0-21.38-.87ZM81.24,93.05l-1,.25a13.43,13.43,0,0,1-2-3.25l2.5-.5Zm3-.75a2.19,2.19,0,0,1-1.5-.75,2.06,2.06,0,0,1-.5-2H84l2.5,2a8.81,8.81,0,0,1-2.25.75Zm14.51,33.25h-1L90,94.06l8,4.5q5.75,14.25,15.5,22.75-1,1.25-1.75,2.25a14.28,14.28,0,0,1-1.25,1.5,5.86,5.86,0,0,0-.75.87,1.22,1.22,0,0,0-.25.63l-10.25.75ZM114,161.05a21.17,21.17,0,0,1-.13,5q-.37,3.25-.87,5.75l-.5,2.5a8.81,8.81,0,0,1-2.25-.75q1.25-2-.75-6-1.25-2.25-1.62-8.87A34,34,0,0,1,109,147a15.67,15.67,0,0,1,3.25-4.87,28.85,28.85,0,0,1,4-3.63l2-1Q113,147.55,114,161Zm35-28q-1,1.25-2.88,3.37t-6.62,8q-4.75,5.88-8.75,10.62a21.9,21.9,0,0,0,1.38-6.75,25.07,25.07,0,0,1,1.62-7.5q.75-1.5,1.75-3.25a22.53,22.53,0,0,0,1.25-2.38q.25-.63.75-2.12a3.18,3.18,0,0,0-.25-2.75q4.5,0,9.5-.25,2.25-.25,2.88.5a1.29,1.29,0,0,1-.13,1.75Zm8.49-14.75a12.53,12.53,0,0,1,.25,1.5,4.27,4.27,0,0,0,.5,1.25q.5,1,1,.75a2.31,2.31,0,0,1,1.5,0l4.25-1.5a2,2,0,0,0,.25.75q.25.5-.75,1.38a5.47,5.47,0,0,1-3,1.12l-26,1.75q2-3.25,8.25-6.75a41.82,41.82,0,0,0,6.12-3.87,16.22,16.22,0,0,0,4.13-5.12,12.61,12.61,0,0,0,1.5-7,13.34,13.34,0,0,0-2.38-5.38,21.21,21.21,0,0,0-3.37-3.87,68.8,68.8,0,0,0-6-4.13q-4.51-2.88-6-3.63-5.25-3.75-8.87-6t-5.62-3.25L124.47,75a9.8,9.8,0,0,0,7.5-2.25h6.25a4.22,4.22,0,0,0,1.75.87q1.25.37,4.37,1a20.25,20.25,0,0,0,5.88.37,138.69,138.69,0,0,0,9,25.5,7.74,7.74,0,0,0,.25,1.25,7.43,7.43,0,0,0,.37,1.25q.13.25.37.87a1.75,1.75,0,0,0,.63.87l.75.5,1.12.5,2.5.5L166,108l2.5-.25L169,109l-1.38.25-3.25.87q-3.25.87-3.63,1.62a13.16,13.16,0,0,1-2.75,2.75q-2.38,2-.5,3.75Z'\n\nexport const CYC = cycling\n","export const darts =\n 'M159,85.5A49.25,49.25,0,0,0,144.25,78L143,82.25A47.44,47.44,0,0,1,156.25,89ZM78,111.75a35.13,35.13,0,0,0-2.12,7.87,57.24,57.24,0,0,0-.63,8.37H80a47.88,47.88,0,0,1,2.25-14.75ZM99.74,89,97,85.25a62.73,62.73,0,0,0-6.25,5.5A46.16,46.16,0,0,0,85.49,97L89,99.75q.75-1,1.38-1.75l1.38-1.62q.75-.87,1.5-1.62l1.5-1.5,1.62-1.5Q98,90.25,98,90.38A8.82,8.82,0,0,0,99.74,89Zm74,24.26,4.25-1.5a51.83,51.83,0,0,0-3.13-7.75,56.79,56.79,0,0,0-4.13-7L167,99.75q1,1.5,2,3.13t1.88,3.25q.87,1.63,1.62,3.37a24.47,24.47,0,0,1,1.25,3.75Zm0,29.49,4.25,1.5A48.21,48.21,0,0,0,180.75,128H176a47.88,47.88,0,0,1-2.25,14.75Zm-45.75,38A48.15,48.15,0,0,0,144.25,178L143,173.76A50.31,50.31,0,0,1,128,176Zm-45.75-38L78,144.26a34.74,34.74,0,0,0,1.88,5.25q1.13,2.5,2.5,4.87A39.17,39.17,0,0,0,85.5,159l3.5-2.75A46.61,46.61,0,0,1,82.25,142.75ZM53,103.5l25,8.25A49.25,49.25,0,0,1,85.5,97L64.26,81.49A76.51,76.51,0,0,0,53,103.5Zm138.74,70.75a76.34,76.34,0,0,0,6.62-10.5A65.81,65.81,0,0,0,203,152.5l-25-8.25A52.69,52.69,0,0,1,170.74,159ZM49,128a76.44,76.44,0,0,0,1,12.37,78.85,78.85,0,0,0,3,12.13l25-8.25a27.6,27.6,0,0,1-1.5-5.12q-.5-2.62-.87-5.5a43.71,43.71,0,0,1-.37-5.62H49ZM174.5,191.75,159,170.51A51.22,51.22,0,0,0,170.75,159L167,156.26a46.19,46.19,0,0,1-3.25,3.87q-1.75,1.87-3.63,3.63a45.76,45.76,0,0,1-3.87,3.25l2.75,3.5a43.48,43.48,0,0,1-7,4.37,51.23,51.23,0,0,1-7.75,3.13l8.25,25A76.51,76.51,0,0,0,174.5,191.75ZM170.75,97l21-15.25a74.94,74.94,0,0,0-17.25-17.5L159,85.49a3.48,3.48,0,0,1,1.38.87,14.63,14.63,0,0,0,1.25,1.12l1.25,1,1.25,1.12,2.25,2.25,1.12,1.25,1,1.25,1.12,1.25A7.85,7.85,0,0,1,170.74,97ZM144.25,78l8.25-25a77.24,77.24,0,0,0-12.13-3A78.07,78.07,0,0,0,128,49V75.25A49.63,49.63,0,0,0,111.74,78l1.5,4.25A47.88,47.88,0,0,1,128,80V75.25A49.63,49.63,0,0,1,144.25,78ZM85.49,159l-21.25,15.5q-2.5-3.5-4.5-7T56,160.14a79.27,79.27,0,0,1-3-7.63L48.25,154a87.81,87.81,0,0,0,12,23.25l4-2.75a69.87,69.87,0,0,0,7.87,9.38,62.93,62.93,0,0,0,9.62,7.87l15.25-21a62.73,62.73,0,0,1-6.25-5.5A46.16,46.16,0,0,1,85.49,159ZM128,180.76a43.55,43.55,0,0,1-5.62-.37q-2.87-.37-5.5-.87a27.28,27.28,0,0,1-5.12-1.5l-8.25,25a73,73,0,0,1-21.75-11.25l-3,4q3.5,2.5,7.25,4.75a63.85,63.85,0,0,0,7.87,4q4.12,1.75,8.13,3.25l1.5-4.75a77,77,0,0,0,24.5,4V180.76ZM128,15.5a110.15,110.15,0,0,0-43.75,8.87A111,111,0,0,0,24.37,84.25,109.85,109.85,0,0,0,15.5,128a112.74,112.74,0,0,0,4,29.88,111,111,0,0,0,11.25,27A112.59,112.59,0,0,0,128,240.5a110.15,110.15,0,0,0,43.75-8.87,111,111,0,0,0,59.87-59.87,112.3,112.3,0,0,0,0-87.51,111,111,0,0,0-59.87-59.87A110,110,0,0,0,128,15.5Zm0,198A83.31,83.31,0,0,1,85.12,202,85.72,85.72,0,0,1,54,170.88,85.63,85.63,0,0,1,46.87,101,83.1,83.1,0,0,1,59.11,77.5,91.12,91.12,0,0,1,77.49,59.13,83.1,83.1,0,0,1,101,46.88a84.05,84.05,0,0,1,27-4.37,82.82,82.82,0,0,1,22.75,3.13,87.06,87.06,0,0,1,20.37,8.63,87,87,0,0,1,30.62,30.62,86.5,86.5,0,0,1,8.63,20.5,84.94,84.94,0,0,1-8.37,65.5A85.72,85.72,0,0,1,170.87,202,83.31,83.31,0,0,1,128,213.51Zm67.74-36.25-4-3a74.94,74.94,0,0,1-17.25,17.5l2.75,4a81.24,81.24,0,0,0,18.5-18.5ZM128,211.75a86.43,86.43,0,0,0,26-4L152.5,203a77,77,0,0,1-24.5,4Zm0-167.5a84,84,0,0,0-25.75,4L103.5,53A77,77,0,0,1,128,49ZM207,128a77,77,0,0,0-4-24.5l4.75-1.5a87.81,87.81,0,0,0-12-23.25l-4,3A73.22,73.22,0,0,1,203,103.49l-25,8.25a35.13,35.13,0,0,1,2.12,7.87,57.25,57.25,0,0,1,.63,8.37H207a77,77,0,0,1-4,24.5l4.75,1.5a82.36,82.36,0,0,0,3-12.75,88.57,88.57,0,0,0,1-13.25H207ZM78.75,60.26A68.82,68.82,0,0,0,72,65.76q-3.25,3-6.25,6.25a69.2,69.2,0,0,0-5.5,6.75l4,2.75a69.87,69.87,0,0,1,7.87-9.38,62.93,62.93,0,0,1,9.62-7.87L97,85.27A53.08,53.08,0,0,1,111.74,78L103.5,53A73,73,0,0,0,81.75,64.27Zm75.24-12L152.49,53a68.92,68.92,0,0,1,11.37,4.63,74,74,0,0,1,10.62,6.62l2.75-4q-2.25-1.5-4.37-2.88t-4.5-2.75a42.87,42.87,0,0,0-4.75-2.38l-4.75-2-4.87-2ZM44.25,128H49a77,77,0,0,1,4-24.5L48.25,102A86.37,86.37,0,0,0,44.25,128Zm129.5-14.74-38,12.25a10,10,0,0,0-1.25-2.25L167,99.75A47,47,0,0,0,156.25,89l-23.5,32.5a10,10,0,0,0-2.25-1.25l12.5-38A50.31,50.31,0,0,0,128,80v39.75a6.65,6.65,0,0,0-2.5.5l-12.25-38A46.61,46.61,0,0,0,99.75,89l23.5,32.5a8.5,8.5,0,0,0-1.75,1.75L89,99.75a46.61,46.61,0,0,0-6.75,13.5l38,12.25a6.65,6.65,0,0,0-.5,2.5H80q0,2.5.25,5.12a44.22,44.22,0,0,0,.75,5,42.57,42.57,0,0,0,1.25,4.63l38-12.25a8.88,8.88,0,0,0,.5,1.25,4.16,4.16,0,0,0,.75,1L89,156.26A55,55,0,0,0,99.74,167l23.5-32.5a3.29,3.29,0,0,0,1.12.75q.62.25,1.12.5l-12.25,38A46.61,46.61,0,0,1,99.73,167L97,170.76a57.87,57.87,0,0,0,7,4.13,51.23,51.23,0,0,0,7.75,3.13l1.5-4.25A47.88,47.88,0,0,0,128,176V136.27a6.65,6.65,0,0,0,2.5-.5l12.5,38A47.44,47.44,0,0,0,156.23,167l-23.5-32.5a8.5,8.5,0,0,0,1.75-1.75l32.5,23.5a37.85,37.85,0,0,0,3.87-6.38,62.6,62.6,0,0,0,2.88-7.13l-38-12.25a6.65,6.65,0,0,0,.5-2.5H176a56.44,56.44,0,0,0-.5-7.5,35.74,35.74,0,0,0-1.75-7.25ZM128,132a3.92,3.92,0,0,1-2.88-1.12A3.84,3.84,0,0,1,124,128a4,4,0,0,1,1.12-2.88,4.26,4.26,0,0,1,5.76,0A4,4,0,0,1,132,128a4.86,4.86,0,0,1-.25,1.5,3.38,3.38,0,0,1-.87,1.38,3.65,3.65,0,0,1-1.38.87A4.42,4.42,0,0,1,128,132Z'\n\nexport const DRT = darts\n","export const elections =\n 'M153.5,162.25a40.21,40.21,0,0,1,1-9.25,27.39,27.39,0,0,1,2.62-7.13A53.73,53.73,0,0,1,161,140a49.15,49.15,0,0,1,4.5-5.25,45.44,45.44,0,0,0,4.37-5.12,49.88,49.88,0,0,0,3.75-5.88,32.78,32.78,0,0,0,2.75-7.25,35.17,35.17,0,0,0,1.12-9v-41q0-19.75-14.75-30.38T126,25.49a70.2,70.2,0,0,0-25.38,4.37A41.85,41.85,0,0,0,82,43.74q-7.25,9.5-7.25,22.75v41a33.94,33.94,0,0,0,2.5,13.38,36.44,36.44,0,0,0,6,9.88l7,8,6,9.88q6,9.88,2.5,13.62,0,6.25-15.75,9.75-3.5.75-11.75,2.25-31.25,5.5-45,13.5-23,14-23.25,42.75H249.23q0-14-5.38-24.25a41.36,41.36,0,0,0-13.75-15.75,84.92,84.92,0,0,0-18.62-9.12A126.77,126.77,0,0,0,191,176q-10.25-1.77-18.62-3.25a53.54,53.54,0,0,1-13.62-4q-5.25-2.52-5.25-6.5Zm26-25.25v20.25a11.12,11.12,0,0,0,1.5,5.62,11,11,0,0,0,4.13,4.13,11.12,11.12,0,0,0,5.62,1.5h29A11.11,11.11,0,0,0,231,157.25v-29a9.49,9.49,0,0,0-.25-2.25L253,97.49l-24.75,23.25a11.19,11.19,0,0,0-8.5-3.75h-29a11.38,11.38,0,0,0-4.37.87,10.66,10.66,0,0,0-6,6,11.38,11.38,0,0,0-.87,4.37v6l-5.25-2Zm5.5-8.75a6,6,0,0,1,5.75-5.75h29a5.45,5.45,0,0,1,4.5,2.25l-19.75,18.5-19.5-7ZM185,142l19.5,17.75,21-27v24.5a5.72,5.72,0,0,1-1.62,4,5.38,5.38,0,0,1-4.13,1.75h-29a6,6,0,0,1-5.75-5.75Z'\n\nexport const ELT = elections\n","export const entertainment =\n 'M150.17,48.92q-2.25-4.75-6-12.75-3.5,2.25-7,5,1.25,2.5,3.37,7t2.62,5.75q3.75-2.75,7-5ZM122.91,71.17q-.5-1-.87-1.88t-.87-2q-.5-1.13-.75-1.88a15.94,15.94,0,0,0-.87-2,10.09,10.09,0,0,1-.75-1.75,15.47,15.47,0,0,0-.87-2.12,8.64,8.64,0,0,1-.75-1.88q-1.25,1-2.38,2t-2.12,2a25.61,25.61,0,0,1-2.25,2q1,2.25,5.75,13.5,1.75-1.75,3.37-3.25A33.94,33.94,0,0,1,122.91,71.17Zm-13.49,12q-.75-1.75-1.75-4.25l-2-5-1.75-4.25q-2,1.75-3.63,3.13t-3.13,2.88q.5,1.5,1.62,4.25t2,5q.89,2.26,1.88,4.25a3.82,3.82,0,0,0,1-.75l1.75-1.75,1-.87,1-.87,1-.87,1-.87Zm-13.75,12L95,93.29l-.75-2q-.75-2-.87-1.88t-.87-2l-1.5-4-.63-2q-3.75,3.25-7,5.75,1,2.5,2.88,7.25a64.42,64.42,0,0,1,2.38,6.75q3.25-2.75,7-6Zm-28.5,21.75q-.75-1.75-1.38-3.63t-1.12-3.5q-.49-1.62-1.25-3.63t-1.25-3.5q-3.75,2.5-7.5,4.5l1.62,4.37q.87,2.37,1.75,5.25a47,47,0,0,0,1.62,4.63,13.06,13.06,0,0,1,1.5-.87,13.06,13.06,0,0,0,1.5-.87,13.06,13.06,0,0,1,1.5-.87,13.06,13.06,0,0,0,1.5-.87Zm-15.25,8.25q-2.5-7.25-4.75-14.25-4,1.75-7.75,3.25,4,12.5,4.5,14.25Q47.91,126.91,51.91,125.16Zm-20.5-8.49q-4.25,1-8.25,1.75l4.25,14.25a45.56,45.56,0,0,0,8.25-1.75Q35.41,129.67,31.41,116.67ZM53.66,221.16q4.5,15,5.25,18a93.87,93.87,0,0,0,9.5-1.5q-4.25-13.5-5.5-18A82.23,82.23,0,0,1,53.66,221.16Zm18.25-4.25q.75,2.25,2.62,8.37t3.13,9.62q2.25-.75,4.37-1.62t4.37-1.88q-.75-2.5-1.88-5.75t-2.12-6.5q-1-3.24-1.75-5.75Q76.16,215.42,71.91,216.92Zm17.25-7.75,6,18q2-1.25,4.13-2.5t4.37-2.5q-3-8.75-6.25-17.75-1,.5-2,1.12t-2.12,1.25q-1.12.63-2.12,1.25T89.16,209.16Zm16.26-10.25q3,7.75,6.5,17.75,1.75-1.5,3.87-3a49,49,0,0,0,4.13-3.25q-1-2.25-3.13-8.25t-3.37-9.25q-4,3.25-8,6Zm-21-85q-29,22.25-54.75,26.25l4,13.75q2.25,7.74,4.25,14.5t4.25,14q2.25,7.25,4.5,15.13t4.5,14.88q27.75-3.5,59-28-8.25-22.5-25.75-70.5Zm-2.75-7.25q-1-3-1.75-4.75t-1.62-4.37l-1.62-4.87a41.73,41.73,0,0,0-3.75,2.62q-1.75,1.38-3.5,2.62a46.65,46.65,0,0,1,1.75,4.75q.5,1.75,1.5,4.5t1.75,4.75q3.75-2.5,7.25-5.25Zm39.5,80,1.62,4.37q.87,2.37,1.62,4.25t1.62,4.37q.87,2.5,1.62,4.25,3.75-3,7.75-6.75-3-7.5-6.75-17.25-4.25,4-7.5,6.75Zm15-13.5q1,2.5,3.25,8.25t3.5,8.75q3.25-3,7.5-7-2.25-5.5-7-16.75Zm14.74-13.75q.75,2.25,3.25,8t3.75,8.75q4.25-4,7.25-7l-7-16.5q-3,2.75-7.25,6.75Zm14.51-13.49q1,2.5,1.75,4.25t1.75,3.87l2,4.25,1.75,4.13q4-3.5,7.5-6.5-6.5-14.5-7.25-16.25Q169.16,142.67,165.42,145.92Zm-74-37.75q9.5,25,26.5,70,8.75-7.5,25.75-23.37t25.5-23.13q-25.75-56.5-29.75-65.5-8,6.5-23.87,20.87T91.41,108.17Zm45-48.76q-4.75-10.25-6-13-3,2.5-6.75,5.5a20.41,20.41,0,0,1,.87,2,12.63,12.63,0,0,0,.87,1.88,12.63,12.63,0,0,1,.87,1.88q.37,1,.75,1.88t.87,1.88q.5,1,.87,1.88t.87,1.88q3.5-3,6.75-5.75Zm43.75,74q1,1.75,2.5,5l2.75,6q1.26,2.75,2.25,5.25a8.33,8.33,0,0,0,1.25-1,9.18,9.18,0,0,1,1-.87q.5-.37,1.12-.75a5.85,5.85,0,0,0,1.12-.87,5.85,5.85,0,0,1,1.12-.87q.62-.37,1.12-.75a9.18,9.18,0,0,0,1-.87q-.75-1.75-7.5-16-3.75,2.5-7.75,5.75Zm15.5-11,3.87,7.75,3.87,8.25q4.25-2.75,8.25-5-3.25-6.5-8-15.75-2,1-4,2.25Zm16.5-9q.75,1.5,1.5,3.13t1.62,3.25q.86,1.63,1.62,3.13l1.62,3.25,1.62,3q2.25-1,4.37-1.88t4.37-1.62q-1-2.25-3.87-7.5t-4.13-8.25q-4.5,1.75-8.75,3.5Zm27.5-8.26q-1,.25-1.75.37t-1.62.25a8.46,8.46,0,0,0-1.62.37,8.77,8.77,0,0,1-1.5.37l-1.62.25a10,10,0,0,0-1.62.37q1.5,2.5,4.25,7.75t4.25,8a5.22,5.22,0,0,1,1-.37l1-.25,1.12-.25q1.12-.25,1.12-.13t1-.13a11,11,0,0,1,1.12-.25,11,11,0,0,0,1.12-.25A11,11,0,0,1,247,121l1.12-.13-4.37-8q-2.87-5.25-4.13-7.75Zm-63,20.5q29.75-23.5,58.75-28-4-7.25-9-16.37t-8.87-16.13L209,49.79q-4.63-8.36-8.37-15.37-26.5,5-54.25,26.25l14.75,31.87Q171.18,114.17,176.67,125.66Zm20.49-97.49q-4.5-8.5-7-12.75-1.25.25-2.75.63l-2.88.75q-1.38.36-2.88.63,4.75,9,6.75,12.75,2.25-.75,4.37-1.25a36,36,0,0,1,4.37-.75Zm-17,4.49-6.5-12.5q-3.75,1.5-7.75,3.25,1.25,2.5,3.75,7.25t2.75,5.25q4-1.75,7.75-3.25Zm-15.5,7.25a18.22,18.22,0,0,0-1.5-3.25,28.15,28.15,0,0,1-1.62-3.25,31.75,31.75,0,0,0-1.5-3.13q-.89-1.62-1.62-3.13-3.5,2-7.25,4.25l1.62,3.25,1.38,2.88q1.38,2.88,1.62,3.5t1.62,3.13A14.38,14.38,0,0,0,159.29,43q.87-.62,1.75-1.12t1.88-1a15.93,15.93,0,0,0,1.75-1Z'\n\nexport const ENT = entertainment\n","export const esports =\n 'M253,173.4c0-25,0-29.5-6.8-54.5c-4.5-20.5-9.1-45.5-20.5-63.6c-9.1-15.9-25-18.2-40.9-9.1c-4.5,2.3-11.4,11.4-15.9,11.4c-4.5,2.3-15.9,4.5-43.2,4.5c-25,0-34.1-2.3-38.6-4.5c-4.5,0-11.4-9.1-15.9-11.4c-15.9-9.1-31.8-6.8-40.9,9.1C18.9,73.4,12.1,98.4,9.8,118.8c-4.5,25-6.8,29.5-6.8,54.5c0,13.6,6.8,36.4,20.5,40.9c15.9,4.5,29.5-13.6,36.4-25c6.8-9.1,6.8-9.1,11.4-22.7c2.3-6.8,4.5-9.1,9.1-6.8c2.3,4.5,9.1,9.1,15.9,9.1c6.8,0,13.6-2.3,18.2-9.1c6.8,0,18.2,0,25,0c4.5,4.5,11.4,9.1,18.2,9.1c6.8,0,13.6-2.3,18.2-6.8c2.3,0,4.5,2.3,6.8,6.8c6.8,11.4,9.1,15.9,13.6,25c6.8,11.4,20.5,25,36.4,20.5C246.2,209.8,253,189.3,253,173.4z M62.1,134.8c-15.9,0-29.5-13.6-29.5-29.5s13.6-29.5,29.5-29.5s27.3,13.6,29.5,27.3C89.4,121.1,78,134.8,62.1,134.8z M62.1,123.4c-9.1,0-18.2-6.8-18.2-18.2C43.9,96.1,53,87,62.1,87s18.2,9.1,18.2,18.2C80.3,116.6,71.2,123.4,62.1,123.4z M196.2,73.4c6.8,0,11.4,4.5,11.4,11.4c0,6.8-4.5,11.4-11.4,11.4c-6.8,0-11.4-4.5-11.4-11.4C184.8,80.2,189.4,73.4,196.2,73.4z M173.5,116.6c-4.5,0-11.4-4.5-11.4-11.4s4.5-11.4,11.4-11.4s11.4,4.5,11.4,11.4S180.3,116.6,173.5,116.6z M196.2,139.3c-6.8,0-11.4-4.5-11.4-11.4s4.5-11.4,11.4-11.4c6.8,0,11.4,4.5,11.4,11.4S203,139.3,196.2,139.3z M216.6,116.6c-6.8,0-11.4-4.5-11.4-11.4s4.5-11.4,11.4-11.4c6.8,0,11.4,4.5,11.4,11.4S221.2,116.6,216.6,116.6z'\n\nexport const EST = esports\n","export const financial =\n 'M251.78,77.63l-3.5,4.5v2h-1.5l-36.5,44.75H214v2h-4.5v-1.5l-30.25,37.25-32-34.25L111,176.88v1h-.75L87,206.38l-30-28.5h-1.5v-1.5l-3.25-3L50,175.63h1v2.25H47.77L12,214.13l-9-12,26.75-25.75v-.75h.75l21.75-21.25,22,21.25h2.5v2.25h-.5l8.25,7.75,6.5-7.75H89.75v-2.25h3l52.75-64.5,16.25,17.75h.75v.5l14.75,16,50.25-61.25h-.75V81.88h2.5l11-13.75,12.75-3Zm-33.49,4.25h4.25v2.25h-4.25Zm-8.5,0H214v2.25h-4.25Zm-8.75,0h4.25v2.25H201Zm-8.5,0h4.25v2.25h-4.25Zm-8.5,47h4.25v2H184Zm0-47h4.25v2.25H184Zm-8.76,47h4.5v2h-4.5Zm0-47h4.5v2.25h-4.5Zm-8.49,47H171v2h-4.25Zm0-47H171v2.25h-4.25Zm-8.5,0h4.25v2.25h-4.25Zm-8.5,0H154v2.25h-4.25Zm-8.75,0h4.25v2.25H141Zm-8.5,0h4.25v2.25h-4.25Zm-8.5,47h4.25v2H124Zm0-47h4.25v2.25H124Zm-8.5,47h4.25v2h-4.25Zm0-47h4.25v2.25h-4.25Zm-8.75,47H111v2h-4.25Zm0-47H111v2.25h-4.25Zm-8.5,47h4.25v2H98.29Zm0-47h4.25v2.25H98.29Zm-8.5,47H94v2H89.79Zm0-47H94v2.25H89.79ZM81,175.62h4.5v2.25H81Zm0-46.74h4.5v2H81Zm-8.5,2v-2h4.25v2Zm-4.26,0H64v-2h4.25Zm-12.75,0v-2h4.25v2Zm-8.75,0v-2H51v2Zm-8.5,0v-2h4.25v2Zm-8.5,0v-2H34v2Zm-4.26,47H21.29v-2.25h4.25Zm-4.25-49h4.25v2H21.29Zm-4.5,49H12.54v-2.25h4.25Zm-4.25-49h4.25v2H12.54Zm31.5-7a38.49,38.49,0,0,1-28.25-11.75A38.72,38.72,0,0,1,4,81.74,38.19,38.19,0,0,1,15.79,53.5,38.75,38.75,0,0,1,44,41.87,38.75,38.75,0,0,1,72.28,53.5,38.34,38.34,0,0,1,84,81.87h1.5v2.25H83.79q-1,19-16.5,30.25A41.45,41.45,0,0,1,44,121.87Zm0-75a34,34,0,0,0-13.62,2.75A36.71,36.71,0,0,0,19.29,57a33.34,33.34,0,0,0-7.5,11.13A35.19,35.19,0,0,0,9,81.87a33.72,33.72,0,0,0,10.25,24.75A33.72,33.72,0,0,0,44,116.87a33.72,33.72,0,0,0,24.75-10.25A33.72,33.72,0,0,0,79,81.87,33.72,33.72,0,0,0,68.78,57.13,33.72,33.72,0,0,0,44,46.87Zm0,66a32.09,32.09,0,0,1-9.75-1.5,27.69,27.69,0,0,1-8.63-4.5,36.57,36.57,0,0,1-6.75-6.75,27.6,27.6,0,0,1-4.37-8.5A32.09,32.09,0,0,1,13,81.87a30.32,30.32,0,0,1,9-22.12,29.59,29.59,0,0,1,21.88-9.12,30,30,0,0,1,22,9.12,29.93,29.93,0,0,1,9.12,22,30,30,0,0,1-9.12,22A29.82,29.82,0,0,1,44,112.88Zm.75-38.51a10.6,10.6,0,0,1,7,2.5l3-7.5q-1-.5-1.88-.87a15.66,15.66,0,0,0-1.75-.63q-.87-.26-1.88-.5a8.41,8.41,0,0,0-2-.25l.25-4.75H40.76l.25,5q-8.25,2.5-8.25,9.25,0,7.25,9.5,8.75l1.75.25q2.75.5,2.75,2,0,1.75-3.5,1.75-4,0-8.5-3.75l-3,7.75a18.45,18.45,0,0,0,9.5,3.5L41,101.62h6.25L47,96.87a10.69,10.69,0,0,0,6.62-3.25,9.41,9.41,0,0,0,2.62-6.75q0-4.5-2.88-6.38a19.81,19.81,0,0,0-7.87-2.62q-3.5-.25-3.5-1.5a2.86,2.86,0,0,1,2.75-2Zm75,103.5h-4.25v-2.25h4.25Zm8.5,0H124v-2.25h4.25Zm8.5,0h-4.25v-2.25h4.25Zm8.5,0H141v-2.25h4.25Zm8.75,0h-4.25v-2.25H154Zm8.5,0h-4.25v-2.25h4.25Zm8.5,0h-4.25v-2.25H171Zm8.75,0h-4.5v-2.25h4.5Zm8.5,0H184v-2.25h4.25Zm8.5,0h-4.25v-2.25h4.25Zm8.5,0H201v-2.25h4.25Zm8.75,0h-4.5v-2.25H214Zm8.5-47h-4.25v-2h4.25Zm0,47h-4.25v-2.25h4.25Zm8.5-47h-4.25v-2H231Zm0,47h-4.25v-2.25H231Zm8.5-47h-4.25v-2h4.25Zm0,47h-4.25v-2.25h4.25Zm8.75-47H244v-2h4.25Zm0,47H244v-2.25h4.25Z'\n\nexport const FIN = financial\n","export const footballau =\n 'M206.65,37.14a122.76,122.76,0,0,0-15.5,2,91.66,91.66,0,0,0-16,4.75,25.7,25.7,0,0,1,3.25,2.75q1.5,1.5,2.62,2.75a8.58,8.58,0,0,1,1.62,2.5q1.25,2-.37,2.62t-4.63-2.88a23.67,23.67,0,0,0-2.88-2.88,30.59,30.59,0,0,0-4.37-3.13q-3.5,1.5-7,3.25a34.94,34.94,0,0,1,6.75,7.25q2.75,4,.75,5.5-1.5.5-3.75-1.75a18,18,0,0,0-2.25-2.75q-1.25-1.25-3-2.75a30.33,30.33,0,0,0-3.75-2.75q-4,2-8,4.5a58.8,58.8,0,0,1,8,8.75,9.68,9.68,0,0,1,.37,1.62,4.06,4.06,0,0,1-.13,1.75,2.34,2.34,0,0,1-.75,1.25q-.49.37-1.5-.13a10.32,10.32,0,0,1-2.5-2A13.14,13.14,0,0,0,152,66q-.87-.63-1.75-1.38t-1.88-1.5l-2-1.5-2.25-1.5A35.1,35.1,0,0,0,139.76,63l-4.37,3.37a35.8,35.8,0,0,1,8,7q3.25,4.5.25,6.75-2.25,1.75-5.25-1.75a13.86,13.86,0,0,0-2.25-2.25L133,73.48a30.49,30.49,0,0,0-3.63-2.62q-1.75,1.25-3.5,2.75l-7,6q8.25,6,10,9.5A6.14,6.14,0,0,1,130,91.87a3.09,3.09,0,0,1-.37,2A2.9,2.9,0,0,1,128.26,95a2.28,2.28,0,0,1-2-.25,7.05,7.05,0,0,1-2.12-1.88,30.43,30.43,0,0,0-4-3.75q-2.75-2.25-6.5-4.75-2.5,2.25-5.12,4.75t-5.38,5a72.13,72.13,0,0,1,10,8.25q3.5,4-.5,5.5-3,1.25-6-1.25-2.75-2.5-8.75-7-6.5,6.5-13,13.75a342.81,342.81,0,0,0-27.13,33.38q-11.37,16.13-16.5,26.88a168.56,168.56,0,0,0-7.87,19q-2.74,8.25-3,12v4q5,9.5,18,14.25t29.88,4.5a154.39,154.39,0,0,0,37.12-5.62A210.88,210.88,0,0,0,154.65,207a178.25,178.25,0,0,0,36.63-24.37,145.22,145.22,0,0,0,28.87-32.75,150.68,150.68,0,0,0,14.75-29.62q5-14.12,5.5-24.63a64.55,64.55,0,0,0-2-19.87,56,56,0,0,0-6.5-15.63,66.14,66.14,0,0,0-9.12-11.37,66.87,66.87,0,0,0-9-7.75,34.5,34.5,0,0,0-7.13-3.87ZM86.15,90.9A2.93,2.93,0,0,1,85,88.65a2.7,2.7,0,0,1,1.25-2.5,3,3,0,0,1,3.13-.25q3.25,1,11.75,7,1.5-1.5,2.38-2.5t1.88-2a19.79,19.79,0,0,0,1.75-2A12,12,0,0,0,109,84.65q.87-1,1.88-2.25a95.08,95.08,0,0,0-11.5-6.75q-3-1.5,0-3.25a7,7,0,0,1,5.25-1,36.56,36.56,0,0,1,4.63,2.12,73.7,73.7,0,0,1,6.88,4.13,132.34,132.34,0,0,1,10.25-8.75q-2.25-1.5-4.63-2.88l-4.13-2.38q-1.75-1-2.5-1.5-3.5-1.25-.75-3.25a7.9,7.9,0,0,1,7-.25,59.69,59.69,0,0,1,11,5.75q4.25-3.25,8.75-6.25a30.23,30.23,0,0,0-3.25-1.88l-3.25-1.62-3-1.38q-3-1.38-2.75-1.12-3.25-1-.63-2.88t6.62-.87a39.4,39.4,0,0,1,12.5,5.75l8-4.5q-1.75-1-3.37-1.75t-3.63-1.5a35,35,0,0,0-4-1.25q-6.5-1.75-2.5-2.75a2.83,2.83,0,0,1,1.25-.25q8.25-1.5,17.75,4.75,1.5-.75,3.25-1.5l3.5-1.5a63.44,63.44,0,0,0-5.75-3,11.36,11.36,0,0,0-4-1.25q-2.75-.5-3.25-1.25-.25-.5,1-.75h5.25q5.5.25,11.5,4.25a95,95,0,0,1,30.75-6.75q-24.75-10-53.62-4.63T93.29,52.37Q65.92,68.87,48.92,90.62a190.24,190.24,0,0,0-22.62,36.13q-8.37,17.88-10.12,32.5a74.75,74.75,0,0,0,1.12,26.5,45.05,45.05,0,0,0,10.38,20.13,94.32,94.32,0,0,1,7.25-25.12A172.78,172.78,0,0,1,47.3,156.88,243.52,243.52,0,0,1,63.93,134q10-12.37,16.5-19.37t15.5-16.5q-7.25-5.5-9.75-7.25Z'\n\nexport const AR = footballau\n","export const footballca =\n 'M227.52,76l.75,1.75,1.25,3.13,1.5,3.75L232.77,89a23.77,23.77,0,0,1,1.5,4.37,20.44,20.44,0,0,0,1.5,4.13,195.26,195.26,0,0,0,4.5-33q.75-16-1-24.25t-4-7.5Q234,25,223.65,20.39t-26.5-4.87A171.6,171.6,0,0,0,161,19.27q13.5,3.5,29.5,16.13t22.25,19.87q6.25,7.24,10,12.5Q220.29,73,217.67,78t-5.38,9.5l.13-.25a1.07,1.07,0,0,0,.13-.5,280,280,0,0,0-28.75-31Q169.8,43,158.42,36.53a109.62,109.62,0,0,0-23.13-10q-7.75,3-15.75,6.5l1,1a10.5,10.5,0,0,0,1.25,1.5,12.73,12.73,0,0,1,1.88,3.13Q124.8,41,123.54,42a3.72,3.72,0,0,1-4.25,1.12,9.6,9.6,0,0,1-4-3.13,3.07,3.07,0,0,0-1.12.25q-.62.25-1.5.5a14.7,14.7,0,0,0-1.75.63q-.86.37-1.62.63a7,7,0,0,0-1.38.63,2.22,2.22,0,0,1-1.12.37l-.25.25,1.75,2.25a4.87,4.87,0,0,1,.75,3.25,3.71,3.71,0,0,1-1.75,2.5,2.72,2.72,0,0,1-1.88.37,4.29,4.29,0,0,1-2.12-.87,3.36,3.36,0,0,1-1.25-1.5l-1-2.25L93.3,52l.25,1.25a2.78,2.78,0,0,0,1,1,4.82,4.82,0,0,1,1.38,3.5,4,4,0,0,1-1.88,3,2.94,2.94,0,0,1-3.75-.25,6.23,6.23,0,0,1-2.5-3.75q-1.5,0-8.5,7a5.4,5.4,0,0,0,2,2.75q2.25,2.25.25,5-1.5,2-4.5,0a3.69,3.69,0,0,1-1.12-1,15.39,15.39,0,0,0-1.12-1.25l-.5-.75-2,2.25L69,74a13.94,13.94,0,0,1,3,2.5q2,3,0,4.5a4,4,0,0,1-2.5,1,3.6,3.6,0,0,1-2.5-1.25l-2.75-2-2.88,2.88-1.5,1.62q-1.5,1.62-1.38,1.75t-.87,1.38q-1,1.25-.37.87a5.53,5.53,0,0,1,2,1,7.61,7.61,0,0,1,1.62,1.62,4.06,4.06,0,0,1,.75,1.88,2.46,2.46,0,0,1-.37,1.75q-2.5,4-6.5.5l-2.25-1.25-5,7.75a9.7,9.7,0,0,0,2.25,1q1.25.25,2,2.12a3.38,3.38,0,0,1,0,3.13q-2.5,3.5-5.75,1L43.8,106a15.94,15.94,0,0,1-.87,2,38.1,38.1,0,0,0-1.5,3.63,12,12,0,0,0-.87,3.13,9.41,9.41,0,0,1,3.13,4A3.74,3.74,0,0,1,42.55,123q-3,2.25-8-3l-1.25-1.25q-3.75,8.5-6.5,16.25,10.75,37.5,60.25,77.5a2.09,2.09,0,0,0,.63-.13l.37-.13q-9.75,5.5-20,10.5a3.92,3.92,0,0,1-1.5-1,36,36,0,0,0-3.25-2.62A54.16,54.16,0,0,1,58.42,215q-2.38-2.26-5.75-5.38t-6.5-6.5q-3.13-3.38-6.62-7.25a85.82,85.82,0,0,1-6.5-8.13q-3-4.26-5.75-8.63A62.72,62.72,0,0,1,22.56,170a78.44,78.44,0,0,1-3.25-9.25q-6.25,29.5-2.25,51.13t15.75,23.37q-.75,2.25,7.5,4t24.25,1a185.52,185.52,0,0,0,33.25-4.75q-6.5-1.75-21.75-8a2.77,2.77,0,0,0-1-.5,4.88,4.88,0,0,1-1.12-.5,7.79,7.79,0,0,0-.87-.5,1.8,1.8,0,0,1-.75-.63,7.24,7.24,0,0,1-.5-1,3.25,3.25,0,0,1-.25-1.38q9.5-4.75,19-9.75a3.15,3.15,0,0,0,.63,1.88A8.35,8.35,0,0,0,93.31,217a5,5,0,0,0,.87.63q.63.38,2.62,1.38l4,2,4.87,2.12q4.87,2.12,5.75,2.12a38.85,38.85,0,0,1,6.12,1.62q5.25,1.62,6.25.87a181.43,181.43,0,0,0,62.5-39.5,2.78,2.78,0,0,0,1-1,2.78,2.78,0,0,0,1-1,180.92,180.92,0,0,0,39.5-62.75,46.73,46.73,0,0,0-3-13.88,85.81,85.81,0,0,0-5.25-12.13l-2.5-4.25q-1.75-2.5-3.75-2.75,1.75-3.5,3.5-6.75t3.13-6.25q1.38-3,2.88-6,3,0,4.25,3.5a2.67,2.67,0,0,0,.5,1Zm-75,73.26L167.78,164l-2.25,2.25L151,150.51a2.68,2.68,0,0,0-2.24,0q-2.25,3-6.25,8.37t-6,7.87l-3-5.25A2.58,2.58,0,0,0,131,160l-26,2.75,1.5-4.25q.75-1.75-1.75-3a2.65,2.65,0,0,1-.75-.5l-10-5.75,10-6.5a1.59,1.59,0,0,0,.5-2.5l-2.5-4.75,13.75.75q2,.25,2.5-1t-1.75-2.75l-17.75-12,5.75-1.75q3-1,2.5-3.25l-4.5-14.75,14.75,4.5a2.32,2.32,0,0,0,2-.37,4.48,4.48,0,0,0,1.25-2.12L122.3,97l12,17.75q1.5,2.25,2.75,1.75t1-2.5l-.75-13.75,4.75,2.5a1.59,1.59,0,0,0,2.5-.5l6.5-10,5.75,10a3,3,0,0,1,.5.75q1.25,2.5,3,1.75l4.25-1.5-2.75,26a2.58,2.58,0,0,0,1.5,2.5l5.25,2.75q-2.5,2.25-7.87,6.25L152.29,147a.85.85,0,0,0-.25.63,3.51,3.51,0,0,0,.13.87,1.67,1.67,0,0,0,.37.75Z'\n\nexport const CAF = footballca\n","export const footballdark =\n 'M128,240a110.15,110.15,0,0,1-43.75-8.87,111,111,0,0,1-59.87-59.87,109.85,109.85,0,0,1-8.87-43.75V124a13.58,13.58,0,0,1,.25,2.62,25.74,25.74,0,0,0,.13,2.62q.13,1.25.37,2.5a182.72,182.72,0,0,1,1.38-18.38,108.25,108.25,0,0,1,2.75-14.75Q22,92.74,23.51,88.37t2.5-6.5l1-2.12,11.5-11q.5,12,8.25,26.25a76,76,0,0,0-6.38,12.75,106.8,106.8,0,0,0-4,12.13q-1.38,5.39-2.25,9.75a37.22,37.22,0,0,0-.87,6.88L33,138.76a57.92,57.92,0,0,1-16.25-2.25,109.51,109.51,0,0,0,19.37,49A112.55,112.55,0,0,0,128,232.76a110.37,110.37,0,0,0,55.5-14.5,111.59,111.59,0,0,0,40.75-39.5A110.44,110.44,0,0,0,240.49,124v3.5a110.15,110.15,0,0,1-8.87,43.75,110.95,110.95,0,0,1-59.87,59.87A109.85,109.85,0,0,1,128,240Zm92.75-106.25a45.35,45.35,0,0,1,3.63,9.25,52.28,52.28,0,0,1,1.75,9.38q.37,4.37.5,8.13a42.75,42.75,0,0,1-.13,6l-.25,2q-1,2.25-3.13,6a128.25,128.25,0,0,1-9.38,13,95.57,95.57,0,0,1-15,15.5q-4.25-2-8.37-4.13T183.51,195q-2.75-1.75-4.87-3.13t-3.13-2.12l-1-.75q13.5-28.5,13.5-42.5,21-4.5,32.75-12.75Zm3-43.74a11.14,11.14,0,0,0-.75-1.25q-.5-.75-2.38-3.13l-3.75-4.75-4.75-5.62A66.24,66.24,0,0,0,206.51,69q-.87-.63-6.38-6.25t-6.88-6a49.82,49.82,0,0,0-2.75-13.5,38.4,38.4,0,0,0-4.25-9l-2-2.5q1.25.75,3.63,2a92.59,92.59,0,0,1,8.75,5.88,125.68,125.68,0,0,1,12,9.88,96.31,96.31,0,0,1,12,14.12A91.39,91.39,0,0,1,231,82.27a21.52,21.52,0,0,1-3.13,3.87L225,89ZM110,123a7.9,7.9,0,0,1-1.75-1.88q-1-1.38-4-5.38t-5.88-8.13q-2.88-4.13-6.5-10.12T85.26,85.75q3-5.5,10.5-13.88T109,57.75l6-5.5q4,.75,8.63,2a84.06,84.06,0,0,1,8.75,2.88q4.12,1.62,8.13,3.25t7.13,3.13q3.11,1.49,5.62,2.62A39.22,39.22,0,0,1,157,68l1.25.75Q161,84.52,157.51,113q-4.25,1.25-10.62,2.75t-12.63,2.75l-11.87,2.38-8.87,1.62Zm18.25,78.74q-2.5,2.5-4.63,5t-3.75,4.5q-1.62,2-3,4t-2.38,3.5q-1,1.49-1.88,2.88l-1.5,2.38a19.17,19.17,0,0,0-1,1.75,3.1,3.1,0,0,0-.37,1l-.25.5q-30.5-8.5-37-12.5-5.25-3-10-15a61.1,61.1,0,0,1-4.5-24q3.25,0,7-.37t7.37-1l7.25-1.25,6.5-1.38q6.5-1.38,5.25-1.25t3.63-.75l1.25-.25a189,189,0,0,0,32,32.25ZM105.26,28A30.41,30.41,0,0,0,98,27.26a89.23,89.23,0,0,0-9.12.5,78.27,78.27,0,0,0-10.5,1.88A79.37,79.37,0,0,0,67.77,33q33-20,71-16.5-8.25,0-21.25,4.25Q108,24,105.27,28Z'\n\nexport const FB = footballdark\n","export const footballgaelic =\n 'M220,184.49A107.57,107.57,0,0,1,206.78,204q-1.25,1.25-2.25,2.38a24.91,24.91,0,0,1-2.12,2.12l-2,1.75a9.07,9.07,0,0,1-1.88,1.25,4.15,4.15,0,0,0,.25-1.25Q200,198.24,200,198h0a8.41,8.41,0,0,0-.25-2q7.5-5,16-24.5t8.5-24.25a5.51,5.51,0,0,0-.5-2.5,7,7,0,0,1,.5-.87,7,7,0,0,0,.5-.87,5.22,5.22,0,0,0,.37-1q.13-.5.25-1.12l.25-1.25.13-1.12q.5-3.25,1-15.5.25-3.75.25-6.75,0-12.75-3.5-17.5a1.6,1.6,0,0,0,.37-.75l.25-1L224,96q0-4.75-5.75-16a156.88,156.88,0,0,0-13.5-21.25q-2.5-3.25-4.75-6T195.76,48l.25-1.25a8.35,8.35,0,0,0-.5-2.88A28.26,28.26,0,0,0,194.26,41a33.57,33.57,0,0,1,10.5,8.5,136.87,136.87,0,0,1,9.12,11.25A168.9,168.9,0,0,1,224,77a100.33,100.33,0,0,1,9.25,23.37,104,104,0,0,1,3.5,26.88h0q0,27-16.75,57.25ZM146,41q7.25-18,7.25-20.75V20a24.42,24.42,0,0,1,6,1.75q3.5,1.25,7.63,3.13T175,28.75q2.5,1.25,4.75,2.62l3.87,2.38A14,14,0,0,1,186,35.5a19,19,0,0,1,1.38,1.5l1.25,1.5,1.12,1.62q1.12,1.62,1,1.62a8.12,8.12,0,0,1,1.12,2q.37,1,.63,1.75l-1-.5q-10.25-3.25-45.5-4Zm-18-.25h-7.37l-6.88.25q-4.5-11-6.12-15.25a21.46,21.46,0,0,1-1.62-5.5h0l.25-1q1.5-1.5,6.5-2.25a55.93,55.93,0,0,1,7.13-1.12q3.87-.37,7.87-.37h.75A67.86,67.86,0,0,1,143.27,17,21.49,21.49,0,0,1,148,18.24l1.5.75.25.25.25,1q0,2-7.75,20.75-6.5-.25-14.25-.25ZM64.53,45l-1,.5a15.09,15.09,0,0,1,1.75-3.75A26.92,26.92,0,0,1,70,35.49a28.85,28.85,0,0,1,6.25-4,112.88,112.88,0,0,1,15.5-7.75q7.5-3.25,11-3.75v.25q0,2.75,5.75,16.5,1,2.75,1.5,4.25-35.75.75-45.5,4Zm-4.26,3a110.27,110.27,0,0,0-9,10.75q-4,5.25-7.63,11T37.77,80Q32,91.24,32,96h0a1.46,1.46,0,0,0-.13,1l.25,1,.37.75q-3.5,4.75-3.5,17.5v3.25l.25,3.5q.5,12.25,1,15.5a13.1,13.1,0,0,0,2,6.25,1.6,1.6,0,0,0-.37.75,3.6,3.6,0,0,0-.13.87v.87a27.36,27.36,0,0,0,1.88,8.13q1.88,5.38,6.62,16.13,8.5,19.5,16,24.5L56,198q0,.25,1.25,12a4.86,4.86,0,0,0,.25,1.5,35.81,35.81,0,0,1-8.25-7.5A107.56,107.56,0,0,1,36,184.51a141.41,141.41,0,0,1-12.13-28.37,98.65,98.65,0,0,1-4.63-28.87V127a102.9,102.9,0,0,1,3.5-26.62A100.58,100.58,0,0,1,32,77,167.13,167.13,0,0,1,42.13,60.78a139.31,139.31,0,0,1,9.12-11.25q1.5-1.75,3-3.25a22.88,22.88,0,0,1,2.88-2.5,28.81,28.81,0,0,1,2.5-1.62q1.11-.63,2.12-1.12-.5,1-.87,1.88a12.92,12.92,0,0,0-.63,1.88A6.81,6.81,0,0,0,60,46.54a3.56,3.56,0,0,0,.25,1.5Zm-1,149.5a.51.51,0,0,1,.37.13.51.51,0,0,0,.37.13q10,1.5,45.75,2.75-1.75,6-3.75,16.63a94.28,94.28,0,0,0-2,15.63v1l-1.5.25a12.46,12.46,0,0,1-4.63-1.25Q91,231.51,85,228.51q-1.25-.5-4.75-2.12t-5.62-2.75q-2.12-1.13-5-2.75a24.51,24.51,0,0,1-4.75-3.37,19,19,0,0,1-3.13-3.75L62,213l-.5-.25a10.86,10.86,0,0,1-1-3q-.25-2.5-.63-5.38t-.5-4.13q-.12-1.25-.13-2v-.75Zm67.51,3.5h2.5q8.5,0,17.5-.25a111.81,111.81,0,0,1,3.87,16q2.12,11.25,2.12,16v1.5a1.58,1.58,0,0,0-.37.63,5.59,5.59,0,0,1-.25.63,2.59,2.59,0,0,1-.5.63,3.34,3.34,0,0,1-.87.63,17.62,17.62,0,0,1-5.25,2.25,55.64,55.64,0,0,1-7.63,1.12q-4.37.37-9.88.37-11.5,0-17.5-1.5a12.29,12.29,0,0,0-1.38-.37,7.36,7.36,0,0,1-1.25-.37q-.62-.25-1.12-.5a9.31,9.31,0,0,1-.87-.5,4,4,0,0,1-.63-.5,3.24,3.24,0,0,1-1.38-1.12,7,7,0,0,1-.63-1.38v-1.5q0-4.75,2.12-16a111.8,111.8,0,0,1,3.87-16q9.25.25,17.5.25Zm68.75-6.5q-1,0-4.75.37t-10,.75q-6.26.37-13.62.87t-16.5.75l-17.62.5a87.25,87.25,0,0,1-1.5-10.88q-.76-7.88-1.5-17.5t-1-16.63h.25q2.75,0,7.75-.25a52.4,52.4,0,0,0,16.13,12.63q8.87,4.38,16.37,4.37,8,0,10.75-4.37T183,153.24v-1.5l-.25-1.5,7.75-.5,21-2.25q8.5-1,9.25-1l.25.25v.5q0,2-2,7.63T212.77,170q-10,22.75-17.25,24.5ZM223.77,116v.25q0,3-.25,6.75-.5,12-1,15a11.5,11.5,0,0,1-1,4l-1.25,1.25q-1,0-4.87.5T204.52,145q-7,.75-14,1.25-3.25.5-8,.75-.5-2-1-3.63t-.75-2.38l-.25-.75q5.25-4.75,5.25-17a18.11,18.11,0,0,0-1.25-7,12.32,12.32,0,0,0-2.75-4.37,10.3,10.3,0,0,0-4.5-2.12,20.51,20.51,0,0,0-4.37-.75h-4.37a61.2,61.2,0,0,0-6.25.25,41.86,41.86,0,0,0-7.5,2A127,127,0,0,0,142,116.48q15-16.25,17.25-28.5,5,.5,9.88,1.12t9.25,1.25q4.37.63,8.87,1.38,12.25,2,21.75,4.5,4.25,1,6.88,1.88a16.66,16.66,0,0,1,3.37,1.38q2.25,1.5,3.25,5.5a38.38,38.38,0,0,1,1.25,11ZM129,149.49a32.66,32.66,0,0,1,.5-7.25,40.79,40.79,0,0,0,2.12,3.75,19.34,19.34,0,0,0,2.62,3.25A34.49,34.49,0,0,0,129,149.49ZM53.78,60.75Q57.78,55.5,61,52t4.5-3.75Q70,46.74,84,45.49,101.78,44,128,44h0q26,0,44,1.5,7.25.75,11.87,1.38a34.25,34.25,0,0,1,6.62,1.38q1.25.25,4.5,3.75t7.25,8.75Q204,63.24,205.9,66t3.63,5.5q1.75,2.75,3.25,5.25a42.39,42.39,0,0,1,2.5,4.75q5.5,10.75,5.5,14.5v.5q-2.5-1.5-11-3.5-4.5-1.25-10-2.38t-12-2.12q-14-2.5-28-3.75a10.48,10.48,0,0,1,.13-1.75,8.88,8.88,0,0,0,.13-1.5q0-7.25-4-10t-12-2.75q-1.75,0-3.5.13a30.73,30.73,0,0,0-3.13.37q-1.38.25-2.38.5t-1.75.5a8.88,8.88,0,0,0-1.25.5,1.73,1.73,0,0,1-.75.25v.25q-8.75-5.75-17.5-5.75-7.5,0-10.75,3t-3.25,14v1.75q-16,1.5-31.5,4.25a212.8,212.8,0,0,0-22,4.5q-4.25,1-7,1.88a20.34,20.34,0,0,0-4,1.62V96a11.25,11.25,0,0,1,.13-1.62A12,12,0,0,1,36,92.1q.5-1.38,1.12-2.88t1.5-3.5q.89-2,2.12-4.25a167.78,167.78,0,0,1,13-20.75ZM33.52,138q-.5-2.75-1-15-.25-3.75-.25-6.75V116a17.9,17.9,0,0,1,.13-2.25,15.82,15.82,0,0,0,.13-2,13,13,0,0,1,.13-1.88l.25-1.75.25-1.62q.25-1.62.37-1.5,1-4,3.25-5.5A21.26,21.26,0,0,1,40,98q9.75-3,28.75-6.25,15.5-2.75,31.25-4a46.91,46.91,0,0,0,1.75,7.75q1.25,4,2.5,7t2.5,5.5q1.25,2.51,2,3.75l.75,1.25-.75-.75-2.25-1.88a30.7,30.7,0,0,0-3.5-2.62q-1.25-.75-4.5-2.75a21.66,21.66,0,0,0-5.62-2.62q-2.37-.62-6.38-1.88a15.09,15.09,0,0,0-7-.75q-6,0-9.5,3a11.63,11.63,0,0,0-4.13,7.37,42.52,42.52,0,0,0-.37,8.63A28.8,28.8,0,0,0,66.77,126l.75,3q-.5,1-1.5,2.62a37.44,37.44,0,0,0-2.62,6.12A24.52,24.52,0,0,0,61.77,146q-4-.5-7.87-.87l-6.75-.63q-2.88-.26-5.25-.5t-4-.5a15.81,15.81,0,0,0-2.12-.25A2.26,2.26,0,0,1,34.52,142a14.27,14.27,0,0,1-1-4Zm90.25,59.5.25.25q-13.75-.25-28.87-1t-24-1.38q-8.87-.62-10.62-.87a8.42,8.42,0,0,1-3.5-1.75q-2-1.5-5.88-7.37A94.73,94.73,0,0,1,43.27,170Q35,151.24,35,147.24v-.5l.25-.25q.75,0,9.25,1,9,1,17.5,1.75a11.84,11.84,0,0,0,4,7.5q6.5,4.75,18.12,3.13a66,66,0,0,0,22.62-7.63q2.25,0,4.5.13t4.5.13a41.51,41.51,0,0,1,4.5.25ZM112,149a40.86,40.86,0,0,0,4.25-3.25,35.28,35.28,0,0,0,3.5-3.5,38.21,38.21,0,0,0,.25,7h-5.38L112,149Zm38.25,51.5q10.75-.25,21.38-.87t16.75-1.12q6.12-.49,7.63-.75l.75-.25v.5q0,.75-.13,2t-.5,4.25q-.37,3-.63,5.5h0a10.27,10.27,0,0,1-1,3l-.5.25.25.75a18.5,18.5,0,0,1-3.13,3.75,25,25,0,0,1-4.75,3.37q-2.87,1.62-5,2.75t-5.62,2.75Q172.27,228,171,228.5q-11,5.5-13.5,5.5a2.7,2.7,0,0,1-.87-.13,2,2,0,0,0-.63-.13v-1a92.12,92.12,0,0,0-2-15.5q-2-10.5-3.75-16.75Z'\n\nexport const FBG = footballgaelic\n","export const footballlight =\n 'M230.49,81.39a27.89,27.89,0,0,1-3,3.5l-2.75,2.75-1.25,1q-1.5-2.25-4.25-6T208.49,70a113.79,113.79,0,0,0-15.25-14.38,50.6,50.6,0,0,0-1.25-9,32.32,32.32,0,0,0-2.38-7q-1.38-2.74-2.5-4.87A13,13,0,0,0,185,31.63l-.75-1,1.25.63,1.5.87a111.17,111.17,0,0,0-51-16.5q-1.5.25-3.37.5t-4,.75l-4.37,1q-2.24.51-4.63,1.12a31.23,31.23,0,0,0-4.5,1.5q-2.11.9-4,1.88a17.52,17.52,0,0,0-5.63,4.5q-4.75-1.5-15-.37A87.83,87.83,0,0,0,71,30.88,113.31,113.31,0,0,0,30.62,71.63a112.21,112.21,0,0,0-6.25,100A111,111,0,0,0,84.25,231.5a112.3,112.3,0,0,0,87.51,0,111,111,0,0,0,59.87-59.87,110,110,0,0,0,8.87-43.75,117,117,0,0,0-1.12-16.25A104,104,0,0,0,236,96.13a121,121,0,0,0-5.5-14.75ZM33.74,137.14a56.77,56.77,0,0,1-17-2.5,147.57,147.57,0,0,1,3.13-30.88Q23,89.13,24.74,84.89a66,66,0,0,1,3-6.5l11.5-11q.25,12,8,26.25a88.42,88.42,0,0,0-9.12,21q-3.37,11.5-3.87,15.75a61,61,0,0,0-.5,6.75Zm76,88Q79.24,216.64,73,212.9q-5.25-3-10-15a57.87,57.87,0,0,1-4.25-24A98.77,98.77,0,0,0,75,172.28q9.49-1.62,15.5-3.13l6.25-1.5a171.16,171.16,0,0,0,31.75,32.25q-4,4.25-7.5,8.5a85.65,85.65,0,0,0-5.38,7.13q-1.88,2.87-3.37,5.12a22.44,22.44,0,0,0-2,3.5Zm47.74-113.76q-3,1-7.25,2l-8.63,2-8.87,2q-4.5,1-8.5,1.75t-7.13,1.25q-3.13.5-5,.87l-1.88.37q-1.75-2-4.37-5.38t-9.12-13.12a175.87,175.87,0,0,1-11-18.75q3-5.5,10.38-13.88a186.05,186.05,0,0,1,13.38-13.88l5.75-5.75A85.59,85.59,0,0,1,123.86,53q4.63,1.38,8.75,2.88t8,3.13q3.88,1.62,7.13,3.13l5.62,2.62q2.38,1.12,3.63,1.88l1.5.75q.25,1.75.63,5.12a144.4,144.4,0,0,1,.13,14.88q-.26,11.51-1.75,24ZM226,166.89a18.42,18.42,0,0,1-1,2.25q-.76,1.5-3.37,5.75A92.05,92.05,0,0,1,216,183q-3,3.88-7.75,9a106.39,106.39,0,0,1-9.5,9.12q-4.5-2-8.5-4.13t-6.75-3.87q-2.75-1.75-4.87-3.13t-3.13-2.12l-1-.75Q188,158.65,188,144.9q20.75-4.25,32.5-12.75a43.66,43.66,0,0,1,5.12,15.25,59.48,59.48,0,0,1,.87,14Z'\n\nexport const FBL = footballlight\n","export const footballus =\n 'M235.82,97.54q-.75-1.75-1.5-4.13T232.81,89q-.75-2-1.75-4.37t-1.5-3.87a23.72,23.72,0,0,0-1.25-3,8.06,8.06,0,0,1-.75-1.75,4.21,4.21,0,0,1-.63-1.25q-.38-1-.5-1.38a3.45,3.45,0,0,0-.63-1,2,2,0,0,0-1.25-.75,12.09,12.09,0,0,0-1.75-.13q-4.5,9.5-9.5,19a3.43,3.43,0,0,1,1.75.63,7.18,7.18,0,0,1,2,2.12l5.75,11.5q4.5,10.5,5,19A203.48,203.48,0,0,1,218.19,145a184.94,184.94,0,0,1-13,21,169.57,169.57,0,0,1-16.87,20.25l-1,1a1.06,1.06,0,0,1-.37.63,1,1,0,0,1-.63.37,181.43,181.43,0,0,1-62.5,39.5Q109.56,227,93.32,217q-2.5-1.75-2.75-3.75-5,2.5-9.75,5T71.57,223a3.76,3.76,0,0,0,.25,1.38,5,5,0,0,0,.5,1,2,2,0,0,0,.75.63q.49.26.87.5a5.53,5.53,0,0,0,1.12.5,3.05,3.05,0,0,1,1,.5q15.25,6.5,21.75,8a185.52,185.52,0,0,1-33.25,4.75q-16,.75-24.25-1t-7.5-4q-11.75-1.75-15.75-23.37t2.25-51.13Q25.81,187,60.81,217l7,5.75q10.5-5.25,20.25-10.5h-.5l-.5.25q-49.5-40-60.25-77.5,2.75-8,6.5-16.25L34.55,120q.5.5,1.38,1.25a21.3,21.3,0,0,0,3.13,2q2.25,1.26,3.5-.25a3.72,3.72,0,0,0,1.12-4.25,9.6,9.6,0,0,0-3.13-4,12.34,12.34,0,0,1,.75-3,21.9,21.9,0,0,1,1.75-4l.75-1.75L46,107.8q3.25,2.5,5.75-1a3.43,3.43,0,0,0,0-3.13q-.75-1.88-2-2.12l-2.25-1,5-7.75,1.25.25a2.78,2.78,0,0,1,1,1q4,3.5,6.5-.5A2.94,2.94,0,0,0,61,89.78a6.23,6.23,0,0,0-3.75-2.5q0-.75,1.75-2.88a51.45,51.45,0,0,1,3.5-3.87l1.75-1.75a7.14,7.14,0,0,1,2.75,2Q69.28,83,72,81q2-1.5,0-4.5L69,74l3.25-3.25,2-2.25a7.92,7.92,0,0,1,.63.75q.38.5,1,1.25t.87,1q3.25,2,4.75,0a3.82,3.82,0,0,0,.75-1,2.26,2.26,0,0,0,.25-1,4,4,0,0,0-.13-1,5.22,5.22,0,0,0-.37-1,3.82,3.82,0,0,0-.75-1l-2-2.75,2.5-2.5,2.38-2.12q2.38-2.12,2.12-1.62t1.5-.75a6.34,6.34,0,0,0,2.5,3.75,2.92,2.92,0,0,0,3.75.25,4,4,0,0,0,1.88-3,4.9,4.9,0,0,0-1.38-3.5L93.29,52,101,47l.75,2.25a3.23,3.23,0,0,0,1.38,1.5,5,5,0,0,0,2.25.87,2.82,2.82,0,0,0,1.88-.37q3.5-2.25,1-5.75l-1.75-2.25,1.25-.63,1.5-.63a14.42,14.42,0,0,1,1.62-.63,17.54,17.54,0,0,0,1.75-.63q1.63-.63,1.5-.5T115.3,40a9.41,9.41,0,0,0,4,3.13A3.74,3.74,0,0,0,123.54,42a3.44,3.44,0,0,0,.37-2,7.57,7.57,0,0,0-.63-2.12A8.35,8.35,0,0,0,122.17,36,15.39,15.39,0,0,0,121,34.78l-.5-.75-1-1q2.5-1.25,5.12-2.38t5.25-2.12l5.38-2q37.25,10.75,77.25,60.25a1.12,1.12,0,0,1-.13.5l-.13.25Q215,83,217.66,78t5.12-10.25a64,64,0,0,0-4.13-5.38Q216,59.26,209.14,52T195.4,38.75A110.69,110.69,0,0,0,179,27.13a71.45,71.45,0,0,0-18-7.87,172.46,172.46,0,0,1,36.13-3.75q16.13.25,26.5,4.87t11.63,12.37q3.25-1,4.75,13.75,2,22.75-4.25,51Z'\n\nexport const AF = footballus\n","export const footballworldcup =\n 'M144.74,128.75a68.86,68.86,0,0,0,3.87-7q2.37-4.75,4.63-10t4.25-10.12q2-4.86,3.13-8l1.12-3.13q-.5,18.75-17,38.25ZM88.49,79a22.68,22.68,0,0,1,8.87,4.37,33.76,33.76,0,0,1,6.75,7.37,46.26,46.26,0,0,1,5,10,78.9,78.9,0,0,1,3.37,12.13q1.25,6.37,2,14.12-.25-2.25-2.88-6.88a94.4,94.4,0,0,0-5.62-8.75q-3-4.12-6.25-8.5A57.71,57.71,0,0,1,96,97.49a13.46,13.46,0,0,1-1.5-2.12q-1-1.62-1.88-2.88t-2-3.13A25,25,0,0,1,88.85,86q-.62-1.5-1.12-2.88a4.39,4.39,0,0,1-.25-2.5A2.53,2.53,0,0,1,88.49,79Zm8.75,35.24q-.25-4,4,1.25,8,11,10,26.5a42.64,42.64,0,0,1-.75,14q-1-2-3.87-8.37T102.87,139q-.89-2.26-2.62-7a46.57,46.57,0,0,1-2.38-8.87A57.28,57.28,0,0,1,97.24,114.24Zm2,21q6.5,14.25,10,23.25-3.75-1-7-9.12t-3-14.12Zm20.26-2q2-13.5-3-33.5t-10-30.5q-.25-.5-.5-1.12a7.36,7.36,0,0,1-.37-1.12,1.48,1.48,0,0,0-.37-.75q-18-5.5-18-21.75,0-2.5,2.5-7a52.78,52.78,0,0,1,7-9.5,39.46,39.46,0,0,1,12.13-8.75,37,37,0,0,1,16.5-3.75A39.74,39.74,0,0,1,142,19a37.38,37.38,0,0,1,12.25,8.37,54.73,54.73,0,0,1,7,9.12q2.51,4.26,2.5,6.5a21.15,21.15,0,0,1-5.25,14.62,29.73,29.73,0,0,1-13.62,8.5,64.87,64.87,0,0,1-19.37,2.62A76.36,76.36,0,0,1,108.24,67q2.25,2.5,6.25,7.75A39.1,39.1,0,0,1,120,85.13a71.14,71.14,0,0,1,3.13,10.62,23.69,23.69,0,0,0,3.5,8.5A12.16,12.16,0,0,0,134,109.5a8,8,0,0,0,7.5-2,26.19,26.19,0,0,0,6.25-8.87,122.82,122.82,0,0,0,4.87-12q2.12-6.13,4.63-13.12t4-10.25Q161,62,160.86,61a6.91,6.91,0,0,1,0-1.88,5.32,5.32,0,0,1,.5-1.62,8.37,8.37,0,0,1,.75-1.25,4.25,4.25,0,0,1,.87-.87,5.18,5.18,0,0,1,1.12-.63,2.81,2.81,0,0,1,1.12-.25,4.84,4.84,0,0,1,1,.13,4.42,4.42,0,0,1,1,.37q1.75,1.75,1.5,3.25A56.07,56.07,0,0,1,166,66q-.75,1.75-1.25,3-1,2.5-3.63,9.88t-5.5,15.63q-2.88,8.25-6,16.63t-5.88,15.13a53.34,53.34,0,0,1-4.5,9.25q-1.5,2.25-2.12,7.25T136,153.65q-.5,5.88-1.62,12.37a55,55,0,0,1-4.25,13.38A43.49,43.49,0,0,1,122,191.53a65.23,65.23,0,0,0,5.75-17.75q1.75-9.75,1.12-15.87T127,151.29q-.75-.25-2.25,2.62a82.15,82.15,0,0,0-3.5,8q-2,5.13-4.25,11t-5.25,12.75q-3,6.88-5.75,12.13a32.74,32.74,0,0,1,1-4q.76-2.5,2.62-10.12t3.5-15q1.63-7.37,3.5-17.25t2.88-18.12ZM140,94.74a10.36,10.36,0,0,1-2.38,4.75,4,4,0,0,1-3.87.63,5.38,5.38,0,0,1-3.5-2.25,8.3,8.3,0,0,1-1-4.37,14.54,14.54,0,0,1,.37-3.5,5.57,5.57,0,0,1,1.5-2.62A3.19,3.19,0,0,1,134,86.5a13.25,13.25,0,0,1,3.5,1.38,6.06,6.06,0,0,1,2.38,2.75,5.36,5.36,0,0,1,.13,4.13Zm5.49,90a18.73,18.73,0,0,1,3.25,5.62,62.71,62.71,0,0,1,3,9q1.25,4.89,2.25,9.75t1.5,7.87q.5,3,.5,3.25h-50.5q16.75-7.5,25.38-16a82.83,82.83,0,0,0,14.62-19.5ZM94,240.49l7.75-13.75h56.75l8,13.5Z'\n\nexport const WCP = footballworldcup\n","export const friendlies =\n 'M219.64,53.22h-2.88L209.51,52q-7.25-1.25-10.12-3.5Q193.88,46,180,43.85T159.39,39q-17-6.5-31,2.5a20,20,0,0,1-3.25,1.75q-1.75.75-3.25,1.25a34.8,34.8,0,0,1-4,1q-2.5.5-4.13.75t-4.75.63a45.75,45.75,0,0,0-5.12.87Q88.39,50.22,84.63,62q-1.5,4.75-6.88,9.38a33.16,33.16,0,0,1-9.38,6.12,4.62,4.62,0,0,1-1.5.63q-1.26.38-1.88.63t-1.75.75a5.33,5.33,0,0,0-1.62,1q-.49.5-1.12,1.25a4.3,4.3,0,0,0-.87,1.62,8,8,0,0,0-.25,2.12,8.77,8.77,0,0,0,.5,2.75Q62.64,97.73,82.64,99A28.55,28.55,0,0,0,96.89,96.6q6-2.88,13-10.62,7,1.5,22.5-6A57.58,57.58,0,0,1,156,92.6q10.38,9.13,20.63,24.63l6.12,6.12,3.63,3.87q3.63,3.87,4,4.25t4.13,4.37a58.51,58.51,0,0,1,4.13,4.63,59.32,59.32,0,0,0,3.87,4.5,35.35,35.35,0,0,1,3.75,4.5,32.87,32.87,0,0,0,3.13,4.13q2.87,3.5,2.75,3.87a3.81,3.81,0,0,1,1.38.37,20.51,20.51,0,0,1,3.13,2,26.62,26.62,0,0,1,4.25,3.87,50.49,50.49,0,0,1,17.25-13.25q6.5-18.5-4-58.5a197.08,197.08,0,0,0-14.5-38.75ZM53.15,150.72q.5-9-3.25-12.25a19.61,19.61,0,0,0-9-4.75,16.41,16.41,0,0,0-10.25,1.5q-5.49,2.5-10,9.25a19,19,0,0,0-.37,6.38A13.88,13.88,0,0,0,22,156.1,10.86,10.86,0,0,0,25.88,160a15.88,15.88,0,0,0,6,2h1.5l7.5-1.12,5.88-1.5q5.88-1.5,4.87-3.25t1.5-5.38Zm35-4.75q-7-7.75-19.75-1.25Q66.14,146,64,147.35A38.56,38.56,0,0,0,60.39,150q-1.5,1.25-2.88,2.62T55.26,155q-.87,1-2,2.25a17.2,17.2,0,0,0-1.62,2,10.43,10.43,0,0,1-4,2.38,21.82,21.82,0,0,1-4.5,1.12H41.38a44.86,44.86,0,0,0-1,6.88q-.26,3.63,2.62,8.13A20.3,20.3,0,0,0,51.63,185a23.44,23.44,0,0,0,4.13,1.12,9.18,9.18,0,0,0,4-.13q1.88-.5,3.87-1.25a18.66,18.66,0,0,0,4-2.12,43.53,43.53,0,0,0,3.75-2.88l3.75-3.25,3.75-3.25L82.65,170q2-1.75,3.5-3,11.5-9,3-19.75A8.33,8.33,0,0,0,88.14,146Zm31,15.25q-3.5-4.5-7.5-5.38a13.09,13.09,0,0,0-8.25,1,55.52,55.52,0,0,0-10.25,6.38q-3.25,5-10.5,11a145.51,145.51,0,0,1-13,9.75l-5.75,3.75q.75,8.25,5.25,12t12.5,4.75a13.67,13.67,0,0,0,6.5-1.38,41.87,41.87,0,0,0,8.13-4.87q4.38-3.25,7.5-6t7.13-6.5q4-3.74,4.5-4.25a35.13,35.13,0,0,0,5-5.5,11.11,11.11,0,0,0,1.75-6.5,14.39,14.39,0,0,0-3-8.25Zm4.76,14q-.75,2-5.25,7.13a150.23,150.23,0,0,1-11.5,11.5A100.1,100.1,0,0,1,93.9,204.22l-.75,1.5.25,4a5.92,5.92,0,0,0,3.75,5.5,16.55,16.55,0,0,0,10.5,4.5q5.75.26,9.25-3,0-.25,1.25-1.25t1.5-1.25q.26-.25,1.5-1.25t1.62-1.38l1.5-1.5,1.75-2a11,11,0,0,0,1.75-2.25,14.88,14.88,0,0,1,2.12-2.62,11.56,11.56,0,0,0,2.25-3,18.67,18.67,0,0,1,2.5-3.75q5.75-9.75,1.62-15.87t-12.37-5.38Zm87-15.25a185,185,0,0,0-14.12-17.75,171.65,171.65,0,0,0-15.13-15.75q-6-5.5-10.12-10A159.68,159.68,0,0,1,160.9,103q-8.5-11.75-28-19.5A63.37,63.37,0,0,1,121.4,88a34.5,34.5,0,0,1-8,1.5h-2.25q-13.5,17.75-39.75,11.25-13-3.25-14.75-13a11.17,11.17,0,0,1-.5-3,13.11,13.11,0,0,1,.37-2.88A5.52,5.52,0,0,1,58,79.08a14.88,14.88,0,0,1,3.13-2.25,15.34,15.34,0,0,1,5.25-1.62q2.75-.75,7.5-4.25a32.12,32.12,0,0,0,7.75-8,35.38,35.38,0,0,1,1.88-5.88,17.35,17.35,0,0,1,3.5-4.5A23.49,23.49,0,0,1,94.15,48a80.62,80.62,0,0,0-14,.25,159.14,159.14,0,0,1-16.87.63,102.66,102.66,0,0,1-19.63-2.38,71.14,71.14,0,0,0-14,20,120.81,120.81,0,0,0-9,24.5,202.83,202.83,0,0,0-4.37,23.5,87.52,87.52,0,0,0-.63,18.75q.75,7.51,3,8.25,9.5-12.75,22-10.75,8.25,1.25,12.13,6t3.37,12a68.06,68.06,0,0,1,16.5-10A18,18,0,0,1,78,137.58a15.67,15.67,0,0,1,4.87.5,13.81,13.81,0,0,1,4.25,2,16.73,16.73,0,0,1,3.5,3.25,39.08,39.08,0,0,1,2.75,3.87,16.16,16.16,0,0,1,2,6.25,7.43,7.43,0,0,1-.5,4.25l-.5,1.5a4.14,4.14,0,0,1,.63-.5q.38-.26,2.12-1.5t4-3q3.25-3.25,10.25-2A15.79,15.79,0,0,1,122.14,159a19.57,19.57,0,0,1,2.88,6.62,10.78,10.78,0,0,1,.13,4.87l-.5,1.5q.5,0,2-.13a12.24,12.24,0,0,1,4.75,1.12,16.37,16.37,0,0,1,5.75,3.75l1.5,2,1.12,2.12q1.12,2.12.63,2.12t.37,2q.86,2,.13,1.88t-.13,1.5q.61,1.63-.13,1.12v.75l-.25.5a7.26,7.26,0,0,1,1.38,1q.87.76,3.63,2.62t5.5,3.37a55.85,55.85,0,0,0,6.62,3,34.42,34.42,0,0,0,7.37,2q8,1.25,11.87-.37a15.83,15.83,0,0,0,6.88-6.12q-18.5-3.75-29-16.75-2.5-3-7.75-9t-9.5-10.5l-4.25-4.5q11.75,7.75,23.5,21.25a57.82,57.82,0,0,0,5.88,6,63.86,63.86,0,0,0,5,4,37.29,37.29,0,0,0,5.25,3,44.6,44.6,0,0,0,4.63,2q1.5.5,5.12,1.62t5.12,1.62q7.25,2.5,12.13-2.12t5.12-9.88a20.91,20.91,0,0,1-4.25-1.62,46.1,46.1,0,0,1-4.37-2.5q-2.13-1.38-4.75-3.25t-4.75-3.5q-2.13-1.62-4.63-3.75T177.9,165q-4-2.75-10.38-10.12T155.9,140.47q-5.25-7-6.5-9.75,21.5,25,31.5,32.5,3.25,2.5,7.37,6.25a61.58,61.58,0,0,0,7.75,6.12,54.35,54.35,0,0,0,10.38,4.87q10,4,13,.13t2.25-12.13q-1.75-3.75-9.25-7.75Zm-71.25,33.5q-3.75,8.25-7.25,11,15.5,8.5,22.5,6.5a39.12,39.12,0,0,1,5.25-1.12,28.34,28.34,0,0,0,5.62-1.38,3.76,3.76,0,0,0,2.38-2.5q-9.5,0-20-7Z'\n\nexport const FRD = friendlies\n","export const fustal =\n 'M230.6 165.1v4h-2l2-4zm-4.1 0h4.1l-1.9 4h-3.4l.9-1.9.3-2v-.1zm-3.6 0h3.6v.1l-.3 2-.9 1.9h-2.4v-4zm0-77.8c-.3-.5-1-1.4-2.3-2.9l.3-7.6 4 .1-.4 11-.8.7a9.13 9.13 0 0 1-.8-1.3zm-3.9 46.2l1.6-49.1 2.3 2.9a9.13 9.13 0 0 1 .8 1.3l.8-.7-1.6 49.4c-.6-1.7-1.4-3.3-2.2-4.9l-1.7 1.1zm-.4 9.8l.3-9.7 1.7-1.1 2.2 4.9-.2 6.1-4-.2zm-17.3 60.9c8.9-7.6 16.6-16.7 22.7-26.8 1.7-2.7 3.2-5.5 4.6-8.3h2v-4h-.1c6-13.3 9.3-27.7 9.7-42.5v3.5c.1 15-3 29.9-8.9 43.8-6.4 15.2-15.9 28.7-27.9 39.6l-1-1.2-1.1-4.1zm0 0l1.1 4.1-3.9 1-.6-2.3c1.2-.9 2.3-1.8 3.4-2.8zm-12-59.3c12.3-2.8 22.2-6.6 29.6-11.3l-.3 9.7 4 .1.2-6.1c.6 1.4 1 2.9 1.4 4.4.9 3.1 1.5 6.2 1.8 9.4l.5 8.1c.1 1.9.1 3.9-.1 5.9h-3.6v4h2.4c-.6 1.2-1.3 2.6-2.2 4.1-2.9 4.5-6 8.9-9.4 13-4 5.1-8.4 9.9-13.3 14.1l-1-3.9-3.9 1 .8 3.1-6-3c-2.8-1.4-5-2.7-6.9-3.9-1.8-1.2-3.5-2.2-4.9-3.1-.5-.3-.9-.6-1.3-.9l4.2-1.1-1-3.9-5.3 1.4c7.4-15.8 11.6-28.3 12.6-37.2l4.7 5.4 3-2.6-6-6.7zm8.6 62.2l-1.7-6.5c.8.4 1.6.8 2.4 1.1l1.7-1.4 1 3.9c-1.1 1-2.2 1.9-3.4 2.9zm1.4-10.7l1 3.9-1.7 1.4c-.8-.4-1.6-.8-2.4-1.1l-.8-3.1 3.9-1.1zm-2.2-145.1l1.3 3.8-3.6 1.3c-.8-.7-1.4-1.1-1.8-1.2-.1-.8-.1-1.5-.2-2.3l4.3-1.6zm-7.8 93.6l6 6.8-3 2.6-4.7-5.4c.1-1.3.2-2.6.2-3.8.6 0 1.1-.1 1.5-.2zm-1.9-112.7c3 1.8 5.9 3.8 8.8 5.9 4.2 3 8.2 6.3 12 9.9 4.4 4.3 8.5 9 12 14.1 4.2 5.8 7.7 12 10.4 18.6-.9 1.4-1.9 2.7-3.1 3.9l-2.7 3-.4.3.4-11-4-.1-.3 7.6-.2-.2-3.8-4.8-4.8-5.6c-1.7-2.2-3.6-4.3-5.6-6.3-.6-.4-2.7-2.5-6.4-6.3-2.2-2.2-3.9-3.8-5.1-4.8l3.6-1.3-1.3-3.8-4.3 1.5c-.4-3.8-1.3-7.5-2.6-11.2-1-3.2-2.4-6.2-4.3-9l-2-2.5c.9.6 2.2 1.3 3.7 2.1zm1.9 112.7l-1.5.3c0 1.2-.1 2.4-.2 3.8l-32.3-36.6c.7-.2 1.3-.4 1.9-.5l.3-2.9 31.8 35.9zm-14.9 42.8c.3-.5.5-1 .7-1.6l5.3-1.4 1 3.9-4.2 1.1c-.8-.5-1.4-.9-1.8-1.3l-1-.7zM158.3 69.5l-8.6 3.1-1.3-3.8 7.4-2.7c.3.2.6.3.9.5l1.3.8c.1.8.2 1.4.3 2.1zm-2.6-3.3l37-13.3c.1.8.2 1.5.2 2.3.4.1 1 .5 1.8 1.2l-36.5 13.1-.3-2-1.3-.8c-.3-.2-.6-.4-.9-.5zm-.7 39.7l2.6 3-.3 2.9c-.6.2-1.3.4-1.9.5l-3.4-3.8 3-2.6zm-28.8 92.8l48.9-12.6c-.2.5-.5 1-.7 1.6l1 .8c.4.3 1 .8 1.8 1.3L125.5 203c.8-.9 1.7-1.8 2.6-2.7-.6-.5-1.3-1-1.9-1.6zm12.4-183.5c-5.5 0-12.6 1.4-21.3 4.3-5.3 1.7-9 3.6-11.2 5.8l-1.2-2.9-3.7 1.5.9 2.1c-1.4-.2-2.9-.3-4.3-.2-3 0-6.1.2-9.1.5-3.5.4-7 1-10.5 1.9-3.6.9-7.2 2-10.6 3.4 22.1-13.2 45.7-18.7 71-16.4zm-20.7 48.5l-4.7-11.4 1.6-1.5c.8.1 1.5.3 2.3.5l4.5 10.8-3.7 1.6zm-.3 141.4l-1-3.9 9.6-2.5c.6.5 1.3 1 2 1.6-.9.9-1.8 1.8-2.6 2.7l-8 2.1zm16.5-87.7l-11.9 2.4-8.9 1.6-1.3.1 2.3-7.1-3.8-1.3-2.3 6.8c-.1-.1-.1-.2-.2-.3-.7-.9-2-2.7-4-5.4l-5.9-8.1c-1.9-2.7-4.1-6.1-6.5-10.1-2-3.4-3.9-6.7-5.6-9.9l11.1-2.7-.9-3.9-9.7 2.5c2.1-3.2 5.1-7.1 9.1-11.5 5-5.6 9.4-10.3 13.2-14.1l4.4-4 4.7 11.4 3.7-1.5-4.5-10.8c2 .4 4.1 1 6.3 1.5 3 .8 5.9 1.8 8.8 2.9l8.1 3.3c2.6 1.1 5.1 2.1 7.1 3.1 2.1 1 3.9 1.9 5.6 2.6 1 .4 1.9.9 2.8 1.4l-7.4 2.7 1.3 3.8 8.6-3.1c1.4 9.8 1.2 22.9-.7 39.4l-2.6-3-3 2.7 3.4 3.8-8.7 2.3c-4.3.7-8.6 1.6-12.6 2.5zm-19.8-3l-2.3 7.1-2.1.1c-.6-.4-1.1-1-1.6-1.6l2.3-6.8 3.7 1.2zm-1.4 116l.4 1.5-3.8 1.2-1-3.3 4.4.6zm-3.6-4.5l.3-.5c.1-.4.2-.7.4-1 .2-.5.5-.9.7-1.4l2.2 7.4c-1.5-.2-2.9-.4-4.4-.7l-1.3-4.4 2.1.6zm2.7-104.4l-15.5 46.9c-.1-.2-.3-.3-.4-.5l-1.3.3-2.7.5 16.1-48.7c.5.6 1 1.2 1.6 1.6l2.2-.1zm-2.1 102.9c-.2.3-.3.6-.4 1l-.3.5-2.1-.6-1.8-5.8 3.8-1.2 1.4 4.6c-.1.6-.3 1-.6 1.5zm3.2-172l-10.9-26.3c1 .1 2 .3 3 .5.3-.4.6-.9 1-1.3l10.9 26c-.8-.2-1.5-.3-2.3-.5l-1.7 1.6zm-8.1-30l1.2 2.9c-.4.4-.8.8-1 1.3-1-.2-2-.4-3-.5l-.9-2.1 3.7-1.6zm-8.8 57.3l.9 3.9L86 86.2c-.3-.6-.7-1.2-1-1.8.4-.8.9-1.6 1.4-2.4l9.8-2.3zm-4 89c.6-.1 1.5-.3 2.7-.5l1.3-.3c.1.2.3.3.4.5l-1.7 5.1-3.8-1.3 1.1-3.5zm-6.3 1.6c4.3-.9 6.1-1.3 5.3-1.3-.5.1-.2 0 .9-.3l-1.1 3.5 3.8 1.3 1.7-5.1c8.7 11.3 18.6 21.4 29.7 30.4l-9.6 2.5 1 3.9 7.9-2.1c-.7.7-1.3 1.5-2 2.3l-3.8 4.5c-1.1 1.3-2.1 2.7-3 4l-2.4 3.5c-.7 1-1.3 2-1.9 2.9l-1.5 2.4c-.1.1-.2.3-.3.4l-1.4-4.6-3.8 1.2 1.8 5.8c-19.1-5.4-30.8-9.3-34.9-11.9h-.1l3.3-4-3.1-2.6-3.3 3.9c-2.4-2.7-4.6-6.8-6.9-12.4-2.6-6.5-4.1-13.4-4.4-20.3l2.5 3.8 3.3-2.2-3.5-5.2c1.5-.1 3-.2 4.6-.4 2.5-.3 5-.6 7.4-1l7.3-1.3 6.5-1.6zm-10.4 39.1l-3.3 4c-1-.6-2-1.5-3-2.6l3.3-3.9 3 2.5zm-3.3 4l-2 2.3c-1.2-.7-2.3-1.4-3.4-2.1l2.3-2.8c1 1.1 2 2 3.1 2.6zm-2 2.3l-1 1.2-3.1-2.6.7-.8c1.1.8 2.3 1.5 3.4 2.2zM45.7 91.8L86.5 82c-.5.8-1 1.6-1.4 2.4.3.6.6 1.2 1 1.8L45.2 96l1.5-2.4c-.4-.6-.7-1.2-1-1.8zm12.1 82.6h2.4l3.5 5.2-3.3 2.2-2.5-3.8c-.1-1.1-.2-2.4-.1-3.6zM37.9 93.7l7.8-1.9c.3.6.6 1.2 1 1.8L45.2 96l-6.4 1.5-.9-3.8zm19.9 80.7c0 1.2 0 2.5.1 3.7l-27.5-40.7h2.4l.3-2.2c0-.3 0-.6.1-.9l27 40c-.9.1-1.7.1-2.4.1zm-24.7-40.1c0 .3 0 .6-.1.9l-.3 2.2h-2.4l-4.1-6.1 3.3-2.2 3.6 5.2zm94.7 97.1c19.5.1 38.6-4.9 55.5-14.5 5.2-2.9 10.1-6.2 14.7-9.8l.6 2.3 3.9-1 1 1.2a108.82 108.82 0 0 1-32 20.3c-13.7 5.8-28.6 8.9-43.6 8.8-15 .1-29.9-3-43.8-8.9a111.24 111.24 0 0 1-59.9-59.9c-4.7-11-7.6-22.7-8.5-34.6l.8-.1c2.4 17.7 9 34.5 19.4 49 8.5 11.9 19 21.8 30.9 29.4l-.7.8 3.1 2.6 1-1.2c11.7 6.9 24.7 11.8 38.3 14.1l1 3.3 3.8-1.2-.4-1.5a122.89 122.89 0 0 0 14.9.9zm-87.5-125c-1.6 4-2.9 8-4 12.1-.9 3.6-1.7 6.8-2.3 9.8-.4 2-.7 4-.8 6l-3.6-5.3-3.3 2.2 4.1 6.1c-4.7-.2-9.4-.9-13.9-2.3l-.8.1c-.3-3-.4-6.1-.4-9.2v-3.4c.2.9.3 1.7.3 2.6s0 1.7.1 2.6c.1.8.2 1.7.4 2.5.2-6.1.6-12.3 1.4-18.4.6-5 1.5-9.9 2.8-14.8 1.1-3.9 2.1-7.3 3.1-10.2s1.8-5.1 2.5-6.5l1-2.1 11.5-11c.3 7.5 2.8 15.7 7.3 24.5l-7.8 1.9.9 3.9 6.4-1.5c-1.9 3.3-3.6 6.8-4.9 10.4z'\n\nexport const FUT = fustal\n","export const golf =\n 'M210.52,193.75q-34.75,5.75-82.5,5.75-21,0-43.25-1.5t-39.25-4.25Q13.27,188.51,5,179.5q-7.75-8,13.25-13.75,15.5-4,45-6V56.5a24,24,0,0,0,12.13,5A36.75,36.75,0,0,0,87.64,61a55.56,55.56,0,0,1,14.75-.75,57.52,57.52,0,0,1,18.38,4.25,45,45,0,0,0-13.88,1.12,43.85,43.85,0,0,0-10.88,4q-4.26,2.38-9.5,4.75a55.87,55.87,0,0,1-10,3.5q-4.76,1.13-12-.13v82q13-1,28.87-1.5t34.62-.5q111.5,0,123.75,14.75,5.75,7-13.5,14.25a156.35,156.35,0,0,1-27.75,7ZM63.77,167.5a27.08,27.08,0,0,0-3.75.25,15.38,15.38,0,0,0-3.13.75,7.22,7.22,0,0,0-2.12,1.12,1.42,1.42,0,0,0,0,2.5,5.73,5.73,0,0,0,2.12,1q1.38.38,3.13.75a19,19,0,0,0,3.75.37,21.88,21.88,0,0,0,7.13-1q2.88-1,2.88-2.38t-2.88-2.38a21.88,21.88,0,0,0-7.13-1Z'\n\nexport const GLF = golf\n","export const handball =\n 'M66.53,155.46a132.12,132.12,0,0,1-9.88-12.13q-3.38-4.87-3.63-6.12L52.78,136a49.19,49.19,0,0,1-10.5-16.75,64.1,64.1,0,0,1-8.87-15.75q-2.62-7.25-1.62-10.75a10.1,10.1,0,0,1,2.5-4,5.36,5.36,0,0,1,4.25-1.62q2.5.13,5.25,2.88a75,75,0,0,1,5.38,7.5,66,66,0,0,1,4.37,7.75l1.75,3.25a30.23,30.23,0,0,1,4.13,4.75q2.62,3.5,4.37,6.25l1.75,2.5a22.75,22.75,0,0,1,2.38,2.12,28,28,0,0,1,2.75,3.25q1.38,1.88,2.62,3.75t2.38,3.63A17.19,17.19,0,0,0,77.28,137q1.75,2,2.38,1.88t2.88-2.38a30.19,30.19,0,0,0,3-3.37q1-1.37.75-4.87a19.86,19.86,0,0,0-3-8.25,71.14,71.14,0,0,1-3.87-9.38A60.18,60.18,0,0,1,77.29,103l-.5-2.75q-5-18-5.5-24A91.81,91.81,0,0,1,68.41,66q-.87-4.25-1.12-5.5V59a2.91,2.91,0,0,1-.5-1.12l-.87-3q-.62-2.12-1-4a9.27,9.27,0,0,1,0-3.75,4.2,4.2,0,0,1,1.38-2.62,19.72,19.72,0,0,1,5-3.25,9.41,9.41,0,0,1,5.62-.75A5.37,5.37,0,0,1,81,44.23q6.5,19.75,6.75,24Q90.54,77.48,92,81.6a66.41,66.41,0,0,0,3,7.13,43.16,43.16,0,0,1,3.13,7.13q1.88,5.12,3.5,10a43.57,43.57,0,0,1,1.88,6.88q1,4.25,2.75,4.5,1.25,0,1.5-3.75.25-3.25-2.5-13t-2.75-15.75Q102.3,80,101.42,73.1T99.67,60.6a60.18,60.18,0,0,1-.87-7.87,35.42,35.42,0,0,0-1.5-6.88q-1.5-5.38-2.88-10.38a52.64,52.64,0,0,1-1.75-10.25q-.37-5.25,1.88-6.75,5-3.75,9.62-2.75A8.44,8.44,0,0,1,110.54,21a32.41,32.41,0,0,1,2.25,6.5q1,4,2.12,8.13t1.88,6.12A72.68,72.68,0,0,1,118.41,52a67.5,67.5,0,0,0,2.12,11.75q.5,1.5,1.25,3.25T123,70.1q.5,1.38,1.25,3.13a26.91,26.91,0,0,1,1.25,3.63q.5,1.88.87,4t.63,4.75q.26,2.62.25,5.88,0,21.75,4.63,21.75t2.38-13.75a57.08,57.08,0,0,1-.63-6.25,32.15,32.15,0,0,1,.13-5.12q.26-2.12.5-5t.25-5.12q0-6.5-.37-12.37a97.83,97.83,0,0,0-1.38-11.37q-1-5.49-1.62-10.88a50.16,50.16,0,0,1,0-11.13q.62-5.74,3.37-7,11.5-5.25,15,8.5a96.74,96.74,0,0,1,2.38,14.5,134.69,134.69,0,0,0,1.88,13.5q.5,3.25,1.5,7.5t1.5,6.88a72.42,72.42,0,0,1,.87,7.5q.37,4.86.37,10.88a171.2,171.2,0,0,0,1.38,21.25,124.13,124.13,0,0,0,5.12,22.62q3.74,11.63,9.25,16.37a109.41,109.41,0,0,0,5.88-12.37,109.71,109.71,0,0,1,7.63-15.13q4.5-7,13.75-13t15.25-5.75q5.5.25,7.25,3.5a9,9,0,0,1,.25,7.5,68.68,68.68,0,0,0-10,11.75,118.71,118.71,0,0,0-9.5,16.25,133.36,133.36,0,0,0-9.5,26.75,73.86,73.86,0,0,1-3.5,12.25,39.06,39.06,0,0,1-5.5,9.5q-1.75,12.5-13.25,29l-5.62,2.38L160.65,230q-2.38,1-6.25,2.25a44.93,44.93,0,0,1-7.13,1.75,50.68,50.68,0,0,1-7.37.5,43.1,43.1,0,0,1-8.13-.75q-4,4-11.63,5.38a93.81,93.81,0,0,1-16.63,1.38q-3.5-5.75-8.25-12.75t-6.75-10.12a63,63,0,0,1-4.63-9.5q-2.62-6.38-5.38-15.13-1.75-6.75-3.75-12.25t-3.25-8.5q-1.25-3-2.38-5.62a31.13,31.13,0,0,1-1.75-5.25,39.36,39.36,0,0,1-.87-5.88Z'\n\nexport const HDB = handball\n","export const hockey =\n 'M243.31,248.79a20,20,0,0,1-10,4.25,14.45,14.45,0,0,1-9-1.88,46.79,46.79,0,0,1-6.5-4.5,30.48,30.48,0,0,1-4.25-4.37q-1-1.25-13.88-18.5t-34.62-46.25q-21.75-29-37-49.25Q109.56,153,71.81,203L42.56,242.29a29.76,29.76,0,0,1-4.25,4.37,48,48,0,0,1-6.5,4.5,14.36,14.36,0,0,1-9,1.88,20.1,20.1,0,0,1-10-4.25q-6.25-5-8.13-10.88t-1-9a12.69,12.69,0,0,1,2.12-4.63q5.25-6.75,11.25-2a9.25,9.25,0,0,1,3.37,7.13q.12,4.37,1.12,5.12,2.75,2.25,6-.75t12-14.5q6.5-8.5,10.5-13.5,26.25-33.75,69-85.25a15.27,15.27,0,0,1,1.75-2Q91.55,79.53,85,71.27q-5.25-6.75-18.12-23.5T49.3,25q-1.5-2-3.13-3.87T43.43,18q-1.13-1.26-2-2.12L40,14.53l-.5-.25a6,6,0,0,0-.63-1l-1.25-1.62A16.69,16.69,0,0,0,36.29,10Q35,7.28,38.79,4.29L40,3.66l1.25-.5q1.25-.5,1.12-.13h1.12l.87.13.37.13.25.25,3.5,4.25V7.9l.25.75a2.73,2.73,0,0,0,.63,1.12,6.65,6.65,0,0,1,1,1.62,14.15,14.15,0,0,0,1.38,2.25q.76,1,1.88,2.62a29.9,29.9,0,0,0,2.62,3.25q4,5,43.75,56,8.5,11,15.5,19.63T128,110q12.25-14.5,28-34.5,8.5-11,16.37-21t12.37-15.87q4.5-5.87,9-11.5t6-7.63a35.54,35.54,0,0,0,3.37-4.37q1.37-2.12,2.25-3.37a16.59,16.59,0,0,0,1.38-2.25,5,5,0,0,0,.5-1.25l.25-.5L211,3.54a1.74,1.74,0,0,1,.87-.37,10.47,10.47,0,0,1,2.38,0,5.32,5.32,0,0,1,3,1.12,8.92,8.92,0,0,1,2.38,2.88A3,3,0,0,1,220,9.29l-.25.75a14.28,14.28,0,0,0-1.25,1.5,15.2,15.2,0,0,1-1.5,1.75l-.5,1A65.43,65.43,0,0,0,206.78,25q-2.25,3-5.25,6.88l-6,7.75-6.38,8.25-6.38,8.25-6.12,8q-6.12,8-5.62,7.13-6.75,8.5-35.75,47.25a8.33,8.33,0,0,0,1,1.25l.75.75q42.75,51.5,69,85.25,4,5,10.5,13.5,8.75,11.5,12,14.5t6,.75a3.41,3.41,0,0,0,1-2.88,25.39,25.39,0,0,1,.5-4.75,7.84,7.84,0,0,1,3-4.63,5.84,5.84,0,0,1,5.12-1.75,10.29,10.29,0,0,1,3.87,1.38,8.84,8.84,0,0,1,2.25,2.38q3.5,4.25,1.75,11.75-1.75,7-8.75,12.75Zm-116-25a13.74,13.74,0,0,1,10.12,4.13,13.53,13.53,0,0,1,4.13,9.88,13.73,13.73,0,0,1-1.88,7,14.83,14.83,0,0,1-5.12,5.25,14,14,0,0,1-17.13-2.12,13.76,13.76,0,0,1-4.13-10.12q0-8.75,8-12.75a15.51,15.51,0,0,1,6-1.25Z'\n\nexport const FHK = hockey\n","export const hockeyice =\n 'M247,235.06a49.48,49.48,0,0,1-6.5.13l-9.12-.25q-4.63-.13-10-.75a56.39,56.39,0,0,1-9.25-1.75,26.51,26.51,0,0,1-6.5-2.75,17.71,17.71,0,0,1-3.75-2.88,31.63,31.63,0,0,1-2.62-3.5q-1.49-2.24-2.25-3.5-2.25-2.5-69-92-14,19-25.25,34T81.38,190.2Q71.24,203.57,65.5,211.32t-6.5,8.5q-.75,1.25-1.88,2.88t-2,2.75a28,28,0,0,1-2.25,2.5,13.74,13.74,0,0,1-3.63,2.5,25.31,25.31,0,0,1-5.5,1.88q-11,3.25-34.75,2.75a14.29,14.29,0,0,1-3.63-.37,2.31,2.31,0,0,1-1.75-1.62,13.93,13.93,0,0,0-.5-1.5A9.61,9.61,0,0,1,3,229.33q-.25-5,7.25-6,4.75-.5,16.75-.75t14.25-1q9.75-2.75,14.25-6.62t16.25-19.37q9-12,53.5-71.5L45,16.82a.4.4,0,0,0-.25-.37,1.48,1.48,0,0,1-.5-.75q-.26-.62.25-.87a4.16,4.16,0,0,0,1-.75,3.82,3.82,0,0,0,1-.75q.75-.5,1.75.75,42,56,79.75,106.5l79.75-106.5,1.75-.75a1.59,1.59,0,0,1,.75.75,11.14,11.14,0,0,1,1.25.75.76.76,0,0,1,.13.75,4.42,4.42,0,0,1-.37,1l-.25.25q-41,54.75-80.25,107.25,45,60.25,53.5,71.5,11.75,15.5,16.25,19.37t14.25,6.62q2.25.75,14.25,1t16.75.75q7.5,1,7.25,6v.5a10.43,10.43,0,0,1-.25,2.62,3.45,3.45,0,0,1-1.62,1.75,7.8,7.8,0,0,1-4.13.87Zm-109.5.49v5.75q0,1.5-9.88,1.5t-9.88-1.5v-5.75q0-1.5,10-1.5a40.74,40.74,0,0,1,6.88.5q2.88.5,2.88,1Z'\n\nexport const ICE = hockeyice\n","export const jackpot =\n 'M163.3 136.8q-8-8.9-31.3-19.8V79a25 25 0 0 1 9.9 4 27.3 27.3 0 0 1 7.4 7.9l17.6-8.7A30.1 30.1 0 0 0 154.4 67q-8.8-5.6-22.4-6.8V49.4h-10V60q-17.4 2.2-27.3 12t-10 24.7a31.7 31.7 0 0 0 9 22.4q8.8 9.5 28.3 17.4v43.2q-9.2-1-15-5.5a23.7 23.7 0 0 1-8-12.6l-18 8q3.5 13.8 13.8 21.4t27.2 8.7v15.7h10v-16q18.9-2.3 29.1-12.9t10.3-27.6q0-13.2-8-22Zm-41.3-23q-7-3.7-10-8a17 17 0 0 1-3.1-10.2c0-4 1-7.4 3.1-9.9s5.4-4.4 10-5.8Zm21.8 58.8q-4 4.9-11.8 6.8v-38.6q8.3 4.1 12 8.7a16.6 16.6 0 0 1 3.9 11 18.4 18.4 0 0 1-4 12ZM128 1a127 127 0 1 0 127 127A127 127 0 0 0 128 1Zm0 225.8a98.8 98.8 0 1 1 98.8-98.8 98.8 98.8 0 0 1-98.8 98.8Z'\n","export const lawnbowls =\n 'M236.5 175.9c12 28.3-1.1 60.9-29.3 72.9-25.2 10.7-53.9 1.4-68.4-20.8 2.1-.2 4.2-.4 6.2-.8 13.4 18.3 38.1 25.7 60 16.4 25.4-10.8 37.2-40.2 26.4-65.6-1.2-2.9-2.7-5.6-4.4-8.1 1-1.8 2-3.7 2.9-5.6 2.6 3.6 4.8 7.4 6.6 11.6zm-6.6-11.5c-.9 1.9-1.8 3.7-2.9 5.6-13.1-19.7-38.7-27.9-61.3-18.3-25.4 10.8-37.2 40.2-26.4 65.6 1.5 3.6 3.4 6.9 5.7 10-2.1.3-4.1.6-6.2.8-1.8-2.7-3.3-5.5-4.6-8.6-12-28.2 1.1-60.9 29.4-72.9 24-10.3 51.3-2.2 66.3 17.8zm10.5-58.7c1.8 20.5-1.9 40.6-10.5 58.7-15-20-42.2-28.1-66.3-17.8-28.2 12-41.4 44.7-29.4 72.9 1.3 3 2.8 5.9 4.6 8.6-.3 0-.7.1-1 .1-17.1 1.6-33.9-.7-49.9-6.8-19.6-7.5-36.7-20.2-49.5-36.7-13.1-17.1-21.2-37.5-23-59C9.9 63.7 56 8.6 117.9 3.1c17.2-1.6 34 .8 49.9 6.9 19.6 7.5 36.7 20.2 49.5 36.7 13.2 17.1 21.3 37.6 23.1 59zm-27.8-55.3c-4.6-6.1-9.9-11.6-15.7-16.4-19.3 18.3-44.7 30.6-73.4 33.2s-55.7-5.1-77.9-19.8c-4.8 5.8-9 12.1-12.6 18.9 24.3 22.4 57.7 35 93.3 31.7 35.7-3 66.3-21.2 86.3-47.6zm-91.7-13.1c18.2-1.5 34.3-9.2 46.7-20.7-15.1-6.1-31.7-8.7-49.1-7.3-17.3 1.6-33.3 7.2-47.1 15.8 14.2 9.1 31.4 13.7 49.5 12.2z'\n\nexport const LBO = lawnbowls\n","export const live =\n 'M243.26,188.25h-85V206q0,1,.13,2.38t2.25,3.63a7.37,7.37,0,0,0,5.62,2.25H209l1.12.25a7.27,7.27,0,0,1,1.62.5l1.62.87a4.5,4.5,0,0,1,1.62,1.38q.5.76,1.25,2.12a4.93,4.93,0,0,1,.5,3.13,7.94,7.94,0,0,1-2.12,5.88A9.24,9.24,0,0,1,210.5,231l-2,.25H44.25a8.79,8.79,0,0,1-2.12-.37,10.94,10.94,0,0,1-3.75-2.5,8.64,8.64,0,0,1-.26-11.63,7.63,7.63,0,0,1,4.13-2.25l2-.25h45.5a13,13,0,0,0,2.12-.25,8.61,8.61,0,0,0,3.63-2.25A7.3,7.3,0,0,0,97.75,206V188.26h-85q-6.75,0-9-6.25a8.85,8.85,0,0,1-.75-3.5v-144a9.39,9.39,0,0,1,2.88-6.88,9.39,9.39,0,0,1,6.88-2.88h230.5A9.65,9.65,0,0,1,248,26a9.45,9.45,0,0,1,3.63,3.63A9.62,9.62,0,0,1,253,34.5v144a9.83,9.83,0,0,1-9.76,9.76Zm1-150.5a4.37,4.37,0,0,0-1.5-3.37,5.09,5.09,0,0,0-3.5-1.38H16.77a5.62,5.62,0,0,0-1.75.25,4.19,4.19,0,0,0-1.25.63,6.06,6.06,0,0,0-1,1A4.25,4.25,0,0,0,12,36.26a4.86,4.86,0,0,0-.25,1.5v137.5a4.77,4.77,0,0,0,1.5,3.5,4.85,4.85,0,0,0,3.5,1.5h222.5a4.77,4.77,0,0,0,3.5-1.5,4.85,4.85,0,0,0,1.5-3.5V37.77ZM210.52,128l-.75,8.5H166.52V76.26h42v8.5H184v17.5h20.5v8.5H184V128h26.5Zm-77.75,8.5-18-60.25h17.75l7.75,34a33.05,33.05,0,0,1,1,7.25,12.34,12.34,0,0,0,.25-2.38,12.34,12.34,0,0,1,.25-2.38,13.87,13.87,0,0,1,.75-2.5l7.25-34h17l-17.25,60.25Zm-52-8h8.75V84.75H80.77V76.51h34.5v8.25h-8.5v43.75h8.5v8H80.77Zm-43.25,8V77H54.76v48.75H80.51L80,136.51Z'\n\nexport const LVB = live\n","export const martialarts =\n 'M53.19,92.54a4.64,4.64,0,0,0,.63,3.63,26.19,26.19,0,0,0,2.62,4Q57.94,102,59.7,104a29.8,29.8,0,0,1,2.25,2.75,2.49,2.49,0,0,0,1.75,1.38,1.72,1.72,0,0,0,1.5-.37l.5-.75a17,17,0,0,0,6.5,5,3.16,3.16,0,0,0,2,2.5,3.18,3.18,0,0,1,2,1.5,8.4,8.4,0,0,0,2.38,3.13q1.63,1.38,4.87,3.63,0,.75.13,2.12l.25,2.62a6,6,0,0,0,.75,2.38,3.79,3.79,0,0,0,1.62,1.62,3.59,3.59,0,0,1,2.62,1.88q.62,1.38.13,4.87-2,2,.5,2.5a104.91,104.91,0,0,0,0,11A4.53,4.53,0,0,0,88.21,153a3.94,3.94,0,0,0-.63,1.38,2.61,2.61,0,0,0,.13,1.38,11,11,0,0,0,.5,1.25,6,6,0,0,0,.63,1,7.92,7.92,0,0,0,.63.75l.25.25q-1.25,5.75.25,8.75a9.5,9.5,0,0,1,.37,1.75,9.9,9.9,0,0,1,0,2.25l-.25,2.5-.37,3.5a23.69,23.69,0,0,0-.25,4.25q2.25,3.25,1.75,26.5-.5,17.25-8.5,22.25-1.25.75-4.75,2.5-5,0-5.75,3.25L70,238.27a1.28,1.28,0,0,0,.5,1.75,2.73,2.73,0,0,0,2.25.5,8.06,8.06,0,0,0,2.38-.87l1.12-.63h.5l2.12-.25a8.37,8.37,0,0,0,3.37-1,2.77,2.77,0,0,1,1-.5q1.25-.5,2-.87a8.47,8.47,0,0,1,2-.63,22.43,22.43,0,0,1,2.75-.37q1.5-.12,3.5-.13,4.25,0,5.12-1.62T99,227a24.1,24.1,0,0,1,.25-5.88q.49-3.13,1.5-7.63a59.65,59.65,0,0,0,1.25-7,18.46,18.46,0,0,1,4.5-1.88q3.5-1.13,9.25-2.38-.5-1-.87-10.25t-.63-20.87q-.26-11.63-.25-14.62a32.79,32.79,0,0,1,1.5-10.75,36,36,0,0,0,1.75-9.25,22.58,22.58,0,0,1,.5-5.12,31.91,31.91,0,0,1,1-3.5,17.63,17.63,0,0,0,.75-2.62,11,11,0,0,1,.5-3.5,17.09,17.09,0,0,1,2-3.75,15.06,15.06,0,0,1,4-4,31.2,31.2,0,0,0,9-9.25,21.69,21.69,0,0,1,4.5-4.75,41,41,0,0,0,4.5-4.25l1.88-2.25,1.25-1.88q1.25-1.88.87-2.38t.25-3.25a7.71,7.71,0,0,1,1.62-1.25q.87-.5,1.88-1t1.88-.87q.87-.37,2.5-.87A13.37,13.37,0,0,0,159,80.76q4.75-1.75,21-11.25a6.55,6.55,0,0,0-.25-2.88A61.54,61.54,0,0,0,178,60.38a68.62,68.62,0,0,0-3-7.63Q185.25,43.51,188.5,40a42.7,42.7,0,0,1,3.87-3.87q1.62-1.38,2.12-1.75a10.56,10.56,0,0,1,2.12-1q1.62-.63,2.62-1.12a7,7,0,0,0,4.5-1.75q1.5-1.5.5-4,4.5-2,4-5,1-1.75-2.75-5a.72.72,0,0,0-.5-.25,3.29,3.29,0,0,0-1.12-.75,1.36,1.36,0,0,0-1.25.13,11.76,11.76,0,0,0-1.12.75,15.8,15.8,0,0,0-1.38,1.25L198.75,19q-6,5-8,8.25-1.5,2.5-21,15,0-.25-.37-.13a2.94,2.94,0,0,1-.5.13,6.23,6.23,0,0,0-.63.13,1.48,1.48,0,0,0-.75.37,3.81,3.81,0,0,1-1.12.63,6.49,6.49,0,0,0-1.5.87A18,18,0,0,1,163,45.51q-1.25.75-2.75,1.5-.5.25-3,1.62t-3,1.75q-.5.37-2.5,1.5a14.26,14.26,0,0,0-2.88,2l-2.38,2.38-2.88,3.13q-2.88,3.13-2.88,3.63-2.5-.75-3.37,0a2.27,2.27,0,0,0-.63,2.25v1.25a6.09,6.09,0,0,0-1.12.75,19.18,19.18,0,0,0-2,2.12,9.43,9.43,0,0,0-1.88,3.13q-3.25-.75-4.5.13A5.19,5.19,0,0,0,125.48,76q-13,6.75-12.25,9.25a16.73,16.73,0,0,0-4.5-.5q-4.75,0-5.75,5-3.75-2-1.25-7.75a3.12,3.12,0,0,1,.63-.87,1.94,1.94,0,0,1,.87-.5,4,4,0,0,1,1-.13,4.07,4.07,0,0,1,1.25.25,11.53,11.53,0,0,0,1.38.37q.64.13,1.62.37t1.75.5a4.21,4.21,0,0,0,2.12-1,16.89,16.89,0,0,0,3.13-3.25,17.53,17.53,0,0,0,2.75-5.25q10.25.25,11.75-5.75a10.33,10.33,0,0,0-.75-3.87,11.85,11.85,0,0,0-2.38-3.63q-1.63-1.76-3-3.13t-3.75-3.37q-2.39-2-3.63-3.25-.75-1.25-1.38-2.12l-1-1.38a10,10,0,0,0-1-1.12l-.87-.87-.87-.63a3.09,3.09,0,0,0-1.12-.63q-.75-1-1.5-.25t-1.25.5L105,44.75l-1.5-.75a7.53,7.53,0,0,0-1-5.12,18.3,18.3,0,0,0-4-5.12A22.81,22.81,0,0,0,92.73,30a14.43,14.43,0,0,0-6-1.5q-5.5,0-9.5,5.12a18.74,18.74,0,0,0-4,11.87Q73,51.75,72,54a33,33,0,0,1-4.5,6.5H66.6l-.75.13q-.75.13-.75.25t-1.25.75a2.19,2.19,0,0,0-1.38,1.62,21.14,21.14,0,0,1-5,2.88A22,22,0,0,0,50,72.24Q45.24,78,49.74,86A16.48,16.48,0,0,1,51,88.49a28.81,28.81,0,0,1,2.25,4ZM99.94,52.8h.5q1.25,3.25,10,3a24.25,24.25,0,0,1,2.75,2.12A7.53,7.53,0,0,1,115,60l.25.75a18.28,18.28,0,0,1-4,.25,21.44,21.44,0,0,0-5.75-2.5,28.39,28.39,0,0,1-5.25-2,4.21,4.21,0,0,1-.25-3.75Z'\n\nexport const MMA = martialarts\n","export const motorsport =\n 'M128,240.5a117.21,117.21,0,0,1-20.25-1.75,99.81,99.81,0,0,1-19-5.25,129.33,129.33,0,0,1-17.5-8.37A101.1,101.1,0,0,1,55.5,214,128.78,128.78,0,0,1,42,200.5a101.1,101.1,0,0,1-11.13-15.75,129.33,129.33,0,0,1-8.37-17.5,99.81,99.81,0,0,1-5.25-19A117.2,117.2,0,0,1,15.5,128a112.74,112.74,0,0,1,4-29.88,111,111,0,0,1,11.25-27A112.59,112.59,0,0,1,128,15.5a111.68,111.68,0,0,1,25.88,3A108.63,108.63,0,0,1,177.5,27a118.69,118.69,0,0,1,20.75,13.25,108.39,108.39,0,0,1,17.5,17.5A118.39,118.39,0,0,1,229,78.5a109.11,109.11,0,0,1,8.5,23.63,111,111,0,0,1,3,25.88,112.74,112.74,0,0,1-4,29.88,111,111,0,0,1-11.25,27A112.59,112.59,0,0,1,128,240.5Zm0-199q-35.75,0-61.12,25.38T41.5,128A85.77,85.77,0,0,0,53,171.5,84,84,0,0,0,84.5,203a88,88,0,0,0,87,0A84,84,0,0,0,203,171.5a88,88,0,0,0,0-87A84,84,0,0,0,171.5,53,85.77,85.77,0,0,0,128,41.5Zm0,170a82.85,82.85,0,0,1-22.12-3,84.76,84.76,0,0,1-20.13-8.37,81.81,81.81,0,0,1-16.87-13,82.69,82.69,0,0,1-13-16.87A85.24,85.24,0,0,1,44.5,128,83,83,0,0,1,128,44.49,83,83,0,0,1,211.52,128a88.57,88.57,0,0,1-1.62,16.87,78.62,78.62,0,0,1-4.75,15.75,80,80,0,0,1-7.75,14.12,87.9,87.9,0,0,1-10.25,12.37,86.15,86.15,0,0,1-12.37,10.25,81.45,81.45,0,0,1-14.12,7.75,77.43,77.43,0,0,1-15.75,4.75A89.85,89.85,0,0,1,128,211.5Zm0-157.75a74.06,74.06,0,0,0-23.37,3.75,70.69,70.69,0,0,0-20.5,10.62,80.45,80.45,0,0,0-16,16,70.69,70.69,0,0,0-10.62,20.5A74.06,74.06,0,0,0,53.75,128q0,30.75,21.75,52.5T128,202.25q30.75,0,52.5-21.75T202.25,128q0-31.25-22.25-53Q158.5,53.75,128,53.75Zm0,146.51q-30,0-51.13-21.12T55.75,128a72.18,72.18,0,0,1,3.63-22.75A67.43,67.43,0,0,1,69.76,85.39,81.72,81.72,0,0,1,85.39,69.76a67.43,67.43,0,0,1,19.87-10.38A72.18,72.18,0,0,1,128,55.75,71.77,71.77,0,0,1,200.26,128a70.49,70.49,0,0,1-5.75,28.13,70.94,70.94,0,0,1-38.37,38.37A70.49,70.49,0,0,1,128,200.25Zm0-4.5a66.53,66.53,0,0,0,27.75-6L137,164H119l-18.75,25.75A66.48,66.48,0,0,0,128,195.75ZM142.5,123a3.39,3.39,0,0,0,1.88,2.12,3.87,3.87,0,0,0,2.88.13,4.4,4.4,0,0,0,1.38-.75,2.73,2.73,0,0,0,.87-1.12,6.81,6.81,0,0,0,.37-1.38,3,3,0,0,0-.13-1.5,3.86,3.86,0,0,0-1.88-2.25A3.49,3.49,0,0,0,145,118a4.05,4.05,0,0,0-2.5,5Zm-.25,17.75a3.8,3.8,0,0,0-1.5-1.25,3.44,3.44,0,0,0-2-.37A3,3,0,0,0,137,140q-3.25,2.25-1,5.25t5.38.75q3.13-2.25.87-5.25ZM114.5,146a3.8,3.8,0,0,0,5.38-.76,3.9,3.9,0,0,0,.63-2.88A3.1,3.1,0,0,0,119,140q-3-2.25-5.25.75t.75,5.25ZM111,118a3.49,3.49,0,0,0-2.88.25,3.86,3.86,0,0,0-1.88,2.25,3.49,3.49,0,0,0,.25,2.88,3.86,3.86,0,0,0,2.25,1.88,3.8,3.8,0,0,0,2.88-.13,3.42,3.42,0,0,0,1.88-2.12,4.05,4.05,0,0,0-2.5-5ZM60.25,128a66,66,0,0,0,17.5,45.5L97,147l-5.25-16-31-10.25a7.92,7.92,0,0,0-.25,1.88,12.07,12.07,0,0,1-.13,1.75,12.07,12.07,0,0,0-.13,1.75V128ZM114,61.75a70.8,70.8,0,0,0-7,1.88,61.51,61.51,0,0,0-6.75,2.62A70,70,0,0,0,94,69.5a69.13,69.13,0,0,0-5.88,3.87,67.14,67.14,0,0,0-5.5,4.5q-2.62,2.39-5,5a68.73,68.73,0,0,0-8.37,11.38l32.5,10.5,12.25-9v-34Zm14,43a3.71,3.71,0,0,0-1.88.5,3.65,3.65,0,0,0-1.38,1.38,3.77,3.77,0,0,0,0,3.75,4.76,4.76,0,0,0,1.38,1.5,3.15,3.15,0,0,0,1.88.63,3.59,3.59,0,0,0,2.62-1.12,3.9,3.9,0,0,0,1.12-2.88,3.71,3.71,0,0,0-.5-1.88,3.65,3.65,0,0,0-1.38-1.38,3.71,3.71,0,0,0-1.88-.5ZM128,115a12.82,12.82,0,1,0,9.25,3.75A12.55,12.55,0,0,0,128,115Zm14-53.26v34l12.25,9,32.5-10.5a68,68,0,0,0-18.88-21A66.54,66.54,0,0,0,142,61.76ZM164.25,131,159,147l19.25,26.5a66,66,0,0,0,17.5-45.5,54.82,54.82,0,0,0-.5-7.25Z'\n\nexport const MTR = motorsport\n","export const netball =\n 'M230,32a4.11,4.11,0,0,0-.63-1.88,9.6,9.6,0,0,0-3.25-2.75,43.39,43.39,0,0,0-6.75-3.25,77,77,0,0,0-11.87-3.25q-7.74-1.62-18-2.75t-25.88-1.88q-15.62-.75-34.38-.75-42.75,0-67.75,2.75T31.24,23.64Q26,26.26,26,29v1.5l.13.87a2.82,2.82,0,0,0,.25,1,6,6,0,0,1,.5,1.12q.38,1,1,1.12a3.24,3.24,0,0,1,1.5,1.12,3.81,3.81,0,0,0,2,1.25A9.91,9.91,0,0,1,34,38.12a9.34,9.34,0,0,0,3.5,1.12q4.75,10,11,23.75,3.5,7.5,6.62,14.75t6.5,15.63q3.37,8.37,5.62,15.37,3.25,9.5,6,20.5l-.5.5a.74.74,0,0,1,.5.25l.5.5q2,8.5,3.63,17.12t2.38,16.87q.76,8.26.75,15A68.9,68.9,0,0,1,79,195.24q-1,4.75-3.25,12.13t-3.63,12.5A33.3,33.3,0,0,0,70.74,228a6.84,6.84,0,0,0,.75,3.5,3.62,3.62,0,0,0,3,1.25,7.5,7.5,0,0,0,7-5.25A14.2,14.2,0,0,0,83,232q1.75,2.75,4,2.75a6,6,0,0,0,3-1.25A12.52,12.52,0,0,0,92.6,229a41.18,41.18,0,0,0,1.88-8,18.83,18.83,0,0,0,1,2.5,4.13,4.13,0,0,0,3.75,2,9.63,9.63,0,0,0,4.63-2,16.09,16.09,0,0,0,3.87-4,15.94,15.94,0,0,0,1,1.75q-1.25,1.25-2.75,2.5l-2,1.5-.25.25v.25a14,14,0,0,0-2.75,8,8.77,8.77,0,0,0,1.25,4.75,3.75,3.75,0,0,0,3.25,2q4,0,6-7l1,2.5q1.25,2.75,3.5,2.75,3.5-.25,6.25-6.5a36.18,36.18,0,0,0,2-6.75,33.1,33.1,0,0,0,3.25,7,27.36,27.36,0,0,0,3.75,4.75l2.12,1.25a3.3,3.3,0,0,0,1.62.5h.25a1.86,1.86,0,0,0,1.12-.5,1.58,1.58,0,0,0,.63-1.25q.25-1.25.37-2.38a18.93,18.93,0,0,0,.13-2.12q0-12-10.75-26.5a24.08,24.08,0,0,1,1.62-4q1.12-2.25,2.5-4.75t2.88-5.12q1.5-2.62,3-5.38,1,2,1.75,3.25a139.23,139.23,0,0,1,8,19.25Q142,220,139.74,226a28.38,28.38,0,0,0-1.75,8.5,9,9,0,0,0,.13,1.5,3.85,3.85,0,0,0,.63,1.5,2.45,2.45,0,0,0,2.25,1.25q3.5-.25,8-6.25,2.25-2.75,2.25-8a36.93,36.93,0,0,0-.75-6.88,70.27,70.27,0,0,0-2-7.87L157,190q1.75,4.25,3.5,9a153.11,153.11,0,0,0-2,22.25q0,3.25.25,5.75a43.14,43.14,0,0,0,.63,4.37,10.15,10.15,0,0,0,1.12,3.13q1.5,3.75,4.75,3.75,3.75,0,6.25-3.75,1-1.25,1-5.5,0-4-2.12-24.37t-2.12-33.38q0-3.5.25-6.5v-2l.25-2a25.16,25.16,0,0,0,.25-3.5V156q.25-1.75.75-4.25.25-1.75.5-3t.5-2.12a5.45,5.45,0,0,0,.25-1.38l.25-.25v-1a108.89,108.89,0,0,1,5.38-17.75q3.63-9.25,10.12-22.12t14.75-27.75q8.26-14.88,21.25-37.12a11.16,11.16,0,0,0,2.38-.75,12.46,12.46,0,0,0,1.88-1,8.33,8.33,0,0,0,1.25-1,9.18,9.18,0,0,0,.87-1,6.22,6.22,0,0,1,.63-.75A1,1,0,0,0,230,34V32Zm-9,.5a1.44,1.44,0,0,1-.5,1,5.37,5.37,0,0,1-1.88,1q-1.38.5-3.25,1t-4.87,1q-3,.5-6.75,1,1.75-4.75,3.25-9.5,14,2.25,14,4.5ZM167.26,156.28q-.25,1.75-.63,3.63t-.87,5.12a31.67,31.67,0,0,1-1.38,3.37q-.87,1.87-2,4.37a50.26,50.26,0,0,0-1.88,4.75l-2.5,6.25A126.79,126.79,0,0,0,153.25,157q2.5-4.75,5.25-9.88T164.25,137a22.46,22.46,0,0,0,.37,2.62q.37,2.12.75,3.75t.63,3.37a33.36,33.36,0,0,1,1,5.12,39,39,0,0,1,.25,4.37Zm-14.74-1.5q-1.5-4.75-5-14.75-1.25-3-2.38-5.5a37.78,37.78,0,0,0-2.38-4.5,43.92,43.92,0,0,1,3.37-5.25Q148,122.27,150,120q1.25-1.75,3.13-4t3.87-4.75q2.5,6.75,4,11.87a93.73,93.73,0,0,1,2.5,11.13q-2.75,5-5.5,10.12t-5.5,10.38Zm-39.75,33.5a19.57,19.57,0,0,1,1,6.25q0,1.25-.13,2.62t-.37,2.75a22.12,22.12,0,0,1-.63,2.62q-.38,1.25-.87,2.5t-.87,2.38q-.38,1.13-.87,2.38l-.87,2.25q-.38,1-.87,2a15.58,15.58,0,0,0-.75,1.75A46.81,46.81,0,0,0,98.27,207l-.25-.5-.25-.25A32.44,32.44,0,0,1,101.53,196q3.25-5,9.25-12.5,1.25,2.75,2,4.75ZM82.27,179v-4.75l-.25-5-.5-5q.25,2,.87,6.5t.87,6.75a36.4,36.4,0,0,0,.75,3.75,9.18,9.18,0,0,0-.87,1,4.55,4.55,0,0,0-.63,1.25V179ZM51.51,27q1.75,3.5,3.5,8,.5,1.25.75,1.75-4-.5-7.25-1a18.59,18.59,0,0,1,.5-4.5A17.56,17.56,0,0,1,50.76,27h.76ZM150,46.27q.75,8.75,1.38,16.87t.75,12.13q.12,4,.37,9.75,0,6.75.25,9.5a65.8,65.8,0,0,0,1,6.62A49.91,49.91,0,0,0,156,109l.25.25q-2.25,3-4.25,5.38t-3.5,4.13q-1.75,2.25-3.5,4.63t-3.25,4.87q-2-2.75-3.63-4.63a58.49,58.49,0,0,0-5.5-5.25q-3.88-3.37-4.25-3.75l-.75-.75-.87-.63V112a65.63,65.63,0,0,1,3.13-19.37Q133,82.53,138,69.53a193,193,0,0,0,7.5-23.25Zm-3-6a84.3,84.3,0,0,0,1.5-9q.5,4.75,1,9H147Zm10.5,67.24a40,40,0,0,1-2.5-9.38q-.49-4.13-.75-13.38-.5-19-2.5-38.5,27.5-.5,45.25-2.25-2.25,4.25-4.75,8.87t-5.12,9l-5.25,8.75-5.25,8.5q-5.25,8.5-5.12,8t-5,7.5q-5.13,8-4.75,6.75t-4.25,6.12ZM125,111.27a14,14,0,0,1-2.25-5.5q-.25-1-.63-2.62t-.75-3.63q-.36-2-1-4.5l-1.5-5.88Q118,85.76,117,82t-1.75-7.5q-.74-3.75-1.12-7.37t-.63-6.38q-.25-2.76-.5-6.5t-.25-5.75a21.76,21.76,0,0,0-.25-2.25q7.75.25,15.5.25h15.75Q141.77,54,132,81q-6.75,18.25-7,30.25Zm-14-62.5q0,1.5.13,4t.25,4.5q.12,2,.37,4.5l.5,4.87q.25,2.38.75,4.87t1,5.38q.5,2.88,1.25,5.62a56.22,56.22,0,0,1,2,7q.76,3.5,1.38,5.88t1,4.37q.38,2,.75,3.75t.63,2.75a15,15,0,0,0,1.38,3.87,19.32,19.32,0,0,0,2.38,3.37q-1,1.5-2,2.88t-1.88,2.38l-1.62,1.88q-.75.87-1.62,1.75l-1.38,1.38L114.9,125q-1.38,1.25-1.38,1a35.64,35.64,0,0,0-4,4.75,59.78,59.78,0,0,0-4.5-7q-2.75-3.74-5-6.25t-5-5.38q-2.75-2.87-3.5-3.63a15.21,15.21,0,0,0-1.75-1.5l-.5-.5q1.5-15.75,2.5-32Q92,69.78,92,62.28v-6.5q0-6,.25-10,4.25.25,8.87.37t9.62.13a15.39,15.39,0,0,0,.25,2.25v.25ZM85,177.28q-.25-1.75-.5-3.87l-.5-4.13-.5-4.13q-.26-2.12-.63-4.63t-.87-5q.5-3.5,2.5-13.5l.25-.25a142,142,0,0,1,11,16,18,18,0,0,1-2.25,2.75,48,48,0,0,0-8,18.75,16.32,16.32,0,0,0-.5-2Zm-7.25-38.51-.25.25q-.5-2.75-1.5-6.5a61.58,61.58,0,0,1,7.25,7.5,4.79,4.79,0,0,0-.25,1.5l-2,9.25A105.42,105.42,0,0,0,77.77,138.77Zm7.25.75a290.09,290.09,0,0,0,4-30.75,71.08,71.08,0,0,1,7.75,8,90.38,90.38,0,0,1,11.75,15.5,49.8,49.8,0,0,0-4.25,9.75,80.57,80.57,0,0,1-3.5,7.87,46,46,0,0,1-4,6.38A145.4,145.4,0,0,0,85,139.52Zm5.25-77.25q0,7.25-.25,12.25-.25,2.75-.37,5.62T89.27,86l-.5,6.12-.5,6.25-.5,6.38a.74.74,0,0,0-.25-.5l-.5-.5q-3.25-4-6.5-8.87A134,134,0,0,1,72.9,81.27,89.37,89.37,0,0,1,66.28,64Q63.53,53.27,60,43.52q6.25.75,13.88,1.38t16.63.87a43.84,43.84,0,0,0-.25,4.75V62.27Zm2.5-22.75a38.21,38.21,0,0,1,5-15.25q3.75-.25,4.75-.25a34.79,34.79,0,0,1,4.75,7.75,36.13,36.13,0,0,1,2.5,8.25q-9,0-17-.5Zm-1.75,0Q71.76,38.77,57.77,37q-2.25-5.75-4.25-10.25Q70.77,25,95.77,24.28a29.24,29.24,0,0,0-3.13,7A46.91,46.91,0,0,0,91,39.52ZM58,43.27a208,208,0,0,1,6.5,21.25,100.18,100.18,0,0,0,8,20A114.82,114.82,0,0,0,81.14,99q3.38,4.5,6.38,8-1.75,19.5-3.75,30.75a96,96,0,0,0-8.25-8.25q-6-26-12.25-47a223.24,223.24,0,0,0-7.63-22.38A181.85,181.85,0,0,1,49.26,42Q53.51,42.77,58,43.27ZM86.27,181.53l.25-.25L87,181v-.5a46.25,46.25,0,0,1,8-18.75,6.58,6.58,0,0,1,.87-1.25q.63-.75.87-1,2,3.25,3.37,5.38t2.62,3.87a73.92,73.92,0,0,1,7.25,13q-4,5-6.25,7.75h0q-2.75,3-5.25,5.88T94,201a39.4,39.4,0,0,1-5.25-9.38,80.84,80.84,0,0,1-3-9.88H86ZM98.51,198a42.37,42.37,0,0,0-2.25,6.5L95,202.77Q96.76,200.28,98.51,198Zm5.75-30.25q-2-2.75-6.5-9.75a53.42,53.42,0,0,0,8-15.25q1-2.75,1.88-4.87a20.92,20.92,0,0,1,1.88-3.63v.25a48.62,48.62,0,0,0,3.5,5.88,41.46,41.46,0,0,0,3.25,4.25q1.26,1.37,3.5,3.87,5.25,5.5,7,9.25-1.75,2.75-3,5a89.27,89.27,0,0,1-6,8.87q-3,3.87-6.5,8.63a69.45,69.45,0,0,0-7-12.5Zm17-20.5q-7.25-7.5-10.25-13.5a1.12,1.12,0,0,0-.13-.5l-.37-.75a17.37,17.37,0,0,1,2-2.88,17.81,17.81,0,0,1,2.25-2.12q.5-.5,1.5-1.38t1.62-1.5l1.75-1.75,2-2.12q2-2.12,2-2.62t2.38-3.37l1,1q1,1,2.25,2.12t2.25,1.88a20,20,0,0,1,2,1.75l1.88,1.88,1.75,1.88a9.93,9.93,0,0,1,1.75,2.12,14.78,14.78,0,0,0,1.88,2.62q-3,5-8,15.25-3.25,7-5,10.5a47.81,47.81,0,0,0-6.5-8.5Zm20.5-15.5a44.47,44.47,0,0,1,2,4q1,2.25,2,4.75,4.25,11.25,5.75,16.5a33.43,33.43,0,0,0-1.75,3.5q-.75,1.75-1.38,3t-1.12,2.5a9.8,9.8,0,0,1-.75,1.62,7,7,0,0,0-.5.87l-1.12,1.88-1,1.75a21.62,21.62,0,0,1-1.5,2.38,27,27,0,0,0-1.62,2.5q-1.12,1.87-1.75,2.88T137,183a96,96,0,0,1-4.25-11.13q-1.75-5.62-3.5-12.37a13.32,13.32,0,0,0-.75-1.75q2.25-3.75,6.38-12.63a142.46,142.46,0,0,1,6.88-13.38Zm16.5-22.25a505.15,505.15,0,0,0,41-65.75h.5q-6.5,18.75-9.5,27.63t-6.62,22q-3.62,13.13-3.87,19.37Q173,119,165,132q-1.25-5.5-2.75-10.5t-4-12Zm-7-69.5q-.25-1.75-.5-3.63t-.5-3.87q-.25-2-.5-4.13t-.5-4.37q12.75.25,23.75.75T191.5,26q7.49.75,13.5,1.75-2.25,5-4.75,10Q182.26,39.78,151.26,40Zm-3.74-16q-.75,8-2.25,16.25h-33.5a38.62,38.62,0,0,0-7-16.25q5.75,0,11.87-.13t12.63-.13h9.38l8.87.25ZM33.26,30.77q0-.25.63-.5t1.88-.63q1.25-.37,3-.75T43,28.15q2.5-.37,5.5-.87a25.29,25.29,0,0,0-1.75,8Q33.26,32.78,33.26,30.77ZM39.76,40q1.75.5,3.63.87t4.13.87q1,5.25,6.25,18.75t8,22.5q2.75,9.75,5.5,20.5Q66,99.77,64.52,95.77T61.39,88q-1.62-3.75-3.25-7.75T54.77,72.5Q53,68.75,51.51,65.25t-3-6.75q-1.48-3.25-2.75-6t-2.5-5.38Q42,44.49,41.26,43Zm40.5,186.25a9.78,9.78,0,0,1-1.75,3.13,4.41,4.41,0,0,1-2.75,1.38,4.15,4.15,0,0,1-1.25.25,2,2,0,0,1-1.5-.5,4.65,4.65,0,0,1-.5-2.5,34.55,34.55,0,0,1,1.25-7.75q1.25-5,3.5-12.5t3.5-12v-.25q0,3,.25,7.13t.25,7.25v5.38q0,3.75-.25,6.5a25,25,0,0,1-.75,4.5ZM83,219v-3.75q0-3-.25-12t-.25-15a10.6,10.6,0,0,1,.75-2.62,11.22,11.22,0,0,1,1.25-2.12,56.26,56.26,0,0,0,8.25,19.25q-1.25,2-2.5,3.87a32.42,32.42,0,0,0-2,3.37l-1.75,3.5A19.11,19.11,0,0,0,83,219Zm5.75,13.25L87,233q-1.25,0-2.5-2a9.31,9.31,0,0,1-1.25-5q0-6,4.75-11.5v-.25a5.38,5.38,0,0,0,1-1.75,33.49,33.49,0,0,1,2-3.87,43.42,43.42,0,0,1,3-4.37,6.09,6.09,0,0,0,.75,1.12,14.43,14.43,0,0,0,1,1.12q-.75,3.25-2,10t-2.38,10.62q-1.12,3.87-2.62,5.12Zm10.5-8.76a2.63,2.63,0,0,1-2.25-1,10.82,10.82,0,0,1-1-5.25,38.27,38.27,0,0,1,.5-5.75v-.25l.5-3A9.19,9.19,0,0,1,99.26,210a3.12,3.12,0,0,1,.87.63,10,10,0,0,0,1,.87,10.43,10.43,0,0,1,1.12,1l1.12,1.12,1.12,1.25a7.85,7.85,0,0,1,1.12,1.38,9.25,9.25,0,0,0,1.12,1.5,10.64,10.64,0,0,1-6.25,5.75H99.26Zm9.5-6a37.17,37.17,0,0,1,1.62-4.25l2.38-5.62a38.92,38.92,0,0,0,1.88-6.12,30.85,30.85,0,0,0,.87-7v-.25a26.86,26.86,0,0,1,1.5,8.5,21.73,21.73,0,0,1-1.88,9.12,37.57,37.57,0,0,1-4.63,7.63q-.25,0-.5.5a4.19,4.19,0,0,0-.63-1.25,4.19,4.19,0,0,1-.63-1.25ZM110,232.78q-1.75,6.25-4.5,6a3.1,3.1,0,0,1-1.75-1.25,6.63,6.63,0,0,1-1-3.75,5.58,5.58,0,0,1,.13-1.12q.13-.62.25-1.38a8.77,8.77,0,0,1,.37-1.5,12.78,12.78,0,0,1,.63-1.5,13.06,13.06,0,0,1,.87-1.5,6,6,0,0,0,1-.63q.5-.38,1.5-1.25t2-1.88a14.94,14.94,0,0,1,1.25,5.75,11.34,11.34,0,0,1-.75,4Zm10.75-1.26a13.12,13.12,0,0,1-2.38,4A3.69,3.69,0,0,1,116,237q-1,0-2-2a11,11,0,0,1-.5-1.25q-.26-.75-.5-1.62a12.83,12.83,0,0,1-.37-2.12q-.13-1.25-.37-2.5a12.32,12.32,0,0,0-.37-3,10.22,10.22,0,0,0-1.12-2.75q8-8.75,8-19a32.74,32.74,0,0,0-.25-4,7.79,7.79,0,0,1,.37.87,2,2,0,0,0,.5.75l.63.63v.25l2.5,2.5a18,18,0,0,0,2.25,2.75.22.22,0,0,0-.25.25V207a28.91,28.91,0,0,0-1.12,4.63,31.39,31.39,0,0,0-.37,4.87v1.75l.25,1.75a39.11,39.11,0,0,1-2.5,11.5Zm15,1.26a32.74,32.74,0,0,1-.25,4q-.25.5-.5.5a5.19,5.19,0,0,1-2.5-1.5,16,16,0,0,1-3-3.5,28.73,28.73,0,0,1-2.75-5.5A30.32,30.32,0,0,1,125,220v-3h-.25v-.5a27.52,27.52,0,0,1,1.25-8.25q9.75,13.75,9.75,24.5Zm-10.25-28a31.47,31.47,0,0,0-4.25-4.75,40.16,40.16,0,0,1-3.5-5.75q-1.49-3-3.25-6.75-.5-1-1-2.25v.25a11,11,0,0,1-.5-1.25,11,11,0,0,0-.5-1.25l-.5-1q1.5-2,2.5-3.25l2.5-3.13,2.75-3.63q2.75-3.63,2.62-3.87t2.88-4.37q1-1.75,2.25-3.75,1.25,4.5,2.38,8.25t2.62,8.13A82.4,82.4,0,0,0,136,185q-3.5,6-6.25,11a79.32,79.32,0,0,0-4.25,8.75Zm24,19.74a14.54,14.54,0,0,1-.5,4,12.59,12.59,0,0,1-1.25,3q-4.25,5.5-6.75,5.25h-.37l-.37-.25a3.55,3.55,0,0,1-.5-2,13.12,13.12,0,0,1,.5-3.37q.5-1.87,1.25-4.37,2-5.75,5.75-14.5A42.7,42.7,0,0,1,149.51,224.52Zm-2-17.25a120,120,0,0,0-7.5-17.75,10.74,10.74,0,0,0-.63-1.5l-.75-1.5L138,185l.25-.25q8.25-14.25,9.5-15.5h0q0-.25,3-6.75a26,26,0,0,0,1.5-3,119.82,119.82,0,0,1,4,27.75q-.75,1.75-3.87,8.87ZM170,233.53q-2,3.25-4.75,3a4,4,0,0,1-1-.13,2.42,2.42,0,0,1-1.12-.87,9.13,9.13,0,0,1-1.12-1.75,21.59,21.59,0,0,1-1.25-4.87,49.16,49.16,0,0,1-.5-7.63A162.31,162.31,0,0,1,161.52,203q1.25,4,2,6.12a36.64,36.64,0,0,0,2.5,5.25,52.74,52.74,0,0,0,4,6.12h.25q.5,5.5.5,8.5,0,3.5-.75,4.5Zm0-16q-1.25-1.75-2.25-3.5a33.29,33.29,0,0,1-1.88-3.87q-.87-2.12-1.25-3.37t-1.25-4a41.43,41.43,0,0,1-1.12-4,7.68,7.68,0,0,1,.13-1,7.68,7.68,0,0,0,.13-1q2.25-14.5,4-25.5,0,12,3.5,46.25Zm-9-22.25a43.8,43.8,0,0,0-3-7v-.5q2.75-6.25,4.25-9.75.5-1.25,1-2.62a28.26,28.26,0,0,1,1.25-2.88ZM168.26,149a2.7,2.7,0,0,0-.13-.87,2.7,2.7,0,0,1-.13-.87,2.26,2.26,0,0,0-.25-1q-.25-1.5-.63-3.25t-.63-3q-.25-1.25-.5-2.75t-.5-2.5q7.5-12.75,13.75-19a179.32,179.32,0,0,0-6.88,17.62A137.77,137.77,0,0,0,168.24,149Zm13.5-38.75q1.75-13.75,20-66.75,6-.75,10.5-1.62T220,40.28q-14.25,24.5-23.37,41.12T181.77,110.27Z'\n\nexport const NET = netball\n","export const pesapallo =\n 'M247.1 247c-1.9 2.1-4.3 3.8-6.9 5-2 .9-4.2 1.3-6.4 1-1.7-.3-3.3-1.1-4.5-2.3-31-31.2-57.2-59.8-78.5-85.8-9.5-11.7-19.3-23.1-29.4-34.4s-17.8-19.6-23.1-25.1L18.8 26c-1.9-2-4-3.7-6.3-5.3-1.7-1-2.9-1.4-3.5-1.1-.7.3-1.5.3-2.3.3a3.84 3.84 0 0 1-2.3-1.1c-.5-.4-.8-.9-1.1-1.5-.2-.5-.4-1-.4-1.5 0-.6.1-1.1.4-1.6.3-.7.5-1.2.7-1.6.3-.6.7-1.1 1.2-1.6.6-.7 1-1.2 1.4-1.5L8.1 8c1.2-1.2 2.1-2.1 2.8-2.7.8-.7 1.6-1.2 2.5-1.8.9-.5 1.9-.7 2.9-.6a4.61 4.61 0 0 1 2.6 1.5A3.84 3.84 0 0 1 20 6.7c.1.8 0 1.5-.2 2.3-.2.7.1 1.8 1.1 3.5 1.5 2.3 3.2 4.4 5.2 6.2v.3h.3v.3h.3v.3h.3l.3.3v.1h.3v.3h.3l.3.3v.3H28v.1l.3.3h.3v.3l.3.3h.1l.3.3v.3h.3l.3.3v.3l.1-.1h.3l.5.5v.3l.5.5h.3l.5.5v.2l.8.8h.1l1.8 1.8v.3l1.5 1.5.5.3 2 2 .2.3.8.8.5.3.8.8.3.5.5.5.5.3.5.5.1.3.3.3.5.3.5.5.3.5.3.3.5.3.3.3.3.5.5.3.3.3.2.4.5.3.3.3.2.4.3.3.5.3.2.4.3.3.5.3.3.3.3.5.5.3.1.3.3.3.5.3.2.4.3.3.5.3.2.4.5.3.3.3.2.4.5.3.3.5.5.3.3.5.3.3.5.3.3.5.5.3.3.5.5.3v.2l.5.3.3.5.5.3 1 1 .3.5.5.3.3.5.5.3 1.3 1.3.3.5.5.3v.2l.5.3.3.5.5.3.3.5.5.3.3.5.5.5.5.3.3.5.5.3.3.5.5.3.5.5.3.5.5.3.3.5.5.5.5.3.3.5.5.3.5.5.3.5.5.3.3.5.5.3.3.5.5.5.5.3.5.5.3.5.5.3.5.5.3.5.5.3.5.5.1.3.5.5.5.3.5.5.3.5.5.3 1 1 .3.5.5.3 1 1v.1l.5.5.5.3.5.5.3.5.5.5.5.3 1 1 .1.4.5.5.5.3 1 1 .3.5 1 1 .5.3 1.6 1.5.3.5 1 1 .5.3 1 1 .3.5.5.3.3.3c19 19.2 41.6 39.4 67.8 60.8 11.7 9.5 24.8 21 39.4 34.4l30.8 28.8 15.6 15.4c2 1.7 2.8 4.2 2.3 7.6s-2.5 6.8-6 10.1l-.1-.1zM59.2 182.8c-16.6 0-30 13.4-30 30s13.4 30 30 30 30-13.4 30-30-13.5-30-30-30zm0 54.1a23.26 23.26 0 1 1 0-46.6 23.26 23.26 0 0 1 23.3 23.3c0 12.9-10.5 23.3-23.3 23.3z'\n\nexport const PES = pesapallo\n","export const raceall =\n 'M29.9155 19.887C27.8041 19.7188 25.3885 18.7261 24.527 17.481C23.1081 16.623 20 16.5389 18.6149 17.7334C15.8615 17.481 15.777 19.1972 15.4223 19.7861C15.3378 19.9375 15.1182 20.1898 14.7804 20.4759C15.1351 16.9763 15.7432 13.1571 15.7432 13.1571C15.7432 13.1571 14.0878 11.2727 15.2196 9.45558C14.4257 11.5755 15.6757 13.7291 18.1419 13.5104C21.0135 14.7722 21.4696 15.277 21.4696 15.277C21.4696 15.277 21.9932 16.7071 23.1926 16.7071C24.3919 16.7071 24.1047 16.5389 23.9865 16.1351C24.4426 16.2528 24.6791 16.0173 25.1858 15.1592C25.7095 14.3011 26.0473 14.4189 25.3041 12.8206C24.5608 11.2222 21.3007 6.8309 19.9155 5.56903C18.5304 4.30717 18.598 3.63417 18.598 3.63417C18.598 3.63417 19.3412 2.27136 19.2905 0.959018C18.598 1.58154 18.2095 2.38913 18.2095 2.38913C18.2095 2.38913 18.3277 1.12727 17.8716 0C17.2973 1.14409 16.3851 2.62468 16.5034 3.3145C14.6115 2.23771 12.2128 2.79293 11.5709 3.14625C13.0574 3.48275 14.0878 4.12209 14.0878 4.12209C14.0878 4.12209 11.7399 3.36497 8.41216 4.34082C10.1351 4.62684 10.6419 4.86239 10.6419 4.86239C10.6419 4.86239 7.60135 5.48491 5.94595 6.629C5.94595 6.629 7.5 6.46075 8.125 6.51123C6.30067 6.8982 3.83446 8.96766 2.75338 10.566C4.86486 9.5397 5.625 9.65748 5.625 9.65748C5.625 9.65748 4.02027 10.6838 2.58446 13.7123C1.28378 16.4211 0.236486 16.2697 0.0337838 16.2192C0.304054 16.3033 2.33108 16.9258 3.71622 15.8154C5.38851 17.3969 9.03716 22.5285 12.3311 24.2446C14.2061 25.5738 17.4324 27.0376 19.0203 25.4056C19.4764 24.9345 19.9493 24.5643 20.4392 24.2783C22.5676 23.0164 24.8311 23.3529 26.3682 23.538C28.2432 23.7567 28.0574 23.4034 28.0574 23.151C27.9899 23.151 27.9054 23.151 27.8209 23.1342C27.8885 23.0501 28.0068 22.8482 28.0574 22.6295C28.125 22.3771 27.9392 22.192 27.8041 22.4949C27.652 22.7977 27.2635 22.7472 27.2635 22.7472C27.2635 22.7472 27.0608 22.5622 27.0608 22.5285C27.0608 22.478 26.7399 22.5117 26.7399 22.5117L26.5541 22.192L26.1486 22.3266L26.1655 22.1584H25.8108L25.6926 21.9733L25.3716 21.9901L25.2196 21.7041L24.848 21.805L24.8986 21.3508L24.6791 21.4181L24.527 21.233L24.0709 21.6031C24.0034 21.5527 23.9527 21.4517 23.9865 21.3171C24.375 21.132 24.7635 20.9974 25.152 20.9133L25.1858 21.0984L25.6588 20.9974L25.9459 21.1152L26.1318 21.0311L26.3851 21.0816L26.6554 20.947L26.8581 21.2498L27.1115 21.1152L27.5169 21.4181L27.7365 21.2835L28.0574 21.4685L28.2264 21.2498L28.2939 21.132C28.4628 21.1993 28.5473 21.233 28.5473 21.233L28.3615 21.906C28.3615 21.906 28.75 21.7377 28.9189 21.233C30.1182 21.2835 30.0845 20.0216 29.9155 19.887ZM0.0337838 16.2192C0.0168919 16.2192 0 16.2024 0 16.2024C0 16.2024 0.0168919 16.2192 0.0337838 16.2192Z'\n\nexport const allrace = raceall\n","export const rugby =\n 'M243.67,77.09a49.12,49.12,0,0,1-3.13,5.75q-1.88,3-3.87,5.62t-5.5,6.62q-3.51,4-6.12,6.75t-7.75,8q-5.14,5.25-8.37,8.63t-10.12,10.12q-6.89,6.74-11.13,11-26.5,26.5-59.63,56.75t-41.38,34.5q-8.5,4.75-8.5,9t7.25,6q4.25,1,5.62,1.25t8.25.87a50,50,0,0,0,11.87-.13q5-.76,14.25-3a86.16,86.16,0,0,0,17.88-6.5,219.21,219.21,0,0,0,20.37-11.75,214.34,214.34,0,0,0,23.5-17.5,166.76,166.76,0,0,0,24.75-25.62,154.37,154.37,0,0,0,17-26.75,188.25,188.25,0,0,0,10.25-25.5,119.8,119.8,0,0,0,5.12-23.25,135,135,0,0,0,.87-18.38,58.5,58.5,0,0,0-1.5-12.5Zm-184.5,17a134.5,134.5,0,0,0-18.38,43.63q-4.87,22.38-4.37,38.62.5,10.75,3.37,17.12t7.13,7.37a15.49,15.49,0,0,0,4.5-.25,69.78,69.78,0,0,0,8.5-2q5.25-1.51,11.63-3.75t14.25-5.62q7.87-3.38,16.25-7.37t17.88-9.62q9.5-5.63,18.5-11.63,29.25-20,46.62-38.25a260.42,260.42,0,0,0,29.62-37q9.5-14,11.25-27.87t-4.5-17.88q-54.75-30.25-110.5,4A161.07,161.07,0,0,0,62.17,89.82a51.48,51.48,0,0,0-3,4.25Zm-31.5,93.26a102.68,102.68,0,0,1,.63-10.88q.63-5.88,1.88-13.75a124.91,124.91,0,0,1,3.75-16.25q2.51-8.37,5.88-17.88a129.81,129.81,0,0,1,8.75-19.25q5.38-9.75,11.87-19.63a166.81,166.81,0,0,1,15.5-19.87,211.63,211.63,0,0,1,19.5-19A201.53,201.53,0,0,0,61.3,86.46q-14.37,19.38-21.62,38a219.76,219.76,0,0,0-10.5,34,141.91,141.91,0,0,0-3.25,29.12,105.47,105.47,0,0,0,1.62,20q1.62,8.25,4.13,12.5a24.34,24.34,0,0,0,4.87,6.25,13.44,13.44,0,0,0,5.12,2.75,15.85,15.85,0,0,1-5.5-4.87,33.28,33.28,0,0,1-4.37-8.5,66.63,66.63,0,0,1-3-12.37,103.32,103.32,0,0,1-1.12-16Zm14,41.75a6.64,6.64,0,0,0,.63,4.37,17.6,17.6,0,0,0,4.37,5.62,38.32,38.32,0,0,0,8.25,5.62,49.49,49.49,0,0,0,12.87,4.25,84.9,84.9,0,0,0,17.12,1.62,101.54,101.54,0,0,1-20.25-3.63q-8.75-2.62-13.38-6a32.75,32.75,0,0,1-6.88-6.38,14.11,14.11,0,0,1-2.75-5.5ZM237.16,60.83q0,10.75-18,33.88a406.8,406.8,0,0,1-43.75,47.13,562.22,562.22,0,0,1-65.5,52q-36.5,25-68.25,35.25,15-3.25,34.88-13.25a327.47,327.47,0,0,0,38.75-23q18.87-13,34.88-25.62t27-23.13a423,423,0,0,0,42.75-47.37q18.75-24.37,17.25-35.87ZM32.92,229.09a14.13,14.13,0,0,0,2.88,1.5,2.12,2.12,0,0,0,1.62-.13,3,3,0,0,0,1.25-1.62l-.75.37-2,.5A2.8,2.8,0,0,1,32.92,229.09Z'\n\nexport const RGL = rugby\n","export const rugbyunion =\n 'M189.77,240.5V179.25H194v-12.5H62v12.5h4.25V240.5H49.75V179.25H54V15.5h8V158.75H194V15.5h8V179.25h4.25V240.5H189.77Z'\n\nexport const RGU = rugbyunion\n","export const snooker =\n 'M218,229.24a22.45,22.45,0,1,1,22.5-22.5,22.32,22.32,0,0,1-3,11.25,21.76,21.76,0,0,1-8.25,8.25A22.32,22.32,0,0,1,218,229.24Zm-45,0a22.32,22.32,0,0,1-11.25-3,21.76,21.76,0,0,1-8.25-8.25,22.32,22.32,0,0,1-3-11.25,22.62,22.62,0,0,1,22.5-22.5,20.65,20.65,0,0,1,4.5.5,31.86,31.86,0,0,1,4.25,1.25,18.75,18.75,0,0,1,3.87,2,21.64,21.64,0,0,1,6.12,6.12,18.75,18.75,0,0,1,2,3.87,31.86,31.86,0,0,1,1.25,4.25,20.65,20.65,0,0,1,.5,4.5,22.62,22.62,0,0,1-22.5,22.5Zm-45,0a22.32,22.32,0,0,1-11.25-3,21.76,21.76,0,0,1-8.25-8.25,22.32,22.32,0,0,1-3-11.25,22.45,22.45,0,0,1,38.37-15.87A22.5,22.5,0,0,1,128,229.24Zm-45,0a22.5,22.5,0,0,1,0-45,22.45,22.45,0,0,1,7.13,1.12,20.43,20.43,0,0,1,6.12,3.25,27.27,27.27,0,0,1,4.87,4.87,20.58,20.58,0,0,1,3.25,6.12,22.12,22.12,0,0,1,1.12,7.13A22.62,22.62,0,0,1,83,229.24Zm-45,0a21.65,21.65,0,0,1-15.87-6.62,22.33,22.33,0,0,1,0-31.74A21.65,21.65,0,0,1,38,184.25a21.65,21.65,0,0,1,15.87,6.62,21.65,21.65,0,0,1,6.62,15.87q0,12.75-10.75,19.25A22.72,22.72,0,0,1,38,229.25ZM195.5,190a22.62,22.62,0,0,1-22.5-22.5,24.24,24.24,0,0,1,.75-6.12A20.36,20.36,0,0,1,176,156a20.91,20.91,0,0,1,3.63-4.5,29.91,29.91,0,0,1,4.5-3.5,18.22,18.22,0,0,1,5.38-2.25,24.52,24.52,0,0,1,12,0A18.22,18.22,0,0,1,206.9,148a29.91,29.91,0,0,1,4.5,3.5A20.91,20.91,0,0,1,215,156a20.36,20.36,0,0,1,2.25,5.38,24.24,24.24,0,0,1,.75,6.12,21.64,21.64,0,0,1-3,11.13,23,23,0,0,1-8.25,8.25A21.62,21.62,0,0,1,195.53,190Zm-45,0a21.62,21.62,0,0,1-11.25-3.13,23,23,0,0,1-8.25-8.25,21.64,21.64,0,0,1-3-11.13,22.51,22.51,0,0,1,1.75-8.87,22.21,22.21,0,0,1,4.75-7.13,21.88,21.88,0,0,1,7.25-4.75A22.81,22.81,0,0,1,150.5,145a21.87,21.87,0,0,1,15.87,6.5A21.38,21.38,0,0,1,173,167.37,22.62,22.62,0,0,1,150.5,190Zm-45,0A22.62,22.62,0,0,1,83,167.37a21.38,21.38,0,0,1,6.62-15.87A21.87,21.87,0,0,1,105.5,145a22.45,22.45,0,0,1,7.13,1.12,22.22,22.22,0,0,1,6.12,3.13,24.07,24.07,0,0,1,4.87,4.75,20.26,20.26,0,0,1,3.25,6.25,23.29,23.29,0,0,1,1.12,7.25,21.64,21.64,0,0,1-3,11.13,23,23,0,0,1-8.25,8.25A21.62,21.62,0,0,1,105.5,190Zm-45,0A22.62,22.62,0,0,1,38,167.37a21.38,21.38,0,0,1,6.62-15.87A21.87,21.87,0,0,1,60.51,145a21.87,21.87,0,0,1,15.87,6.5A22.44,22.44,0,0,1,80,178.62a23,23,0,0,1-8.25,8.25A21.62,21.62,0,0,1,60.51,190ZM173,150.49a22.75,22.75,0,0,1-8.75-1.75A22,22,0,0,1,157,144a21.66,21.66,0,0,1-4.75-7.25,23.07,23.07,0,0,1-1.75-8.75A22.62,22.62,0,0,1,173,105.5a22.75,22.75,0,0,1,8.75,1.75A22,22,0,0,1,189,112a21.66,21.66,0,0,1,4.75,7.25A23.07,23.07,0,0,1,195.5,128a22.62,22.62,0,0,1-22.5,22.5Zm-45,0a22.45,22.45,0,0,1-15.87-38.37,22.45,22.45,0,1,1,31.74,31.74A21.65,21.65,0,0,1,128,150.49Zm-45,0A22.62,22.62,0,0,1,60.51,128a22.32,22.32,0,0,1,3-11.25,21.76,21.76,0,0,1,8.25-8.25,22.32,22.32,0,0,1,11.25-3,22.45,22.45,0,0,1,15.87,38.37A21.65,21.65,0,0,1,83,150.49ZM150.5,111a21.87,21.87,0,0,1-15.87-6.5A21.38,21.38,0,0,1,128,88.62a22.5,22.5,0,1,1,45,0,21.38,21.38,0,0,1-6.62,15.87A21.87,21.87,0,0,1,150.5,111Zm-45,0a22.75,22.75,0,0,1-8.75-1.75,21.49,21.49,0,0,1-12-11.87A22.76,22.76,0,0,1,83,88.5a23.32,23.32,0,0,1,.75-5.88A20.16,20.16,0,0,1,86,77.24a21.26,21.26,0,0,1,3.63-4.5,29,29,0,0,1,4.5-3.5,21.51,21.51,0,0,1,5.38-2.38,20.84,20.84,0,0,1,6-.87,21.62,21.62,0,0,1,11.25,3.13A23,23,0,0,1,125,77.36a22.62,22.62,0,0,1,0,22.51A22.67,22.67,0,0,1,105.51,111ZM128,71.74a21.65,21.65,0,0,1-15.87-6.62,21.65,21.65,0,0,1-6.62-15.87,21.65,21.65,0,0,1,6.62-15.87,22.33,22.33,0,0,1,31.74,0,21.65,21.65,0,0,1,6.62,15.87,22.32,22.32,0,0,1-3,11.25,21.76,21.76,0,0,1-8.25,8.25A22.32,22.32,0,0,1,128,71.74Z'\n\nexport const SNK = snooker\n","export const squash =\n 'M127.8 201.1c-3.7-3.8-8.7-5.9-14.2-5.8-3 0-5.8.7-8.4 1.7-7.3 3.8-11.2 9.6-11.2 17.8-.2 5.2 1.9 10.5 5.8 14.2 6.3 6.5 16.3 7.5 23.9 3 3-1.7 5.4-4.4 7.2-7.3 1.7-3 2.6-6.3 2.6-9.8-.1-5.2-2-10.1-5.7-13.8h0zm14.5-61.8c-36.9-4.2-83.9-62.4-84.9-63.5-11.4-14.2-4-39.2 16.3-55.4C94.2 4.1 120 2.6 131.4 16.7c2.8 3.5 68.9 87.9 32.9 116.9-6.1 4.6-13.4 6.5-22 5.7h0zM78.2 26C60.9 39.8 54 60.1 63 71.3h0c11.7 14.7 51.4 57.5 80.1 60.8 6.5.9 12.1-.7 16.6-4.2 25.3-20.3-16-83.9-34.2-106.6-3.1-4-8-6.3-13.6-6.8-10-1.4-22.6 2.8-33.7 11.5zm80.9 106.8l-86-107.3c-1.2-1.6-1-3.8.5-5.1 1.6-1.2 3.8-1 5.1.5l86 107.5c1.2 1.6 1 3.8-.5 5.1-.7.7-1.7.9-2.6.7-1.1 0-2-.5-2.5-1.4zm-26.4 3.7L58.1 43.1c-1.2-1.6-1-3.8.5-5.1 1.6-1.2 3.8-1 5.1.5l74.8 93.3c1.2 1.6 1 3.8-.5 5.1-.7.7-1.7.9-2.6.7-1.1.1-2-.4-2.7-1.1zm35.5-28.5L93.5 14.6c-1.2-1.6-1-3.8.5-5.1 1.6-1.2 3.8-1 5.1.5l74.8 93.5c1.2 1.6 1 3.8-.5 5.1-.7.7-1.7.9-2.6.7-1-.1-1.9-.5-2.6-1.3zm-45.8 24.4c-1.2-1.6-1-3.8.5-5.1l44-35.3c1.6-1.2 3.8-1 5.1.5 1.2 1.6 1 3.8-.5 5.1l-44 35.3c-.7.7-1.7.9-2.6.7-.9.1-1.8-.5-2.5-1.2zm-20.3-12.9c-1.2-1.6-1-3.8.5-5.1l56.5-45.1c1.6-1.2 3.8-1 5.1.5 1.2 1.6 1 3.8-.5 5.1L107.2 120c-.7.7-1.7.9-2.6.7-1.1 0-2-.5-2.5-1.2zM68.2 88.4c-1.2-1.6-1-3.8.5-5.1l67.1-53.8c1.6-1.2 3.8-1 5.1.5 1.2 1.6 1 3.8-.5 5.1L73.3 88.9c-.7.7-1.7.9-2.6.7-.9 0-1.8-.5-2.5-1.2zm-14-18.2c-1.2-1.6-1-3.8.5-5.1l66.8-53.3c1.6-1.4 3.8-1 5.2.5 1.2 1.6.9 3.8-.7 5.1L59.3 70.9c-.7.7-1.7.9-2.6.7-.9 0-1.8-.5-2.5-1.4zm30.3 34.3c-1.2-1.6-1-3.8.5-5.1l63.4-50.7c1.6-1.2 3.8-1 5.1.5 1.2 1.6 1 3.8-.5 5.1L89.5 105c-.9.7-1.7.9-2.6.7-1 0-1.9-.3-2.4-1.2zm143.3 123.9l-31.3-39c-.5-.7-.9-1.7-.7-2.6s.5-1.7 1.4-2.4l9.4-7.5c1.6-1.2 3.8-1 5.1.5l31.3 39c1.2 1.6 1 3.8-.5 5.1l-9.4 7.5c-.7.5-1.7.9-2.6.7h0c-1.3.1-2.2-.4-2.7-1.3zm5.6 11l-7.5-9.4c-1.2-1.6-1-3.8.5-5.1l13.1-10.5c.7-.5 1.7-.9 2.6-.7h0c.9.2 1.7.5 2.4 1.4l7.7 9.4c.5.7.9 1.7.7 2.6s-.5 1.9-1.4 2.4L238.2 240c-.7.5-1.7.9-2.6.7-.8-.2-1.7-.4-2.2-1.3zm-37.3-50.5L182.9 163c-16.8-14-34.8-22-46.3-24.6-1.9-.5-3.1-2.4-2.6-4.4s2.4-3.1 4.4-2.6c12.4 3 31.8 11.5 49.8 26.7.3.3.7.7.9 1l13.5 26.6c.9 1.7.2 4-1.6 4.9-.7.3-1.4.5-2.1.3a3.85 3.85 0 0 1-2.8-2zm10.4-6.5l-22.9-19.1c-.3-.3-.7-.7-.9-1-10.8-20.8-15-41.8-15.2-54.4 0-1.9 1.6-3.7 3.5-3.7 2.1 0 3.7 1.6 3.7 3.5.2 11.7 4 31.1 14 50.5l22.4 18.5c1.6 1.2 1.7 3.5.5 5.1-.9 1-2.1 1.4-3.1 1.2-.8.1-1.5 0-2-.6zM3 6.9h12.8v241.9H3V6.9zm88.3 192.7c-16.6-26.2-54.4-43.9-62.4-45.1l-4-1 1.7-3.8c.7-1.4 16.4-34.6 53.7-40.4l2.3.9c-31.3 7-44 30.1-47.7 39 10.7 3.7 47.5 12.9 72.4 39 .1-.2-13.2 2.3-16 11.4z'\n\nexport const SQS = squash\n","export const surfing =\n 'M240.6,15.4q-43.5,10-87.25,38.25A373.89,373.89,0,0,0,73.59,123.4q-36,41.5-55.75,87.75a29.18,29.18,0,0,0-2.25,6.25,7.39,7.39,0,0,0,.37,4.5,15.45,15.45,0,0,0,1.62,3,28.9,28.9,0,0,0,3.25,3.25q2.51,2.26,3.63,3.37t3.37,3.63a26.6,26.6,0,0,0,3.25,3.25,16.76,16.76,0,0,0,3,1.62,7.28,7.28,0,0,0,4.5.37,29.7,29.7,0,0,0,6.25-2.25,318.32,318.32,0,0,0,67.5-39.5,385.89,385.89,0,0,0,58.38-54.12,353.09,353.09,0,0,0,44-63q18.37-33.62,25.88-66.12ZM35.09,185.16q1.25-3,5.75-7.37t8.25-7.5a32.27,32.27,0,0,1,4-3.13,3.82,3.82,0,0,1-.75,1,26.17,26.17,0,0,0-1.75,2.12l-2.5,3.25L45,177l-3.5,3.5-3.25,2.88q-3.25,2.88-3.13,1.75Zm0,35.74a15.73,15.73,0,0,1,2.88-4.5,51.06,51.06,0,0,1,4.63-4.75q2.5-2.25,4.87-4.25t4-3.25l1.62-1.25-9,10.75q-5.75,6-9,7.25Zm18-18.5Q65.34,189.16,79,174.66t26.38-27.5q12.75-13,25.75-26t24.5-24.25q11.5-11.23,22.12-21.5t19-18.12q8.37-7.85,14.5-13.75t9.5-8.87l3.37-3q-9.75,10.75-26.62,28.63t-62,63.25q-45.13,45.38-82.38,78.88Zm35.74.5q-1.5,1.75-3.5,4.37a90.31,90.31,0,0,1-6.75,7.5q-4.76,4.87-7.75,6.12a15.73,15.73,0,0,1,2.88-4.5,51.06,51.06,0,0,1,4.63-4.75q2.5-2.25,4.87-4.25l3.87-3.25Z'\n\nexport const WRF = surfing\n","export const surfironman =\n 'M88,121.51H82.75a36,36,0,0,0,.5,5.25q.5,3.24,3,12.63a109.55,109.55,0,0,0,6.5,18,97.33,97.33,0,0,0,12.25,19A84.34,84.34,0,0,0,124,194v46.5l8-9.25V194a86,86,0,0,0,19-17.5,90.84,90.84,0,0,0,12.25-19.13,124.3,124.3,0,0,0,6.5-17.88,107.45,107.45,0,0,0,3-12.87,50.8,50.8,0,0,0,.5-5.12H168a16.58,16.58,0,0,1-.37,3.13q-.37,1.88-1.62,7.63t-3,11.25a109.55,109.55,0,0,1-5.12,12.75,101.4,101.4,0,0,1-7.25,13.12,55.61,55.61,0,0,1-9.88,11.13A50.35,50.35,0,0,1,128,188.75Q102.24,178.5,91,137Zm44-106V119h80a124.28,124.28,0,0,0-4.5-34.25Q203,69,196.13,58.75A103.77,103.77,0,0,0,180.5,40.37a86.08,86.08,0,0,0-17-12.63,146,146,0,0,0-15.75-7.5,84.1,84.1,0,0,0-11.37-3.87,42.12,42.12,0,0,0-4.37-.87ZM126.75,119H44a121.05,121.05,0,0,1,4.63-34.25q4.63-15.75,11.5-26a90.87,90.87,0,0,1,16.5-18.5A114,114,0,0,1,94,27.63a106.68,106.68,0,0,1,16.37-7.5A112.17,112.17,0,0,1,122,16.38q3-.64,4.75-.87V119Z'\n\nexport const SRI = surfironman\n","export const swimming =\n 'M73,92a14.64,14.64,0,0,1-7.25-1.5q-2.5-1-11.25-.25-2.75.25-5.62.25t-4.75.13a22,22,0,0,0-3.87.63,29.48,29.48,0,0,1-5.38,0,10.2,10.2,0,0,0-3.37,0l-4.5.5a2.69,2.69,0,0,1-1.38-.63q-.87-.63-1.75-1.38l-1.75-1.5-1.62-.75a18.69,18.69,0,0,0-7.5,0q-4.5,1-5,1a5.14,5.14,0,0,0-1.25.13,4.53,4.53,0,0,1-1.12.13,3.24,3.24,0,0,0-1,.13q-.38.13-.37.37,0,1.75,3.5,1.5a12.3,12.3,0,0,0-3.87.37Q3,91.49,3,92q0,1,3.25.75a36.34,36.34,0,0,1,6-.5l.25.5a4.25,4.25,0,0,0-1,.25q-.5,0-2.88.25t-3.13.25q-1.25.25-1.25,1t1,.75h8Q11,96,14.52,97l.75.25A13.59,13.59,0,0,1,19,99a8.54,8.54,0,0,0,3.75,1.5,33.1,33.1,0,0,0,3.37-1.12,22.74,22.74,0,0,1,7.63-1.12q3.5,0,12.13,1.88t12.37,1.62a25.43,25.43,0,0,0,3,.37q1.75.13,3.63.13H67a5,5,0,0,1,3.25,1.25,4.25,4.25,0,0,0,.25,1,10.27,10.27,0,0,0,1.12,2.12,8.08,8.08,0,0,0,1.88,2.12l.25,1.5a4,4,0,0,0,2.5,1V112a2.58,2.58,0,0,0,.13,1,.79.79,0,0,0,.37.37,2.84,2.84,0,0,0,1,.13h1.5v.37l.37.63a1.51,1.51,0,0,0,1.12.75q-.75,1-2.38,3.13t-2.75,3.75q-1.12,1.63-2.38,3.25a10.37,10.37,0,0,1-2,2.12,13.91,13.91,0,0,1-1.62,1.12,12.61,12.61,0,0,0-2.12,1.62q-.75.75-2.25,2.62a17,17,0,0,0-2.5,4.37l-1.25,2.5-1.12,2.12a13.67,13.67,0,0,1-.87,1.62l-1.38,2.75-.63,1.12-.5.75-.75.87a13.68,13.68,0,0,0-1.75,5,35,35,0,0,0-2.38,3.87,12.28,12.28,0,0,0-1.38,3.63q0,.5-.37,3t-.75,4.75a22.9,22.9,0,0,0-.37,3.5,4.15,4.15,0,0,1-.25,1.25q0,1.25.5,1.25a2.46,2.46,0,0,0,1-1.5q.75-.25,1.25-1.88t1-3.87q.75-.25,1-2.75v-.5a4,4,0,0,0,1.62-1.5,9,9,0,0,0,.87-1.75l.25-.75q.5-.25,1.12-.63a11.47,11.47,0,0,0,1.75-1.5,4.74,4.74,0,0,0,1.38-2.12,3.37,3.37,0,0,0-1-2.5,32.55,32.55,0,0,1,5.5-6.75q4-4,4.75-5a32.62,32.62,0,0,1,3.25-3.37,13.84,13.84,0,0,0,3.5-4.87q.75-1.5,4.87-5.25a43.64,43.64,0,0,0,7.87-10,15.71,15.71,0,0,1,4.37,1.5q2.62,1.26,6,2.62a62.92,62.92,0,0,0,7.13,2.38q1.25.25,4.5,1.12t4.5,1.12q1.25.25,3.87.5a34.49,34.49,0,0,0,5.12.13,57.7,57.7,0,0,0,5.75-.63l14.12-2q7.13-1,7.87-1,1.25.25,4.25.75l5.12.87a18.73,18.73,0,0,0,4.87.13,13.1,13.1,0,0,0,4.75-1.25,58.47,58.47,0,0,0,13.38.5q7.13-.5,11.37-3.5a30.23,30.23,0,0,0,6.12-.37,5,5,0,0,0,2.62-2.12q.25.25,11.13,1.88t16.13,4.87q3.5,2,8,4.37t7,3.75a17.67,17.67,0,0,1,3.25,2.12,3.71,3.71,0,0,0,1.62,1.12q.62.12.63-.63a7.48,7.48,0,0,0-.5-2.25q-.5-1.75-4.63-5t-4.87-4a18.58,18.58,0,0,1-4.25-7.75,5.38,5.38,0,0,0-2-3.13,2.76,2.76,0,0,0-3.25-.13l-.5.25a10.47,10.47,0,0,1-5.75.5l-1-.25a29.32,29.32,0,0,1-5.88-1.38,13.38,13.38,0,0,1-3.5-1.75q-1.12-.87-2.12-1.62a5.77,5.77,0,0,0-2-1l5.12-5.12,4.37-4.25q4.37-4.25,3.75-3.63a13.5,13.5,0,0,1,8.25-3.5,5.58,5.58,0,0,0,1.12-.13,3,3,0,0,0,1-.37,3.66,3.66,0,0,1,.75-.37,3.66,3.66,0,0,0,.75-.37,1.59,1.59,0,0,1,.87-.25h1.25q2.25.5,2.5,0,1.25,0,1.25-.5a1,1,0,0,0,.75-1,1.81,1.81,0,0,0,1.5-.63q.5-.63-.5-1.38.5-1,.13-1.38a1.94,1.94,0,0,0-1.38-.37q-.5.25-1.5-.37a3.87,3.87,0,0,0-2-.63,4.07,4.07,0,0,1-1.75.13q-1-.12-2.25-.37t-2.5-.63a7.18,7.18,0,0,1-2.25-1.12q-6.5-4.75-7.25,0a16.22,16.22,0,0,1-1.12,4,8.23,8.23,0,0,1-2.88,2.75q-7,4.75-9.25,5a8.77,8.77,0,0,0-2.75.5q-1.5.5-4.37,3.37a29.26,29.26,0,0,0-5.38,8.13,24.45,24.45,0,0,0-2.5.13q-1.25.13-1.88.13h-1.88a4.34,4.34,0,0,0-1-.63q-.76-.38-2.75-1.12a36.56,36.56,0,0,0-4.13-1.25,22.55,22.55,0,0,0-5.25-.5,23.06,23.06,0,0,0-5.88.75q-8-8.25-16.25-4.75a21.85,21.85,0,0,0-3.5.25,13.21,13.21,0,0,0-2.75.75,10.89,10.89,0,0,0-2,1q-.75.5-2,1.25t-2,1.25a16,16,0,0,1-5.75,0,39.68,39.68,0,0,1-5.75-2.5,34.45,34.45,0,0,0-15.25-4.25,31,31,0,0,0-14-3A7.4,7.4,0,0,0,100,92.82q-3.13-.37-10.62-.63-4.75-6-8.75-4.75-5.75,1.75-7.75,4.5Z'\n\nexport const SWM = swimming\n","export const tabletennis =\n 'M233.86,205.08q-.75-.75-2.5-2.25l-2.75-2.38-3.25-2.88q-2.25-2-5.25-4.75-.75-.5-3.37-2.75T213,187q-1.13-.87-3.63-3.25t-3.87-3.87q-1.38-1.49-3.63-3.87a37.54,37.54,0,0,1-3.63-4.37q-1.38-2-2.88-4.63t-2.75-5.12a20.83,20.83,0,0,1-1.75-6.25,11.52,11.52,0,0,1,.5-4.87q.75-2.12,2.12-5.5t2.88-7.25a66.76,66.76,0,0,0,2.88-11.13,157.73,157.73,0,0,0,2.12-16.25,56.5,56.5,0,0,0-2.88-22,78.92,78.92,0,0,0-8.87-18.62,97.25,97.25,0,0,0-14.25-16.37q-9-8.5-15.13-13.25T145,29.33a75.26,75.26,0,0,0-21.5-9.88,103.22,103.22,0,0,0-26.38-4,75.14,75.14,0,0,0-29,5.38,75.13,75.13,0,0,0-26.5,17.25h-.25v.25H41.1A77.7,77.7,0,0,0,23.85,65.07a75.14,75.14,0,0,0-5.38,29,103.22,103.22,0,0,0,4,26.38,73.39,73.39,0,0,0,9.88,21.38q5.25,7.5,9.12,12.63t10.38,12.75A103.46,103.46,0,0,0,64.6,180a135.28,135.28,0,0,0,14,10,53,53,0,0,0,16.75,6.88,60.62,60.62,0,0,0,18.25,1.25,134.63,134.63,0,0,0,18.62-2.5,68.06,68.06,0,0,0,12.13-3.5q4-1.75,7.25-3.13a14.41,14.41,0,0,1,6.25-1.25,20.07,20.07,0,0,1,7,1.88q2,1,4.13,2.12t3.87,2.25q1.75,1.13,3.63,2.62t3.37,2.75q1.49,1.26,3.25,3t2.88,3l2.75,3.13q1.63,1.87,2.5,2.88t2.5,2.88q1.63,1.87,2.38,2.62,4.5,5.75,12,14a12.26,12.26,0,0,0,4.5,3.37q2.25.87,6.62-.75t9.88-6.88q0-.25.13-.25h.13a.22.22,0,0,1,.25-.25q5.25-5.5,6.88-9.88t.75-6.62a12.42,12.42,0,0,0-3.37-4.5Zm-179-12A23.81,23.81,0,0,0,45.61,195,22.43,22.43,0,0,0,38,200.08a25.12,25.12,0,0,0-5,7.63,23.77,23.77,0,0,0,21.87,32.86,22.85,22.85,0,0,0,16.75-7,22.85,22.85,0,0,0,7-16.75A22.49,22.49,0,0,0,75.34,205a25.18,25.18,0,0,0-8.63-8.63,22.49,22.49,0,0,0-11.87-3.25Z'\n\nexport const TTN = tabletennis\n","export const tennis =\n 'M240.5,229.38l-.25-1.75-4.5-4.25a19.63,19.63,0,0,1-2-.75L190,178.88q-4.5-4.75-7.75-4.25a89.13,89.13,0,0,1-18.62-25.88,114.63,114.63,0,0,1-9.12-27.37q-2.5-13.25-5.12-26.5a116.22,116.22,0,0,0-9.62-27.75,95.48,95.48,0,0,0-19.5-26.75A112.73,112.73,0,0,0,107,29a74.42,74.42,0,0,0-13.12-7.75,71,71,0,0,0-12.75-4.37,53.16,53.16,0,0,0-12.25-1.5,61.18,61.18,0,0,0-11.25,1,47.56,47.56,0,0,0-10.25,3.13,64.67,64.67,0,0,0-9,4.75A43.23,43.23,0,0,0,31,30.14h-.25l-.13.37-.13.13h-.25v.25a51.67,51.67,0,0,0-10.62,16.5,59,59,0,0,0-4.13,21.25q-.25,11.74,6,25.25t19,26.25a105.47,105.47,0,0,0,24.75,18.5q14.51,7.5,43.75,13.25,10.74,2.25,16.25,3.5,30.25,7.25,49.5,26.75-.5,3.25,4.25,7.75l43.75,43.75v.25q-.25.25,0,.75a3.82,3.82,0,0,0,.75,1q1,1.25,4.25,4.5,1.5,2,8-4.25v-.25H236A22.57,22.57,0,0,0,240.5,229.38Zm-130.74-143-3.25-3.25,3.25-3.25L113,83.14Zm3.75-2.75,3.25,3.25-3.25,3.25-3.25-3.25Zm-22.75-1L87.5,79.38l3.25-3.25L94,79.38Zm3.74-2.75,3.25,3.25L94.5,86.39l-3-3.25Zm-4.25,3.25L87,86.39l-3.25-3.25L87,79.88ZM87,78.89l-3.25-3.25L87,72.39l3.25,3.25Zm-.5.49-3.25,3.25L80,79.38l3.25-3.25Zm-7,.5,3.25,3.25L79.5,86.39l-3.25-3.25Zm-3.75,2.75L72.5,79.38l3.25-3.25L79,79.38Zm3.75-3.74-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,71.88l3.25-3.25L79,71.88Zm-.49.5L72,78.89l-3.25-3.25L72,72.39Zm-7-.5L65,71.88l3.25-3.25,3.25,3.25Zm-.5.5L64.5,78.89l-3.25-3.25,3.25-3.25Zm.5.49,3.25,3.25-3.25,3.25L65,79.38ZM72,79.88l3.25,3.25L72,86.39l-3.25-3.25Zm3.75,3.75L79,86.89l-3.25,3.25L72.5,86.89Zm3.75,3.74,3.25,3.25L79.5,93.89l-3.25-3.25Zm.49-.49,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25L87,93.89l-3.25-3.25Zm.5-.49,3.25-3.25L94,86.89l-3.25,3.25Zm7,.49,3.25,3.25L94.5,93.89l-3-3.25Zm.75-.49,3.25-3.25,3,3.25-3,3.25ZM99,83.14l3.25-3.25,3.25,3.25-3.25,3.25Zm-.5-.5-3.25-3.25,3.25-3.25,3,3.25Zm-4-3.74-3-3.25,3-3.25,3.25,3.25Zm-3.74-4-3.25-3,3.25-3.25L94,71.88ZM87,71.14l-3.25-3L87,64.89l3.25,3.25Zm-.5.75-3.25,3.25L80,71.88l3.25-3.25Zm-7-.75-3.25-3,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,64.13l3.25-3,3.25,3Zm-.49.76-3.25,3-3.25-3L72,64.89Zm-7-.76L65,64.13l3.25-3,3.25,3Zm-.49.76-3.25,3-3.25-3,3.25-3.25ZM64,71.88l-3.25,3.25L57.5,71.88l3.25-3.25Zm-3.75,3.75L57,78.89l-3.25-3.25L57,72.39Zm.5.49L64,79.38l-3.25,3.25L57.5,79.38Zm3.74,3.75,3.25,3.25L64.5,86.39l-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25L65,86.89ZM72,87.38l3.25,3.25L72,93.89l-3.25-3.25Zm3.75,3.75L79,94.39l-3.25,3.25L72.5,94.39Zm3.75,3.75,3.25,3.25L79.5,101.4l-3.25-3.25Zm.49-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25L87,101.39l-3.25-3.25Zm.5-.49,3.25-3.25L94,94.39l-3.25,3.25Zm7,.5,3.25,3.25L94.5,101.4l-3-3.25Zm.75-.5,3.25-3.25,3,3.25-3,3.25ZM99,90.64l3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.74L106,83.64l3.25,3.25L106,90.15ZM106,82.64l-3.25-3.25L106,76.13l3.25,3.25Zm-3.75-3.74L99,75.64l3.25-3.25,3.25,3.25Zm-3.75-4-3.25-3,3.25-3.25,3,3.25Zm-4-3.74-3-3,3-3.25,3.25,3.25Zm-3.74-3.74L87.5,64.14l3.25-3,3.25,3ZM87,63.64l-3.25-3.25L87,57.13l3.25,3.25Zm-.5.49-3.25,3.25L80,64.13l3.25-3Zm-7-.49-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,56.63l3.25-3.25L79,56.63Zm-.49.5L72,63.64l-3.25-3.25L72,57.13Zm-7-.5L65,56.63l3.25-3.25,3.25,3.25Zm-.49.5-3.25,3.25-3.25-3.25,3.25-3.25ZM64,64.13l-3.25,3.25L57.5,64.13l3.25-3Zm-3.74,4-3.25,3-3.25-3L57,64.89Zm-3.75,3.74-3.25,3.25L50,71.88l3.25-3.25Zm-4,3.75-3,3.25-3.25-3.25,3.25-3.25Zm.75.49,3.25,3.25-3.25,3.25L50,79.38ZM57,79.88l3.25,3.25L57,86.39l-3.25-3.25Zm3.75,3.75L64,86.89l-3.25,3.25L57.5,86.89Zm3.74,3.74,3.25,3.25L64.5,93.89l-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25L65,94.39ZM72,94.88l3.25,3.25L72,101.39l-3.25-3.25Zm3.75,3.75L79,101.89l-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25L79.5,108.9l-3.25-3.25Zm.49-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25L87,108.89l-3.25-3.25Zm.5-.49,3.25-3.25L94,101.89l-3.25,3.25Zm7,.5,3.25,3.25L94.5,108.9l-3-3.25Zm.75-.5,3.25-3.25,3,3.25-3,3.25ZM99,98.15l3.25-3.25,3.25,3.25-3.25,3.25Zm3.74-3.75L106,91.14l3.25,3.25L106,97.64Zm3.75-3.75,3.25-3.25L113,90.64l-3.25,3.25Zm7,.5,3.25,3.25-3.25,3.25-3.25-3.25Zm.5-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.74L121,83.64l3.25,3.25L121,90.15Zm-.5-.5L114,83.14l3.25-3.25,3.25,3.25Zm-3.74-3.75-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.74-3.25-3.25,3.25-3.25L113,75.64Zm-3.74-4-3.25-3L106,68.63l3.25,3.25Zm-3.75-3.74-3.25-3,3.25-3.25,3.25,3.25ZM98.5,67.39l-3.25-3.25,3.25-3,3,3Zm-4-3.75-3-3.25,3-3.25,3.25,3.25ZM90.76,59.9,87.5,56.64l3.25-3.25L94,56.64ZM87,56.14l-3.25-3.25L87,49.63l3.25,3.25Zm-.5.49-3.25,3.25L80,56.63l3.25-3.25Zm-7-.49-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,49.13l3.25-3.25L79,49.13Zm-.49.5L72,56.14l-3.25-3.25L72,49.63Zm-7-.5L65,49.13l3.25-3.25,3.25,3.25Zm-.49.5-3.25,3.25-3.25-3.25,3.25-3.25ZM64,56.63l-3.25,3.25L57.5,56.63l3.25-3.25Zm-3.74,3.75L57,63.64l-3.25-3.25L57,57.13Zm-3.75,3.74-3.25,3.25L50,64.13l3.25-3Zm-3.75,4-3.25,3-3.25-3,3.25-3.25Zm-4,3.74-3,3.25L42.5,71.88l3.25-3.25ZM45,75.64l-3.25,3.25-3-3.25,3-3.25Zm.75.49,3,3.25-3,3.25L42.5,79.38Zm3.75,3.75,3,3.25-3,3.25-3.25-3.25Zm3.74,3.75,3.25,3.25-3.25,3.25L50,86.89ZM57,87.38l3.25,3.25L57,93.89l-3.25-3.25Zm3.75,3.75L64,94.39l-3.25,3.25L57.5,94.39Zm3.74,3.74,3.25,3.25-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25L65,101.89ZM72,102.38l3.25,3.25L72,108.89l-3.25-3.25Zm3.75,3.75L79,109.39l-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25L79.5,116.4l-3.25-3.25Zm.49-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.5,3.25,3.25L87,116.4l-3.25-3.25Zm.5-.5,3.25-3.25L94,109.39l-3.25,3.25Zm7,.5,3.25,3.25L94.5,116.4l-3-3.25Zm.75-.5,3.25-3.25,3,3.25-3,3.25ZM99,105.64l3.25-3.25,3.25,3.25-3.25,3.25Zm3.74-3.75L106,98.64l3.25,3.25L106,105.14Zm3.75-3.74,3.25-3.25L113,98.15l-3.25,3.25Zm7,.49,3.25,3.25-3.25,3.25-3.25-3.25Zm.5-.49,3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.75L121,91.14l3.25,3.25L121,97.64Zm3.74-3.75,3.25-3.25L128,90.64l-3.25,3.25Zm3.75-3.74,3.25-3.25,3.25,3.25-3.25,3.25Zm-.5-.5-3.25-3.25,3.25-3.25L128,83.14ZM121,82.64l-3.25-3.25L121,76.13l3.25,3.25Zm-3.75-3.74L114,75.64l3.25-3.25,3.25,3.25Zm-3.74-4-3.25-3,3.25-3.25,3.25,3.25Zm-3.75-3.74-3.25-3,3.25-3.25L113,68.14ZM106,67.39l-3.25-3.25,3.25-3,3.25,3Zm-3.75-3.75L99,60.39l3.25-3.25,3.25,3.25ZM98.5,59.9l-3.25-3.25,3.25-3.25,3,3.25Zm-4-3.75-3-3.25,3-3.25,3.25,3.25ZM90.76,52.4,87.5,49.14l3.25-3.25L94,49.14ZM87,48.64l-3.25-3.25L87,42.14l3.25,3.25Zm-.5.49-3.25,3.25L80,49.13l3.25-3.25Zm-7-.49-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,41.63l3.25-3.25L79,41.63Zm-.49.5L72,48.64l-3.25-3.25L72,42.14Zm-7-.5L65,41.63l3.25-3.25,3.25,3.25Zm-.49.5-3.25,3.25-3.25-3.25,3.25-3.25ZM64,49.13l-3.25,3.25L57.5,49.13l3.25-3.25Zm-3.74,3.75L57,56.14l-3.25-3.25L57,49.63Zm-3.75,3.74-3.25,3.25L50,56.63l3.25-3.25Zm-3.75,3.75L49.5,63.64l-3.25-3.25,3.25-3.25Zm-4,3.74-3,3.25L42.5,64.13l3.25-3Zm-3.74,4-3.25,3-3-3,3-3.25Zm-3.75,3.74L38,75.14l-3.25-3.25L38,68.63ZM37.5,75.64l-3.25,3.25L31,75.64l3.25-3.25Zm.5.49,3.25,3.25L38,82.64l-3.25-3.25Zm3.75,3.75L45,83.14l-3.25,3.25-3-3.25Zm4,3.75,3,3.25-3,3.25L42.5,86.89Zm3.75,3.74,3,3.25-3,3.25-3.25-3.25Zm3.74,3.75,3.25,3.25-3.25,3.25L50,94.39ZM57,94.88l3.25,3.25L57,101.39l-3.25-3.25Zm3.75,3.75L64,101.89l-3.25,3.25-3.25-3.25Zm3.74,3.74,3.25,3.25-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25L65,109.39ZM72,109.89l3.25,3.25L72,116.4l-3.25-3.25Zm3.75,4,3.25,3-3.25,3.25-3.25-3.25Zm3.75,3.74,3.25,3.25-3.25,3-3.25-3Zm.49-.75,3.25-3,3.25,3-3.25,3.25Zm7,.75,3.25,3.25-3.25,3-3.25-3Zm.5-.75,3.25-3,3.25,3-3.25,3.25Zm7,.75,3.25,3.25-3.25,3-3-3Zm.75-.75,3.25-3,3,3-3,3.25ZM99,113.14l3.25-3.25,3.25,3.25-3.25,3.25Zm3.74-3.75,3.25-3.25,3.25,3.25L106,112.64Zm3.75-3.74,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25-3.25,3.25-3.25-3.25Zm.5-.49,3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.75L121,98.64l3.25,3.25L121,105.14Zm3.74-3.74,3.25-3.25L128,98.15l-3.25,3.25Zm3.75-3.75,3.25-3.25,3.25,3.25-3.25,3.25ZM129,90.64l3.25-3.25,3.25,3.25-3.25,3.25Zm0-7.5,3.25-3.25,3.25,3.25-3.25,3.25Zm-.5-.5-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.74-3.25-3.25,3.25-3.25L128,75.64Zm-3.74-4-3.25-3L121,68.63l3.25,3.25Zm-3.75-3.74-3.25-3,3.25-3.25,3.25,3.25Zm-3.74-3.74-3.25-3.25,3.25-3,3.25,3Zm-3.75-3.75-3.25-3.25,3.25-3.25L113,60.39ZM106,59.9l-3.25-3.25L106,53.39l3.25,3.25Zm-3.75-3.75L99,52.89l3.25-3.25,3.25,3.25ZM98.5,52.4l-3.25-3.25,3.25-3.25,3,3.25Zm-4-3.75-3-3.25,3-3.25,3.25,3.25Zm-3.74-3.75L87.5,41.63l3.25-3.25L94,41.63ZM87,41.14l-3.25-3.25L87,34.64l3.25,3.25Zm-.5.49-3.25,3.25L80,41.63l3.25-3.25Zm-7-.49-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,34.14l3.25-3.25L79,34.14Zm-.49.5L72,41.14l-3.25-3.25L72,34.64Zm-7-.5L65,34.14l3.25-3.25,3.25,3.25Zm-.49.5-3.25,3.25-3.25-3.25,3.25-3.25ZM64,41.63l-3.25,3.25L57.5,41.63l3.25-3.25Zm-3.74,3.75L57,48.64l-3.25-3.25L57,42.14Zm-3.75,3.74-3.25,3.25L50,49.13l3.25-3.25Zm-4,3.75-3,3.25-3.25-3.25,3.25-3.25Zm-3.74,3.74-3,3.25L42.5,56.63l3.25-3.25ZM45,60.39l-3.25,3.25-3-3.25,3-3.25Zm-3.75,3.74L38,67.38l-3.25-3.25,3.25-3Zm-3.74,4-3.25,3-3.25-3,3.25-3.25Zm-3.75,3.74-3.25,3-3.25-3,3.25-3.25Zm0,7.5L30.5,82.64l-3.25-3.25,3.25-3.25Zm.49.5,3.25,3.25-3.25,3.25L31,83.14ZM38,83.64l3.25,3.25L38,90.15l-3.25-3.25Zm3.75,3.74L45,90.64l-3.25,3.25-3-3.25Zm3.74,3.75,3.25,3.25L45.5,97.64l-3-3.25Zm4,3.74,3,3.25-3,3.25-3.25-3.25Zm3.74,3.75,3.25,3.25-3.25,3.25L50,101.89ZM57,102.38l3.25,3.25L57,108.89l-3.25-3.25Zm3.75,3.75L64,109.39l-3.25,3.25-3.25-3.25Zm3.74,3.75,3.25,3.25L64.5,116.4l-3.25-3.25Zm3.75,4,3.25,3-3.25,3.25L65,116.89ZM72,117.63l3.25,3.25-3.25,3-3.25-3Zm3.75,3.75L79,124.64l-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25-3.25-3.25Zm.49-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25L87,131.64l-3.25-3.25Zm.5-.49,3.25-3.25L94,124.64l-3.25,3.25Zm7,.5,3.25,3.25-3.25,3.25-3-3.25Zm.75-.5,3.25-3.25,3,3.25-3,3.25ZM99,120.89l3.25-3.25,3.25,3.25-3.25,3Zm3.74-4,3.25-3,3.25,3L106,120.14Zm3.75-3.74,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.75,3.25,3-3.25,3.25-3.25-3.25Zm.5-.75,3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.75,3.25-3.25,3.25,3.25L121,112.64Zm3.74-3.74,3.25-3.25,3.25,3.25-3.25,3.25Zm3.75-3.75,3.25-3.25,3.25,3.25-3.25,3.25ZM129,98.14l3.25-3.25,3.25,3.25-3.25,3.25Zm3.74-3.74L136,91.14l3.25,3.25L136,97.64Zm3.75-3.75,3.25-3.25L143,90.64l-3.25,3.25Zm-.5-.49-3.25-3.25L136,83.64l3.25,3.25Zm-3.25-10.75L136,76.14l3.25,3.25L136,82.65Zm-.49-.5L129,75.64l3.25-3.25,3.25,3.25Zm-3.75-4-3.25-3,3.25-3.25,3.25,3.25Zm-3.75-3.74-3.25-3,3.25-3.25L128,68.14ZM121,67.39l-3.25-3.25,3.25-3,3.25,3Zm-3.75-3.75L114,60.39l3.25-3.25,3.25,3.25Zm-3.74-3.74-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75-3.25-3.25,3.25-3.25L113,52.89ZM106,52.4l-3.25-3.25L106,45.89l3.25,3.25Zm-3.75-3.75L99,45.39l3.25-3.25,3.25,3.25ZM98.5,44.89l-3.25-3.25,3.25-3.25,3,3.25Zm-4-3.74-3-3.25,3-3.25,3.25,3.25Zm-3.74-3.75L87.5,34.14l3.25-3.25L94,34.14ZM87,33.64l-3.25-3.25L87,27.14l3.25,3.25Zm-.5.49-3.25,3.25L80,34.14l3.25-3.25Zm-7-.49-3.25-3.25,3.25-3.25,3.25,3.25Zm-3.75-3.75L72.5,26.64l3.25-3.25L79,26.64Zm-.49.5L72,33.64l-3.25-3.25L72,27.14Zm-7-.5L65,26.64l3.25-3.25,3.25,3.25Zm-.49.5-3.25,3.25-3.25-3.25,3.25-3.25ZM64,34.14l-3.25,3.25L57.5,34.14l3.25-3.25Zm-3.74,3.74L57,41.13l-3.25-3.25L57,34.63Zm-3.75,3.75-3.25,3.25L50,41.63l3.25-3.25Zm-4,3.75-3,3.25-3.25-3.25,3.25-3.25Zm-3.74,3.74-3,3.25L42.5,49.13l3.25-3.25ZM45,52.89l-3.25,3.25-3-3.25,3-3.25Zm-3.75,3.74L38,59.88l-3.25-3.25L38,53.38Zm-3.74,3.75-3.25,3.25L31,60.39l3.25-3.25Zm-3.75,3.74L30.5,67.38l-3.25-3.25,3.25-3Zm-3.75,4-3.25,3-3.25-3,3.25-3.25Zm0,7.5-3.25,3.25-3.25-3.25,3.25-3.25Zm0,7.5-3.25,3.25-3.25-3.25,3.25-3.25Zm.5.5,3.25,3.25L30.5,90.15l-3.25-3.25Zm3.74,3.74,3.25,3.25-3.25,3.25L31,90.64ZM38,91.14l3.25,3.25L38,97.64l-3.25-3.25Zm3.75,3.74L45,98.14l-3.25,3.25-3-3.25Zm3.74,3.75,3.25,3.25-3.25,3.25-3-3.25Zm4,3.74,3.25,3.25-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25L50,109.39ZM57,109.89l3.25,3.25L57,116.4l-3.25-3.25Zm3.75,4,3.25,3-3.25,3.25-3.25-3.25Zm3.74,3.74,3.25,3.25-3.25,3-3.25-3Zm3.75,3.75,3.25,3.25-3.25,3.25L65,124.64ZM72,125.13l3.25,3.25L72,131.64l-3.25-3.25Zm3.75,3.75L79,132.14l-3.25,3.25-3.25-3.25Zm3.75,3.75,3.25,3.25-3.25,3.25-3.25-3.25Zm.49-.5,3.25-3.25,3.25,3.25-3.25,3.25Zm7,.49,3.25,3.25L87,139.14l-3.25-3.25Zm.5-.49,3.25-3.25L94,132.14l-3.25,3.25Zm7,.5,3.25,3.25-3.25,3.25-3-3.25Zm.75-.5,3.25-3.25,3,3.25-3,3.25ZM99,128.4l3.25-3.25,3.25,3.25-3.25,3.25Zm3.74-3.75,3.25-3.25,3.25,3.25L106,127.9Zm3.75-3.75,3.25-3.25,3.25,3.25-3.25,3Zm7,.5,14,14q-1,.76-2,1.38t-1.75,1.12l-13.5-13.25Zm.5-.5,3.25-3.25L131.5,131.9a38.55,38.55,0,0,1-3.5,3Zm3.74-4,3.25-3,14,14a17.91,17.91,0,0,1-1.25,1.62q-.75.87-1.75,1.88Zm3.75-3.74,3.25-3.25L138,123.38a35.64,35.64,0,0,1-2.5,3.75Zm3.75-3.74,3.25-3.25,12.25,12.26q-1,2-2.25,4.25Zm3.74-3.74,3.25-3.25,10.25,10.26q-.26,1.25-.63,2.5t-.87,2.5Zm3.75-3.77L136,98.63l7.75,7.75a39.58,39.58,0,0,1-1,5.5Zm11,3.52-7.25-7.25,3.25-3.25,4.5,4.5A43.27,43.27,0,0,1,143.75,105.4Zm.13-11.75L144,95.9v2.25l-3.75-3.75,3.25-3Q143.75,91.39,143.88,93.64Zm-.63-4-3-2.75,2-1.75Q142.75,86.89,143.25,89.64ZM141,80.9a10,10,0,0,0,.37,1.25,4.54,4.54,0,0,1,.25.87,4.71,4.71,0,0,0,.37,1.12l-2.25,2.25-3.25-3.25,3.25-3.25,1.25,1Zm-1-2.25-.25.25-3.25-3.24,1.75-1.75Q139.25,76.4,140,78.65Zm-4.23-9.76q1,2,2.25,4.25l-2,2-3.25-3.25,3-3Zm-.51-.75-3,3-3.25-3,4-4A25.28,25.28,0,0,1,135.25,68.14ZM130,59.38a26.38,26.38,0,0,1,2.5,4l-4,4-3.25-3.25L130,59.38Zm-2.26-3q.5.75.87,1.25t.87,1.25l-4.75,4.75-3.25-3.25,5.25-5.24A8.33,8.33,0,0,1,127.75,56.4ZM125,52.77q.76.87,1.5,1.88L121,59.9l-3.25-3.25,5.75-5.75Q124.25,51.9,125,52.77Zm-2-2.37-5.75,5.75L114,52.9l6-6h0Q121.75,48.9,123,50.4Zm-6.25-6.52h0q1.5,1.25,2.75,2.5l-6,6-3.25-3.25,6-6Zm-1-1.25-6,6-3.24-3.25,5.75-5.75Zm-6.63-5.87a6.66,6.66,0,0,0,.87.75,6.66,6.66,0,0,1,.87.75,3.12,3.12,0,0,0,.87.63l-5.75,6-3.25-3.25,5.5-5.5A3.12,3.12,0,0,1,109.12,36.77Zm-1.37-1.13-5.5,5.5L99,37.89l5-5Q105.75,34.14,107.76,35.64Zm-4.26-3.25-5,5-3.25-3.25,4.26-4.5Q101,30.64,103.5,32.39Zm-8.75-5.49v0a13.39,13.39,0,0,0,2,1.24,13.41,13.41,0,0,1,2,1.25L94.5,33.64l-3-3.25,3.24-3.48h0ZM94,26.64l-3.25,3.25L87.5,26.64l2.26-2Q91.51,25.39,94,26.64Zm-10-4a4,4,0,0,1,1,.13,5.22,5.22,0,0,1,1,.37,5.22,5.22,0,0,0,1,.37,5.22,5.22,0,0,1,1,.37,2,2,0,0,0,.75.25l-1.75,2-3.25-3.25Zm-.5-.25-.25-.25Zm3,4.25-3.25,3.25L80,26.64l3.25-3.25ZM82,21.89l.75,1L79.5,26.15l-3.25-3.25,1.76-2Q79.26,21.14,82,21.89Zm-4.76-1-1.5,1.5-1.75-2A17.08,17.08,0,0,1,77.25,20.89Zm-4.49-.49,2.5,2.5L72,26.15l-3.25-3.25,2.76-2.74A7.73,7.73,0,0,1,72.76,20.4Zm-2.26-.26-2.25,2.25L66,20.14Zm-8.36.36q1.38-.13,3.13-.37l2.5,2.75-3.25,3.25-5-5.26A26.19,26.19,0,0,1,62.14,20.5Zm-3.64.63,5.5,5.5-3.25,3.25L53.5,22.64Q55.75,21.88,58.5,21.13Zm-8.13,2.51a11.16,11.16,0,0,1,2.38-.75l7.5,7.5L57,33.64l-9-9Q49.24,24.14,50.37,23.64Zm-7.13,3.74h0l1-.63,1-.63,2-1,9.25,9-3.25,3.25-10-10h0Zm-.76.49,10,10-3,3.25L38.74,30.37Q40.48,29.12,42.49,27.87ZM36,32.64a4,4,0,0,1,.63-.5,4.5,4.5,0,0,0,.75-.63,3.12,3.12,0,0,1,.87-.63l10.5,10.75-3,3.25-11-11Zm-1.75,1.75L45,45.39l-3.25,3.25L31,37.89Q32.51,36.4,34.26,34.39Zm-6.24,8q1.25-2,2.75-4l10.5,10.75L38,52.4l-10-10Zm-2.76,4.74a35.38,35.38,0,0,1,2.25-4.25l10,10-3.25,3.25-9-9ZM24,50q.5-1.12,1-2.12l8.75,8.75L30.5,59.88,23,52.39Q23.5,51.13,24,50Zm-1.25,3.13L30,60.39l-3.25,3.25-5.5-5.5A28.29,28.29,0,0,1,22.76,53.13Zm-1.5,6,5,5L23,67.38l-2.75-2.51A38.63,38.63,0,0,1,21.25,59.13Zm-1,6.76,2.25,2.25-2.25,2.25Zm0,5.49L23,68.63l3.25,3.25L23,75.14l-2.5-2.75-.13-.63Zm.25,2.25,2,2L21,77.13q-.26-1.25-.5-3.25Zm.5,4.25,2-1.75,3.25,3.25L23,82.64l-1-1.25Zm1.26,5.26v-.25l.25.25Zm1.25,3.37a10.61,10.61,0,0,1-.75-2.62l.25-.25,3.25,3.25-2,1.74A12.5,12.5,0,0,0,23.5,86.51Zm1.25,2.88,2-2L30,90.64l-3.25,3.25A45.12,45.12,0,0,1,24.75,89.39Zm4.75,9.26-.63-1-.63-1-.5-1a3.82,3.82,0,0,0-.75-1l3.5-3.5,3.25,3.25L29.5,98.64Zm.26.74,4.5-4.5,3.25,3.25-5,5Q30.76,100.89,29.75,99.38Zm3.24,4.5,5-5.25,3.25,3.25-5.5,5.75Q34.24,105.63,33,103.88ZM37.63,110q-.63-.87-1.38-1.88l5.5-5.75L45,105.63l-6,6A13.14,13.14,0,0,1,37.63,110Zm5.13,5.63h0l-1-1.24-1-1a8.33,8.33,0,0,1-1-1.25l6-6,3,3.25-6,6.24h0Zm1.25,1h0q-.25,0-.75-.5l6.25-6.25,3.25,3.25-6.25,6.25Q45.25,118.15,44,116.64Zm4.87,4.76q-.87-.76-1.88-1.5l6.25-6,3.25,3-6,6Q49.75,122.16,48.88,121.4Zm2.12,2,6-5.75,3.25,3.25-5.5,5.5h0Q53,124.89,51,123.38Zm6.12,4.76q-.87-.76-1.88-1.5l5.5-5.25L64,124.64l-5,4.75A8.71,8.71,0,0,1,57.12,128.14Zm5.38,3.74a6,6,0,0,1-1-.63,6,6,0,0,0-1-.63,3.82,3.82,0,0,1-1-.75l5-4.75,3.25,3.25-4.25,4Zm1.75,1,4-4,3.25,3.25-3.25,3A25.28,25.28,0,0,1,64.25,132.89Zm6.88,3.86Q70,136.13,69,135.63l3-3,3.25,3.25-2,2v0Q72.25,137.37,71.13,136.75Zm7.62,3.14q-2.25-.75-4.75-1.75l1.75-1.75L79,139.64Zm.76.5v-.25l.25.25Zm3.24.87a4.83,4.83,0,0,0-1.5-.37L80,139.64l3.25-3.25,3.25,3.25-2.25,2.25A15.22,15.22,0,0,0,82.75,141.26ZM90,143.15a44.94,44.94,0,0,1-4.75-1l1.75-2,3,3Zm-2.5-3.51,3.25-3.25L94,139.64l-3.25,3.25Zm4,3.75,3-3.25,4,4Q95,143.9,91.5,143.39Zm11.86.49-1.25.13-1.25.13H99.49l-4.25-4.5,3.25-3.25,7.24,7.5Zm3.38-.25L99,135.88l3.25-3.25,10,10Q109.74,143.14,106.75,143.64Zm11-2.75q-2.25.76-4.75,1.5l-10.25-10.25,3.25-3.25,11.75,12ZM106.5,128.4l3.25-3.25L123,138.39q-2,1-4.5,2ZM168.38,166a3.75,3.75,0,0,1-2.25,2.25,3.62,3.62,0,0,1-1.88-.37,9.93,9.93,0,0,1-2.38-1.38,41,41,0,0,0-3.63-2.38,50.83,50.83,0,0,0-5.25-2.75q-4.25-2.25-8-3.87t-5.5-2.25q-1.75-.63-6-1.88t-5.5-1.75q-5-1.49-6.5-3.5-2.5-3.25,3.25-4.5A25.08,25.08,0,0,0,137,136.89a19.44,19.44,0,0,0,4-5.12,28.92,28.92,0,0,0,2.75-7.13q.75-3,2.5-3.75,3.25-.76,5.5,7,.5,1.48,1,3.13t.87,2.75q.37,1.11.75,2.62a16,16,0,0,0,1,2.88q.63,1.37,1.38,3.37t1.88,4.5q1.13,2.5,2.88,5.75,1.25,2.75,2.62,5.25t2.25,3.75q.87,1.26,1.5,2.38A2.77,2.77,0,0,1,168.38,166Zm-56.13,25.1A14.12,14.12,0,0,1,108,205q-6,5.88-12,5.88a22.08,22.08,0,0,1-13-4.25q-6-4.25-6-13a18.21,18.21,0,0,1,5.25-13,16.69,16.69,0,0,1,12.5-5.5v0q8.5,0,12.75,4.87a16.82,16.82,0,0,1,4.5,10.38l-.37,1.12-.87.75a1.42,1.42,0,0,1-1.62.37,7.62,7.62,0,0,0-2.62-.5,7.6,7.6,0,0,1-4-1.75q-6.25-2.75-9.75-2.75t-7.5,3A8.42,8.42,0,0,0,82,194.87a11.74,11.74,0,0,0-.63,5.62,9.58,9.58,0,0,0,3,5.5,15.91,15.91,0,0,0,7.37,3.87Q85,208.12,82.87,202t3.63-10.62A8.62,8.62,0,0,1,92,189a10.49,10.49,0,0,1,5.25,1,47.53,47.53,0,0,0,5.38,2.25,16.45,16.45,0,0,0,5.38,1.12Q111.76,193.61,112.25,191.12Z'\n\nexport const TN = tennis\n","export const totesports =\n 'M72,59Q42.5,59,22.26,80.25,3,100.5,3,128q0,28.5,20.25,48.75T72,197a67.07,67.07,0,0,0,31.25-7.5,67.87,67.87,0,0,0,24-20.5,68.67,68.67,0,0,1-13.5-41,69.16,69.16,0,0,1,1.62-14.88A67.25,67.25,0,0,1,120,99.24,70.27,70.27,0,0,1,127.25,87a68.47,68.47,0,0,0-33.63-24.5A67.23,67.23,0,0,0,72,59Zm112,0a69.23,69.23,0,0,0-40.5,13.25A69.09,69.09,0,0,0,128.75,87q.75,1,1.5,2.12t1.38,2.12q.62,1,1.25,2.12t1.25,2.38A13.54,13.54,0,0,0,135.5,98,55.18,55.18,0,0,1,156,78.13a55.85,55.85,0,0,1,28-7.37A57.18,57.18,0,0,1,241.25,128,57.18,57.18,0,0,1,184,185.25a55.85,55.85,0,0,1-28-7.37A55.18,55.18,0,0,1,135.5,158a91.85,91.85,0,0,1-6.75,11A68.73,68.73,0,0,0,184,197q28.5,0,48.75-20.25T253,128q0-28.5-20.25-48.75T184,59Zm.25,31.5A34.39,34.39,0,0,0,170.5,93a19.92,19.92,0,0,0-9,7.5,21.53,21.53,0,0,0-3.25,12,20.77,20.77,0,0,0,2,9.62,15.3,15.3,0,0,0,6.12,6.25,39.48,39.48,0,0,0,7.63,3.5q3.51,1.12,9.5,2.62a19.42,19.42,0,0,1,3.25.63q1.25.38,2.5.87a10.47,10.47,0,0,1,2,1,4.53,4.53,0,0,1,1.25,1.25,5.6,5.6,0,0,1,.75,1.75,8.88,8.88,0,0,1,.25,2.25,6,6,0,0,1-2.5,5.25q-2.5,1.75-8,1.75-4,0-9-.5l-10-1a5,5,0,0,0-2.88-.13q-.87.37-1.38,2.38l-1.25,6.25a7.5,7.5,0,0,0-.25,1.75,1.8,1.8,0,0,0,.75,1.38,10.42,10.42,0,0,0,2.5,1.38,48.33,48.33,0,0,0,10.5,2.62,75.24,75.24,0,0,0,10.75.87q12.25,0,20.37-5.38t8.13-17.12a21.87,21.87,0,0,0-1.62-8.75,20.34,20.34,0,0,0-3.63-5.88,18.06,18.06,0,0,0-6-3.87,57.13,57.13,0,0,0-6.62-2.5q-2.62-.76-7.63-1.75a41.2,41.2,0,0,1-5.75-1.38,6.06,6.06,0,0,1-2.75-1.88,5.92,5.92,0,0,1-1-3.75q0-6.5,9.25-6.5,3.25,0,6.25.25t5.25.5q2.25.26,5,.5a6.29,6.29,0,0,0,3.25.13q1-.37,1.25-2.12l1.5-6.5a7.5,7.5,0,0,0,.25-1.75,2.19,2.19,0,0,0-.75-1.5,5.65,5.65,0,0,0-2.5-1.25q-7.75-3.25-20.75-3.25Zm-112,.5q1.5,0,1.5,2v16.25H85a2,2,0,0,0,.75-.25,6.55,6.55,0,0,1,1.5.13,2.88,2.88,0,0,1,.87.37,1.12,1.12,0,0,1,.37,1V119a5.87,5.87,0,0,1-1.12,3q-1.12,1.75-2.38,1.75H73.25l.25,19.75a10.17,10.17,0,0,0,.37,3.25,2.68,2.68,0,0,0,1.75,1.5,15,15,0,0,0,4.63.5q.75,0,2.12-.13t3-.25A15.48,15.48,0,0,0,88,148h.5a1.68,1.68,0,0,1,.75.13,3.76,3.76,0,0,0,.63.25.76.76,0,0,1,.5.63,12.25,12.25,0,0,0,.37,1.25l1,8a2.52,2.52,0,0,1-2,3.5,45.1,45.1,0,0,1-15.25,2.5,20.56,20.56,0,0,1-8.37-1.5,9.26,9.26,0,0,1-4.75-4.25,20.35,20.35,0,0,1-1.88-5.5,38.57,38.57,0,0,1-.5-6.75v-22.5H51.74q-1.5,0-1.5-4.75v-8.75a2.58,2.58,0,0,1,.13-1q.13-.26.87-.25a.72.72,0,0,0,.5.25H59V97q0-2.5,1.5-2.75L71.25,91h1Zm63.25,9a53.86,53.86,0,0,0,0,56.49,64.65,64.65,0,0,0,0-56.49Z'\n\nexport const TIPPING = totesports\n","export const volleyball =\n 'M110,41q-7.25-18-7.25-20.75V20a7.5,7.5,0,0,0-2,.37q-1.26.37-2.62.87l-3,1.12q-1.63.62-3.37,1.38a111.29,111.29,0,0,0-15.5,7.75Q74,32.75,72.37,33.75A14,14,0,0,0,70,35.5q-1.25,1.5-2.5,3.13t-2.25,3.13a15.09,15.09,0,0,0-1.75,3.75l1-.5q10.25-3.25,45.5-4ZM56,198h0l.25-2q-7.5-5-16-24.5-3.25-7.25-5-11.63a75.74,75.74,0,0,1-2.62-7.5,19.87,19.87,0,0,1-.87-5.12,5.51,5.51,0,0,1,.5-2.5A13.9,13.9,0,0,1,31,142a18.12,18.12,0,0,1-.75-3.5q-.25-1.25-.37-2.5t-.25-3q-.12-1.75-.13-2.75t-.13-3.63q-.12-2.62-.13-3.63a25.16,25.16,0,0,1-.25-3.5v-3.25q0-12.75,3.5-17.5A5.26,5.26,0,0,1,31.75,96h0q.25-4.75,6-16,.5-1,1.25-2.25t1.5-2.62L42,72.37l1.62-2.75q1.62-2.75,1.88-2.75t1.88-2.75q1.62-2.75,1.88-2.62t2-2.75q2.5-3.25,4.75-6T60.26,48a.85.85,0,0,1-.25-.63v-.63A11.43,11.43,0,0,1,61.77,41a10.54,10.54,0,0,0-2.88,1.5q-1.38,1-3.5,2.75a29,29,0,0,0-4.13,4.25q-3.5,4-6.88,8.25a129.17,129.17,0,0,0-8.25,12.13,124.71,124.71,0,0,0-8.37,16,109.45,109.45,0,0,0-6,19.13,99.23,99.23,0,0,0-2.5,22v.25q0,27,16.75,57.25A107.56,107.56,0,0,0,49.25,204a36.1,36.1,0,0,0,8.25,7.5,2.09,2.09,0,0,0-.13-.63,2.76,2.76,0,0,1-.13-.87q-.25-2.5-.63-5.38t-.5-4.25Q56,199,56,198Zm49.75,2.5Q70,199.25,60,197.74a2,2,0,0,0-.75-.25v.75q0,.75.13,2t.5,4.13q.37,2.87.63,5.38a10.33,10.33,0,0,1,.37,1.5,3.85,3.85,0,0,0,.63,1.5l.5.25-.25.75a18.5,18.5,0,0,0,3.13,3.75,25,25,0,0,0,4.75,3.37q2.87,1.62,5,2.75t5.62,2.75Q83.75,228,85,228.51q11,5.5,13.5,5.5h0a3.56,3.56,0,0,0,1.5-.25v-1a94.29,94.29,0,0,1,2-15.63q2-10.62,3.75-16.63ZM146,41q35.75.75,45.5,4l1,.5a4.71,4.71,0,0,1-.37-1.12,5.85,5.85,0,0,0-.5-1.38,4.53,4.53,0,0,0-.87-1.25A26.92,26.92,0,0,0,186,35.5a24.28,24.28,0,0,0-4.13-2.88q-3.13-1.88-6.88-3.87a111.85,111.85,0,0,0-15.75-7,24.42,24.42,0,0,0-6-1.75v.25Q153.23,23,146,41Zm50,156.75q-2.75.5-16.5,1.38t-29.25,1.38q1.75,6,3.75,16.63a94.28,94.28,0,0,1,2,15.63v1a3.56,3.56,0,0,0,1.5.25q2.5,0,13.5-5.5a32.55,32.55,0,0,1,4-1.88q2.75-1.13,4.5-2t4.25-2.25a43.72,43.72,0,0,0,4.25-2.62,34.64,34.64,0,0,0,3.5-2.88,18.46,18.46,0,0,0,2.75-3.13L194,213l.5-.25,1-3q1.25-11.5,1.25-11.75h0v-.5a2,2,0,0,1-.75.25Zm-49.25,3q-4.25,0-8.63.13t-8.87.13h-2.5q-4.5,0-8.87-.13t-8.63-.13a111.8,111.8,0,0,0-3.87,16q-2.12,11.25-2.12,16h0v1.5a3.58,3.58,0,0,0,2,2.5A17.63,17.63,0,0,0,110.5,239a48.24,48.24,0,0,0,7.5,1.12q4.5.37,10,.37h2.88l2.75-.13,2.75-.13,2.62-.13q2.62-.13,2.38-.37t2.25-.37q2.5-.13,2.12-.37,1.5-.5,2.88-1a5.74,5.74,0,0,0,2.12-1.25,3.64,3.64,0,0,0,2-2.5v-1.5a67.87,67.87,0,0,0-1.12-10q-1.12-6.75-2.5-13a78.61,78.61,0,0,0-2.38-9ZM128,40.75h0q7.5,0,14.25.25,4.5-11,6.12-15.25a21.46,21.46,0,0,0,1.62-5.5h0a1,1,0,0,0-.13-.63.51.51,0,0,1-.13-.37l-.25-.25-1.5-.75a1.74,1.74,0,0,0-.87-.37l-1.25-.25-1.25-.37q-1.25-.37-1.38-.25a67.86,67.86,0,0,0-14.75-1.5h-.75a69.1,69.1,0,0,0-15,1.5,15.47,15.47,0,0,0-4.13,1,8.45,8.45,0,0,0-2.38,1.25h0a2.26,2.26,0,0,0-.25,1h0a21.46,21.46,0,0,0,1.62,5.5Q109.23,30,113.73,41a20.24,20.24,0,0,1,3.25-.25h11Zm108.75,86.5a104,104,0,0,0-3.5-26.88A100.33,100.33,0,0,0,224,77a168.91,168.91,0,0,0-10.12-16.25,136.87,136.87,0,0,0-9.12-11.25,38.24,38.24,0,0,0-5.62-5.5,24.47,24.47,0,0,0-4.87-3,28.26,28.26,0,0,1,1.25,2.88,8.35,8.35,0,0,1,.5,2.88,2.83,2.83,0,0,1-.25,1.25,76.41,76.41,0,0,1,9,10.75A156.88,156.88,0,0,1,218.27,80q2,4,3.25,7a52.71,52.71,0,0,1,1.88,5.12,18,18,0,0,1,.75,3.87,4,4,0,0,1-.63,2.75q3.5,4.75,3.5,17.5,0,2.75-.25,6.75-.5,12.5-1,15.5-.25,1.25-.5,2.38a16.15,16.15,0,0,1-.63,2.12,8.73,8.73,0,0,1-.87,1.75,5.55,5.55,0,0,1,.5,2.5q0,4.75-8.5,24.25a96.92,96.92,0,0,1-6.12,12.5,58.91,58.91,0,0,1-5.38,7.87,22.61,22.61,0,0,1-4.5,4.13l.25,2q0,1-.13,2.38t-.5,4.25q-.37,2.87-.63,5.62a4.15,4.15,0,0,1-.25,1.25,21.45,21.45,0,0,0,3.87-3q2.12-2,4.37-4.5A107.57,107.57,0,0,0,220,184.5q16.75-30.25,16.75-57.25h0ZM222.49,138q.25-1.25.37-2.38t.25-2.88q.12-1.75.13-2.75t.13-3.63q.12-2.62.13-3.37.25-3.75.25-6.75V116a38.38,38.38,0,0,0-1.25-11q-1-4-3.25-5.5A21.26,21.26,0,0,0,216,98a30.29,30.29,0,0,0-3.25-.87q-1.75-.37-3.75-.87-9.5-2.5-21.75-4.5A351.17,351.17,0,0,0,128,86.23a351.17,351.17,0,0,0-59.25,5.5Q49.72,95,40,98a22,22,0,0,0-3.25,1.5q-2.25,1.5-3.25,5.5a38.38,38.38,0,0,0-1.25,11v.25q0,1.5.13,3.13t.13,3.63q.5,12,1,15l1,4a2.26,2.26,0,0,0,1.25,1.25q1,0,4.87.5T51.48,145q7,.75,14,1.25,33,3,62.5,3.25,16.25-.25,32.13-1t30.38-2.25q7-.5,14-1.25t10.88-1.25q3.87-.5,4.87-.5A2.26,2.26,0,0,0,221.5,142a11.82,11.82,0,0,0,1-4Zm-157,11.74-5-.5-4.5-.5q-4.5-.5-4.25-.5T48,147.87a33.33,33.33,0,0,1-3.5-.37q-8.5-1-9.25-1v.25H35v.5q0,4,8.25,22.75a95.89,95.89,0,0,0,7.87,15.37Q55,191.23,57,192.73a8.5,8.5,0,0,0,3.5,1.75q2,.25,11.5,1T97.61,197q16.13.75,30.38.75t30.38-.75q16.13-.75,25.62-1.5t11.5-1a8.42,8.42,0,0,0,3.5-1.75q2-1.5,5.88-7.37A94.73,94.73,0,0,0,212.73,170Q221,151.24,221,147.24v-.5l-.25-.25a5.58,5.58,0,0,0-1.12.13,19.49,19.49,0,0,1-2.12.25q-1.5.12-2.5.25t-3.5.37q-11.25,1.25-21,2.25-32.25,2.75-61.25,3h-2.5q-29-.25-61.25-3ZM215.24,81.5q-1.5-2.75-3.63-6.38t-4.5-7.25q-2.38-3.63-4.87-7.13-4-5.25-7.25-8.75t-4.5-3.75q-4.5-1.5-18.5-2.75-8.25-.5-19.25-1T128,44h0q-26.25,0-44,1.5-14,1.25-18.5,2.75-.5,0-1.75,1.12T61,52q-3.25,3.5-7.25,8.75a147.89,147.89,0,0,0-13,20.75q-5.5,10.75-5.5,14.5h0v.5a20.34,20.34,0,0,1,4-1.62Q42,94,46.22,93q4.5-1.25,10-2.38t12-2.12a379.38,379.38,0,0,1,58.5-5.5h2.5a373.84,373.84,0,0,1,58.5,5.5,212.8,212.8,0,0,1,22,4.5q8.5,2,11,3.5V96q0-3.75-5.5-14.5Z'\n\nexport const VLB = volleyball\n","export const wintersports =\n 'M223.74,159l-6-3.5L204.49,164l-6-3.5,3.5-6-15.75-1-8.5-13,21.75,4.5,9.75-17-9.75-17-21.75,4.5,8.5-13,15.75-1-3.5-6,6-3.5,13.25,8.5,6-3.5-7-12.25,8.75-13-15.75,1-7-12.25L196.49,64l1,15.75-6,3.5-3.5-6-8.75,13-15.75,1,14.75-16.75-9.75-16.75H149l-7,21-7-14,7-14h-7V43.5l14-7v-7H135l-7-14-7,14H107v7l14,7v7.25h-7l7,14-7,14-7-21H87.51L77.76,74.51,92.51,91.25l-15.75-1L68,77.25l-3.5,6-6-3.5,1-15.75-6.25-3.5-7,12.25-15.75-1,8.75,13L32.26,97l6,3.5L51.51,92l6,3.5-3.5,6,15.75,1,8.5,13L56.52,111l-9.75,17,9.75,17,21.75-4.5-8.5,13-15.75,1,3.5,6-6,3.5-13.25-8.5-6,3.5,7,12.25-8.75,13,15.75-1,7,12.25,6.25-3.5-1-15.75,6-3.5,3.5,6,8.75-13,15.75-1L77.76,181.49l9.75,16.75H107l7-21,7,14-7,14h7v7l-14,7.25v7h14l7,14,7-14h14v-7l-14-7.25v-7h7l-7-14,7-14,7,21h19.5l9.75-16.75-14.75-16.75,15.75,1,8.75,13,3.5-6,6,3.5-1,15.75,6.25,3.5,7-12.25,15.75,1-8.75-13Zm-27-38.25L201,128l-4.25,7.25L171.5,128Zm-20-20.76L168,113l-21.75,4.5L161,100.76ZM164.5,64.76,168.75,72l-19,18.5,6.5-25.75h8.26Zm-36.5,7,7,14L128,107l-7-21.25ZM87.24,72l4.25-7.25H100l6.25,25.75ZM95,100.76l14.75,16.75L88,113l-8.75-13Zm-35.75,34.5L55,128l4.25-7.25L84.49,128Zm20,20.75L88,143l21.75-4.5L95,155.24ZM91.5,191.25,87.25,184l19-18.5L100,191.25Zm36.5-7-7-14L128,149l7,21.25Zm40.75-.26-4.25,7.25h-8.25l-6.5-25.75ZM161,155.25l-14.75-16.75L168,143l8.75,13Z'\n\nexport const WSP = wintersports\n","export const yachting =\n 'M221,177.76a20.25,20.25,0,0,0-4-1.5,34.4,34.4,0,0,1-6.25-2.62,13.94,13.94,0,0,1-5-4.63l.75-1.25-5.75-3.25a79.44,79.44,0,0,0,8.5-36,80.5,80.5,0,0,0-8.5-36.5l5.75-3.5-.75-1.25a14.07,14.07,0,0,1,5-4.63A33.43,33.43,0,0,1,217,80a31.38,31.38,0,0,0,4.25-1.5q1-.75,1.62-1.12a12.39,12.39,0,0,0,1.5-1.12A7.78,7.78,0,0,0,225.65,75a2.36,2.36,0,0,0,.37-1.38,4,4,0,0,0-.5-1.88q-1.75-3-8,.5a36.09,36.09,0,0,0-3.25,2.88,29.76,29.76,0,0,1-5.5,4.13,14.87,14.87,0,0,1-6.5,2l-.5-1.25-6,3.25a82.44,82.44,0,0,0-26.88-25.12A77.66,77.66,0,0,0,133,47.53V40.28h-1.25A13.84,13.84,0,0,1,130,33.65a26.87,26.87,0,0,1,.87-6.75,23.59,23.59,0,0,0,.87-4.37,12.54,12.54,0,0,0-.13-2q-.13-.76-.25-1.88a4.23,4.23,0,0,0-.5-1.75,2.94,2.94,0,0,0-1-1,3.11,3.11,0,0,0-1.62-.37A4.07,4.07,0,0,0,126,16a2.63,2.63,0,0,0-1,1.75q-.26,1.25-.37,2.12a22.52,22.52,0,0,0-.13,2.62,23.37,23.37,0,0,0,.87,4.37,26.79,26.79,0,0,1,.87,6.75,13.8,13.8,0,0,1-1.75,6.62h-1.25v7.25A77.22,77.22,0,0,0,87.63,58.14,82.58,82.58,0,0,0,60.75,83.26l-6.25-3.5L53.75,81a14.69,14.69,0,0,1-6.5-2,30.41,30.41,0,0,1-5.5-4.13A38.7,38.7,0,0,0,38.5,72q-6-3.5-7.75-.25a10.38,10.38,0,0,0-.63,2q-.13.76.87,1.75a7.66,7.66,0,0,0,1.75,1.38q.75.38,2.25,1.38a14.26,14.26,0,0,0,3,1.25l4.13,1.38,4.25,2.25q4.25,2.25,3.87,3.87l-.75,1.25,6.25,3.5A80.13,80.13,0,0,0,47,128.5,79.32,79.32,0,0,0,55.24,164l-5.75,3.5.75,1.25a26.88,26.88,0,0,1-2.62,2.75,14.64,14.64,0,0,1-2.75,2A28.28,28.28,0,0,1,42,174.88q-1.5.62-2.75,1t-2.5.87q-1.25.49-2,.75-1,.75-1.62,1.12a12.39,12.39,0,0,0-1.5,1.12A7.78,7.78,0,0,0,30.35,181a2.36,2.36,0,0,0-.37,1.38,4,4,0,0,0,.5,1.88q1.75,3,8-.5.5-.5,1.5-1.38l2-1.75,2.25-1.88q2.25-1.88,2.62-1.75T50,175.62q2.75-1.5,3.75-.87l.5,1.25,6-3.25A81.07,81.07,0,0,0,87,198.36a76.87,76.87,0,0,0,36,10.88v6.5h1.25a13.84,13.84,0,0,1,1.75,6.62,26.87,26.87,0,0,1-.87,6.75,23.59,23.59,0,0,0-.87,4.37q0,2.25.13,3.5a4.63,4.63,0,0,0,1,2.38,2.82,2.82,0,0,0,2.38,1.12A4.2,4.2,0,0,0,130,240a2.59,2.59,0,0,0,1-1.75q.26-1.26.37-2.12a22.33,22.33,0,0,0,.13-2.62,23.37,23.37,0,0,0-.87-4.37,26.78,26.78,0,0,1-.87-6.75,13.8,13.8,0,0,1,1.75-6.62h1.25v-6.25a80.63,80.63,0,0,0,36.13-11A81.89,81.89,0,0,0,196,173l5.5,3.25.75-1.25a30.49,30.49,0,0,1,3.63.75,9.83,9.83,0,0,1,3.13,1.38q1.25.87,2.62,1.88a19.18,19.18,0,0,1,2.25,1.88q.87.87,1.88,1.75a18.17,18.17,0,0,0,1.75,1.38q1.5.75,2.38,1.12t2,.75a2.78,2.78,0,0,0,2,0,2.74,2.74,0,0,0,1.38-1.62q2-3-4.25-6.5Zm-72.76-42.5L145,133.51a17.38,17.38,0,0,0,.75-5,16.39,16.39,0,0,0-.25-2.88q-.25-1.38-.5-2.62l3.5-2.25,1.25-3a5.51,5.51,0,0,0,3-.25,5.76,5.76,0,0,0,2-2,5.76,5.76,0,0,1,2-2,9.61,9.61,0,0,1,2.75-1,18.79,18.79,0,0,0,4.63-2,23.63,23.63,0,0,0,4.25-3,24,24,0,0,1,2.38-2,5.26,5.26,0,0,1,2.75-.75,5.26,5.26,0,0,0,2.75-.75l1.5-2.5a1.27,1.27,0,0,1,.63.25,5.23,5.23,0,0,0,1.38.5,1.49,1.49,0,0,0,1.5-.25l3.5-2.25a61.6,61.6,0,0,1,7,28.75,60.84,60.84,0,0,1-6.75,28l-4-2.25a4.79,4.79,0,0,0-1.5-.25,1.67,1.67,0,0,0-1.25.5l-.5.25a4.31,4.31,0,0,0-1.75-2.5,5.26,5.26,0,0,0-2.75-.75,4,4,0,0,1-2.5-.75,6.67,6.67,0,0,1-1.75-1.25,19.87,19.87,0,0,0-1.88-1.62Q166,147,164,145.77a16.92,16.92,0,0,0-4.5-2,15.22,15.22,0,0,1-3-1,8.54,8.54,0,0,1-1.88-2,6.86,6.86,0,0,0-2.12-2l-3-.25-.25-2.25ZM181,93l-3.75,2.25L176,98.52a.85.85,0,0,0-.63-.25h-1.12l-1.25.25a8.33,8.33,0,0,0-1.25,1,3.82,3.82,0,0,0-.75,1,3.82,3.82,0,0,1-.75,1,8.33,8.33,0,0,1-1.25,1,22.58,22.58,0,0,1-2.88,1.12,29.13,29.13,0,0,0-4.63,2.12,21.73,21.73,0,0,0-4.25,2.88,20.69,20.69,0,0,1-2.25,1.88,6.33,6.33,0,0,1-2.75.87,9.51,9.51,0,0,0-2.75.63l-1.5,2.5-3.5-.5-3.75,2.25a14.82,14.82,0,0,0-4-3.25,16.39,16.39,0,0,0-4.75-1.75v-4.5a2.36,2.36,0,0,0-.63-1.5,3.89,3.89,0,0,0-.87-.87,1.87,1.87,0,0,1-.5-.37,4.49,4.49,0,0,0,1.25-2.75,6.31,6.31,0,0,0-.63-2.62A6.31,6.31,0,0,1,130,96a15.26,15.26,0,0,1,.5-3.13,22.58,22.58,0,0,0,.5-5.12,17.93,17.93,0,0,0-.25-3.13q-.25-1.38-.37-1.88a12.64,12.64,0,0,1-.25-1.38,13.73,13.73,0,0,1-.13-1.62,6,6,0,0,1,.63-2.75,6,6,0,0,0,.63-2.75A5.41,5.41,0,0,0,130,71.52a.74.74,0,0,0,.5-.25l.87-.87L132,69V65a63,63,0,0,1,27.87,8.5A64.88,64.88,0,0,1,181,93Zm-56.5,35.5q0-3.75,3.75-3.75a3.37,3.37,0,0,1,2.38,1.12,3.54,3.54,0,0,1,1.12,2.62,3.3,3.3,0,0,1-.5,1.62,3.65,3.65,0,0,1-1.38,1.38,3.3,3.3,0,0,1-3.5,0,3.65,3.65,0,0,1-1.38-1.38,3.3,3.3,0,0,1-.5-1.62ZM124.27,65v4a2.16,2.16,0,0,0,.5,1.38,3.07,3.07,0,0,0,1,.87l.5.25A9.75,9.75,0,0,1,125,74.26a6,6,0,0,0,.63,2.75,6,6,0,0,1,.63,2.75,17.9,17.9,0,0,1-.37,3,27.89,27.89,0,0,0-.37,5,30,30,0,0,0,.37,5.12,20,20,0,0,1,.37,3.13,5.14,5.14,0,0,1-.13,1.25q-.13.5-.25.87a5.81,5.81,0,0,1-.37.87,4.42,4.42,0,0,0-.37,1,6,6,0,0,0-.13,1.25l1.25,2.75-1.75,1.5-.25,1.25v4.5a16.83,16.83,0,0,0-8.75,4.75l-4-2.25a3.19,3.19,0,0,0-1.5-.13,4.05,4.05,0,0,0-1.25.37l-.5.25q-.25,0-1.75-2.5a5.22,5.22,0,0,0-1-.37l-.87-.25a2.74,2.74,0,0,0-.75-.13h-.75l-.87-.13q-.87-.13-1-.63a11.86,11.86,0,0,1-2.5-1.88,23,23,0,0,0-4.13-2.88A24,24,0,0,0,90,103.37a11.89,11.89,0,0,1-2.75-1.12,6.86,6.86,0,0,1-2.12-2,8.54,8.54,0,0,0-1.88-2h-3q0-2.5-1.5-3.25l-3.25-2A60.5,60.5,0,0,1,96.41,73.35,63.77,63.77,0,0,1,124.28,65Zm-18,73.25-3,.25a5.76,5.76,0,0,0-2,2,5.76,5.76,0,0,1-2,2,10.7,10.7,0,0,1-1.88.75q-.87.25-2.25.75a32.78,32.78,0,0,0-3.37,1.5l-2.62,1.75-1.5,1.25q-1.5,1.25-1,1t-1.38,1a5.26,5.26,0,0,1-2.75.75A4,4,0,0,0,80,152a3.07,3.07,0,0,0-1,.87,1.9,1.9,0,0,0-.5,1.12l-.25.5a1.27,1.27,0,0,1-.63-.25,5.22,5.22,0,0,0-1.25-.5,1.85,1.85,0,0,0-1.62.25L71,156.26a64.28,64.28,0,0,1-6.25-27.75q0-4,.37-7.75a54.06,54.06,0,0,1,1.25-7.37,62.9,62.9,0,0,1,2.12-7,51.49,51.49,0,0,1,3-6.62l3.5,2a4.79,4.79,0,0,0,1.5.25,1.67,1.67,0,0,0,1.25-.5l.5-.25a4.31,4.31,0,0,0,1.75,2.5,3.85,3.85,0,0,0,1.5.63,7.78,7.78,0,0,0,1.25.13,5.69,5.69,0,0,1,1.12.13,4,4,0,0,1,1.38.63,10.6,10.6,0,0,1,2.5,2,18.3,18.3,0,0,0,4.25,3,34.2,34.2,0,0,0,3.37,1.5q1.37.5,2.25.75a5.66,5.66,0,0,1,1.88,1,5.24,5.24,0,0,1,1.88,1.75,7,7,0,0,0,2.12,2,1.46,1.46,0,0,0,1,.25h2l-.13.5.25,1.38q.25,1.38,1.12,1.38l3.75,2a16.66,16.66,0,0,0-1,5.75,14.22,14.22,0,0,0,.75,4.5l-3.75,2.25q-1.25.75-1.25,3ZM75,163l3.75-2.25a1.53,1.53,0,0,0,1-1.12,4.87,4.87,0,0,0,.25-1.38v-.75a.85.85,0,0,0,.63.25h1.12l1.25-.25a8.33,8.33,0,0,0,1.25-1,3.82,3.82,0,0,0,.75-1,3.82,3.82,0,0,1,.75-1,8.33,8.33,0,0,1,1.25-1,7.79,7.79,0,0,1,.87-.37l1.5-.5.87-.25a7.38,7.38,0,0,0,1.12-.37q.25-.13,1.38-.63a5.76,5.76,0,0,0,1.75-1.12,21.72,21.72,0,0,0,4.25-2.88,20.68,20.68,0,0,1,2.25-1.88,6.33,6.33,0,0,1,2.75-.87,9.51,9.51,0,0,0,2.75-.63l1.5-2.5a1.27,1.27,0,0,1,.63.25,5.22,5.22,0,0,0,1.25.5,1.85,1.85,0,0,0,1.62-.25l3.25-2a18.45,18.45,0,0,0,4.13,3.5,14.58,14.58,0,0,0,5.12,2v3.75a2.71,2.71,0,0,0,.5,1.5,2.78,2.78,0,0,0,1,1l.5.25a18.48,18.48,0,0,1-1.25,2.75,6.31,6.31,0,0,0,.63,2.62A6.31,6.31,0,0,1,126,160a10.48,10.48,0,0,1-.13,1.75q-.13.75-.25,1.38t-.25,1.88q-.13,1.25-.13,3.25a28,28,0,0,0,.37,5,18.07,18.07,0,0,1,.37,3,6.91,6.91,0,0,1-.13,1.38q-.13.63-.25,1a2.82,2.82,0,0,1-.37.75,2.62,2.62,0,0,0-.37,1,8.16,8.16,0,0,0-.13,1.38,5.41,5.41,0,0,0,1.25,2.75l-1.75,1.25L124,187v4.75A62.79,62.79,0,0,1,75,163Zm56.75,28.75V187a2.6,2.6,0,0,0-2-2.5,5.41,5.41,0,0,0,1.25-2.75,6.91,6.91,0,0,0-.13-1.38,2.87,2.87,0,0,0-.37-1,3.33,3.33,0,0,1-.37-.75,7.38,7.38,0,0,1-.25-1,8.16,8.16,0,0,1-.13-1.38,17.9,17.9,0,0,1,.37-3,27.89,27.89,0,0,0,.37-5,30,30,0,0,0-.37-5.12,20,20,0,0,1-.37-3.13,5.55,5.55,0,0,1,.25-1.75q.25-.74.63-1.62a4.54,4.54,0,0,0,.37-1.88,5.59,5.59,0,0,0-1.25-2.75,3.05,3.05,0,0,0,2-2.75v-3.5a21.18,21.18,0,0,0,5.12-2.12,21.52,21.52,0,0,0,4.37-3.37l3.25,2,3.25-.5q.25,0,1.75,2.5a6.27,6.27,0,0,0,1.88.63A11.25,11.25,0,0,0,153,145a3.1,3.1,0,0,1,1.75.75,3.48,3.48,0,0,1,1.38.87,11.42,11.42,0,0,0,1.12,1q.49.37,1.5,1.25a12.21,12.21,0,0,0,2.5,1.62,26.88,26.88,0,0,0,4.75,2.12,11.89,11.89,0,0,1,2.75,1.12,6.86,6.86,0,0,1,2.12,2,8.54,8.54,0,0,0,1.88,2H176a3.36,3.36,0,0,1-.13.75,2.28,2.28,0,0,0,.25,1.38,1.85,1.85,0,0,0,1.12,1.12l4,2.25a65.24,65.24,0,0,1-13,14.38,63.87,63.87,0,0,1-16.87,9.88,60.52,60.52,0,0,1-19.63,4.25Z'\n\nexport const YCT = yachting\n","import React from 'react'\nimport * as iconPaths from './iconPaths'\nimport { SvgIconStyled } from './Icon.styles'\n\nexport type IconType = keyof typeof iconPaths\n\ntype ViewBox = '0 0 256 256' | '0 0 20 20' | (string & {})\n\nexport type IconProps = {\n type?: IconType\n size?: string\n title?: string\n color?: string\n character?: string\n className?: string\n viewBox?: ViewBox\n width?: string | number\n height?: string | number\n}\n\nexport function Icon({\n type,\n size = '2.2rem',\n title,\n color,\n className,\n viewBox = '0 0 256 256',\n width = '1em',\n height = '1em',\n ...inputProps\n}: IconProps): JSX.Element | null {\n if (!type) {\n return null\n }\n\n const resolvedPath = iconPaths[type]\n if (!resolvedPath) {\n return null\n }\n\n // README: Accessible SVG markup -> https://gist.github.com/davidhund/564331193e1085208d7e\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n","export const arrowup = 'M0,176l32,32l96-96l96,96l32-32L128,48L0,176z'\n\nexport const arrowdown = 'M256,80l-32-32l-96,96L32,48L0,80l128,128L256,80z'\n\nexport const arrowleft = 'M152.5,198l16.3-17.5l-49-52.5l49-52.5L152.5,58l-65.3,70L152.5,198z'\n\nexport const arrowright = 'M80,0,48,32l96,96L48,224l32,32L208,128Z'\n\nexport const arrowdownwithtail =\n 'M228.8333 101.8667C223.4999 96.5333 215.5008 97.0667 210.1675 101.8667L149.3666 166.4V12.8C149.3666 5.8667 143.4999 0 136.5666 0H119.49994C112.03328 0 106.69994 5.86667 106.69994 12.8V166.4L45.36661 101.86667C40.03328 97.06667 32.03328 96.53333 26.69994 101.86667L14.966664 113.6C10.166664 118.4 10.166665 126.9333 14.966665 131.7333L118.9666 235.19915C123.76661 240.534187 131.76661 240.534187 137.09995 235.19915L240.56661 131.73333C245.36747 126.9333 245.36747 118.9333 240.56661 113.6L228.83328 101.8667Z'\n\nexport const arrowupwithtail =\n 'M18.16661 154.66667C23.49995 160 31.49995 159.46667 36.83328 154.66667L98.16661 90.13333V243.2C98.16661 250.66667 103.49995 256 110.96661 256H128.03328C134.96661 256 140.83328 250.66667 140.83328 243.2V90.13333L201.63413 154.13333C206.96747 159.46667 214.96661 159.46667 220.29995 154.66667L232.03328 142.93333C236.83413 137.6 236.83413 129.6 232.03328 124.8L128.03328 20.8C123.23328 16 115.23328 16 110.43328 20.8L6.43333 124.8C1.63333 129.6 1.63333 137.6 6.43333 142.93333L18.16661 154.666667Z'\n","export const refresh =\n 'M88.3,206.1c1.2,0.6,3.1,1.7,3.5,1.9l-0.1,0l-10.9,20.8c-0.3-0.2-1-0.6-3.9-2.2c-0.9-0.5-1.7-0.9-1.9-1c-13-7.1-24.3-16.4-33.5-27.9c-8.9-11.1-15.6-23.6-19.7-37.3c-4.2-13.6-5.7-27.8-4.5-41.9c1.3-14.7,5.4-28.8,12.3-41.9c9.5-18.3,23.9-33.4,41.6-43.9c17.2-10.2,36.8-15.6,56.6-15.6c0,0,2.2,0,4.1,0V2.2l35.2,26.5L132,55.2V40.4c-1.8,0-3.9,0-4,0c-32.7,0.1-62.4,18.1-77.6,47c-22,42.1-6,94.9,35.8,117.5C86.4,205.1,87,205.4,88.3,206.1z M234.2,96c-4.1-13.6-10.6-26.1-19.4-37.2c-9.1-11.4-20.3-20.9-33.1-27.9l-11.3,20.5c41.3,22.8,57.1,75.4,35.2,117.2c-14.5,27.7-42.3,45.3-73.3,46.9v-14.6l-35.2,26.5l35.2,26.5v-14.8c18.4-0.7,36.5-6.1,52.4-15.5c17.7-10.5,32.1-25.7,41.6-44c6.8-13.1,11-27.1,12.3-41.7C239.8,123.6,238.4,109.6,234.2,96z'\n","export const specials =\n 'M128,0.5L0.5,128L128,255.5L255.5,128L128,0.5z M153.3,194.6c-8.2,3.3-17.8,4.9-28.6,4.9c-7.7,0-15.8-0.4-24.1-1.2c-8.4-0.8-16.2-1.9-23.5-3.4v-31.5h15.5c1.9,8.2,5,14.2,9.5,18.2c4.4,4,10.9,6,19.4,6c4.5,0,8.5-0.6,12-2c3.6-1.4,6.4-3.6,8.6-6.6c2.2-3,3.2-6.8,3.2-11.4c0-4.2-0.9-7.9-2.6-11c-1.7-3.1-4.5-6.1-8.4-8.9c-3.9-2.8-9.2-5.8-16.1-8.9c-5.9-2.6-11.2-5.4-16-8.3c-4.8-2.9-8.8-6-12.2-9.5c-3.4-3.5-6-7.2-7.8-11.3c-1.8-4.1-2.8-8.7-2.8-13.8c0-8.4,2.3-15.5,6.9-21.4c4.6-5.9,11.3-10.3,20-13.3c8.7-3,18.9-4.6,30.4-4.6c6.7,0,13.2,0.3,19.3,1c6.1,0.6,13.1,1.8,21,3.4v29.7h-15.5c-1.5-5.4-3.3-9.7-5.5-12.8c-2.2-3.2-5-5.5-8.3-7c-3.3-1.5-7.5-2.2-12.6-2.2c-4.3,0-8.2,0.7-11.6,2c-3.4,1.4-6.1,3.4-8,6.1c-2,2.7-2.9,5.9-2.9,9.8c0,4,0.8,7.4,2.5,10.3c1.7,2.9,4.6,5.7,8.6,8.5c4,2.8,9.9,6,17.5,9.5c9.3,4.4,16.6,8.7,21.9,12.9c5.3,4.2,9.3,8.8,11.8,13.7c2.5,5,3.8,10.7,3.8,17.2c0,8.4-2.2,15.7-6.5,21.8C167.9,186.5,161.6,191.2,153.3,194.6L153.3,194.6z'\n","export const specialsBackground = 'M128.5,250.4L6.6,128.5L128.5,6.6l121.9,121.9L128.5,250.4z'\n","import { css } from '@emotion/react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\ntype InputBoxStyledProps = {\n error?: string | boolean\n}\n\nexport const inputBoxBaseStyles = css({\n border: `1px solid ${hexColors.veryLightGrey}`,\n borderRadius: 0,\n appearance: 'none',\n boxSizing: 'border-box',\n fontSize: '1.4rem',\n margin: '0.5rem 0 0.6rem 0',\n padding: '1rem',\n width: '100%',\n outline: 'none',\n\n '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': {\n appearance: 'none',\n margin: 0,\n },\n})\n\nexport const InputBoxStyled = styled.input(\n {\n backgroundColor: hexColors.lightGreyCommon,\n },\n ({ error }) => ({\n outline: error ? '0.1rem solid red' : undefined,\n }),\n inputBoxBaseStyles\n)\n\nexport const inputLabelBaseStyles = css({\n display: 'block',\n fontSize: '1.2rem',\n})\n\nexport const InputLabelStyled = styled('label')(\n {\n color: hexColors.dimGrey,\n },\n inputLabelBaseStyles\n)\n\nexport const ValidationErrorStyled = styled('label')({\n background: hexColors.lightRedCommonError,\n boxSizing: 'border-box',\n color: hexColors.freeSpeechRed,\n display: 'inline-block',\n lineHeight: '1.5rem',\n marginBottom: '0.5rem',\n padding: '0.5rem 1rem',\n position: 'relative',\n width: '100%',\n '&::before': {\n content: '\"\"',\n bottom: '100%',\n border: 'solid transparent',\n position: 'absolute',\n pointerEvents: 'none',\n borderBottomColor: hexColors.lightRedCommonError,\n borderWidth: '0.5rem',\n },\n})\n\nexport const InputPasswordVisibilityStyled = styled('div')({\n position: 'relative',\n\n 'input[type=\"password\"]': {\n paddingRight: '4rem',\n },\n\n button: {\n position: 'absolute',\n right: 0,\n bottom: 0,\n top: 0,\n display: 'flex',\n alignContent: 'center',\n justifyContent: 'center',\n alignItems: 'center',\n width: '4rem',\n padding: '0.5rem',\n background: 0,\n border: 0,\n color: hexColors.lola,\n cursor: 'pointer',\n },\n})\n","import React, { forwardRef, type InputHTMLAttributes, type ComponentPropsWithRef } from 'react'\nimport { Icon, type IconType } from '../Icon'\nimport {\n InputBoxStyled,\n InputLabelStyled,\n InputPasswordVisibilityStyled,\n ValidationErrorStyled,\n} from './InputField.styles'\n\ntype Props = {\n /**\n * The label of the input.\n *\n * This is a remnant of older code where this attribute was used incorrectly. To set the name of the input, use `inputName` instead.\n */\n name?: string\n /**\n * The name of the input.\n */\n inputName?: string\n /**\n * The error message in case of validation errors.\n *\n * Set to `false` or `undefined` to hide.\n */\n errorMessage?: string | boolean\n /**\n * The test-id of the input.\n *\n * Setting this property will apply `data-tid-{testId}` to the input itself and `data-tid-{testId}-error to the error, if present.\n * Use of this attribute is discouraged and should only be used where using other matchers make no sense, such as with highly dynamic text where text/role matching can't work.\n *\n * See https://testing-library.com/docs/queries/about#priority\n */\n testId?: string\n /**\n * The event handler to invoke when the addon has been clicked.\n */\n handleAddOnAction?(): void\n /**\n * The icon to show in the addon on the far right of the input field.\n *\n * Leaving this blank will hide the addon.\n */\n addOnIcon?: IconType\n /**\n * The aria-label attribute for the addon.\n */\n addonAriaLabel?: string\n} & InputHTMLAttributes\n\nexport type InputFieldProps = ComponentPropsWithRef\n\nexport const InputField = forwardRef(\n (\n {\n name,\n inputName,\n type,\n onChange,\n required,\n errorMessage,\n testId,\n handleAddOnAction,\n addOnIcon,\n addonAriaLabel,\n ...inputProps\n }: Props,\n ref\n ): JSX.Element => {\n const inputTestId = testId ? { [`data-tid-${testId}`]: '' } : {}\n const errorTestId = testId ? { [`data-tid-${testId}-error`]: '' } : {}\n\n // nameProp gets destructured, so we can prevent a ton of snapshots\n // needing updating for a prop they don't use (but should)\n const nameProp = inputName ? { name: inputName } : {}\n\n const inputType: HTMLInputElement['type'] =\n type === 'password' && addOnIcon === 'visibilityoff' ? 'text' : type || 'text'\n\n return (\n
\n \n {name}\n {required ? '*' : null}\n \n\n \n \n {handleAddOnAction && (\n \n )}\n \n\n {errorMessage && (\n {errorMessage}\n )}\n
\n )\n }\n)\n\nInputField.displayName = 'InputField'\n","import React from 'react'\nimport { InputBoxStyled, InputLabelStyled, ValidationErrorStyled } from './InputField.styles'\nimport type { InputFieldProps } from './InputField'\n\nexport const CurrencyInputField = ({\n name,\n type,\n onChange,\n required,\n errorMessage,\n testId,\n ...inputProps\n}: InputFieldProps): JSX.Element => {\n const inputTestId = testId ? { [`data-tid-${testId}`]: '' } : {}\n const errorTestId = testId ? { [`data-tid-${testId}-error`]: '' } : {}\n\n return (\n
\n \n {name}\n {required ? '*' : null}\n \n \n {errorMessage && (\n {errorMessage}\n )}\n
\n )\n}\n\nCurrencyInputField.displayName = 'CurrencyInputField'\n","import styled from '@emotion/styled'\nimport type { CSSProperties } from 'react'\nimport { hexColors } from '@mobi/settings'\n\nexport type RadioThemeSettings = {\n radio: {\n height: CSSProperties['height']\n width: CSSProperties['width']\n paddingLeft: CSSProperties['paddingLeft']\n }\n}\n\nexport const defaultTheme: RadioThemeSettings = {\n radio: {\n width: '2rem',\n get height() {\n return this.width\n },\n get paddingLeft(): string {\n return `calc(${defaultTheme.radio.width} * 1.5)`\n },\n },\n}\n\ntype Props = {\n theme?: RadioThemeSettings\n}\n\nexport const RadioInputStyled = styled.input(\n {\n position: 'absolute',\n visibility: 'hidden',\n\n '&:checked + label::after': {\n backgroundImage: `url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe3N0cm9rZTojMDAwMDAwO3N0cm9rZS1taXRlcmxpbWl0OjEwO308L3N0eWxlPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjcwLjkiIGN5PSI3MC45IiByPSI2My45Ii8+PC9zdmc+)`,\n backgroundRepeat: 'no-repeat',\n transform: 'scale(0.8)',\n backgroundPosition: '50%',\n border: `2px solid transparent`,\n },\n\n '&[disabled] + label::before': {\n backgroundColor: hexColors.gainsboro,\n },\n },\n\n ({ theme }) => {\n const { height, width } = theme && theme.radio ? theme.radio : defaultTheme.radio\n return {\n '&:checked + label::after': {\n height,\n width,\n },\n }\n }\n)\n\nexport const RadioLabelStyled = styled.label(\n {\n fontSize: '1.2rem',\n color: hexColors.black,\n cursor: 'pointer',\n display: 'inline-block',\n padding: '0.2rem 0 0.2rem 3rem',\n position: 'relative',\n margin: '0.3rem 0 0 0',\n fontWeight: 'bold',\n\n '&::after, &::before': {\n position: 'absolute',\n content: '\" \"',\n display: 'inline-block',\n left: 0,\n top: 0,\n },\n\n '&::before': {\n border: `2px solid ${hexColors.darkGrey}`,\n borderRadius: '50%',\n },\n },\n\n ({ theme }) => {\n const { height, width, paddingLeft } = theme && theme.radio ? theme.radio : defaultTheme.radio\n return {\n lineHeight: height,\n paddingLeft,\n\n '&::before': {\n height,\n width,\n },\n }\n }\n)\n","import React, { type FormEvent, type InputHTMLAttributes } from 'react'\nimport { RadioInputStyled, RadioLabelStyled } from './RadioInput.styled'\n\ntype InputProps = Omit, 'type' | 'name' | 'id' | 'onChange'>\n\ntype Props = InputProps & {\n label: string\n name: string\n id: string\n onChange?: (e: FormEvent) => void\n}\n\nexport const RadioInput = ({ label, ...inputProps }: Props) => {\n return (\n
\n \n {label}\n
\n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const CheckboxInputStyled = styled('input')({\n margin: 0,\n opacity: 0,\n position: 'absolute',\n zIndex: 0,\n\n '&:checked + label::after': {\n backgroundImage: `url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAzMiAzMic+ICA8cGF0aCBmaWxsPScjMzEzMTMxJyBkPSdNMjUuNiwxMS40YzAuMi0wLjIsMC4yLTAuNSwwLTAuN2wtMi4zLTIuM2MtMC4yLTAuMi0wLjUtMC4yLTAuNywwTDE0LDE3bC0zLjYtMy42Yy0wLjItMC4yLTAuNS0wLjItMC43LDBsLTIuMywyLjMgYy0wLjIsMC4yLTAuMiwwLjUsMCwwLjdsNi4zLDYuM2MwLjIsMC4yLDAuNSwwLjIsMC43LDBMMjUuNiwxMS40TDI1LjYsMTEuNHonLz48L3N2Zz4=)`,\n backgroundSize: '2.4rem',\n backgroundRepeat: 'no-repeat',\n height: '2.4rem',\n width: '2.4rem',\n },\n\n '&[disabled] + label::before': {\n backgroundColor: hexColors.gainsboro,\n },\n})\n\nexport const CheckboxInputLabelStyled = styled('label')(\n {\n position: 'relative',\n boxSizing: 'border-box',\n display: 'inline-flex',\n alignItems: 'center',\n minWidth: '2.4rem',\n minHeight: '2.4rem',\n color: hexColors.black,\n paddingLeft: '2.4rem',\n margin: '0 0 0.7rem',\n\n '& > span': {\n marginLeft: '0.5rem',\n },\n\n '&::after, &::before': {\n position: 'absolute',\n content: '\"\"',\n display: 'inline-block',\n left: 0,\n top: 0,\n },\n\n '&::before': {\n height: '2rem',\n width: '2rem',\n border: `0.2rem solid ${hexColors.darkGrey}`,\n },\n },\n ({ boxPosition }: { boxPosition?: 'center' }) => ({\n '&::before': {\n top: boxPosition === 'center' ? '50%' : undefined,\n transform: boxPosition === 'center' ? 'translateY(-50%)' : undefined,\n },\n '&::after': {\n top: boxPosition === 'center' ? '50%' : undefined,\n transform: boxPosition === 'center' ? 'translateY(-50%)' : undefined,\n },\n })\n)\n","import React, { memo, type InputHTMLAttributes } from 'react'\nimport { CheckboxInputStyled, CheckboxInputLabelStyled } from './CheckboxInput.styles'\n\nexport type CheckboxInputProps = Partial> & {\n label: React.ReactNode\n id: string\n boxPosition?: 'center'\n}\n\nexport const CheckboxInput = memo(\n ({ label, id, boxPosition, ...inputProps }) => {\n const checkboxTestId = { [`data-tid-${id}`]: '' }\n return (\n
\n \n \n {label}\n \n
\n )\n }\n)\n\nCheckboxInput.displayName = 'CheckboxInput'\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nconst listItemFontSize = 1.4\nconst listItemPadding = 1\nconst listItemHeight = listItemFontSize + listItemPadding * 2\n\nexport const SuggestionsContainerStyled = styled.ul<{ maxItems: number }>(\n {\n backgroundColor: hexColors.white,\n border: `1px solid ${hexColors.veryLightGrey}`,\n boxSizing: 'border-box',\n width: '100%',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n overflowY: 'auto',\n lineHeight: 1,\n\n /* Hide the list when empty */\n '&:empty': {\n border: 0,\n },\n\n '& > li': {\n padding: `${listItemPadding}rem`,\n fontSize: `${listItemFontSize}rem`,\n },\n\n '& > li[data-highlighted=\"true\"]': {\n backgroundColor: hexColors.gainsboro,\n },\n },\n ({ maxItems }) => ({\n maxHeight: `${listItemHeight * maxItems}rem`,\n })\n)\n","import React, { type ReactNode, useMemo, useState } from 'react'\nimport { useCombobox, type UseComboboxStateChange, type UseComboboxPropGetters } from 'downshift'\nimport { debounceFn } from '@mobi/utils'\nimport { InputField, type InputFieldProps } from './InputField'\nimport { SuggestionsContainerStyled } from './AutocompleteInputField.styles'\nimport { BusyIndicator } from '@mobi/component-library/Feedback/BusyIndicator'\n\nexport type Suggestion = {\n id: string\n value: string\n}\n\ntype AutocompleteState = 'idle' | 'busy' | 'error'\n\nexport type AutocompleteInputProps = InputFieldProps &\n ReturnType['getInputProps']>\n\ntype AutocompleteInputFieldProps = Omit & {\n defaultValue?: string\n minChars?: number\n debounceMs?: number\n fetchSuggestionsCallback: (inputValue: string) => Promise\n onSelect?: (selection: string) => void\n onUnselect?: VoidFunction\n /**\n * A function that determines what component is used to render the input.\n *\n * Leaving this undefined will render the InputField defined in the Common namespace.\n */\n renderInput?: (props: AutocompleteInputProps) => ReactNode\n}\n\nexport const AutocompleteInputField = ({\n name,\n inputName,\n placeholder,\n defaultValue,\n required,\n minChars = 3,\n debounceMs = 500,\n fetchSuggestionsCallback,\n onSelect,\n onUnselect,\n renderInput = renderDefaultInput,\n}: AutocompleteInputFieldProps) => {\n const [state, setState] = useState('idle')\n const [items, setItems] = useState([])\n\n const debouncedOnInputValueChange = useMemo(() => {\n const debounced = debounceFn(({ inputValue }: UseComboboxStateChange) => {\n if (inputValue && inputValue.length >= minChars) {\n setState('busy')\n fetchSuggestionsCallback(inputValue)\n .then(suggestions => {\n setItems(suggestions)\n setState('idle')\n })\n .catch(() => setState('error'))\n } else {\n setItems([])\n }\n }, debounceMs)\n return (suggestion: UseComboboxStateChange) => {\n setState('idle')\n return debounced(suggestion)\n }\n }, [setState, debounceMs, minChars, fetchSuggestionsCallback])\n\n const {\n isOpen,\n highlightedIndex,\n selectedItem,\n reset,\n getMenuProps,\n getInputProps,\n getItemProps,\n } = useCombobox({\n items,\n initialSelectedItem: defaultValue\n ? {\n id: defaultValue,\n value: defaultValue,\n }\n : undefined,\n itemToString: item => item?.value ?? '',\n onInputValueChange: debouncedOnInputValueChange,\n onSelectedItemChange(changes) {\n if (changes.type === useCombobox.stateChangeTypes.FunctionReset) {\n onUnselect?.()\n } else if (changes.selectedItem?.id) {\n onSelect?.(changes.selectedItem.id)\n }\n },\n })\n\n const isBusy = state === 'busy' && !selectedItem\n\n return (\n
\n {renderInput({\n name,\n inputName,\n style: { marginBottom: 0 },\n ...getInputProps({\n placeholder,\n required,\n autoComplete: 'off',\n onKeyDown: () => selectedItem !== null && reset(),\n }),\n })}\n\n \n {isBusy && (\n
  • \n \n
  • \n )}\n {state === 'error' &&
  • Address lookup failed. Enter address manually.
  • }\n {isOpen &&\n state === 'idle' &&\n !selectedItem &&\n items.map((item, index) => (\n \n {item.value}\n \n ))}\n
    \n
    \n )\n}\n\n// region Helpers\nconst renderDefaultInput: NonNullable = props => (\n \n)\n// endregion\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport interface ToggleTypes {\n default: ToggleType\n grey: ToggleType\n inverted: ToggleType\n allgreen: ToggleType\n}\n\nconst toggleColors: ToggleTypes = {\n default: {\n trackFill: hexColors.gainsboro,\n trackFillActive: hexColors.gainsboro,\n leftCircle: hexColors.darkGrey,\n rightCircle: hexColors.sushi,\n text: hexColors.dimGrey,\n selectedText: hexColors.white,\n border: hexColors.darkGrey,\n },\n grey: {\n trackFill: hexColors.gainsboro,\n trackFillActive: hexColors.gainsboro,\n leftCircle: hexColors.darkGrey,\n rightCircle: hexColors.darkGrey,\n text: hexColors.dimGrey,\n selectedText: hexColors.white,\n border: hexColors.darkGrey,\n },\n inverted: {\n trackFill: hexColors.veryLightGrey,\n trackFillActive: hexColors.charCoal,\n leftCircle: hexColors.white,\n rightCircle: hexColors.white,\n text: hexColors.charCoal,\n selectedText: hexColors.white,\n border: 'transparent',\n },\n allgreen: {\n trackFill: hexColors.gainsboro,\n trackFillActive: hexColors.gainsboro,\n leftCircle: hexColors.sushi,\n rightCircle: hexColors.sushi,\n text: hexColors.dimGrey,\n selectedText: hexColors.white,\n border: hexColors.darkGrey,\n },\n}\n\ninterface ToggleStyledProps {\n isDisabled?: boolean\n toggledOn?: boolean\n type?: keyof ToggleTypes\n}\n\nexport const ToggleStyled = styled('svg')(\n {\n WebkitTapHighlightColor: 'transparent',\n padding: '0.3rem',\n verticalAlign: 'middle',\n display: 'inline-block',\n width: '5rem',\n height: '3rem',\n fontSize: '0.9rem',\n '& text': {\n fontWeight: 'bold',\n '@media screen and (max-width: 767px)': {\n fontSize: '1.2rem',\n },\n },\n '& circle': {\n transitionProperty: 'cx',\n transitionDuration: '0.2s',\n transitionTimingFunction: 'ease-in-out',\n },\n },\n props => {\n return {\n opacity: props.isDisabled ? 0.4 : 1,\n }\n }\n)\n\nexport const ThemedToggleStyled = styled(ToggleStyled)(\n ({ toggledOn, type = 'default' }) => ({\n '& rect.track': {\n stroke: toggleColors[type].border,\n fill: toggledOn ? toggleColors[type].trackFillActive : toggleColors[type].trackFill,\n },\n '& rect.disc': {\n textTransform: 'uppercase',\n fill: toggledOn ? toggleColors[type].rightCircle : toggleColors[type].leftCircle,\n },\n '& text': {\n fill: toggleColors[type].text,\n },\n '& text.selected': {\n fill: toggleColors[type].selectedText,\n },\n })\n)\n\ninterface ToggleType {\n trackFill: string\n trackFillActive: string\n leftCircle: string\n rightCircle: string\n text: string\n selectedText: string\n border: string\n}\n","import React, { useId } from 'react'\nimport { ThemedToggleStyled, ToggleTypes } from './Toggle.styles'\n\ninterface ToggleProps {\n toggledOn: boolean\n toggleOnCharacter?: string\n toggleOffCharacter?: string\n title?: string\n isDisabled: boolean\n onToggle: () => void\n type?: keyof ToggleTypes\n}\n\nexport function Toggle({\n toggledOn,\n onToggle,\n toggleOnCharacter,\n toggleOffCharacter,\n isDisabled,\n type = 'default',\n ...ToggleProps\n}: ToggleProps) {\n const clipId = useId()\n const cx = toggledOn ? '35' : '15'\n\n return (\n \n \n \n {toggleOffCharacter}\n \n \n {toggleOnCharacter}\n \n \n \n \n \n \n \n \n \n {toggleOffCharacter}\n \n \n {toggleOnCharacter}\n \n \n \n )\n}\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\nimport { ToggleStyled } from './Toggle.styles'\n\ninterface ToggleIndicatorProps {\n character: string\n}\n\nexport const ToggleIndicator = ({ character }: ToggleIndicatorProps) => {\n return (\n \n \n \n \n \n \n \n \n \n {character}\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SelectBoxStyled = styled('select')<{ error?: string | boolean }>(\n {\n appearance: 'none',\n backgroundImage: `url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjU2cHgiIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTYgMjU2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRpdGxlPmFycm93ZG93bjwvdGl0bGU+PGcgaWQ9ImFycm93ZG93biI+PHBhdGggZD0iTTI1Niw4MGwtMzItMzJsLTk2LDk2TDMyLDQ4TDAsODBsMTI4LDEyOEwyNTYsODB6Ii8+PC9nPjwvc3ZnPg==)`,\n backgroundColor: hexColors.lightGreyCommon,\n backgroundPosition: 'right 1rem top 50%',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '1.2rem',\n border: `1px solid ${hexColors.veryLightGrey}`,\n borderRadius: 0,\n boxSizing: 'border-box',\n fontSize: '1.4rem',\n margin: '0.5rem 0 0.6rem 0',\n padding: '1rem',\n width: '100%',\n },\n\n ({ error }) => ({\n outline: error ? '0.1rem solid red' : undefined,\n })\n)\n\nexport const OptionStyled = styled('option')({\n appearance: 'none',\n background: hexColors.white,\n fontSize: '1.4rem',\n padding: '0.3rem 1rem',\n height: '2rem',\n})\n","import React from 'react'\nimport { InputLabelStyled, ValidationErrorStyled } from '../Input'\nimport { OptionStyled, SelectBoxStyled } from './SelectField.styles'\n\nexport type SelectOption = string | { value: string; label: string }\n\nexport interface SelectFieldProps extends React.SelectHTMLAttributes {\n name: string\n hideLabel?: boolean\n options?: SelectOption[]\n placeholder?: string\n disablePlaceholder?: boolean\n errorMessage?: string | boolean\n childrenLast?: boolean\n}\n\nfunction createOption(option: SelectOption) {\n const { value, label } = typeof option === 'string' ? { value: option, label: option } : option\n return (\n \n {label}\n \n )\n}\n\nexport function SelectField({\n name,\n hideLabel,\n options = [],\n required,\n onChange,\n errorMessage,\n children,\n placeholder,\n disablePlaceholder,\n childrenLast = false,\n ...selectProps\n}: SelectFieldProps): JSX.Element {\n return (\n
    \n {!hideLabel && (\n \n {name}\n {required ? '*' : null}\n \n )}\n \n {!childrenLast && children}\n {placeholder && (\n \n )}\n {options.map(createOption)}\n {childrenLast && children}\n \n\n {errorMessage && {errorMessage}}\n
    \n )\n}\n","import styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { transparentize } from 'polished'\nimport { hexColors } from '@mobi/settings'\n\nconst rotate360 = keyframes({\n '0%': {\n transform: `rotate(0deg)`,\n },\n '100%': {\n transform: `rotate(360deg)`,\n },\n})\n\nexport const SpinnerOverlayStyled = styled('div')({\n backgroundColor: transparentize(0.6, hexColors.black),\n height: '100%',\n left: '0',\n position: 'fixed',\n top: '0',\n width: '100%',\n zIndex: 202,\n})\n\nexport const SpinnerHolderStyled = styled('div')({\n backgroundColor: hexColors.white,\n borderRadius: '0.6rem',\n boxSizing: 'content-box',\n height: '2.4rem',\n margin: '15rem auto 0',\n padding: '1.8rem',\n textAlign: 'center',\n width: '2.4rem',\n})\n\ntype SpinnerProps = {\n height?: string\n width?: string\n}\n\nexport const SpinnerStyled = styled('div')(({ width = '1em', height = '1em' }) => ({\n bottom: '0',\n fontSize: '2.4rem',\n height,\n width,\n zIndex: 9999999,\n\n '&::before': {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n border: `0.25em solid ${hexColors.blueDiamond}66`, // 66 in hex = 102 in decimal = 40% opacity\n borderRadius: '50%',\n boxSizing: 'border-box',\n content: '\"\"',\n animation: `${rotate360} 1.1s infinite linear`,\n borderLeftColor: hexColors.blueDiamond,\n },\n}))\n\nexport const DesktopSpinnerOverlayStyled = styled(SpinnerOverlayStyled)({\n left: '0',\n top: '0',\n marginLeft: 0,\n marginTop: 0,\n width: '850px',\n position: 'absolute',\n})\n\nexport interface SpinnerInline {\n /** Color of spinner */\n color?: 'light' | 'dark'\n /** Size in rem, interpolated as ${size}rem (default is inherit) */\n size?: number\n}\nexport const SpinnerInlineStyled = styled('span')(\n {\n display: 'inline-block',\n boxSizing: 'border-box',\n width: '1em',\n height: '1em',\n borderRadius: '50%',\n position: 'relative',\n transform: 'translateZ(0)',\n animation: `${rotate360} 1s infinite linear`,\n margin: 0,\n borderWidth: '0.2em',\n borderStyle: 'solid',\n },\n ({ color = 'light', size }) => ({\n borderColor: color === 'light' ? 'rgba(255, 255, 255, 0.3)' : 'rgba(0, 0, 0, 0.3)',\n borderLeftColor: color === 'light' ? hexColors.white : hexColors.blueDiamond,\n fontSize: size ? `${size}rem` : 'inherit',\n })\n)\n","import React from 'react'\nimport { SpinnerOverlayStyled, SpinnerHolderStyled, SpinnerStyled } from './Spinner.styles'\n\nexport { SpinnerStyled as SpinnerStandalone }\n\n/**\n * Busy indicator for mobile devices\n */\nexport function Spinner() {\n return (\n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { SpinnerHolderStyled, SpinnerStyled, DesktopSpinnerOverlayStyled } from './Spinner.styles'\n\n/**\n * Busy indicator for desktop browsers\n */\nexport function DesktopSpinner() {\n return (\n \n \n \n \n \n )\n}\n","import { lazy } from 'react'\n\nexport const SvgComponents = {\n GiddyUpLogo: lazy(() => import('./GiddyUpLogo')),\n GooglePay: lazy(() => import('./GooglePay')),\n SkyRacing: lazy(() => import('./SkyRacing')),\n TABLogo: lazy(() => import('./TABLogo')),\n PayIDLogo: lazy(() => import('./PayIDLogo')),\n TABtouchLogo: lazy(() => import('./TABtouchLogo')),\n TABtouchBrandLogo: lazy(() => import('./TABtouchBrandLogo')),\n}\n","import React, { Suspense } from 'react'\nimport { SvgComponents } from './Components'\nimport type { SvgLazyProps } from './types'\n\nexport const SvgLazy: React.FC<\n {\n name: keyof typeof SvgComponents\n } & SvgLazyProps\n> = ({ name, color, ...dimensions }) => {\n const SvgComponent = SvgComponents[name]\n if (!SvgComponent) return null\n\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius, shadow, spacing, font } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\n\nconst enum LocalConstants {\n AccordionExpandedClass = 'js-accordion--expanded',\n DefaultThemeClass = 'js-accordion--default-theme',\n ChevronClass = 'js-accordion__chevron',\n}\n\nexport const Accordion = React.forwardRef<\n HTMLDivElement,\n {\n title: React.ReactNode\n children: React.ReactNode\n /** Triggered when the accordion is toggled */\n onToggle?: (isExpanded: boolean) => void\n /** Determines if the accordion starts off already expanded */\n shouldStartExpanded?: boolean\n /** Controls if main theme should used */\n shouldUseDefaultTheme?: boolean\n }\n>(({ title, children, onToggle, shouldStartExpanded, shouldUseDefaultTheme = true }, ref) => {\n const isFirstRenderRef = React.useRef(true)\n\n const [buttonId] = React.useState(() => `${title}.button`)\n const [regionId] = React.useState(() => `${title}.region`)\n\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: 400,\n shouldStartExpanded,\n })\n\n // If shouldStartExpanded, prevent animation on mount\n React.useLayoutEffect(() => {\n if (!isFirstRenderRef.current || !shouldStartExpanded || !wrapperRef.current) return\n wrapperRef.current.style.height = 'auto'\n wrapperRef.current.style.opacity = '1'\n isFirstRenderRef.current = false\n }, [shouldStartExpanded, wrapperRef])\n\n // Handle content opacity toggling\n React.useEffect(() => {\n if (!wrapperRef.current) return\n wrapperRef.current.style.opacity = isExpanded ? '1' : '0'\n }, [wrapperRef, isExpanded])\n\n const classNames = []\n if (isExpanded) classNames.push(LocalConstants.AccordionExpandedClass)\n if (shouldUseDefaultTheme) classNames.push(LocalConstants.DefaultThemeClass)\n\n return (\n \n

    \n {\n onToggle?.(isExpanded)\n toggleExpanded()\n }}\n aria-expanded={isExpanded}\n aria-controls={regionId}\n id={buttonId}\n >\n {title}\n\n \n \n \n \n

    \n\n {(isExpanded || shouldRender) && (\n
    \n
    {children}
    \n
    \n )}\n
    \n )\n})\n\n// ======\n// Styles\n// ======\n\nconst ContainerStyled = styled.div({\n // Header\n '> h2': {\n margin: 0,\n\n '> button': {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${spacing.smx1} ${spacing.sm} ${spacing.smx1} ${spacing.md}`,\n background: 'unset',\n border: 0,\n\n '&:hover': { cursor: 'pointer' },\n\n // Title Text\n '> span:first-of-type': {\n flex: 1,\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n color: colors.black,\n fontWeight: font.weight.medium,\n textAlign: 'left',\n },\n\n // Chevron Icon\n ['> .' + LocalConstants.ChevronClass]: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: spacing.bigx3,\n width: spacing.bigx3,\n borderRadius: '50%',\n transform: 'rotate(0deg)',\n transition: `all 400ms ease`,\n color: colors.neutral[900],\n },\n },\n },\n\n // Wrapper\n '> div': {\n overflow: 'hidden',\n height: 0,\n opacity: 0,\n transition: 'height 400ms ease, opacity 600ms ease',\n willChange: 'height',\n\n // Content\n '> div': {\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n },\n\n ['&.' + LocalConstants.AccordionExpandedClass]: {\n ['> h2 > button > .' + LocalConstants.ChevronClass]: {\n transform: 'rotate(-180deg)',\n },\n },\n\n ['&.' + LocalConstants.DefaultThemeClass]: {\n backgroundColor: colors.white,\n border: `1px solid ${colors.neutral[200]}`,\n borderRadius: radius.md,\n boxShadow: shadow.xs,\n\n // Wrapper\n '> div': {\n borderTop: `0.05rem solid ${colors.neutral[200]}`,\n\n // Content\n '> div': {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n },\n },\n\n ['> h2 > button > .' + LocalConstants.ChevronClass]: {\n backgroundColor: colors.surface[50],\n },\n\n ['&.' + LocalConstants.AccordionExpandedClass]: {\n ['> h2 > button > .' + LocalConstants.ChevronClass]: {\n backgroundColor: colors.studio[500],\n color: colors.white,\n },\n },\n },\n})\n","import styled from '@emotion/styled'\nimport { colors, spacing, font } from '@mobi/component-library/Theme/Common'\nimport { gapX } from '../../../Utils/gap'\n\nconst themes = {\n neutral: {\n '--background-color': colors.greyDark,\n '--color': colors.white,\n },\n primary: { '--background-color': colors.mariner[500], '--color': colors.white },\n success: {\n '--background-color': colors.sushi[500],\n '--color': colors.white,\n },\n warning: {\n '--background-color': colors.warning[500],\n '--color': colors.black,\n },\n error: {\n '--background-color': colors.error[600],\n '--color': colors.white,\n },\n} as const\n\nexport type ThemeName = keyof typeof themes\n\ntype Props = {\n type: ThemeName\n}\n\nexport const BannerStyled = styled.div(\n {\n alignItems: 'center',\n backgroundColor: 'var(--background-color)',\n boxSizing: 'border-box',\n color: 'var(--color)',\n display: 'flex',\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n padding: `${spacing.sm} ${spacing.md}`,\n\n '> svg': {\n flex: '0 0 auto',\n fill: 'none', // Required because Mobi sets `fill: currentColor`\n },\n\n '> p': {\n flex: '1 1 auto',\n fontSize: 'inherit',\n margin: 0,\n textAlign: 'left',\n },\n\n '> button, > a': {\n flexShrink: 0,\n },\n 'button[name=\"close_button\"]': {\n marginRight: `-${spacing.smx1}`,\n marginLeft: `-${spacing.smx1}`,\n },\n },\n ({ type }) => themes[type],\n gapX(spacing.md)\n)\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport type { ThemeName } from './Banner.styles'\n\ntype Props = { theme: ThemeName }\n\nconst IconSize = '2.4rem'\n\nexport default ({ theme }: Props): JSX.Element | null => {\n switch (theme) {\n case 'neutral':\n return \n case 'primary':\n return \n case 'success':\n return \n case 'warning':\n return \n case 'error':\n return \n default:\n return null\n }\n}\n","import React, { HTMLAttributes, memo, type ReactNode } from 'react'\nimport { BannerStyled, type ThemeName } from './Banner.styles'\nimport BannerIcon from './BannerIcon'\nimport { Button, Icon } from '@mobi/component-library/Common/V2'\nimport { colors } from '@mobi/component-library/Theme/Common'\n\ntype Props = {\n type?: ThemeName\n text: string\n button?: ReactNode\n hideIcon?: boolean\n onClickDismiss?: () => void\n} & HTMLAttributes\n\nexport const Banner = memo(\n ({ text, type = 'neutral', button, hideIcon = false, onClickDismiss, ...props }) => {\n return (\n \n {!hideIcon && }\n\n

    {text}

    \n\n {button}\n\n {onClickDismiss && (\n onClickDismiss()}\n color='tertiary_grey'\n size='sm'\n isIconOnlyButton\n aria-label='Dismiss banner'\n >\n \n \n )}\n
    \n )\n }\n)\n\nBanner.displayName = 'Banner'\n","import React, { type ButtonHTMLAttributes } from 'react'\nimport styled, { type CSSObject } from '@emotion/styled'\nimport { colors, radius, shadow, spacing, font } from '../../../Theme/Common'\nimport { gapX } from '../../../Utils/gap'\n\ntype Props = Partial & ButtonHTMLAttributes\n\nexport const Button = React.forwardRef(\n ({ children, color = 'primary', isFullWidth = false, size = 'md', ...props }, ref) => (\n \n {children}\n \n )\n)\n\n// ======\n// Styles\n// ======\n\nexport const ButtonStyled = styled.button(\n {\n boxSizing: 'border-box',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: font.family.primary,\n cursor: 'pointer',\n touchAction: 'manipulation',\n },\n ({ color = 'primary', size = 'md', isFullWidth = false, isIconOnlyButton = false }) => ({\n ...(isFullWidth ? { display: 'flex', width: '100%' } : { display: 'inline-flex' }),\n\n ...buttonSizing({ isIconOnlyButton })[size],\n ...buttonColors[color],\n }),\n gapX('0.8rem')\n)\n\n// Variants\n\nexport const buttonSizing = ({\n isIconOnlyButton = false /* For single-icon only buttons, horizontal and vertical padding should match. */,\n isPillButton = false,\n}): Record => ({\n xs: {\n height: '3.2rem',\n minWidth: '3.2rem',\n padding: `0 ${isIconOnlyButton ? 0 : spacing.sm}`,\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n borderRadius: isPillButton ? radius.pill : radius.sm,\n },\n sm: {\n height: '3.6rem',\n minWidth: '3.6rem',\n padding: `0 ${isIconOnlyButton ? 0 : spacing.sm}`,\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n borderRadius: isPillButton ? radius.pill : radius.lg,\n },\n md: {\n height: '4.4rem',\n minWidth: '4.4rem',\n padding: `0 ${isIconOnlyButton ? 0 : spacing.md}`,\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n borderRadius: isPillButton ? radius.pill : radius.lgx1,\n },\n lg: {\n height: '5.6rem',\n minWidth: '5.6rem',\n padding: `0 ${isIconOnlyButton ? 0 : spacing.bigx1}`,\n fontWeight: font.weight.semibold,\n fontSize: font.size.xl.fontSize,\n letterSpacing: font.size.xl.letterSpacing,\n lineHeight: font.size.xl.lineHeight,\n borderRadius: isPillButton ? radius.pill : radius.lgx2,\n },\n})\n\nexport const buttonColors: Record = {\n primary: {\n color: colors.white,\n backgroundColor: colors.studio[500],\n border: `0.1rem solid ${colors.studio[500]}`,\n boxShadow: shadow.xs,\n\n '&:active': {\n background: colors.studio[600],\n border: `0.1rem solid ${colors.studio[600]}`,\n },\n '&:hover': {\n border: `0.1rem solid ${colors.studio[500]}`,\n },\n '&:disabled': {\n background: colors.lavender[100],\n border: `0.1rem solid ${colors.lavender[100]}`,\n },\n },\n\n secondary_color: {\n color: colors.lavender[700],\n backgroundColor: colors.lavender[50],\n border: `0.1rem solid ${colors.lavender[50]}`,\n\n '&:active': {\n backgroundColor: colors.lavender[100],\n border: `0.1rem solid ${colors.lavender[100]}`,\n },\n '&:hover': {\n border: `0.1rem solid ${colors.lavender[200]}`,\n backgroundColor: `0.1rem solid ${colors.lavender[50]}`,\n },\n '&:disabled': {\n color: colors.white,\n backgroundColor: colors.lavender[50],\n border: `0.1rem solid ${colors.lavender[50]}`,\n },\n },\n\n secondary_grey: {\n color: colors.neutral[900],\n backgroundColor: colors.surface[200],\n border: `0.1rem solid ${colors.surface[50]}`,\n\n '&:active': {\n backgroundColor: colors.neutral[300],\n border: `0.1rem solid ${colors.surface[300]}`,\n },\n '&:hover': {\n border: `0.1rem solid ${colors.neutral[900]}`,\n },\n '&:disabled': {\n color: colors.neutral[400],\n },\n },\n\n secondary_outline: {\n color: colors.neutral[900],\n backgroundColor: colors.white,\n border: `0.1rem solid ${colors.neutral[200]}`,\n boxShadow: shadow.xs,\n\n '&:active': {\n backgroundColor: colors.white,\n border: `0.1rem solid ${colors.neutral[500]}`,\n },\n '&:hover': {\n border: `0.1rem solid ${colors.neutral[100]}`,\n backgroundColor: `0.1rem solid ${colors.neutral[100]}`,\n },\n '&:disabled': {\n color: colors.neutral[200],\n backgroundColor: colors.white,\n border: `0.1rem solid ${colors.neutral[200]}`,\n },\n },\n\n secondary_destructive: {\n backgroundColor: colors.error[50],\n border: `0.1rem solid ${colors.error[50]}`,\n boxShadow: shadow.xs,\n color: colors.error[700],\n\n '&:active': {\n backgroundColor: colors.error[200],\n },\n\n '&:disabled': {\n backgroundColor: colors.surface[50],\n color: colors.error[100],\n },\n },\n\n tertiary_color: {\n color: colors.lavender[700],\n backgroundColor: colors.transparent,\n border: 0,\n\n '&:active': {\n border: `0.1rem solid ${colors.lavender[50]}`,\n },\n '&:hover': {\n backgroundColor: colors.lavender[50],\n },\n '&:disabled': {\n color: colors.neutral[200],\n },\n },\n\n tertiary_grey: {\n color: colors.neutral[900],\n backgroundColor: colors.transparent,\n border: 0,\n\n '&:active': {\n border: `0.1rem solid ${colors.neutral[400]}`,\n },\n '&:hover': {\n backgroundColor: colors.surface[100],\n },\n '&:disabled': {\n color: colors.neutral[200],\n },\n },\n\n positive: {\n color: colors.white,\n backgroundColor: colors.success[500],\n border: `0.1rem solid ${colors.success[500]}`,\n boxShadow: shadow.xs,\n\n '&:active': {\n backgroundColor: colors.success[700],\n border: `0.1rem solid ${colors.success[700]}`,\n },\n '&:hover': {\n border: `0.1rem solid ${colors.success[500]}`,\n backgroundColor: `0.1rem solid ${colors.success[500]}`,\n },\n '&:disabled': {\n backgroundColor: colors.success[200],\n border: `0.1rem solid ${colors.success[100]}`,\n },\n },\n\n destructive: {\n color: colors.white,\n backgroundColor: colors.error[600],\n border: `0.1rem solid ${colors.error[600]}`,\n boxShadow: shadow.xs,\n\n '&:active': {\n backgroundColor: colors.error[700],\n border: `0.1rem solid ${colors.error[700]}`,\n },\n '&:disabled': {\n backgroundColor: colors.error[200],\n border: `0.1rem solid ${colors.error[200]}`,\n },\n },\n}\n\n// =====\n// Types\n// =====\nexport type ButtonColor =\n | 'primary'\n | 'secondary_color'\n | 'secondary_grey'\n | 'secondary_outline'\n | 'secondary_destructive'\n | 'positive'\n | 'tertiary_color'\n | 'tertiary_grey'\n | 'destructive'\n\nexport type ButtonStyledProps = {\n /**\n * The color variant of the button\n */\n color: ButtonColor\n /**\n * The size of the button\n */\n size: 'xs' | 'sm' | 'md' | 'lg'\n /**\n * Whether the button should be inline or block-level\n *\n * Setting this to true will make the button block-level and set its width to 100%\n */\n isFullWidth?: boolean\n /**\n * Whether the button's content consists of a single icon without any text\n */\n isIconOnlyButton?: boolean\n}\n","import React, { type ComponentProps } from 'react'\nimport styled from '@emotion/styled'\nimport { Button, buttonColors, buttonSizing } from './Button'\n\ntype Props = ComponentProps\n\nexport const PillButton: React.FC = ({\n children,\n color = 'primary',\n isFullWidth = false,\n size = 'md',\n ...props\n}) => (\n \n {children}\n \n)\n\nconst PillButtonStyled = styled(Button)(\n ({ color = 'primary', size = 'md', isFullWidth = false, isIconOnlyButton = false }) => ({\n ...(isFullWidth ? { display: 'flex', width: '100%' } : { display: 'inline-flex' }),\n\n ...buttonSizing({ isIconOnlyButton, isPillButton: true })[size],\n ...buttonColors[color],\n })\n)\n","import React, { type HTMLAttributes } from 'react'\nimport styled, { type CSSObject } from '@emotion/styled'\nimport { Icon } from '../Icon'\nimport { colors, font, radius, spacing } from '../../../Theme/Common'\nimport { gapX, gapY } from '../../../Utils/gap'\n\ntype Props = InfoBoxStyledProps & HTMLAttributes\n\nexport const InfoBox: React.FC = ({ children, color = 'grey', size = 'md', ...props }) => {\n return (\n \n \n {children}\n \n )\n}\n\nInfoBox.displayName = 'InfoBox'\n\n// ==============\n// Styles\n// ==============\n\nconst InfoBoxStyled = styled.div(\n {\n alignItems: 'stretch',\n borderRadius: radius.md,\n display: 'flex',\n ...font.size.md,\n a: {\n color: 'inherit',\n },\n '> div': {\n flex: 1,\n },\n },\n ({ color = 'grey', size = 'md' }) => ({\n ...infoBoxSizing[size],\n ...infoBoxColors[color],\n }),\n gapX(spacing.sm)\n)\n\nconst MessageContainer = styled.div(\n {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n\n '> span': {\n fontWeight: font.weight.semibold,\n },\n },\n gapY(spacing.smx2)\n)\n\n// ==============\n// Variants\n// ==============\n\nexport const infoBoxSizing: Record = {\n sm: { padding: `${spacing.smx2} ${spacing.smx1}` },\n md: { padding: spacing.sm },\n}\n\nexport const infoBoxColors: Record = {\n grey: { background: colors.neutral[100], color: colors.neutral[900] },\n orange: { background: colors.warning[50], color: colors.warning[800] },\n red: { background: colors.error[50], color: colors.error[700] },\n blue: { background: colors.mariner[50], color: colors.mariner[600] },\n}\n\n// ==============\n// Types\n// ==============\n\nexport type InfoBoxStyledProps = {\n /**\n * The color variant of the info box\n */\n color: InfoBoxColor\n /**\n * The size of the info box\n */\n size: 'sm' | 'md'\n}\n\nexport type InfoBoxColor = 'grey' | 'orange' | 'red' | 'blue'\n","import { lazy } from 'react'\n\n/** DO NOT modify, contents are automatically generated (see cli-helper) */\nexport const Icons = {\n BannerError: lazy(() => import('./Banner/error')),\n BannerNeutral: lazy(() => import('./Banner/neutral')),\n BannerPrimary: lazy(() => import('./Banner/primary')),\n BannerSuccess: lazy(() => import('./Banner/success')),\n BannerWarning: lazy(() => import('./Banner/warning')),\n CustomBetSlipWithTabtouchLogo: lazy(() => import('./Custom/bet-slip-with-tabtouch-logo')),\n CustomBetslip: lazy(() => import('./Custom/betslip')),\n CustomScale02: lazy(() => import('./Custom/scale-02')),\n CustomScanMyBet: lazy(() => import('./Custom/scan-my-bet')),\n DuocolorAlertTriangle: lazy(() => import('./Figma/Duocolor/Alerts/alert-triangle')),\n DuocolorArrowCircleRight: lazy(() => import('./Figma/Duocolor/Arrows/arrow-circle-right')),\n DuocolorArrowNarrowRight: lazy(() => import('./Figma/Duocolor/Arrows/arrow-narrow-right')),\n DuocolorArrowsUp: lazy(() => import('./Figma/Duocolor/Arrows/arrows-up')),\n DuocolorBank: lazy(() => import('./Figma/Duocolor/Finance/bank')),\n DuocolorCalendar: lazy(() => import('./Figma/Duocolor/Time/calendar')),\n DuocolorCheckCircle: lazy(() => import('./Figma/Duocolor/General/check-circle')),\n DuocolorCloud01: lazy(() => import('./Figma/Duocolor/Weather/cloud-01')),\n DuocolorCloudRaining05: lazy(() => import('./Figma/Duocolor/Weather/cloud-raining-05')),\n DuocolorCloudSun02: lazy(() => import('./Figma/Duocolor/Weather/cloud-sun-02')),\n DuocolorCopy02: lazy(() => import('./Figma/Duocolor/General/copy-02')),\n DuocolorCurrencyDollarCircle: lazy(\n () => import('./Figma/Duocolor/Finance/currency-dollar-circle')\n ),\n DuocolorDelete: lazy(() => import('./Figma/Duocolor/Editor/delete')),\n DuocolorLoading01: lazy(() => import('./Figma/Duocolor/General/loading-01')),\n DuocolorStar01: lazy(() => import('./Figma/Duocolor/Shapes/star-01')),\n DuocolorSun: lazy(() => import('./Figma/Duocolor/Weather/sun')),\n LineAlertCircle: lazy(() => import('./Figma/Line/Alerts/alert-circle')),\n LineAlertTriangle: lazy(() => import('./Figma/Line/Alerts/alert-triangle')),\n LineBank: lazy(() => import('./Figma/Line/Finance/bank')),\n LineBankNote03: lazy(() => import('./Figma/Line/Finance/bank-note-03')),\n LineBellPlus: lazy(() => import('./Figma/Line/Alerts/bell-plus')),\n LineBookmarkAdd: lazy(() => import('./Figma/Line/General/bookmark-add')),\n LineCheck: lazy(() => import('./Figma/Line/General/check')),\n LineCheckCircle: lazy(() => import('./Figma/Line/General/check-circle')),\n LineCheckCircleBroken: lazy(() => import('./Figma/Line/General/check-circle-broken')),\n LineCreditCard02: lazy(() => import('./Figma/Line/Finance/credit-card-02')),\n LineInfoCircle: lazy(() => import('./Figma/Line/General/info-circle')),\n LineMaximize01: lazy(() => import('./Figma/Line/Layout/maximize-01')),\n LineMaximize02: lazy(() => import('./Figma/Line/Layout/maximize-02')),\n LineMenu01: lazy(() => import('./Figma/Line/General/menu-01')),\n LineMinimize02: lazy(() => import('./Figma/Line/Layout/minimize-02')),\n LinePencil01: lazy(() => import('./Figma/Line/Editor/pencil-01')),\n LinePhoneCall01: lazy(() => import('./Figma/Line/Communication/phone-call-01')),\n LinePlaceholder: lazy(() => import('./Figma/Line/General/placeholder')),\n LinePlusCircle: lazy(() => import('./Figma/Line/General/plus-circle')),\n LineReceipt: lazy(() => import('./Figma/Line/Finance/receipt')),\n LineRefreshCw05: lazy(() => import('./Figma/Line/Arrows/refresh-cw-05')),\n LineRepeat04: lazy(() => import('./Figma/Line/Media/repeat-04')),\n LineSearchSm: lazy(() => import('./Figma/Line/General/search-sm')),\n LineShare02: lazy(() => import('./Figma/Line/General/share-02')),\n LineStar01: lazy(() => import('./Figma/Line/Shapes/star-01')),\n LineTrash01: lazy(() => import('./Figma/Line/General/trash-01')),\n LineTrash04: lazy(() => import('./Figma/Line/General/trash-04')),\n LineVolumeMax: lazy(() => import('./Figma/Line/Media/volume-max')),\n LineVolumeX: lazy(() => import('./Figma/Line/Media/volume-x')),\n LogoFacebook: lazy(() => import('./Logo/facebook')),\n LogoInstagram: lazy(() => import('./Logo/instagram')),\n LogoX: lazy(() => import('./Logo/x')),\n SolidBarChart10: lazy(() => import('./Figma/Solid/Charts/bar-chart-10')),\n SolidBellRinging01: lazy(() => import('./Figma/Solid/Alerts/bell-ringing-01')),\n SolidCheckCircle: lazy(() => import('./Figma/Solid/General/check-circle')),\n SolidChevronDown: lazy(() => import('./Figma/Solid/Arrows/chevron-down')),\n SolidChevronLeft: lazy(() => import('./Figma/Solid/Arrows/chevron-left')),\n SolidChevronRight: lazy(() => import('./Figma/Solid/Arrows/chevron-right')),\n SolidChevronRightDouble: lazy(() => import('./Figma/Solid/Arrows/chevron-right-double')),\n SolidChevronUp: lazy(() => import('./Figma/Solid/Arrows/chevron-up')),\n SolidCircle: lazy(() => import('./Figma/Solid/Shapes/circle')),\n SolidFile06: lazy(() => import('./Figma/Solid/Files/file-06')),\n SolidLayoutGrid01: lazy(() => import('./Figma/Solid/Layout/layout-grid-01')),\n SolidList: lazy(() => import('./Figma/Solid/Layout/list')),\n SolidPauseCircle: lazy(() => import('./Figma/Solid/Media/pause-circle')),\n SolidPlayCircle: lazy(() => import('./Figma/Solid/Media/play-circle')),\n SolidRefreshCw01: lazy(() => import('./Figma/Solid/Arrows/refresh-cw-01')),\n SolidRows02: lazy(() => import('./Figma/Solid/Layout/rows-02')),\n SolidScale02: lazy(() => import('./Figma/Solid/Editor/scale-02')),\n SolidSkipBack15: lazy(() => import('./Figma/Solid/Arrows/skip-back-15')),\n SolidSkipForward15: lazy(() => import('./Figma/Solid/Arrows/skip-forward-15')),\n SolidStar01: lazy(() => import('./Figma/Solid/Shapes/star-01')),\n SolidStopCircle: lazy(() => import('./Figma/Solid/Media/stop-circle')),\n SolidTarget03: lazy(() => import('./Figma/Solid/General/target-03')),\n SolidTrendUp01: lazy(() => import('./Figma/Solid/Charts/trend-up-01')),\n SolidTriangle: lazy(() => import('./Figma/Solid/Shapes/triangle')),\n SolidTrophy01: lazy(() => import('./Figma/Solid/Education/trophy-01')),\n SolidUser01: lazy(() => import('./Figma/Solid/Users/user-01')),\n SolidXCircle: lazy(() => import('./Figma/Solid/General/x-circle')),\n SolidXClose: lazy(() => import('./Figma/Solid/General/x-close')),\n} as const\n","import React, { type SVGAttributes, Suspense } from 'react'\nimport styled from '@emotion/styled'\nimport { Icons } from './library'\n\ntype Props = {\n name: keyof typeof Icons\n color?: string\n size?: string\n} & SVGAttributes\n\nexport const Icon: React.FC = ({\n name,\n color = 'inherit',\n size = '2rem',\n ...svgAttributes\n}) => {\n const IconComponent = Icons[name]\n if (!IconComponent) return null\n\n return (\n \n \n \n \n \n )\n}\n\nconst IconWrapper = styled.span({\n position: 'relative',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexShrink: 0,\n\n svg: { maxWidth: '100%', height: 'auto' },\n})\n","import React, { type InputHTMLAttributes } from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { type SharedProps } from './types'\n\ntype Props = SharedProps & {\n /**\n * Setting this property will turn the input into a controlled input, doing so will require an `onChange` or `onInput` handler.\n * This property is mutually exclusive with `defaultChecked`.\n */\n checked?: boolean\n /**\n * Setting this property will turn the input into an uncontrolled input.\n * This property is mutually exclusive with `checked`.\n */\n defaultChecked?: boolean\n} & Omit, 'disabled'>\n\nexport const Checkbox = ({ id, name, label, helpText, isDisabled, ...inputAttributes }: Props) => {\n id ||= name\n\n return (\n \n \n\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst CheckboxStyled = styled.div({\n '--checkbox-size': '2rem',\n\n fontFamily: font.family.primary,\n ...font.size.lg,\n\n input: { display: 'none' },\n\n label: {\n display: 'flex',\n alignItems: 'center',\n\n // Label Text Container\n '> span:last-of-type': {\n display: 'block',\n\n span: {\n display: 'flex',\n alignItems: 'center',\n margin: '0.1rem 0',\n\n // Label\n ':first-of-type': { color: colors.neutral[900] },\n\n // Help\n ':last-of-type': { color: colors.neutral[600] },\n ':last-of-type:empty': { display: 'none' },\n },\n },\n\n // Handling Checkbox alignment when there is no label\n '> span:only-child': { marginRight: 0, display: 'flex' },\n },\n\n '[role=\"checkbox\"]': {\n boxSizing: 'border-box',\n flex: '0 0 auto',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 'var(--checkbox-size)',\n height: 'var(--checkbox-size)',\n marginRight: spacing.sm,\n backgroundColor: colors.white,\n border: `1px solid ${colors.neutral[300]}`,\n borderRadius: radius.sm,\n color: colors.transparent,\n },\n\n 'input:checked + label [role=\"checkbox\"]': {\n backgroundColor: colors.lavender[500],\n borderColor: colors.lavender[500],\n color: colors.lavender[50],\n },\n\n 'input:disabled + label [role=\"checkbox\"]': {\n backgroundColor: colors.neutral[200],\n borderColor: colors.neutral[300],\n },\n\n 'input:disabled:checked + label [role=\"checkbox\"]': {\n color: colors.neutral[300],\n },\n})\n","import styled from '@emotion/styled'\nimport { newTheme as theme } from '../../../Theme'\n\ntype Props = {\n invalid?: boolean\n disabled?: boolean\n}\n\nfunction determineColors(isDisabled: boolean, isInvalid: boolean) {\n const { colors } = theme.components.Input\n\n if (isDisabled) {\n return {\n background: colors.disabled?.background ?? colors.background,\n border: colors.disabled?.border ?? colors.border,\n helpText: colors.disabled?.helpText ?? colors.helpText,\n }\n }\n\n if (isInvalid) {\n return {\n background: colors.invalid?.background ?? colors.background,\n border: colors.invalid?.border ?? colors.border,\n helpText: colors.invalid?.helpText ?? colors.helpText,\n }\n }\n\n return {\n background: colors.background,\n border: colors.border,\n helpText: colors.helpText,\n }\n}\n\nexport const InputFieldStyled = styled.div(({ invalid = false, disabled = false }) => {\n const { border, colors, spacing, shadow } = theme.components.Input\n\n const effectiveColors = determineColors(disabled, invalid)\n\n return {\n color: disabled ? colors.disabled?.text : colors.text,\n fontFamily: theme.font.family.primary,\n ...theme.font.size.md,\n\n '& > label': {\n display: 'block',\n fontWeight: theme.font.weight.medium,\n ...theme.font.size.lg,\n marginBottom: spacing.label.margin.bottom,\n },\n\n '& > div': {\n alignItems: 'center',\n backgroundColor: effectiveColors.background,\n border: `1px solid ${effectiveColors.border}`,\n borderRadius: border.radius,\n boxShadow: shadow,\n display: 'flex',\n height: '4.4rem',\n padding: `0 ${spacing.input.padding.x}`,\n outlineColor: 'transparent',\n outlineStyle: 'solid',\n outlineWidth: '4px',\n\n '&:focus-within': {\n borderColor: colors.focused?.border,\n outlineColor: colors.focused?.outline,\n },\n\n '& > input': {\n width: '100%',\n background: 'none',\n border: 'none',\n caretColor: colors.caret,\n color: disabled ? colors.disabled?.text : colors.text,\n flex: '1 1 auto',\n font: 'inherit',\n fontSize: 'inherit',\n fontWeight: theme.font.weight.regular,\n height: '100%',\n letterSpacing: 'inherit',\n lineHeight: 'inherit',\n padding: 0,\n\n '&:not(:first-child)': {\n marginInlineStart: spacing.input.margin.left,\n\n '@supports not (margin-inline-start: 0)': {\n marginLeft: spacing.input.margin.left,\n },\n },\n\n '&:not(:last-child)': {\n marginInlineEnd: spacing.input.margin.right,\n\n '@supports not (margin-inline-end: 0)': {\n marginRight: spacing.input.margin.right,\n },\n },\n\n '&::placeholder': {\n color: colors.placeholder,\n },\n\n '&:disabled::placeholder': {\n color: colors.disabled?.placeholder,\n },\n\n '&:focus': {\n outline: 'none',\n },\n },\n },\n\n '& > span': {\n color: effectiveColors.helpText,\n display: 'block',\n marginTop: spacing.helpText.margin.top,\n ...theme.font.size.md,\n\n '&:empty': {\n display: 'none',\n },\n },\n }\n})\n","import React, { type ReactNode, type InputHTMLAttributes } from 'react'\nimport { InputFieldStyled } from './Input.styled'\nimport type { SharedProps } from './types'\n\ntype Props = SharedProps & {\n /**\n * The type of the input.\n *\n * Setting the type will also change the input's behaviour and how it displays on particular devices.\n *\n * When needing to deal with decimal numbers, prefer using the `\"text\"` type and set `inputMode` to `\"numeric\"`.\n */\n type?: 'text' | 'password' | 'email' | 'tel' | 'number'\n /**\n * A string or React node to use as the prefix.\n */\n prefix?: ReactNode\n /**\n * A string or React node to use as the suffix.\n */\n suffix?: ReactNode\n /**\n * The placeholder text for the input.\n *\n * Only shows when the input is empty.\n */\n placeholder?: string\n /**\n * The value of the input.\n *\n * Setting this property will turn the input into a controlled input, doing so will require an `onChange` or `onInput` handler.\n * This property is mutually exclusive with `defaultValue`.\n */\n value?: string\n /**\n * The default value of the input.\n *\n * Setting this property will turn the input into an uncontrolled input.\n * This property is mutually exclusive with `value`.\n */\n defaultValue?: string\n /**\n * Whether the value of the input is invalid.\n */\n isInvalid?: boolean\n} & Omit, 'prefix' | 'disabled'>\n\nexport const Input = ({\n id,\n type = 'text',\n name,\n className,\n label,\n helpText,\n prefix,\n suffix,\n isInvalid = false,\n isDisabled = false,\n ...inputProps\n}: Props) => {\n id ||= name\n\n prefix = typeof prefix === 'string' ? {prefix} : prefix\n suffix = typeof suffix === 'string' ? {suffix} : suffix\n\n return (\n \n {label && }\n
    \n {prefix}\n \n {suffix}\n
    \n {helpText}\n
    \n )\n}\n\nInput.displayName = 'Input'\n","import React, { type ComponentPropsWithoutRef, useState } from 'react'\nimport { UnstyledButton } from '../../Buttons'\nimport { Icon } from '../../Icon'\nimport { Input } from './Input'\n\ntype Props = Omit, 'type' | 'suffix'>\n\nexport const Password = (props: Props) => {\n const [isPasswordVisible, setPasswordVisible] = useState(false)\n\n const type = isPasswordVisible ? 'text' : 'password'\n\n const renderSuffix = () => (\n setPasswordVisible(isVisible => !isVisible)}\n >\n \n \n )\n\n return \n}\n\nPassword.displayName = 'Password'\n","import styled from '@emotion/styled'\nimport { colors, font, radius, shadow, spacing } from '../../../Theme/Common'\nimport { gapX } from '../../../Utils/gap'\n\nexport const CopyFieldStyled = styled.div({\n alignItems: 'center',\n boxShadow: shadow.xs,\n boxSizing: 'border-box',\n backgroundColor: colors.white,\n border: `1px solid ${colors.neutral[300]}`,\n borderRadius: radius.md,\n color: colors.neutral[900],\n display: 'flex',\n fontFamily: font.family.primary,\n height: '4rem',\n justifyContent: 'space-between',\n padding: `0 ${spacing.smx1}`,\n ...font.size.lg,\n})\n\nexport const CopyButtonStyled = styled.button(\n {\n alignItems: 'center',\n backgroundColor: colors.lavender[50],\n border: 'none',\n borderRadius: radius.smx1,\n color: colors.lavender[700],\n display: 'inline-flex',\n fontWeight: 500,\n height: '2.4rem',\n padding: `0 ${spacing.smx1}`,\n ...font.size.sm,\n\n '&:active': {\n backgroundColor: colors.lavender[700],\n color: colors.lavender[50],\n },\n },\n gapX(spacing.smx2)\n)\n","import React, { memo, type MouseEventHandler, useEffect, useRef, useState } from 'react'\nimport { Icon } from '../Icon'\nimport { CopyButtonStyled, CopyFieldStyled } from './CopyField.styled'\nimport { copyToClipboard } from '@mobi/utils'\n\nconst enum LocalConstants {\n COPY_TEXT_RESET_TIME_MS = 2_000,\n}\n\ntype Props = {\n /**\n * The value that is displayed and copied to the clipboard\n */\n value: string\n /**\n * The callback to fire when the value was successfully copied\n */\n onCopied?: VoidFunction\n /**\n * The callback to fire when the copy action has failed\n *\n * If the clipboard API is supported, the error will be the DOMException thrown by writeText\n *\n * If the clipboard API is not supported and `document.execCommand` is not supported, the error will be a constructed DOMException with the same name\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/writeText\n * @link https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand#copy\n */\n onCopyError?: (e: DOMException) => void\n}\n\nexport const CopyField = memo(({ value, onCopied, onCopyError }) => {\n const timeoutRef = useRef(-1)\n const [valueWasRecentlyCopied, setValueWasRecentlyCopied] = useState(false)\n\n const copy: MouseEventHandler = e => {\n e.preventDefault()\n e.stopPropagation()\n\n copyToClipboard(value)\n .then(() => {\n onCopied?.()\n\n setValueWasRecentlyCopied(true)\n\n window.clearTimeout(timeoutRef.current)\n\n timeoutRef.current = window.setTimeout(() => {\n setValueWasRecentlyCopied(false)\n }, LocalConstants.COPY_TEXT_RESET_TIME_MS)\n })\n .catch((err: DOMException) => {\n onCopyError?.(err)\n })\n }\n\n useEffect(() => {\n return () => {\n window.clearTimeout(timeoutRef.current)\n }\n }, [])\n\n return (\n \n {value}\n\n \n \n {valueWasRecentlyCopied ? 'Copied' : 'Copy'}\n \n \n )\n})\n\nCopyField.displayName = 'CopyField'\n","import styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const H1Styled = styled.h1({\n color: colors.black,\n fontFamily: font.family.primary,\n fontStyle: 'normal',\n fontWeight: font.weight.bold,\n margin: 0,\n padding: `${spacing.sm} ${spacing.smx1}`,\n ...font.size.xl,\n textTransform: 'unset',\n textAlign: 'center',\n borderBottom: `0.1rem solid ${colors.neutral[200]}`,\n})\n\nexport const SubHeadingStyled = styled.h2({\n margin: 0,\n padding: `${spacing.smx1} ${spacing.md}`,\n fontStyle: 'normal',\n fontFamily: font.family.primary,\n fontSize: font.size.xl.fontSize,\n letterSpacing: font.size.xl.letterSpacing,\n lineHeight: font.size.xl.lineHeight,\n fontWeight: font.weight.semibold,\n textAlign: 'left',\n textShadow: 'none',\n textTransform: 'unset',\n background: 0,\n color: colors.lavender[900],\n\n '> span': {\n display: 'block',\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n})\n","import styled from '@emotion/styled'\nimport { colors, font, spacing } from '../../../Theme/Common'\nimport type { ActionOrientation } from './types'\nimport { CSSProperties } from 'react'\n\ntype FooterProps = {\n orientation: ActionOrientation\n}\n\nconst flexDirections: Record = {\n horizontal: 'row',\n vertical: 'column',\n 'vertical-reverse': 'column-reverse',\n 'horizontal-reverse': 'row-reverse',\n}\n\nexport const AlertBoxActionsStyled = styled.footer(({ orientation }) => {\n return {\n display: 'flex',\n flexDirection: flexDirections[orientation],\n gap: spacing.smx1,\n marginTop: spacing.bigx1,\n\n '> *': {\n flex: '0 1 50%',\n },\n }\n})\n\nexport const AlertBoxIconStyled = styled.div(() => {\n return {\n width: spacing.lgx1,\n height: spacing.lgx1,\n backgroundColor: colors.surface[100],\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 'auto',\n marginBottom: spacing.md,\n }\n})\n\nexport const AlertBoxContentStyled = styled.div({\n '> header h1': {\n color: colors.black,\n fontWeight: font.weight.semibold,\n margin: 0,\n marginBottom: spacing.smx1,\n ...font.size.xl2,\n },\n\n '> div': {\n color: colors.neutral[800],\n ...font.size.lg,\n },\n})\n","import React, { type ReactNode, type FC } from 'react'\nimport { AlertBoxActionsStyled, AlertBoxIconStyled, AlertBoxContentStyled } from './AlertBox.styled'\nimport { Button, type ButtonColor } from '../Buttons'\nimport { Modal as ModalOverlay } from '../../../Overlays/Modal'\nimport type { ActionOrientation } from './types'\n\ntype Props = {\n /**\n * Whether the alert box is open\n */\n isOpen: boolean\n /**\n * The title within the alert box\n */\n title: string\n /**\n * The alert box text\n */\n text: ReactNode\n /**\n * The svg icon to display\n */\n icon?: JSX.Element\n /**\n * The color of the confirm action\n */\n confirmColor?: ButtonColor\n /**\n * The text of the confirm action\n */\n confirmText: string\n /**\n * The callback for the confirm action\n */\n onConfirm: VoidFunction\n /**\n * The color of the cancel action\n */\n cancelColor?: ButtonColor\n /**\n * The text of the cancel action\n */\n cancelText: string\n /**\n * The callback for the cancel action\n */\n onCancel: VoidFunction\n /**\n * Which direction the actions are oriented\n *\n * These values align to flex directions. `vertical` maps to `column` and horizontal to `row`. Adding the `-reverse` suffix will make them `column-reverse` and `row-reverse` respectively.\n */\n actionOrientation?: ActionOrientation\n}\n\nexport const AlertBox: FC = ({\n isOpen,\n title,\n text,\n icon,\n confirmColor = 'primary',\n confirmText,\n onConfirm,\n cancelColor = 'destructive',\n cancelText,\n onCancel,\n actionOrientation = 'vertical',\n}) => {\n return (\n \n \n {icon && {icon}}\n\n
    \n

    {title}

    \n
    \n\n
    {text}
    \n\n \n \n\n \n \n
    \n
    \n )\n}\n\nAlertBox.displayName = 'AlertBox'\n","import { css } from '@emotion/react'\nimport styled from '@emotion/styled'\n\nexport const centered = css({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n})\n\nexport const Centered = styled.div(centered)\n","import React, { forwardRef, type HTMLProps } from 'react'\nimport styled from '@emotion/styled'\nimport { callCenterPhoneNumber, callCenterInternationalPhoneNumber } from '@mobi/utils/phone'\nimport { colors } from '@mobi/component-library/Theme/Common'\n\nexport const CustomerServiceCentre = ({\n prefixText,\n suffixText,\n}: {\n prefixText?: string\n suffixText?: string\n}) => (\n
    \n {prefixText ?? ''} Please contact our Customer Service Centre on {' '}\n for more information {suffixText ?? ''}\n
    \n)\n\ntype Props = HTMLProps & { isInternational?: boolean }\n\nexport const CustomerServiceTelephone = forwardRef(\n ({ isInternational }, ref) => {\n const [linkText, text] = isInternational\n ? [callCenterInternationalPhoneNumber, <>+61 8 9445 5391]\n : [callCenterPhoneNumber, <>1300 36 36 88]\n\n return (\n \n {text}\n \n )\n }\n)\n\nCustomerServiceTelephone.displayName = 'CustomerServiceTelephone'\n\nconst LinkStyled = styled('a')({\n color: colors.studio[500],\n})\n","import styled from '@emotion/styled'\nimport React from 'react'\nimport { PaymentMethodButtonStyled } from '../PaymentMethodButton.styled'\nimport { PaymentMethodButton } from '../../Buttons/types'\n\n/**\n * ApplePayButton component\n * @description Renders a button according to Apple Pay style guidelines. Safari only.\n */\nexport const ApplePayButton: PaymentMethodButton = ({ disabled, onClick, ...buttonAttributes }) => {\n return (\n \n )\n}\n\nconst ApplePayButtonStyled = styled(PaymentMethodButtonStyled)({\n WebkitAppearance: '-apple-pay-button',\n ApplePayButtonType: 'plain',\n ApplePayButtonStyle: 'black',\n})\n","export const makeAccessibleName = (issuerName: string, lastFour: string) =>\n `${issuerName} ending in ${lastFour}`\n","import styled from '@emotion/styled'\n\nexport const CreditCardDisplayStyled = styled.strong({\n display: 'inline-flex',\n\n '& :not(:last-child)': {\n marginRight: '0.5ch',\n },\n})\n","import React from 'react'\nimport { CreditCardDisplayStyled } from './CreditCardDisplay.styled'\nimport { makeAccessibleName } from './helpers'\n\ntype Props = {\n issuerName: string\n lastFour: string\n}\n\nexport const CreditCardDisplay = ({ issuerName, lastFour }: Props) => {\n return (\n \n {issuerName}\n ....\n {lastFour}\n \n )\n}\n","import React from 'react'\nimport type { CreditCardButton } from '../types'\nimport { PaymentMethodButtonStyled } from '../PaymentMethodButton.styled'\nimport { CreditCardDisplay } from './CreditCardDisplay'\nimport { makeAccessibleName } from './helpers'\nimport { Mastercard } from '../../Icons'\n\nconst issuerName = 'Mastercard'\n\nexport const MasterCardButton: CreditCardButton = ({ lastFour, disabled, onClick }) => {\n return (\n \n \n \n \n )\n}\n","import React from 'react'\nimport type { CreditCardButton } from '../types'\nimport { PaymentMethodButtonStyled } from '../PaymentMethodButton.styled'\nimport { CreditCardDisplay } from './CreditCardDisplay'\nimport { makeAccessibleName } from './helpers'\nimport { Visa } from '../../Icons'\n\nconst issuerName = 'Visa'\n\nexport const VisaButton: CreditCardButton = ({ lastFour, disabled, onClick }) => {\n return (\n \n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { type Provider, themes } from '../Common/PaymentMethodIconThemes'\nimport { font } from '../../Theme/Common'\n\ntype Props = {\n provider?: Provider\n disabled?: boolean\n}\n\nexport const PaymentMethodButtonStyled = styled.button(\n {\n ...font.size.lg,\n alignItems: 'center',\n border: 'none',\n borderRadius: '4px',\n display: 'flex',\n justifyContent: 'center',\n margin: 0,\n padding: 0,\n height: '40px',\n width: '100%',\n\n '& > :not(:last-child)': {\n marginRight: '1.8rem',\n },\n },\n ({ provider, disabled }) => {\n const themeName: Provider = provider ?? 'default'\n const { textColor, backgroundColor, svgWidth, svgHeight } = themes[themeName]\n\n return {\n backgroundColor,\n color: textColor,\n cursor: disabled ? 'disabled' : 'pointer',\n filter: disabled ? 'opacity(0.6)' : undefined,\n\n '& svg': {\n width: svgWidth,\n height: svgHeight,\n },\n\n '&:hover': disabled || {\n filter: 'brightness(0.95)',\n },\n }\n }\n)\n","import styled from '@emotion/styled'\nimport { ButtonStyled } from '../../Common/V2/Buttons/Button'\nimport { font, spacing } from '../../Theme/Common'\n\nexport const PaymentMethodSelectionButtonStyled = styled(ButtonStyled)({\n position: 'relative',\n minHeight: '4.8rem',\n padding: `0 ${spacing.smx1}`,\n ...font.size.sm,\n})\n\nexport const PaymentMethodSelectionIconStyled = styled.span({\n justifyContent: 'center',\n display: 'inline-flex',\n minWidth: '4.8rem',\n})\n\nexport const PaymentMethodSelectionTextStyled = styled.span({\n display: 'inline-flex',\n flex: '1 1 auto',\n textAlign: 'left',\n})\n\nexport const PaymentMethodSelectionChevronStyled = styled.span({\n display: 'inline-flex',\n marginLeft: 'auto',\n})\n","import React, { type ComponentPropsWithoutRef } from 'react'\nimport {\n PaymentMethodSelectionChevronStyled,\n PaymentMethodSelectionIconStyled,\n PaymentMethodSelectionTextStyled,\n PaymentMethodSelectionButtonStyled,\n} from './PaymentMethodSelectionButton.styled'\nimport type { Button } from '../../Common/V2'\nimport type { DepositSourceAll } from '../types'\nimport { PaymentMethodLogo, ChevronRight } from '../Icons'\n\ntype Props = Omit, 'onClick'> & {\n title: string\n paymentMethod: DepositSourceAll\n isDesktop: boolean\n selected?: boolean\n onClick: (paymentMethod: DepositSourceAll) => void\n}\n\n/**\n * A button that represents a selectable payment method within TABTouch.\n */\nexport const PaymentMethodSelectionButton = ({\n selected = false,\n title,\n paymentMethod,\n isDesktop,\n onClick,\n ...buttonAttributes\n}: Props) => {\n return (\n onClick(paymentMethod)}\n {...buttonAttributes}\n >\n \n \n \n {title}\n {isDesktop && (\n \n \n \n )}\n \n )\n}\n","import React from 'react'\nimport { PaymentMethodButtonStyled } from '../PaymentMethodButton.styled'\nimport type { PaymentMethodButton } from '../types'\n\nexport const PayPalButton: PaymentMethodButton = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport type { PaymentMethodButton } from '../types'\nimport { PaymentMethodButtonStyled } from '../PaymentMethodButton.styled'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\n\n/**\n * Best-effort implementation of Google Pay's button\n *\n * While not *exactly* in line with Google's brand guidelines, this button is styled\n * to look as closely to the real button as we reasonably could. Normally we load\n * the button through Google's scripts, but those are not allowed in web views\n */\nexport const GooglePayButton: PaymentMethodButton = ({ disabled, onClick }) => {\n return (\n \n \n \n )\n}\n","import type { IssuerName } from '@mobi/api-types'\nimport type { DepositSource } from '../types'\nimport { hexColors } from '@mobi/settings'\n\nexport type Provider =\n | 'paypal'\n | 'applepay'\n | 'default'\n | 'mastercard'\n | 'visa'\n | 'americanExpress'\n | 'googlepay'\n\nexport const ProviderMap: Record = {\n CreditCard: 'visa',\n PayPal: 'paypal',\n ApplePay: 'applepay',\n GooglePay: 'googlepay',\n VISA: 'visa',\n MASTER_CARD: 'mastercard',\n}\n\nexport type Theme = {\n backgroundColor: string\n textColor: string\n svgWidth: string\n svgHeight: string\n}\n\nexport const themes: Readonly> = {\n paypal: {\n backgroundColor: hexColors.paypalGold,\n textColor: 'inherit',\n svgHeight: 'auto',\n svgWidth: 'auto',\n },\n applepay: {\n backgroundColor: hexColors.black,\n textColor: 'inherit',\n svgHeight: 'auto',\n svgWidth: 'auto',\n },\n default: {\n backgroundColor: '',\n textColor: '',\n svgHeight: 'auto',\n svgWidth: 'auto',\n },\n mastercard: {\n backgroundColor: hexColors.black,\n textColor: hexColors.white,\n svgHeight: '28px',\n svgWidth: '44px',\n },\n visa: {\n backgroundColor: hexColors.americanExpressBlue,\n textColor: hexColors.white,\n svgHeight: '18px',\n svgWidth: '52px',\n },\n americanExpress: {\n backgroundColor: hexColors.black,\n textColor: hexColors.white,\n svgHeight: '28px',\n svgWidth: '43px',\n },\n googlepay: {\n backgroundColor: hexColors.black,\n textColor: 'inherit',\n svgHeight: 'auto',\n svgWidth: 'auto',\n },\n} as const\n","import { PaymentMethod } from '@mobi/api-types'\nimport React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius, spacing } from '../../Theme/Common'\nimport { Alert } from '../Icons'\n\ntype Props = Pick\n\nexport const CreditCardAlertLabel = ({ isDebitCard, isExpired }: Props) => {\n let alertLabel: string | undefined\n if (!isDebitCard) {\n alertLabel = 'Disabled'\n } else if (isExpired) {\n alertLabel = 'Expired'\n }\n if (!alertLabel) return null\n\n return (\n \n {alertLabel}\n \n )\n}\n\nconst BadgeStyled = styled.span({\n alignItems: 'center',\n backgroundColor: colors.error['50'],\n borderRadius: radius.sm,\n color: colors.error['500'],\n display: 'inline-flex',\n padding: spacing.smx2,\n columnGap: spacing.smx2,\n})\n","import { PaymentMethod } from '@mobi/api-types'\nimport React, { memo, type ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { nameCardIssuerMap } from '../helpers'\nimport { spacing } from '../../Theme/Common'\nimport { CreditCardName } from './CreditCardName'\nimport { makeAccessibleName } from '@mobi/component-library/Deposit/Buttons/CreditCard/helpers'\n\ntype CardProps = Pick & {\n isSelected: boolean\n alertLabel?: ReactNode\n}\n\ntype Props = CardProps & {\n icon: ReactNode\n}\n\nexport const CreditCardDisplay = memo(\n ({ lastFour, formattedExpiryDate, alertLabel, issuerName, icon }) => {\n return (\n \n {icon ?? }\n\n \n\n {alertLabel ?? {formattedExpiryDate}}\n \n )\n }\n)\n\nconst CreditCardDisplayStyled = styled.span({\n alignItems: 'center',\n display: 'inline-grid',\n gap: spacing.smx2,\n gridTemplateColumns: 'minmax(0, max-content) 3.2rem 1fr minmax(0, min-content)',\n textAlign: 'left',\n width: '100%',\n})\n","import styled from '@emotion/styled'\nimport { ButtonStyled } from '../../Common/V2/Buttons'\nimport { colors, radius, spacing } from '../../Theme/Common'\nimport { gapX } from '../../Utils/gap'\n\nexport const CreditCardListStyled = styled.ul({\n listStyle: 'none',\n margin: 0,\n padding: 0,\n\n '&:empty': {\n display: 'none',\n },\n\n li: [\n {\n display: 'flex',\n },\n gapX(spacing.sm),\n ],\n\n 'li:not(:last-child)': {\n marginBottom: spacing.smx1,\n },\n})\n\nexport const CreditCardListItemStyled = styled(ButtonStyled)(\n {\n borderRadius: radius.lgx1,\n color: colors.neutral[900],\n boxShadow: 'none',\n\n '&:disabled': {\n backgroundColor: colors.surface['100'],\n color: colors.neutral[900],\n opacity: 1,\n },\n\n '@media (max-width: 350px)': {\n padding: spacing.smx1,\n },\n },\n ({ color }) => {\n if (color === 'secondary_color') {\n return {\n border: `0.1rem solid ${colors.lavender[500]}`,\n }\n }\n return {}\n }\n)\n","import React from 'react'\nimport { PaymentMethod } from '@mobi/api-types'\nimport { CreditCardAlertLabel } from './CreditCardAlertLabel'\nimport { CreditCardDisplay } from './CreditCardDisplay'\nimport { CreditCardListItemStyled, CreditCardListStyled } from './CreditCardList.styled'\nimport { isCardValid, isSameCard } from '../helpers'\n\ntype Props = {\n /**\n * The user's cards.\n */\n cards: PaymentMethod[]\n /**\n * An optional function to render after the credit card list entry\n */\n renderSuffix?: (card: PaymentMethod) => React.ReactNode\n /**\n * An optional function to render the icon\n */\n renderIcon?: (card: PaymentMethod) => React.ReactNode\n /**\n * Whether the items are disabled\n */\n disabled?: boolean\n /**\n * Card that is currently selected\n */\n selectedCard?: PaymentMethod\n /**\n * The handler that fires when a card has been clicked\n */\n onClick?: (card: PaymentMethod) => void\n}\n\nexport const CreditCardList = ({\n cards,\n renderSuffix,\n renderIcon,\n disabled,\n selectedCard,\n onClick,\n}: Props) => {\n return (\n \n {cards.map((card, i) => {\n const isHighlightedCard = selectedCard !== undefined && isSameCard(card, selectedCard)\n\n return (\n
  • \n {\n e.preventDefault()\n\n if (!disabled && isCardValid(card)) {\n onClick?.(card)\n }\n }}\n >\n \n ) : null\n }\n icon={renderIcon?.(card) ?? null}\n />\n \n\n {renderSuffix?.(card)}\n
  • \n )\n })}\n
    \n )\n}\n\nCreditCardList.displayName = 'CreditCardList'\n","import React, { memo } from 'react'\nimport styled from '@emotion/styled'\nimport type { PaymentMethod } from '@mobi/api-types'\nimport { nameCardIssuerMap, cardIssuerNameMap } from '../helpers'\nimport { colors, radius, spacing } from '../../Theme/Common'\n\ntype Props = Pick\n\nexport const CreditCardName = memo(({ lastFour, issuerName }: Props) => {\n const Logo = cardIssuerNameMap[issuerName]\n const cardIssuer = nameCardIssuerMap[issuerName]\n\n return (\n <>\n \n \n \n\n \n {cardIssuer} .... {lastFour}\n \n \n )\n})\n\nCreditCardName.displayName = 'CreditCardName'\n\n// ======\n// Styles\n// ======\n\nconst LogoContainerStyled = styled.span(({ issuerName }: { issuerName: Props['issuerName'] }) => ({\n alignItems: 'center',\n backgroundColor: 'white',\n border: `0.5px solid ${colors.neutral['200']}`,\n borderRadius: radius.md,\n display: 'inline-flex',\n height: spacing.bigx1,\n width: spacing.bigx3,\n justifyContent: 'center',\n color: issuerName === 'VISA' ? '#1434CB' : 'unset',\n}))\nconst CardIssuerStyled = styled.span(() => ({\n display: 'none',\n\n '@media (min-width: 350px)': {\n display: 'inline',\n },\n}))\n","import React, { CSSProperties, useState } from 'react'\nimport styled from '@emotion/styled'\nimport { ButtonStyled } from '../../Common/V2/Buttons/Button'\nimport { colors, font, radius, spacing } from '../../Theme/Common'\nimport { CreditCardList } from '../../Deposit/CreditCard/CreditCardList'\nimport { CreditCardName } from './CreditCardName'\nimport { gapX } from '../../Utils/gap'\nimport { Icon } from '../../Common/V2/Icon'\nimport type { PaymentMethod } from '@mobi/api-types'\nimport { isSameCard, nameCardIssuerMap } from '../helpers'\nimport { CreditCardAlertLabel } from './CreditCardAlertLabel'\nimport { determineIndefiniteArticle } from '@mobi/utils'\n\ntype Props = {\n /**\n * The cards to display\n */\n cards: PaymentMethod[]\n /**\n * The user's primary card\n */\n primaryCard: PaymentMethod\n /**\n * The selected card\n */\n selectedCard: PaymentMethod\n /**\n * Whether the card selection is expanded by default or not\n */\n isOpenByDefault?: boolean\n /**\n * Callback when a card is selected\n */\n onSelect: (card: PaymentMethod) => void\n}\n\nexport const CreditCardSelector = ({\n cards,\n selectedCard,\n primaryCard,\n isOpenByDefault = false,\n onSelect,\n}: Props) => {\n const [isOpen, setIsOpen] = useState(isOpenByDefault)\n const isPrimaryCardValid = !primaryCard.isExpired && primaryCard.isDebitCard\n\n const shouldRenderDropdown =\n cards.length > 1 ||\n (cards.length === 1 && isSameCard(primaryCard, selectedCard) && !isPrimaryCardValid)\n\n return (\n {\n event.preventDefault()\n setIsOpen(!isOpen)\n }}\n aria-label='Your cards'\n >\n \n {selectedCard && (\n <>\n \n \n {shouldRenderDropdown && (\n \n )}\n \n )}\n \n\n {shouldRenderDropdown && (\n {\n onSelect(card)\n setIsOpen(false)\n }}\n renderIcon={card => {\n const style: CSSProperties = {\n display: 'inline-flex',\n color: colors.neutral[300],\n }\n\n const isCardSelected = isSameCard(card, selectedCard)\n\n if (card.isExpired) {\n style.color = colors.neutral[200]\n style.fill = colors.neutral[300]\n } else if (isCardSelected) {\n style.color = colors.lavender[500]\n }\n\n return (\n \n \n \n )\n }}\n />\n )}\n \n )\n}\n\nCreditCardSelector.displayName = 'CreditCardSelector'\n\nfunction makeSelectedCardLabel(card: PaymentMethod) {\n const issuer = nameCardIssuerMap[card.issuerName]\n\n const aOrAn = determineIndefiniteArticle(issuer)\n\n return `The current selected card is ${aOrAn} ${issuer} ending in ${card.lastFour}`\n}\n\n// ======\n// Styles\n// ======\n\nconst CreditCardSelectorStyled = styled.details({\n color: colors.neutral['900'],\n fontFamily: font.family.primary,\n fontWeight: font.weight.medium,\n ...font.size.lg,\n\n ul: {\n display: 'grid',\n listStyle: 'none',\n margin: `${spacing.sm} 0 ${spacing.smx2}`,\n padding: 0,\n },\n})\n\nconst CreditCardSelectorToggleStyled = styled(ButtonStyled)(\n {\n borderRadius: radius.lgx1,\n userSelect: 'none',\n\n '&:focus': {\n borderColor: colors.surface['300'],\n },\n\n '&::marker, &::-webkit-details-marker': {\n display: 'none',\n },\n },\n gapX(spacing.sm)\n).withComponent('summary')\n","import React from 'react'\n\nexport const Alert = () => (\n \n \n \n \n \n \n \n \n \n \n \n)\n","import React from 'react'\nimport { PaypalLogo, GooglePayLogo, ApplePayLogo, BPayLogo } from '../Icons'\nimport type { PaymentMethodsAll } from '../types'\nimport { Icon } from '../../Common/V2'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\n\ntype Props = {\n paymentMethod: PaymentMethodsAll\n}\n\nexport const PaymentMethodLogo = ({ paymentMethod }: Props) => {\n switch (paymentMethod) {\n case 'CreditCard':\n return \n case 'PayPal':\n return \n case 'GooglePay':\n return \n case 'ApplePay':\n return \n case 'BPay':\n return \n case 'Cash':\n return \n case 'ScanMyBet':\n return \n case 'PayID':\n return \n default:\n return null\n }\n}\n","import React from 'react'\n\nexport const Mastercard = () => (\n \n \n \n \n \n)\n","import React from 'react'\n\nexport const Visa = () => (\n \n \n \n)\n","import React from 'react'\n\nexport const GooglePayLogo = () => {\n return (\n \n Google Pay Logo\n \n The logo for Google Pay, depicting Google's logo along with the word "Pay" to\n the right.\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const ApplePayLogo = () => {\n return (\n \n Apple Pay Logo\n \n The logo for Apple Pay, depicting Apple's logo along with the word "Pay" to\n the right.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const CreditCardLogo = () => {\n return (\n \n Credit Card Icon\n An icon depicting a debit or credit card.\n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const PaypalLogo = () => {\n return (\n \n Paypal Text\n The text of Paypal without the P icon.\n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const ChevronRight = () => {\n return (\n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nexport const CheckCircleAnimated = () => (\n \n \n \n)\n\nconst draw = keyframes({\n '0%': {\n strokeDashoffset: '102.75810241699219px',\n strokeDasharray: '102.75810241699219px',\n },\n '100%': {\n strokeDashoffset: '205.51620483398438px',\n strokeDasharray: '102.75810241699219px',\n },\n})\n\nexport const Animation = styled.div({\n animation: `${draw} 1.3s ease-in-out 0s both`,\n})\n","import React from 'react'\n\nexport const BPayLogo = () => {\n return (\n \n BPay Text\n The text of BPay without the icon.\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport type { IssuerName } from '@mobi/api-types'\nimport type { DepositSource } from '../types'\nimport { font, colors } from '@mobi/component-library/Theme/Common'\nimport { ProviderMap, themes } from '../Common/PaymentMethodIconThemes'\nimport { gapY } from '../../Utils/gap'\n\nexport const PanelStyled = styled.div(\n {\n boxSizing: 'border-box',\n fontFamily: font.family.primary,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'max-content',\n },\n gapY('3rem')\n)\n\nexport const PanelIconStyled = styled.span<{ backgroundColor?: string }>(\n {\n display: 'inline-flex',\n borderRadius: '50%',\n height: '6.4rem',\n width: '6.4rem',\n justifyContent: 'center',\n alignItems: 'center',\n },\n ({ backgroundColor = colors.neutral[100] }) => ({\n backgroundColor,\n })\n)\n\nexport const PanelBankCardIconStyled = styled(PanelIconStyled)<{\n depositSource: DepositSource\n cardIssuer?: IssuerName\n}>(({ depositSource, cardIssuer }) => {\n const provider = cardIssuer ? ProviderMap[cardIssuer] : ProviderMap[depositSource]\n const { textColor, svgWidth, backgroundColor, svgHeight } = themes[provider]\n\n return {\n backgroundColor,\n color: textColor,\n cursor: 'disabled',\n\n '& svg': {\n height: svgHeight,\n width: svgWidth,\n },\n }\n})\n\nexport const PanelHeaderStyled = styled.div({\n fontSize: font.size.xl2.fontSize,\n fontWeight: font.weight.semibold,\n})\n\nexport const PanelSubHeaderStyled = styled.div({\n fontSize: font.size.lg.fontSize,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n textAlign: 'center',\n})\n\nexport const PanelButtonsStyled = styled.div(\n {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n gapY('0.8rem')\n)\n","import React, { type FC, memo } from 'react'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\nimport {\n PanelStyled as Panel,\n PanelIconStyled as Icon,\n PanelHeaderStyled as Header,\n PanelSubHeaderStyled as Subheader,\n} from './Workflow.styled'\n\ntype Props = { message: string }\n\nconst Component: FC = ({ message }) => {\n return (\n \n \n \n \n
    Processing Payment
    \n {message}\n
    \n )\n}\n\nComponent.displayName = 'BusyPanel'\n\nexport const BusyPanel = memo(Component)\n","import React, { type FC, memo } from 'react'\nimport type { IssuerName } from '@mobi/api-types'\nimport { toMoney } from '@mobi/utils/money'\nimport { PillButton } from '../../Common/V2'\nimport { depositSourceMap, cardIssuerNameMap } from '../helpers'\nimport {\n PanelStyled as Panel,\n PanelBankCardIconStyled,\n PanelHeaderStyled as Header,\n PanelSubHeaderStyled as Subheader,\n PanelButtonsStyled as Buttons,\n} from './Workflow.styled'\nimport { DepositSource } from '../types'\n\ntype Props = {\n /** The payment method being used, e.g. Credit Card, Paypal */\n depositSource: DepositSource\n /** The bank card issuer (Credit Card only) */\n cardIssuer?: IssuerName\n /** The amount being deposited */\n amount: number\n onConfirmed: VoidFunction\n onCanceled: VoidFunction\n}\n\nconst Component: FC = ({ depositSource, cardIssuer, amount, onConfirmed, onCanceled }) => {\n const Icon = cardIssuer ? cardIssuerNameMap[cardIssuer] : depositSourceMap[depositSource]\n return (\n \n \n \n \n
    Confirm {toMoney(amount)} Deposit
    \n \n Are you sure you want to deposit
    \n {toMoney(amount)} into your account?\n
    \n \n \n Deposit\n \n \n Cancel\n \n \n
    \n )\n}\n\nComponent.displayName = 'ConfirmPanel'\n\nexport const ConfirmPanel = memo(Component)\n","import React, { type FC, memo } from 'react'\nimport styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { toMoney } from '@mobi/utils/money'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { PillButton, Icon } from '@mobi/component-library/Common/V2'\nimport {\n PanelStyled as Panel,\n PanelIconStyled,\n PanelHeaderStyled as Header,\n PanelSubHeaderStyled as Subheader,\n PanelButtonsStyled as Buttons,\n} from './Workflow.styled'\n\ntype Props = {\n amount: number\n onDone: VoidFunction\n}\n\nconst Component: FC = ({ amount, onDone }) => {\n return (\n \n \n \n \n \n \n
    {toMoney(amount)}
    \n Your deposit was successful\n \n \n Done\n \n \n
    \n )\n}\n\nComponent.displayName = 'SuccessPanel'\n\nexport const SuccessPanel = memo(Component, () => true)\n\nconst draw = keyframes({\n '0%': {\n strokeDashoffset: '102.75810241699219px',\n strokeDasharray: '102.75810241699219px',\n },\n '100%': {\n strokeDashoffset: '205.51620483398438px',\n strokeDasharray: '102.75810241699219px',\n },\n})\n\nexport const Animation = styled.span({\n animation: `${draw} 1.3s ease-in-out 0s both`,\n height: '32px',\n})\n","import React, { type FC, memo } from 'react'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { PillButton, Icon } from '@mobi/component-library/Common/V2'\nimport {\n PanelStyled as Panel,\n PanelIconStyled,\n PanelHeaderStyled as Header,\n PanelSubHeaderStyled as Subheader,\n PanelButtonsStyled as Buttons,\n} from './Workflow.styled'\n\ntype Props = {\n wasDepositDeclined?: boolean\n message?: string\n onClose: VoidFunction\n}\n\nconst Component: FC = ({\n wasDepositDeclined = false,\n message = 'Please update your payment method.',\n onClose,\n}) => {\n return (\n \n \n \n \n
    Payment Failed
    \n \n {!wasDepositDeclined && (\n <>\n Your deposit could not be completed.\n
    \n \n )}\n {message}\n
    \n \n \n Return to deposit\n \n \n
    \n )\n}\n\nComponent.displayName = 'FailPanel'\n\nexport const FailPanel = memo(Component)\n","import { z } from 'zod'\n\nexport type Platform = 'browser_non_safari' | 'browser_safari' | 'ios' | 'android'\n\nconst inAppPayments = ['CreditCard', 'PayPal', 'ApplePay', 'GooglePay'] as const\n\nexport const PaymentMethodsSchema = z.enum([...inAppPayments])\nexport type PaymentMethods = z.infer\n\nexport const PaymentMethodsSelfServeSchema = z.enum(['BPay', 'Cash', 'ScanMyBet', 'PayID'])\nexport type PaymentMethodsSelfServe = z.infer\n\nexport const PaymentMethodsAvailabilitySchema = z.enum(['PayID', ...inAppPayments])\nexport type PaymentMethodsAvailability = z.infer\n\nexport const PaymentMethodsAllSchema = z.union([\n PaymentMethodsSchema,\n PaymentMethodsSelfServeSchema,\n])\n\nexport type PaymentMethodsAll = z.infer\n\n/** @deprecated Use PaymentMethodsAll */\nexport type DepositSourceAll = PaymentMethodsAll\n\n/** @deprecated Use PaymentMethods */\nexport type DepositSource = PaymentMethods\n\nexport type DeviceType = 'desktop' | 'mobile'\n","import type { FC } from 'react'\nimport type { PaymentMethod } from '@mobi/api-types'\nimport {\n PaymentMethodsSelfServeSchema,\n type DepositSource,\n type PaymentMethodsAll,\n type PaymentMethodsSelfServe,\n} from './types'\nimport { CreditCardLogo, PaypalLogo, ApplePayLogo, GooglePayLogo, Visa, Mastercard } from './Icons'\n\nexport const depositSourceMap: Record = {\n CreditCard: CreditCardLogo,\n PayPal: PaypalLogo,\n ApplePay: ApplePayLogo,\n GooglePay: GooglePayLogo,\n} as const\n\nexport const cardIssuerNameMap: Record = {\n VISA: Visa,\n MASTER_CARD: Mastercard,\n} as const\n\nexport const nameCardIssuerMap: Record = {\n VISA: 'Visa',\n MASTER_CARD: 'Mastercard',\n}\n\nexport function formatCardText({\n issuerName,\n lastFour,\n}: Pick) {\n return `${nameCardIssuerMap[issuerName]} .... ${lastFour}`\n}\n\nexport function isSameCard(card: PaymentMethod, otherCard: PaymentMethod) {\n return card.token === otherCard.token\n}\n\nexport const isCardValid = ({ isExpired, isDebitCard }: PaymentMethod) => isDebitCard && !isExpired\n\nexport function isSelfServePaymentMethod(\n paymentMethod: PaymentMethodsAll\n): paymentMethod is PaymentMethodsSelfServe {\n return PaymentMethodsSelfServeSchema.safeParse(paymentMethod).success\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors } from '@mobi/component-library/Theme/Common'\n\nexport const BusyIndicator: React.FC<{\n isBusy: boolean\n color?: string\n}> = ({ isBusy, color = colors.white }) => {\n if (!isBusy) {\n return null\n }\n return \n}\n\n// ======\n// Styles\n// ======\n\nconst LoaderBarsStyled = styled.div<{ color?: string }>({\n animation: 'animate 0.6s infinite ease-in-out',\n width: '0.4rem',\n height: '1.6rem',\n margin: '0 auto',\n position: 'relative',\n fontSize: '1rem',\n transform: 'translateZ(0)',\n animationDelay: '-0.16s',\n background: 'inherit',\n\n '&::after, &::before': {\n content: '\"\"',\n position: 'absolute',\n top: '0',\n width: '0.4rem',\n height: '1.6rem',\n animation: 'animate 1s infinite ease-in-out',\n background: 'inherit',\n },\n\n '&::before': {\n left: '-0.7rem',\n animationDelay: '-0.32s',\n },\n\n '&::after': {\n left: '0.7rem',\n },\n\n '@keyframes animate': {\n '40%': { transform: 'scaleY(1.25)' },\n '0%, 80%, 100%': { transform: 'scaleY(1)' },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\n\nexport const LoadingSpinner: React.FC<{ size?: string; color?: 'purple' | 'white' }> = ({\n size = '4rem',\n color = 'purple',\n}) => {\n const isWhite = color === 'white'\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst SvgStyled = styled.svg({\n flexShrink: 0,\n aspectRatio: '1/1',\n animation: 'spin 1.2s cubic-bezier(0.45, 0.14, 0.6, 0.86) infinite',\n\n '@keyframes spin': { to: { transform: 'rotate(360deg)' } },\n})\n","import mitt from 'mitt'\nimport type { ToastItem } from '@mobi/component-library/Feedback/Toast/types'\n\nexport const globalToastEmitter = mitt<{\n addToast: ToastItem\n removeToast: Pick\n}>()\n\nexport const addToast = (toast: ToastItem) => globalToastEmitter.emit('addToast', toast)\nexport const removeToast = (id: Pick) => globalToastEmitter.emit('removeToast', id)\n\n/** Used to create new context for toasts, allowing render relative to parent */\nexport const createToastsEventEmitter = () =>\n mitt<{\n addToast: ToastItem\n removeToast: Pick\n }>()\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { PillButton } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { spacing, radius, shadow, font, colors } from '@mobi/component-library/Theme/Common'\nimport type { ToastItem } from '@mobi/component-library/Feedback/Toast/types'\nimport type { globalToastEmitter } from '../../helpers/events'\n\nconst enum LocalConstants {\n LightThemeClass = 'js-toast--light-theme',\n DarkThemeClass = 'js-toast--dark-theme',\n DefaultTimeoutMs = 3_000, // 3s\n FullWidth = 'js-toast--full-width',\n}\n\nexport const Toast: React.FC<{\n toast: ToastItem\n onMount: OnMountFn\n toastEmitter: typeof globalToastEmitter\n}> = React.memo(({ toast, onMount, toastEmitter }) => {\n const toastRef = React.useRef(null)\n\n React.useEffect(() => {\n onMount({ id: toast.id, ref: toastRef })\n }, [onMount, toast])\n\n React.useEffect(() => {\n if (toast.timeoutMs === Infinity) return\n const timerId = setTimeout(() => {\n toastEmitter.emit('removeToast', { id: toast.id })\n }, toast.timeoutMs || LocalConstants.DefaultTimeoutMs)\n return () => {\n clearTimeout(timerId)\n }\n }, [toast, toastEmitter])\n\n return (\n \n
    {toast.content}
    \n\n
    \n {toast.isDismissable && (\n toastEmitter.emit('removeToast', { id: toast.id })}\n >\n \n \n )}\n
    \n \n )\n})\n\n// ======\n// Local Helpers\n// ======\n\nfunction getToastThemeClass(theme: ToastItem['theme']) {\n if (theme === 'none') return ''\n if (theme === 'dark') return LocalConstants.DarkThemeClass\n return LocalConstants.LightThemeClass\n}\n\n// ======\n// Styles\n// ======\n\nconst ToastStyled = styled.div({\n position: 'relative',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n pointerEvents: 'all',\n\n animationName: 'toast-enter',\n animationFillMode: 'forwards',\n animationDuration: '300ms',\n animationTimingFunction: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n\n ['&.' + LocalConstants.FullWidth]: {\n alignSelf: 'stretch',\n },\n\n ['&.' + LocalConstants.DarkThemeClass]: {\n padding: `${spacing.sm} ${spacing.md}`,\n borderRadius: radius.lgx2,\n boxShadow: shadow.md,\n\n border: `1px solid ${colors.studio[800]}`,\n backgroundColor: colors.studio[900],\n color: colors.white,\n\n '> div:last-of-type > button:not(:hover, :active)': { color: 'inherit' },\n },\n\n ['&.' + LocalConstants.LightThemeClass]: {\n padding: `${spacing.sm} ${spacing.md}`,\n borderRadius: radius.lgx2,\n boxShadow: shadow.md,\n\n border: `1px solid ${colors.neutral[200]}`,\n backgroundColor: colors.white,\n color: colors.black,\n },\n\n '@keyframes toast-enter': {\n '0%': { opacity: 0, transform: 'translateY(150%)' },\n '100%': { opacity: 1, transform: 'translateY(0)' },\n },\n\n '> div:first-of-type': { flex: '1 auto' },\n\n '> div:last-of-type': {\n display: 'flex',\n\n '&:empty': { display: 'none' },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype OnMountFn = (arg: { id: ToastItem['id']; ref: React.RefObject }) => void\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { layering, measurements, spacing } from '@mobi/component-library/Theme/Common'\nimport { Toast } from './Components/Toast'\nimport { globalToastEmitter } from './helpers/events'\nimport type { ToastItem } from './types'\n\nconst enum LocalConstants {\n PositionAbsoluteClass = 'js-toasts--absolute',\n}\n\nexport const Toasts: React.FC = ({\n toastEmitter = globalToastEmitter,\n isRelativeToParent,\n}) => {\n const toastsMapRef = React.useRef()\n const [toasts, setToasts] = React.useState<{ map: ToastMap }>(() => ({ map: new Map() }))\n toastsMapRef.current = toasts.map\n\n const toastElRefDictRef = React.useRef(new Map())\n const registerToastRefEl = React.useCallback(({ id, ref }: RegisterToastArg) => {\n toastElRefDictRef.current.set(id, ref)\n }, [])\n\n React.useEffect(() => {\n toastEmitter.on('addToast', toast => {\n const currentSize = toastsMapRef.current?.size || 0\n if (currentSize > 3) return\n\n setToasts(({ map }) => ({ map: map.set(toast.id, toast) }))\n })\n\n toastEmitter.on('removeToast', ({ id }) => {\n if (!toastsMapRef.current?.has(id)) return\n const toastEl = toastElRefDictRef.current.get(id)?.current\n if (!toastEl) return\n\n toastEl.addEventListener(\n 'animationend',\n () =>\n setToasts(({ map }) => {\n map.delete(id)\n toastElRefDictRef.current.delete(id)\n return { map }\n }),\n { once: true }\n )\n\n toastEl.style.zIndex = '0'\n toastEl.style.animationTimingFunction = 'cubic-bezier(0.550, 0.085, 0.680, 0.530)'\n toastEl.style.animationName = 'toast-exit'\n })\n }, [toastEmitter])\n\n return (\n \n {Array.from(toasts.map).map(([id, toast]) => (\n \n ))}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n position: 'fixed',\n zIndex: layering.modalOverlay,\n left: spacing.md,\n right: spacing.md,\n bottom: '6rem',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: spacing.smx2,\n margin: '0 auto',\n maxWidth: measurements.mobi.maxWidth,\n minWidth: measurements.mobi.minWidth,\n pointerEvents: 'none',\n\n '&:empty': { visibility: 'hidden' },\n\n '@keyframes toast-exit': {\n '0%': { opacity: 1, transform: 'translateY(0)' },\n '70%': { opacity: 1 },\n '100%': { opacity: 0, transform: 'translateY(150%)' },\n },\n\n [`&.${LocalConstants.PositionAbsoluteClass}`]: {\n position: 'absolute',\n bottom: spacing.md,\n },\n})\n\n// =====\n// Types\n// =====\n\ntype ToastsProps =\n | { toastEmitter?: never; isRelativeToParent?: never }\n | {\n toastEmitter: typeof globalToastEmitter\n /** Enables render of toasts relative to parent using position absolute */\n isRelativeToParent: boolean\n }\n\ntype ToastMap = Map\ntype ToastRefDict = Map>\ntype RegisterToastArg = { id: ToastItem['id']; ref: React.RefObject }\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nexport const Content: React.FC<\n {\n icon?: ToastType\n button?: { text: string; onClick: () => void }\n } & ({ title: string; subtitle?: string } | { title?: never; subtitle?: never })\n> = ({ icon, title, subtitle, button }) => {\n return (\n \n
    \n {icon && }\n
    \n\n
    \n {title && (\n <>\n {title}\n {subtitle && {subtitle}}\n \n )}\n
    \n\n
    \n {button && (\n \n )}\n
    \n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst iconPathDict: Record['name']> = {\n success: 'LineCheckCircle',\n warning: 'LineAlertTriangle',\n error: 'LineAlertCircle',\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx1,\n\n '> div:empty': { display: 'none' },\n\n // Icon\n '> div:nth-of-type(1)': {\n alignItems: 'center',\n borderRadius: radius.full,\n display: 'flex',\n height: '3.2rem',\n justifyContent: 'center',\n minWidth: '3.2rem',\n width: '3.2rem',\n\n '&[data-icon-type=\"success\"]': {\n color: colors.success[500],\n backgroundColor: colors.success[50],\n },\n\n '&[data-icon-type=\"warning\"]': {\n color: colors.warning[500],\n backgroundColor: colors.warning[50],\n },\n\n '&[data-icon-type=\"error\"]': {\n color: colors.error[500],\n backgroundColor: colors.error[50],\n },\n },\n\n // Titles\n '> div:nth-of-type(2)': {\n display: 'flex',\n flexDirection: 'column',\n\n '> span:nth-of-type(2)': {\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype ToastType = 'success' | 'warning' | 'error'\n","import React, { type CSSProperties, type ReactNode } from 'react'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport styled from '@emotion/styled'\nimport { colors, font, measurements, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { PillButton } from '@mobi/component-library/Common/V2/Buttons/PillButton'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst enum LocalConstants {\n AnimationTimingMs = 300,\n UnmountClassName = 'js-modal--unmounting',\n}\n\ntype Props = {\n /** The header title of the modal */\n headerTitle?: string\n /** Whether the modal is open */\n isOpen: boolean\n /**\n * How the close button behave\n *\n * - allowed - Clicking the button dismisses the modal (default)\n * - disallowed - The button is hidden.\n * - disabled - The button is visible, but disabled.\n */\n dismissStatus?: 'allowed' | 'disallowed' | 'disabled'\n /** Callback when the user has dismissed the modal */\n onDismiss?: () => void\n /** The children to render */\n children?: ReactNode\n /** Overrides for the modal styling */\n modalStyle?: Partial\n}\n\nexport const Modal: React.FC = ({\n headerTitle,\n isOpen,\n dismissStatus = 'allowed',\n onDismiss,\n children,\n modalStyle = {},\n}) => {\n const shouldRenderModal = useRenderTimeoutControl({\n shouldRender: isOpen,\n timeoutMs: LocalConstants.AnimationTimingMs as number,\n })\n\n if (!shouldRenderModal) return null\n const containerClassName = !isOpen ? (LocalConstants.UnmountClassName as string) : ''\n\n const canBeDismissed = dismissStatus === 'allowed'\n const isCloseButtonVisible = dismissStatus !== 'disallowed'\n const shouldShowHeader = headerTitle || isCloseButtonVisible\n\n return (\n \n \n {shouldShowHeader && (\n
    \n {headerTitle &&

    {headerTitle}

    }\n\n {isCloseButtonVisible && (\n \n \n \n )}\n
    \n )}\n {children}\n
    \n
    \n )\n}\n\n// #region Styles\n\nexport const ModalContainerStyled = styled.section({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'fixed',\n zIndex: 5,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n margin: 'auto',\n opacity: 0,\n backdropFilter: 'blur(1px)',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n fontFamily: font.family.primary,\n animation: `fadeIn ${LocalConstants.AnimationTimingMs}ms ease forwards`,\n\n [`&.${LocalConstants.UnmountClassName}`]: {\n animation: `fadeOut ${LocalConstants.AnimationTimingMs}ms ease forwards`,\n },\n\n '@keyframes fadeIn': { from: { opacity: 0 }, to: { opacity: 1 } },\n '@keyframes fadeOut': { from: { opacity: 1 }, to: { opacity: 0 } },\n})\n\nexport const ModalStyled = styled.div({\n boxSizing: 'border-box',\n width: '100%',\n minWidth: `calc(${measurements.mobi.minWidth} - ${spacing.md} * 2)`,\n maxWidth: '60rem',\n margin: `0 ${spacing.md}`,\n padding: `${spacing.big} ${spacing.md} ${spacing.md}`,\n borderRadius: radius.lgx4,\n backgroundColor: colors.white,\n textAlign: 'center',\n\n '> header': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: spacing.md,\n\n '> h2': {\n padding: 0,\n margin: 0,\n background: 0,\n color: colors.black,\n fontFamily: font.family.primary,\n fontSize: font.size.xl2.fontSize,\n letterSpacing: font.size.xl2.letterSpacing,\n lineHeight: font.size.xl2.lineHeight,\n fontWeight: font.weight.semibold,\n textShadow: 'none',\n textTransform: 'unset',\n },\n },\n})\n\n// #endregion\n","import React, { type CSSProperties, type ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport {\n colors,\n font,\n radius,\n spacing,\n layering,\n shadow,\n measurements,\n} from '@mobi/component-library/Theme/Common'\nimport { PillButton } from '@mobi/component-library/Common/V2/Buttons/PillButton'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst enum LocalConstants {\n AnimationTimingMs = 400,\n DimmerClassName = 'js-tray-dimmer',\n TrayFullscreenClassName = 'js-tray--fullscreen',\n TrayUnmountClassName = 'js-tray--unmounting',\n}\n\ntype Props = {\n /** Whether the tray is open and should be rendered */\n isOpen: boolean\n /** The header title of the tray */\n headerTitle: string\n /** Whether the header should be visible */\n shouldShowHeader?: boolean\n /**\n * Whether the tray should cover most of the screen\n *\n * If not, the height will match the contents of the tray\n */\n shouldCoverFullscreen?: boolean\n /**\n * Whether extra padding is needed because of how the bottom navigation is rendered\n *\n * On web, the navigation is rendered within the app. On native, it's rendered outside of it\n */\n requiresExtraBottomPadding?: boolean\n /** The children to render */\n children?: ReactNode\n /**\n * How the close button and backdrop behave\n *\n * - allowed - Clicking the button or backdrop dismisses the tray (default)\n * - disallowed - The button is hidden. Clicking the backdrop does nothing\n * - disabled - The button is visible, but disabled. Clicking the backdrop does nothing\n */\n dismissStatus?: 'allowed' | 'disallowed' | 'disabled'\n /** Callback when the user has dismissed the modal */\n onDismiss?: VoidFunction\n /**\n * Overrides for the tray content styling\n *\n * These styles get placed in the `style` attribute of the
    element\n */\n trayStyle?: Partial\n}\n\nexport const Tray: React.FC = ({\n isOpen,\n headerTitle,\n shouldShowHeader = true,\n onDismiss,\n dismissStatus = 'allowed',\n shouldCoverFullscreen = false,\n children,\n requiresExtraBottomPadding = true,\n trayStyle,\n}) => {\n const shouldRenderTray = useRenderTimeoutControl({\n shouldRender: isOpen,\n timeoutMs: LocalConstants.AnimationTimingMs as number,\n })\n const scrollContainerRef = useBodyScrollLock(shouldRenderTray)\n\n if (!shouldRenderTray) return null\n\n const wrapperClassNames: string[] = []\n if (!isOpen) wrapperClassNames.push(LocalConstants.TrayUnmountClassName)\n if (shouldCoverFullscreen) wrapperClassNames.push(LocalConstants.TrayFullscreenClassName)\n\n const canBeDismissed = dismissStatus === 'allowed'\n const isCloseButtonVisible = dismissStatus !== 'disallowed'\n\n return (\n <>\n \n
    \n
    \n \n {headerTitle}\n \n\n {isCloseButtonVisible && (\n \n \n \n )}\n
    \n\n
    \n {children}\n
    \n\n {/* TODO: Always visible \"Bottom Container\" for actions (as described in Figma)\n
    \n */}\n
    \n \n\n \n \n )\n}\n\ntype WrapperProps = Required>\n\nconst WrapperStyled = styled.div(({ requiresExtraBottomPadding }) => ({\n position: 'fixed',\n zIndex: layering.overlayHigh,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n overflow: 'hidden',\n pointerEvents: 'none',\n\n '> article': {\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: '90vh',\n width: '100%',\n minWidth: measurements.mobi.minWidth,\n maxWidth: measurements.mobi.maxWidth,\n padding: `${spacing.md} ${spacing.md} 0`,\n margin: '0 auto',\n pointerEvents: 'all',\n touchAction: 'manipulation',\n background: colors.white,\n borderRadius: `${radius.lgx4} ${radius.lgx4} 0 0`,\n boxShadow: shadow.lg,\n\n animationName: 'trayIn',\n animationFillMode: 'forwards',\n animationDuration: LocalConstants.AnimationTimingMs + 'ms',\n animationTimingFunction: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n\n '> header': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: spacing.md,\n\n '> h2': {\n padding: 0,\n margin: 0,\n background: 0,\n color: colors.black,\n fontFamily: font.family.primary,\n fontSize: font.size.xl2.fontSize,\n letterSpacing: font.size.xl2.letterSpacing,\n lineHeight: font.size.xl2.lineHeight,\n fontWeight: font.weight.semibold,\n textShadow: 'none',\n textTransform: 'unset',\n },\n },\n\n // Children container\n '> div': {\n flex: 1,\n overflow: 'auto',\n paddingBottom: requiresExtraBottomPadding ? spacing.lg : 0,\n },\n },\n\n [`& + .${LocalConstants.DimmerClassName}`]: {\n position: 'fixed',\n zIndex: layering.overlayHigh - 1,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n animation: `fadeIn ${LocalConstants.AnimationTimingMs}ms ease forwards`,\n },\n\n [`&.${LocalConstants.TrayFullscreenClassName}`]: {\n '> article': { minHeight: '90vh' },\n },\n\n [`&.${LocalConstants.TrayUnmountClassName}`]: {\n '> article': {\n animationTimingFunction: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n animationName: 'trayOut',\n },\n\n [`+ .${LocalConstants.DimmerClassName}`]: {\n animation: `fadeOut ${LocalConstants.AnimationTimingMs}ms ease forwards`,\n },\n },\n\n '@keyframes fadeIn': { from: { opacity: 0 }, to: { opacity: 1 } },\n '@keyframes fadeOut': { from: { opacity: 1 }, to: { opacity: 0 } },\n '@keyframes trayIn': {\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0)' },\n },\n '@keyframes trayOut': {\n from: { transform: 'translateY(0)' },\n to: { transform: 'translateY(105%)' },\n },\n}))\n","/**\n * Standard colours as defined in Figma\n *\n * @todo Implement remaining colours\n * @see apps-shared/component-library/src/Theme/ColorScheme.stories.tsx\n */\nexport const colors = {\n white: '#FFF',\n black: '#000',\n greyDark: '#333',\n transparent: 'transparent',\n neutral: {\n 100: '#F7F6F7',\n 200: '#F0EFF1',\n 300: '#E1DFE3',\n 400: '#D2CFD5',\n 500: '#B4B0B9',\n 600: '#9D99A2',\n 700: '#7E7A82',\n 800: '#5E5C61',\n 900: '#3F3D41',\n },\n // Some of these are the same, question with UX team as to why\n surface: {\n 50: '#FAFBFB',\n 100: '#FAFBFB',\n 200: '#F6F6F7',\n 300: '#F1F2F3',\n 400: '#EDEEEF',\n 500: '#F1F2F3',\n },\n studio: {\n 50: '#F3EDF7',\n 100: '#E6DAEF',\n 200: '#CDB5DF',\n 300: '#B490CF',\n 400: '#9B6BBF',\n 500: '#8246AF',\n 600: '#68388C',\n 700: '#4E2A69',\n 800: '#341C46',\n 900: '#1A0E23',\n },\n lavender: {\n 50: '#F6EFFC',\n 100: '#ECDFF8',\n 200: '#DABFF1',\n 300: '#C7A0EB',\n 400: '#B580E4',\n 500: '#A260DD',\n 600: '#824DB1',\n 700: '#613A85',\n 800: '#412658',\n 900: '#20132C',\n },\n mariner: {\n 50: '#EAF1F9',\n 100: '#D5E3F2',\n 200: '#AAC8E5',\n 300: '#80ACD9',\n 400: '#5591CC',\n 500: '#2B75BF',\n 600: '#225E99',\n 700: '#1A4673',\n 800: '#112F4C',\n 900: '#091726',\n },\n error: {\n 50: '#FDEBEA',\n 100: '#FFEBE7',\n 200: '#FFDDD6',\n 300: '#FF9B88',\n 400: '#F75C46',\n 500: '#EA3829',\n 600: '#D31510',\n 700: '#B40000',\n 800: '#930000',\n },\n success: {\n 50: '#E6F3E6',\n 100: '#CCE8CC',\n 200: '#99D099',\n 300: '#66B966',\n 400: '#33A133',\n 500: '#008A00',\n 600: '#006E00',\n 700: '#005300',\n 800: '#003700',\n },\n warning: {\n 50: '#FFF6EB',\n 100: '#FFECCC',\n 200: '#FFDFAD',\n 300: '#FDD291',\n 400: '#FFBB63',\n 500: '#FFA037',\n 600: '#F68511',\n 700: '#E46F00',\n 800: '#CB5D00',\n },\n bondi: {\n 50: '#E6F7F7',\n 100: '#CCEFEF',\n 200: '#9ADFDF',\n 300: '#67D0CE',\n 400: '#35C0BE',\n 500: '#028D8B',\n 600: '#028D8B',\n 700: '#016A68',\n 800: '#014646',\n 900: '#002323',\n },\n orange: {\n 50: '#FEF6E6',\n 100: '#FCEECC',\n 200: '#FADD99',\n 300: '#F7CB66',\n 400: '#F5BA33',\n 500: '#F2A900',\n 600: '#C28700',\n 700: '#916500',\n 800: '#614400',\n 900: '#302200',\n },\n chocolate: {\n 50: '#FCF0E8',\n 100: '#F8E2D1',\n 200: '#F1C5A3',\n 300: '#EAA774',\n 400: '#E38A46',\n 500: '#DC6D18',\n 600: '#B05713',\n 700: '#84410E',\n 800: '#582C0A',\n 900: '#2C1605',\n },\n sushi: {\n 50: '#F0F5EB',\n 100: '#E1ECD7',\n 200: '#C3D9AF',\n 300: '#A4C588',\n 400: '#86B260',\n 500: '#689F38',\n 600: '#537F2D',\n 700: '#3E5F22',\n 800: '#2A4016',\n 900: '#15200B',\n },\n celery: {\n 50: '#E6F4E7',\n 100: '#CDFCBF',\n 200: '#96EE85',\n 300: '#72E06A',\n 400: '#27BB36',\n 500: '#009112',\n 600: '#007C0F',\n 700: '#00670F',\n 800: '#00530D',\n 900: '#003007',\n },\n} as const\n","export const font = {\n family: {\n primary: \"'Inter', sans-serif\",\n secondary: \"'PF Square Sans Pro', sans-serif\",\n },\n size: {\n xs: { fontSize: '0.9rem', lineHeight: '1.2rem', letterSpacing: 0 },\n base: { fontSize: '1rem', lineHeight: '1.2rem', letterSpacing: 0 },\n sm: { fontSize: '1.1rem', lineHeight: '1.2rem', letterSpacing: 0 },\n md: { fontSize: '1.3rem', lineHeight: '1.6rem', letterSpacing: 0 },\n lg: { fontSize: '1.4rem', lineHeight: '2rem', letterSpacing: 0 },\n xl: { fontSize: '1.6rem', lineHeight: '2.4rem', letterSpacing: 0 },\n xl2: { fontSize: '1.8rem', lineHeight: '2.8rem', letterSpacing: '-0.018rem' },\n xl3: { fontSize: '2rem', lineHeight: '3.2rem', letterSpacing: '-0.02rem' },\n xl4: { fontSize: '2.3rem', lineHeight: '3.6rem', letterSpacing: '-0.023rem' },\n xl5: { fontSize: '2.6rem', lineHeight: '4rem', letterSpacing: '-0.052rem' },\n xl6: { fontSize: '2.9rem', lineHeight: '4.4rem', letterSpacing: '-0.052rem' },\n xl7: { fontSize: '3.2rem', lineHeight: '4.8rem', letterSpacing: '-0.072rem' },\n xl8: { fontSize: '3.7rem', lineHeight: '4.8rem', letterSpacing: '-0.072rem' },\n },\n baseSize: {\n mobile: '10px',\n desktop: '16px',\n },\n weight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n} as const\n","/** Z-Index for Element Layers\n * @todo make more generic, share language w/ Figma design system\n */\nexport const layering = {\n baseLayer: 1,\n\n stickyPageElements: 8,\n\n pagePopoverElements: 9,\n\n toasts: 10,\n\n /** AppHeader + Account Drop Down */\n appHeader: 11,\n\n /** Used for Betslip, Search etc */\n overlayLow: 210,\n\n /** Used for Quickbet etc */\n modalOverlay: 220,\n\n /** Used for Deposit */\n overlayHigh: 225,\n\n login: 302,\n\n skyVideoPlayerFloating: 400,\n} as const\n","export const measurements = {\n mobi: {\n headerHeight: '5.6rem',\n bottomTabsHeight: '5rem',\n maxWidth: '80rem',\n minWidth: '32rem',\n },\n} as const\n","export const radius = {\n none: '0',\n smx2: '0.2rem',\n smx1: '0.4rem',\n sm: '0.6rem',\n md: '0.8rem',\n lg: '1rem',\n lgx1: '1.2rem',\n lgx2: '1.6rem',\n lgx3: '2rem',\n lgx4: '2.4rem',\n lgx5: '2.8rem',\n lgx6: '3.2rem',\n full: '50%',\n pill: '999.9rem',\n} as const\n","export const shadow = {\n xs: '0px 1px 2px 0px rgba(26, 14, 35, 0.05)',\n sm: '0px 1px 2px 0px rgba(26, 14, 35, 0.06), 0px 1px 3px 0px rgba(26, 14, 35, 0.10)',\n md: '0px 2px 4px -2px rgba(26, 14, 35, 0.06), 0px 4px 8px -2px rgba(26, 14, 35, 0.10)',\n lg: '0px 4px 6px -2px rgba(26, 14, 35, 0.03), 0px 12px 16px -4px rgba(26, 14, 35, 0.08)',\n xl: '0px 8px 8px -4px rgba(26, 14, 35, 0.03), 0px 20px 24px -4px rgba(26, 14, 35, 0.08)',\n '2xl': '0px 24px 48px -12px rgba(26, 14, 35, 0.18)',\n '3xl': '0px 32px 64px -12px rgba(26, 14, 35, 0.14)',\n} as const\n","/**\n * Standard spacing units\n */\nexport const spacing = {\n none: 0,\n smx2: '0.4rem',\n smx1: '0.8rem',\n sm: '1.2rem',\n md: '1.6rem',\n big: '2rem',\n bigx1: '2.4rem',\n bigx2: '2.8rem',\n bigx3: '3.2rem',\n lg: '4rem',\n lgx1: '4.8rem',\n lgx2: '6.4rem',\n lgx3: '8rem',\n huge: '9.6rem',\n hugex1: '12.8rem',\n hugex2: '16rem',\n hugex3: '19.2rem',\n} as const\n","import { colors } from '../../Common'\nimport type { ColorDefinition } from '../types'\n\nexport const inputColors: InputColors = {\n background: colors.white,\n border: colors.neutral['300'],\n text: colors.black,\n placeholder: colors.neutral['500'],\n caret: colors.studio['500'],\n helpText: colors.neutral['600'],\n focused: {\n outline: colors.lavender['50'],\n border: colors.lavender['300'],\n },\n invalid: {\n background: colors.error['50'],\n border: colors.error['600'],\n helpText: colors.error['600'],\n },\n disabled: {\n background: colors.surface['100'],\n text: colors.neutral['400'],\n placeholder: colors.neutral['400'],\n helpText: colors.neutral['400'],\n },\n}\n\n// Types\n\ntype InputColor = {\n text: string\n placeholder: string\n background: string\n border: string\n outline?: string\n caret: string\n helpText: string\n}\n\ntype InputState = 'focused' | 'disabled' | 'invalid'\n\nexport type InputColors = ColorDefinition\n","import { colors } from '../../Common'\nimport type { ColorDefinition } from '../types'\n\ntype LinkColor = { color?: string }\ntype LinkState = 'link' | 'hover' | 'visited' | 'active'\n\nexport type LinkColors = ColorDefinition\n\nexport const linkColors: LinkColors = {\n color: colors.black,\n link: {\n color: colors.black,\n },\n hover: {\n color: colors.black,\n },\n visited: {\n color: colors.black,\n },\n active: {\n color: colors.black,\n },\n}\n","import { font, radius, spacing, shadow, colors } from './Common'\nimport * as input from './Components/Input'\nimport * as link from './Components/Link'\n\nexport type Theme = Readonly<{\n font: typeof font\n colors: typeof colors\n spacing: typeof spacing\n\n /** @todo co-locate component specific styles with markup @deprecated */\n components: {\n Input: {\n border: {\n radius: string\n }\n colors: input.InputColors\n spacing: {\n input: {\n padding: Spacing\n margin: Spacing\n }\n label: {\n margin: Spacing\n }\n helpText: {\n margin: Spacing\n }\n }\n shadow: string\n }\n Link: {\n colors: link.LinkColors\n }\n }\n}>\n\nexport const newTheme: Theme = {\n font,\n colors,\n spacing,\n components: {\n Input: {\n border: {\n radius: radius.lgx1,\n },\n colors: input.inputColors,\n spacing: {\n input: {\n padding: {\n x: spacing.bigx2,\n y: spacing.lg,\n },\n margin: {\n left: spacing.sm,\n right: spacing.lg,\n },\n },\n label: {\n margin: {\n bottom: spacing.smx1,\n },\n },\n helpText: {\n margin: {\n top: spacing.smx1,\n },\n },\n },\n shadow: shadow.xs,\n },\n Link: {\n colors: link.linkColors,\n },\n },\n}\n\n// Types\n\ntype Spacing = {\n x?: string\n y?: string\n top?: string\n right?: string\n bottom?: string\n left?: string\n}\n","import { css } from '@emotion/react'\n\n/**\n * Utility function to make writing columnGap easier for browser that\n * don't support it in Flexbox contexts, like Safari < 12 and...\n * no, that's pretty much it\n *\n * @param {string} gap Any value that `marginRight` accepts\n */\nexport const gapX = (gap: string) =>\n css({\n columnGap: gap,\n\n [`@supports not (column-gap: ${gap})`]: {\n '& > *:not(:last-child)': {\n marginRight: gap,\n },\n },\n })\n\n/**\n * Utility function to make writing rowGap easier for browser that\n * don't support it in Flexbox contexts, like Safari < 12 and...\n * no, that's pretty much it\n *\n * @param {string} gap Any value that `marginBottom` accepts\n */\nexport const gapY = (gap: string) =>\n css({\n rowGap: gap,\n\n [`@supports not (row-gap: ${gap})`]: {\n '& > *:not(:last-child)': {\n marginBottom: gap,\n },\n },\n })\n","export enum Breakpoint {\n small = 576,\n medium = 768,\n large = 992,\n xlarge = 1200,\n\n // Pixel Values\n px350 = 350,\n px375 = 375,\n px400 = 400,\n px425 = 425,\n px450 = 450,\n}\n\ntype Operators = '>=' | '>' | '<=' | '<'\n\nexport type BreakpointKey = keyof typeof Breakpoint\n\nfunction media(operator: Operators, breakpoint: BreakpointKey) {\n const prefix = getMediaQueryPrefix(operator)\n const pixelValue = getMediaQueryValue(operator, breakpoint)\n return `@media only screen and (${prefix}-width: ${pixelValue}px)`\n}\n\nexport function greaterThan(breakpoint: BreakpointKey): string {\n return media('>', breakpoint)\n}\n\nexport function greaterOrEqualThan(breakpoint: BreakpointKey): string {\n return media('>=', breakpoint)\n}\n\nexport function lessThan(breakpoint: BreakpointKey): string {\n return media('<', breakpoint)\n}\n\nexport function lessOrEqualThan(breakpoint: BreakpointKey): string {\n return media('<=', breakpoint)\n}\n\n// Get dimension prefix based on an operator.\nfunction getMediaQueryPrefix(operator: Operators) {\n return operator.indexOf('<') !== -1 ? 'max' : 'min'\n}\n\n// Get value based on an operator.\nfunction getMediaQueryValue(operator: Operators, breakpoint: BreakpointKey) {\n const value = Breakpoint[breakpoint]\n\n switch (operator) {\n case '>':\n return value + 1\n case '<':\n return value - 1\n default:\n return value\n }\n}\n","import styled from '@emotion/styled'\nimport { ButtonBlock } from '../../../Common/Buttons'\nimport { gapX } from '../../../Utils/gap'\n\nexport const VerificationButtonStyled = styled(ButtonBlock)(\n {\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'center',\n fontSize: '1.7rem',\n lineHeight: 1,\n\n '&:not(:disabled)': {\n cursor: 'pointer',\n },\n },\n gapX('0.5rem')\n)\n","import React, { ButtonHTMLAttributes, memo, type PropsWithChildren } from 'react'\nimport { Icon } from '../../../Common/Icon'\nimport { ButtonColor } from '../../../Common/Buttons/themes'\nimport { VerificationButtonStyled } from './VerificationButton.styled'\n\ntype Props = PropsWithChildren<{\n disabled?: boolean\n color: Extract\n showIcon?: boolean\n}> &\n ButtonHTMLAttributes\n\nexport const VerificationButton = memo(\n ({ children, disabled, color, showIcon = true, ...buttonProps }) => (\n \n {children}\n {showIcon && }\n \n )\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const FooterMessageStyled = styled.p({\n alignItems: 'center',\n color: hexColors.grey,\n display: 'flex',\n flexShrink: 0,\n fontSize: '1.2rem',\n fontStyle: 'normal',\n fontWeight: '300',\n height: '4rem',\n justifyContent: 'center',\n lineHeight: 'normal',\n margin: 0,\n textAlign: 'center',\n})\n","import styled from '@emotion/styled'\nimport { css } from '@emotion/react'\nimport { hexColors } from '@mobi/settings'\nimport { gapY } from '../../../Utils/gap'\n\nconst headerStyling = css({\n fontSize: '2.2rem',\n})\n\nconst bodyTextStyling = css({\n fontSize: '1.3rem',\n})\n\nconst layoutBaseStyling = css({\n boxSizing: 'border-box',\n display: 'grid',\n fontFamily: '\"PF Square Sans Pro\", Arial, sans-serif',\n minHeight: '100%',\n padding: '2.2rem 2rem 2rem',\n\n '> footer': {\n marginTop: '2rem',\n minHeight: '8rem',\n },\n})\n\n/**\n * Used for landing page and retry page (white background)\n */\nexport const InfoLayoutStyled = styled.section(\n {\n backgroundColor: hexColors.white,\n color: hexColors.nightRider,\n gridTemplateRows: '1fr min-content min-content',\n gridRow: 'pre-main / main',\n textAlign: 'center',\n\n h1: [\n {\n color: hexColors.blueDiamond,\n },\n headerStyling,\n ],\n\n p: [\n {\n margin: 0,\n },\n bodyTextStyling,\n ],\n\n '> div': {\n alignSelf: 'center',\n },\n },\n layoutBaseStyling\n)\n\n/**\n * Used for verification success/fail messages (purple background)\n */\nexport const MessageLayoutStyled = styled.section(\n {\n backgroundColor: hexColors.blueDiamond,\n color: hexColors.white,\n gridTemplateRows: '47% 1fr min-content',\n gridRow: 'pre-main / main',\n textAlign: 'center',\n\n '> header': [\n {\n alignSelf: 'flex-end',\n padding: '1.6rem 1.4rem 4.5rem',\n\n '> h1': [\n {\n fontStyle: 'italic',\n },\n headerStyling,\n ],\n\n '> p': [\n {\n margin: 0,\n },\n bodyTextStyling,\n ],\n },\n gapY('2rem'),\n ],\n },\n layoutBaseStyling\n)\n\n/**\n * Used for Contact Details, Driver Licence, Medicare, Passport Forms, etc\n */\nexport const FormLayoutStyled = styled.section(\n {\n backgroundColor: hexColors.white,\n color: hexColors.nightRider,\n gridTemplateRows: 'min-content 1fr min-content',\n\n '> header': {\n marginBottom: '1.5rem',\n textAlign: 'center',\n\n h1: [\n {\n color: hexColors.blueDiamond,\n },\n headerStyling,\n ],\n\n p: [\n {\n margin: 0,\n },\n bodyTextStyling,\n ],\n },\n\n h2: {\n color: hexColors.blueDiamond,\n fontSize: '1.2rem',\n margin: '1.5rem 0 0rem',\n textAlign: 'left',\n textShadow: 'none',\n },\n\n '> footer': {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n },\n layoutBaseStyling\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\ntype Props = {\n invertColors?: boolean\n}\n\nexport const LinkStyled = styled.a(({ invertColors = false }) => ({\n color: invertColors ? hexColors.white : hexColors.blueDiamond,\n display: 'inline-block',\n fontSize: '1.6rem',\n fontWeight: 'bold',\n textAlign: 'center',\n}))\n","import styled from '@emotion/styled'\nimport { gapY } from '../../Utils/gap'\n\nexport const DocumentBodyStyled = styled.div(\n {\n marginBottom: '3.6rem',\n },\n gapY('1.7rem')\n)\n","import React, { memo } from 'react'\nimport { VerificationButton } from '../Common/Buttons/VerificationButton'\nimport { BusyIndicator } from '@mobi/component-library/Feedback/BusyIndicator'\nimport { FooterMessageStyled } from '../Common/Layouts/FooterMessage.styled'\n\ntype Props = {\n isBusy: boolean\n allowToProceed: boolean\n onSubmit: VoidFunction\n footerMessage?: string\n footerMessageInProgress?: string\n}\n\nexport const DocumentNextButton = memo(\n ({\n isBusy,\n allowToProceed,\n onSubmit,\n footerMessage = 'Complete all required fields before continuing.',\n footerMessageInProgress = 'Validation in progress. Please wait...',\n }) => {\n return (\n <>\n \n {isBusy ? : 'Next'}\n \n {isBusy && {footerMessageInProgress}}\n {!isBusy && !allowToProceed && {footerMessage}}\n \n )\n }\n)\n","/**\n * TABtouch Color Palette\n * =======================\n *\n * The colors below are taken from the TABtouch Style Guide as per 11/01/2018.\n * Color changes (additions/removals) need to be discussed with the UI/UX team.\n *\n * Color names are coming from here: http://www.color-blindness.com/color-name-hue/.\n *\n */\nexport const hexColors = {\n white: '#fff',\n black: '#000',\n\n // Purples\n /** As named by https://www.color-name.com/hex/281636 */\n darkPurple: '#281636',\n /** TAB Purple */\n blueDiamond: '#512d6d',\n /** Home Navigation Tiles */\n vividViolet: '#703B90',\n /** Secondary Version of TAB purple */\n studio: '#8246af',\n /** Progress indicator */\n deepLilac: '#9663b6',\n /** Search Input */\n affair: '#74578A',\n /** Selected bet informer */\n /** Content integration background */\n lavenderBlue: '#D8C6FF',\n /** Race selector buttons */\n amethyst: '#A573D1',\n /** Search Placeholders, Button Icons */\n lola: '#B9ABC4',\n /** Account dropdown links */\n jacarta: '#432660',\n /** 90 Lightness on blueDiamond */\n blueDiamond90L: '#E7DBF0',\n /** 97 Lightness on blueDiamond */\n blueDiamond97L: '#F8F4FB',\n\n // Greys\n /** Meeting dropdown background */\n grey1: '#f5f5f5',\n /** Page background */\n whiteSmoke: '#f4f4f4',\n /** Kambi container background */\n athensGrey: '#f2f1f3',\n /** Rating bar background */\n gainsboro: '#e8e8e8',\n /** Disabled button 1 */\n veryLightGrey: '#ccc',\n /** Unselected race button background and border */\n grey3: '#b5b5b5',\n lightGrey: '#BBBBBB',\n /** Disabled button 2 */\n darkGrey: '#aaa',\n /** Bet modifier, inactive */\n grey2: '#858585',\n /** Bet Cost background */\n grey: '#808080',\n /** Bet Cost background */\n dimGrey: '#666',\n /** Bet informers text */\n matterhorn: '#4f4f4f',\n /** Tabs style 1 (active) */\n charCoal: '#404040',\n /** 3rd level header / My Bets Menu */\n nightRider: '#333',\n /** 2nd level header / tabs style 1 (inactive) */\n nero: '#222',\n /** component library input field background colour */\n lightGreyCommon: '#F7F6F7',\n\n // Blues\n /** Information icon */\n summerSky: '#4f95dd',\n /** GiddyUp / Rating bar */\n cobalt: '#00509f',\n /** Info -> Price Changes */\n infoBlueLight: '#EBF4FF',\n mariner: '#2B75BF',\n americanExpressBlue: '#1434CB',\n /** Sky Tv -> CH2 */\n skyTvBlue: '#40B9EA',\n\n get infoBlueDark(): string {\n return this.mariner\n },\n /** Replay button */\n bondiBlue: '#02b0ae',\n /** Fixed icon */\n scooter: '#30878e',\n /** Replay Text */\n darkCyan: '#028D8B',\n /** Replay Overlay */\n pattensBlue: '#E6F7F7',\n /** Search Highlights */\n paleCornflowerBlue: '#BDDBF9',\n /** Sign up links */\n pacificBlue: '#0093dd',\n\n // Greens\n /** Race number button (betting) / Results: 1st to 4th tags */\n citrus: '#8dbb00',\n /** Countdown >10mins */\n yellowGreen: '#6ed234',\n /** Call to action / Primary button / Positive color */\n sushi: '#689f38',\n\n // Reds\n /** Quaddie icon */\n crimson: '#ca103f',\n /** Countdown <3mins */\n cinnabar: '#e84c3d',\n /** Error / Results */\n freeSpeechRed: '#cc0404',\n red: '#FF0000',\n /** component library input field validation background colour */\n lightRedCommonError: '#fdebea',\n /** Sky Tv -> CH1 */\n skyTvRed: '#EA1A43',\n\n // Oranges\n /** Countdown >3mins */\n tangerine: '#e38706',\n /** Content Toggle button */\n chocolate: '#dc6d18',\n /** SuperPick / Special / Star icon */\n orange: '#f2a900',\n /** SuperBoost */\n alizarin: '#e02b2b',\n /** SuperBoost price background / Special Icon*/\n lightOrange: '#FBB040',\n\n // Yellow\n capeHoney: '#FFECAA',\n lemon: '#ffe50b',\n paypalGold: '#ffc439',\n\n // Pinks\n /** Jockey change background */\n lilac: '#cd92c8',\n\n racingWa: '#DF2081',\n} as const\n","import { hexColors } from './hexColors'\n\nexport const colors = {\n brand: {\n primary: hexColors.blueDiamond,\n },\n action: {\n primary: hexColors.sushi,\n },\n text: {\n dark: hexColors.nero,\n darkMuted: hexColors.grey,\n light: hexColors.white,\n },\n kambi: {\n container: {\n background: hexColors.athensGrey,\n },\n },\n}\n","export const Constants = {\n ResponsibleWageringURL: 'https://www.tabtouch.mobi/Content/landing/responsible-wagering/',\n BetStopURL: 'https://www.betstop.gov.au/',\n GamblingHelpOnlineURL: 'https://gamblinghelponline.org.au/',\n GamblingHelpPhoneNumber: '1800 858 858',\n} as const\n","export const FeatureFlags = {\n RACING_HOMEPAGE_FEATURED: {\n key: 'homepage-feature-items',\n defaultValue: true,\n },\n HOMEPAGE_SUPERPICKS: {\n key: 'home-page-super-boosts',\n defaultValue: true,\n },\n HOMEPAGE_SUPERPICKS_DATA: {\n key: 'home-page-super-boost-data',\n defaultValue: {},\n },\n RACING_SMART_FORM_FIXED_ODDS: {\n key: 'smart-form-fixed-odds',\n defaultValue: false,\n },\n POC_API_GATEWAY: {\n key: 'poc-api-gateway',\n defaultValue: false,\n },\n PUSHDATA_PRICECHANGE: {\n key: 'pushdata-pricechange',\n defaultValue: true,\n },\n PUSHDATA_RACECLOSE: {\n key: 'pushdata-raceclose',\n defaultValue: true,\n },\n PUSHDATA_USERINFO: {\n key: 'pushdata-userinfo',\n defaultValue: false,\n },\n NATIVE_DEPOSITS: {\n key: 'native-deposits',\n defaultValue: false,\n },\n CONFIG_BALANCE_POLL_INTERVAL: {\n key: 'config-balance-poll-interval',\n defaultValue: 30000,\n },\n VISION_PLAYER_MIGRATION: {\n key: 'vision-player-migration',\n defaultValue: false,\n },\n\n MYSTERY_ON_RACE_BETTING_PAGE: {\n key: 'mystery-race-betting-page',\n defaultValue: false,\n },\n KAMBI_MAINTENANCE: {\n key: 'kambi-maintenance',\n defaultValue: {},\n },\n REBET_PENDING_TICKET: {\n key: 're-bet-pending-ticket',\n defaultValue: false,\n },\n REBET_TAB: {\n key: 're-bet-tab',\n defaultValue: false,\n },\n SHARE_BET: {\n key: 'share-bet',\n defaultValue: false,\n },\n SHARE_BET_LINK: {\n key: 'share-bet-phase-2',\n defaultValue: false,\n },\n RATE_MY_APP: {\n key: 'rate-my-app-trigger',\n defaultValue: false,\n },\n POPULAR_BETS_DISPLAY: {\n key: 'popular-bets-display',\n defaultValue: false,\n },\n TRENDING_SAME_RACE_MULTI: {\n key: 'trending-same-race-multi',\n defaultValue: false,\n },\n TAKE_A_BREAK: {\n key: 'take-a-break',\n defaultValue: false,\n },\n SAME_RACE_MULTI: {\n key: 'same-race-multi',\n defaultValue: false,\n },\n NCPF_ACTIVITY_STATEMENTS: {\n key: 'ncpf-activity-statements-button',\n defaultValue: false,\n },\n RACE_PAGE_VIDEO_CONTENT: {\n key: 'race-page-video-content',\n defaultValue: false,\n },\n QUICKBET_KEEP_SELECTIONS: {\n key: 'quickbet-keep-selections',\n defaultValue: false,\n },\n CENTS_INCREMENTS_BET: {\n key: '50-c-work-increments',\n defaultValue: false,\n },\n BONUS_CASH_IMPROVEMENTS: {\n key: 'bonus-cash-improvements',\n defaultValue: false,\n },\n SEARCH_UNMATCHED_RACING: {\n key: 'search-unmatched-racing',\n defaultValue: false,\n },\n ENHANCED_BETSLIP: {\n key: 'enhanced-betslip',\n defaultValue: true,\n },\n INTELLIGENT_FORM_DISPLAY: {\n key: 'intelligent-form-display',\n defaultValue: true,\n },\n SHOW_SKY_CHANNEL: {\n key: 'show-sky-channel',\n defaultValue: false,\n },\n SHARE_BLACKBOOK_RUNNER: {\n key: 'share-blackbook-runner',\n defaultValue: false,\n },\n WITHDRAW_UPLIFT: {\n key: 'withdraw-uplift',\n defaultValue: false,\n },\n WITHDRAW_REALTIME: {\n key: 'withdraw-realtime',\n defaultValue: false,\n },\n SWIPE_TO_CHANGE_RACE: {\n key: 'swipe-to-change-race',\n defaultValue: false,\n },\n HAPTIC_FEEDBACK: {\n key: 'haptic-feedback',\n defaultValue: false,\n },\n PENDING_BETS_FOR_RACE: {\n key: 'pending-bets-for-race',\n defaultValue: false,\n },\n FOO_FORM_SUMMARY: {\n key: 'FooFormSummary',\n defaultValue: false,\n },\n FOO_FORM_ENABLED: {\n key: 'FooFormEnabled',\n defaultValue: false,\n },\n RESULTED_TICKET_REPLAYS: {\n key: 'resulted-ticket-replays',\n defaultValue: false,\n },\n MULTIPLE_RACE_ALERTS_ENABLED: {\n key: 'multiple-race-alerts-enabled',\n defaultValue: false,\n },\n SIGNUP_DESIGN: {\n key: 'signup-design',\n defaultValue: 'unknown', // 'old' | 'new'\n },\n SIGNUP_OPT_IN_MARKING: {\n key: 'signup-opt-in-marketing',\n defaultValue: false,\n },\n FIXED_ODDS_SPORTS: {\n key: 'fixed-odds-sports',\n defaultValue: false,\n },\n SPORTS_API_DATA_SOURCE: {\n key: 'sports-api-data-source',\n defaultValue: 'rwwa', //rwwa | kambi | theoddsapi (deprecated)\n },\n FIELD_SUMMARY_V2: {\n key: 'field-summary-v2',\n defaultValue: false,\n },\n SEND_GA_EVENTS_TO_FIREBASE: {\n key: 'send-ga-events-to-firebase',\n defaultValue: false,\n },\n NEW_BET_SLIP_DESIGN: {\n key: 'new-bet-slip-design',\n defaultValue: false,\n },\n UNBUNDLE_IOS_JS: {\n key: 'unbundle-ios-js',\n defaultValue: true,\n },\n RACING_WA_VISION_CHANNEL: {\n key: 'racing-wa-vision-channel',\n defaultValue: false,\n },\n RACE_REPLAY_IMPROVEMENTS: {\n key: 'race-replay-improvements',\n defaultValue: false,\n },\n PENDING_BETS_BUTTON_IN_APP_HEADER: {\n key: 'pending-bets-button-in-app-header',\n defaultValue: false,\n },\n} as const\n\nexport type FeatureFlagValue = string | number | boolean | Record | undefined\n\nexport type FeatureFlagType = {\n key: FeatureFlagKeyName\n defaultValue: FeatureFlagValue\n}\n\ntype FeatureFlagsKeys = keyof typeof FeatureFlags\n\nexport type FeatureFlagKeyName = (typeof FeatureFlags)[FeatureFlagsKeys]['key']\n\ntype FeatureFlagDefaults = Record\n\nexport function getFlagDefaults(): FeatureFlagDefaults {\n return (Object.keys(FeatureFlags) as FeatureFlagsKeys[]).reduce((accumulator, flag) => {\n const { key, defaultValue } = FeatureFlags[flag]\n accumulator[key] = defaultValue\n\n return accumulator\n }, {} as FeatureFlagDefaults)\n}\n","export const statesInAustralia = [\n { value: 'WA', label: 'Western Australia' },\n { value: 'NSW', label: 'New South Wales' },\n { value: 'VIC', label: 'Victoria' },\n { value: 'QLD', label: 'Queensland' },\n { value: 'SA', label: 'South Australia' },\n { value: 'NT', label: 'Northern Territory' },\n { value: 'ACT', label: 'Australian Capital Territory' },\n { value: 'TAS', label: 'Tasmania' },\n]\n","import { reverseString } from '../string'\n\ntype AddressWithJoinedSuburb = {\n unitNumber?: string\n streetNumber: string\n streetName: string\n streetType: string\n suburb: string\n}\n\ntype Address = {\n unitNumber?: string\n streetNumber: string\n streetName: string\n streetType: string\n suburb: string\n postcode: string\n state: string\n}\n\nexport function createAddressMoniker({\n suburb,\n streetType,\n streetNumber,\n streetName,\n unitNumber,\n}: AddressWithJoinedSuburb): string {\n const address = `${streetNumber} ${streetName} ${streetType}, ${suburb}`\n\n if (unitNumber) {\n return `${unitNumber}/${address}`\n }\n\n return address\n}\n\nexport function extractFullSuburb(\n fullSuburb: string\n): Pick {\n const strippedFullSuburb = fullSuburb.replace(/\\s+/g, ' ').trim()\n const [postcode, state, ...suburbParts] = reverseString(strippedFullSuburb).split(' ')\n\n return {\n postcode: reverseString(postcode),\n state: reverseString(state),\n suburb: suburbParts.map(reverseString).reverse().join(' ').trim(),\n }\n}\n\n/**\n * Split out the individual Suburb, State and Postcode components of the\n * address returned by the Equifax suburb lookup\n */\nexport function extractSuburbStatePostcode(\n suburbStateAndPostcode: string\n): [suburb: string, state: string, postcode: string] {\n const parts = suburbStateAndPostcode\n .split(',')\n .filter(x => !!x)\n .map(x => x.trim())\n return [parts[0], parts[1], parts[2]]\n}\n\nexport function createFullSuburb({\n suburb,\n postcode,\n state,\n}: Pick) {\n return `${suburb}, ${state}, ${postcode}`\n}\n\nexport function formatAddress({\n unitNumber,\n streetNumber,\n streetName,\n streetType,\n suburbStateAndPostcode,\n}: {\n unitNumber?: string\n streetNumber: string\n streetName: string\n streetType: string\n suburbStateAndPostcode: string\n}): string {\n const address = `${streetNumber} ${streetName} ${streetType}, ${suburbStateAndPostcode}`\n\n if (unitNumber) {\n return `${unitNumber}/${address}`\n }\n\n return address\n}\n","/**\n * Create an array from 0 to stop (exclusive)\n *\n * Examples:\n *\n * ```\n * range(5) // [0, 1, 2, 3, 4]\n * range(0) // []\n * ```\n */\n\n/**\n * Create an array from start (inclusive) to stop (exclusive)\n *\n * Examples:\n *\n * ```\n * range(0, 5) // [0, 1, 2, 3, 4]\n * range(5, 8) // [5, 6, 7]\n * ```\n */\nexport function range(start: number, stop?: number): number[] {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n\n const length = stop - start\n\n if (length === 0) {\n return []\n }\n\n return Array.from(Array(length), (_, index) => start + index)\n}\n","import dayjs from 'dayjs'\nimport advancedFormat from 'dayjs/plugin/advancedFormat'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter'\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore'\nimport isToday from 'dayjs/plugin/isToday'\nimport isTomorrow from 'dayjs/plugin/isTomorrow'\nimport isYesterday from 'dayjs/plugin/isYesterday'\nimport localeData from 'dayjs/plugin/localeData'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport timezone from 'dayjs/plugin/timezone'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport duration from 'dayjs/plugin/duration'\n\ndayjs.extend(advancedFormat)\ndayjs.extend(isSameOrAfter)\ndayjs.extend(isSameOrBefore)\ndayjs.extend(isToday)\ndayjs.extend(isTomorrow)\ndayjs.extend(isYesterday)\ndayjs.extend(localeData)\ndayjs.extend(relativeTime)\ndayjs.extend(timezone)\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\ndayjs.extend(duration)\n\ndayjs.tz.setDefault('Australia/Perth')\n\nexport default dayjs\n","import { dayjs } from '.'\nimport moment from 'moment'\n\ntype DateFormat = 'DD MMM YYYY' | 'YYYYMMDD' | (string & {})\n\nexport type Month = {\n number: number\n name: string\n}\n\nexport const ONE_MINUTE = 60_000\n\nexport function formatDate(date: Date | null | undefined, format: DateFormat) {\n return date != null ? moment(date).format(format) : 'Invalid Date'\n}\n\nexport function toISODate(date: Date): string {\n return dayjs(date).format('YYYY-MM-DD')\n}\n\nexport function formatDateStringWithoutChangingTimezone(\n dateString: string,\n format: 'MM/DD/YYYY' | 'YYYY-MM-DD'\n): string {\n return moment.parseZone(dateString).format(format)\n}\n\nconst birthDateFormat = 'DD/MM/YYYY'\n\nexport function parseBirthDate(birthDateString: string) {\n return dayjs(birthDateString, birthDateFormat).toDate()\n}\n\nexport function formatBirthDate(birthDate: Date) {\n return dayjs(birthDate).format(birthDateFormat)\n}\n\nexport const months: Month[] = [\n { number: 1, name: 'January' },\n { number: 2, name: 'February' },\n { number: 3, name: 'March' },\n { number: 4, name: 'April' },\n { number: 5, name: 'May' },\n { number: 6, name: 'June' },\n { number: 7, name: 'July' },\n { number: 8, name: 'August' },\n { number: 9, name: 'September' },\n { number: 10, name: 'October' },\n { number: 11, name: 'November' },\n { number: 12, name: 'December' },\n]\n\nexport const daysInMonth = (year: number, month: number) => {\n if (!month || month < 1 || month > 12) {\n return 31\n }\n const currentYear = new Date().getFullYear()\n\n if (!year || year < currentYear) {\n year = currentYear\n }\n\n //day 0 gives us number of days in previous month\n return new Date(year, month, 0).getDate()\n}\n","type PossibleError = string | Pick\n\nexport function unwrapErrorMessage(error: PossibleError): string {\n if (typeof error === 'string') {\n return error\n }\n\n return error.message\n}\n\nexport function coerceIntoError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n }\n\n if (typeof error === 'string') {\n return new Error(error)\n }\n\n return new Error(JSON.stringify(error))\n}\n","import { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock'\n\nconst currentLocks = new Set()\n\nexport function registerBodyScrollLock(el: HTMLElement): void {\n currentLocks.add(el)\n disableBodyScroll(el, {\n allowTouchMove: el => el.getAttribute('data-js-allow-touch-move') !== null,\n })\n}\n\nexport function deregisterBodyScrollLock(el: HTMLElement): void {\n currentLocks.delete(el)\n\n if (currentLocks.size === 0) {\n clearAllBodyScrollLocks()\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any\n\ntype DebouncedFunction = (...args: Parameters) =>\n | (ReturnType | undefined)\n | {\n /** Cancel yet-to-be-called function by clearing timeout */\n cancel: () => void\n }\n\nexport interface CancelableDebouncedFunction extends DebouncedFunction {\n cancel: () => void\n}\n\nexport function debounceFn(\n func: T,\n waitMilliseconds = 133\n): CancelableDebouncedFunction {\n let timeoutId: number | undefined\n let result: ReturnType | undefined\n\n function setUpDebounce(this: object, ...args: Parameters) {\n // Reset the timer on every call\n clearTimeout(timeoutId)\n timeoutId = undefined\n\n // Restart the debounce waiting period\n timeoutId = window.setTimeout(() => {\n timeoutId = undefined\n result = func.apply(this, args)\n }, waitMilliseconds)\n\n return result\n }\n\n setUpDebounce.cancel = () => {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n\n return setUpDebounce\n}\n\n/**\n * Debounce a function and allow a value to be returned as a promise. The promise will be resolved after the wait time has expired.\n *\n * @param funcToDebounce The function that should be debounced.\n * @param delay The amount of time to wait before resolving the promise. Every call to the returned function will reset the countdown.\n */\nexport function debounceWithReturn unknown>(\n funcToDebounce: (...args: Parameters) => unknown,\n delay: number\n): (...args: Parameters) => Promise {\n let timeoutId: number | undefined = undefined\n\n const debouncedFunc = (...argsFromCall: Parameters): Promise => {\n if (timeoutId != undefined) {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n\n return new Promise((resolve, reject) => {\n timeoutId = window.setTimeout(() => {\n try {\n resolve(funcToDebounce(...argsFromCall))\n } catch (error) {\n reject(error)\n }\n }, delay)\n })\n }\n\n return debouncedFunc\n}\n","export const groupBy = (\n list: T[],\n getKey: (item: T) => K\n): Record =>\n list.reduce(\n (previous, currentItem) => {\n const group = getKey(currentItem)\n if (!previous[group]) previous[group] = []\n previous[group].push(currentItem)\n return previous\n },\n {} as Record\n )\n","/**\n * Call a given function with the given value, then return the value\n */\nexport function tap(tappable: T, callback: (tappable: T) => void): T {\n callback(tappable)\n\n return tappable\n}\n","export function defer(deferredFunction: () => unknown) {\n window.setTimeout(deferredFunction, 0)\n}\n","import React from 'react'\nimport { deregisterBodyScrollLock, registerBodyScrollLock } from '../functions/bodyScrollLock'\n\nexport const useBodyScrollLock = (isEnabled = true): React.RefObject => {\n const scrollableContentRef = React.useRef(null)\n\n React.useEffect(() => {\n if (!scrollableContentRef.current || !isEnabled) return undefined\n const el = scrollableContentRef.current\n registerBodyScrollLock(el)\n return () => {\n deregisterBodyScrollLock(el)\n }\n }, [isEnabled])\n\n return scrollableContentRef\n}\n","import React from 'react'\nimport { useRenderTimeoutControl } from '../useRenderTimeoutControl'\n\nexport const useExpandToggle = ({\n timeoutMs,\n shouldStartExpanded,\n collapsedHeight = 0,\n}: {\n timeoutMs: number\n shouldStartExpanded?: boolean\n collapsedHeight?: number\n}): {\n wrapperRef: React.RefObject\n contentRef: React.RefObject\n shouldRender: boolean\n isExpanded: boolean\n toggleExpanded: (shouldForceExpandValue?: boolean) => void\n} => {\n const wrapperRef = React.useRef(null)\n const contentRef = React.useRef(null)\n const timeoutMsRef = React.useRef(timeoutMs)\n\n const [isExpanded, setIsExpanded] = React.useState(!!shouldStartExpanded)\n\n const shouldRender = useRenderTimeoutControl({ shouldRender: isExpanded, timeoutMs })\n\n React.useEffect(() => {\n if (!contentRef.current || !wrapperRef.current) return undefined\n\n const wrapperEl = wrapperRef.current\n const contentEl = contentRef.current\n\n if (!isExpanded) {\n wrapperEl.style.height = contentEl.offsetHeight + 'px'\n }\n\n const animationTimeoutId = setTimeout(() => {\n requestAnimationFrame(() => {\n wrapperEl.style.height = `${isExpanded ? contentEl.offsetHeight : collapsedHeight}px`\n })\n }, 50)\n\n let autoHeightTimeoutId: ReturnType\n if (isExpanded) {\n autoHeightTimeoutId = setTimeout(() => {\n wrapperEl.style.height = 'auto'\n }, timeoutMsRef.current + 50)\n }\n\n return () => {\n if (autoHeightTimeoutId) clearTimeout(autoHeightTimeoutId)\n clearTimeout(animationTimeoutId)\n }\n }, [isExpanded, collapsedHeight])\n\n const toggleExpanded = React.useCallback((shouldForceExpandValue: boolean | null = null) => {\n if (typeof shouldForceExpandValue === 'boolean') setIsExpanded(shouldForceExpandValue)\n else setIsExpanded(curr => !curr)\n }, [])\n\n return {\n wrapperRef,\n contentRef,\n shouldRender,\n isExpanded,\n toggleExpanded,\n }\n}\n","import React from 'react'\n\ntype Options = {\n timeoutMs: number\n shouldRender?: boolean\n}\n\nexport function useRenderTimeoutControl({ timeoutMs, shouldRender = false }: Options): boolean {\n const [shouldRenderControlState, setShouldRenderControlState] = React.useState(shouldRender)\n const prevShouldRenderControlState = React.useRef()\n\n React.useEffect(() => {\n let timerId: number\n\n if (shouldRender && !prevShouldRenderControlState.current) {\n setShouldRenderControlState(true)\n }\n\n if (!shouldRender && prevShouldRenderControlState.current) {\n timerId = window.setTimeout(() => {\n setShouldRenderControlState(false)\n }, timeoutMs)\n }\n\n prevShouldRenderControlState.current = shouldRender\n\n return () => {\n clearTimeout(timerId)\n }\n }, [shouldRender, timeoutMs])\n\n return shouldRenderControlState\n}\n","/**\n * Join all items in an array using a string. The final item can be joined using a separate string.\n *\n * Inspired by Laravel's Arr::join method\n *\n * @link https://github.com/laravel/framework/blob/7d221aa744845861657d0196e197957cb5a447ad/src/Illuminate/Collections/Arr.php#L437\n */\nexport function join(array: unknown[], glue: string, finalGlue?: string) {\n if (!finalGlue) {\n return array.join(glue)\n }\n\n if (array.length === 0) {\n return ''\n }\n\n if (array.length === 1) {\n return `${array[0]}`\n }\n\n return `${array.slice(0, -1).join(glue)}${finalGlue}${array[array.length - 1]}`\n}\n","import { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\nexport function copyToClipboard(contents: string) {\n const copyFn = isReactNativeApp ? copyToClipboardNative : copyToClipboardWeb\n\n return copyFn(contents)\n}\n\nfunction copyToClipboardWeb(contents: string): Promise {\n // navigator.clipboard.writeText isn't available in older versions of Safari\n if (typeof navigator.clipboard?.writeText === 'function') {\n return navigator.clipboard.writeText(contents)\n }\n\n if (copyToClipboardLegacy(contents)) {\n return Promise.resolve()\n }\n\n return Promise.reject(\n new DOMException('Copying is not supported on this device', 'NotAllowedError')\n )\n}\n\nfunction copyToClipboardNative(contents: string): Promise {\n return new Promise((resolve, reject) => {\n subscribeToNative('COPY_TO_CLIPBOARD_RESULT', ({ didCopy }) => {\n if (didCopy) {\n return resolve()\n }\n\n reject(new DOMException('Copying is not supported on this device', 'NotAllowedError'))\n })\n\n sendToNative('COPY_TO_CLIPBOARD', {\n contents,\n })\n })\n}\n\n/**\n * Ponyfill for navigator.clipboard.write\n *\n * This function is aimed to iOS Safari < 13.4 and macOS Safari < 13.1 as they don't support the clipboard API\n *\n * This is solved by creating a textarea with the contents to write.\n *\n * The textarea is then selected and `document.execCommand('copy')` is run, the textarea is then removed\n *\n * @param {String} contents The contents that should be copy to the clipboard\n * @return {Boolean} `true` if the contents were successfully written to the clipboard, `false` otherwise\n *\n * Reasons `false` could be returned:\n *\n * - Copying isn't supported in the current context (e.g. it was not user-initiated)\n * - Copying is disabled\n *\n * @link https://caniuse.com/mdn-api_navigator_clipboard\n */\nfunction copyToClipboardLegacy(contents: string) {\n const textarea = document.createElement('textarea')\n\n // Ensure that the user doesn't see or notice the textarea by moving it to another galaxy\n Object.assign(textarea.style, {\n position: 'fixed',\n top: '-9999px',\n left: '-9999px',\n })\n\n textarea.textContent = contents\n\n document.body.append(textarea)\n\n textarea.select()\n\n const didCopy = document.execCommand('copy')\n\n textarea.remove()\n\n return didCopy\n}\n","import { dayjs } from '../date'\n\nexport const creditCardExpirationPattern = /^(\\d{1,2})\\s*\\/\\s*(\\d{2,4})$/\n\nexport function parseExpirationDate(date: string) {\n const matches = date.trim().match(creditCardExpirationPattern)\n\n if (!matches || matches.length < 3) {\n return undefined\n }\n\n const [, monthFromCard, yearFromCard] = matches\n const year = yearFromCard.slice(-2) // We only want the trailing digits\n const month = monthFromCard.padStart(2, '0') // Month requires a leading zero\n\n return dayjs(`${year}-${month}`, 'YY-MM').toDate()\n}\n\nexport function formatExpirationDate(date: Date) {\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const year = date.getFullYear().toString().slice(-2)\n\n return `${month} / ${year}`\n}\n","type Environment = 'production' | 'testing' | 'dev'\n\nconst PRODUCTION_HOST_NAMES = [\n 'tabtouch.mobi',\n 'deploy.tabtouch.mobi',\n 'tabtouch.com.au',\n 'deploy.tabtouch.com.au',\n]\n\nexport function getCurrentEnvironment(): Environment {\n const hostname = window.location.hostname.replace(/^www\\./i, '').toLowerCase()\n\n if (PRODUCTION && PRODUCTION_HOST_NAMES.includes(hostname)) {\n return 'production'\n }\n\n if (hostname === 'localhost') {\n return 'dev'\n }\n\n return 'testing'\n}\n","export function hasValue(obj: unknown): obj is number {\n // handle casting null or empty string that returns zero value\n if (obj === null || obj === '') {\n return false\n }\n\n const numberValue = Number(obj)\n return (\n numberValue !== undefined &&\n numberValue !== null &&\n !isNaN(numberValue) &&\n typeof numberValue === 'number'\n )\n}\n","export function withTimeout, _TResolve = Awaited>(\n promise: TPromise,\n timeoutInMs: number,\n timeoutValue: _TResolve\n) {\n const timeout = new Promise<_TResolve>(resolve => {\n window.setTimeout(() => resolve(timeoutValue), timeoutInMs)\n })\n\n return Promise.race([promise, timeout])\n}\n","type ScriptAttributes = Partial>\n\nexport function scriptLoader(\n url: string,\n attributes?: ScriptAttributes\n): Promise {\n return new Promise((resolve, reject) => {\n const script = window.document.createElement('script')\n script.src = url\n script.async = true\n\n Object.assign(script, attributes)\n\n script.addEventListener('load', () => {\n resolve(script)\n })\n\n script.addEventListener('error', reject, false)\n\n window.document.body.appendChild(script)\n })\n}\n","import { useEffect } from 'react'\nimport { configureScope } from '@sentry/react'\nimport type { WithRequired } from '../types/utils'\n\ntype AreaTag = 'quickbet-deposit' | 'account-deposit' | 'self-verification'\n\ntype UseSentryScopeParams = {\n areaTag: AreaTag\n userId: number | null\n useUserIdAsFingerprint?: boolean\n}\n\nexport const useSentryScope = ({\n areaTag,\n userId,\n useUserIdAsFingerprint = false,\n}: UseSentryScopeParams) => {\n useEffect(() => {\n configureSentryScope({ areaTag, userId, useUserIdAsFingerprint })\n return () => {\n resetSentryScope(!!userId)\n }\n }, [areaTag, useUserIdAsFingerprint, userId])\n}\n\nconst configureSentryScope = ({\n areaTag,\n userId,\n useUserIdAsFingerprint,\n}: WithRequired) => {\n configureScope(scope => {\n scope.setTag('area', areaTag)\n\n if (userId) {\n scope.setUser({ id: userId })\n if (useUserIdAsFingerprint) {\n scope.setFingerprint([userId.toString()])\n }\n }\n })\n}\n\nconst resetSentryScope = (clearUser: boolean) => {\n configureScope(scope => {\n scope.setTag('area', undefined)\n if (clearUser) {\n scope.setUser(null)\n }\n scope.setFingerprint(['{{ default }}'])\n })\n}\n","import { useCallback, useState } from 'react'\n\ntype Options = {\n startOpen?: boolean\n}\n\nexport function useToggleControl(options?: Options) {\n const [isOpen, setOpen] = useState(options?.startOpen ?? false)\n\n const open = useCallback(() => {\n setOpen(true)\n }, [])\n\n const close = useCallback(() => {\n setOpen(false)\n }, [])\n\n const toggle = useCallback(() => {\n setOpen(isOpen => !isOpen)\n }, [])\n\n return {\n isOpen,\n open,\n close,\n toggle,\n }\n}\n","import { addBreadcrumb, captureException, captureMessage, SeverityLevel } from '@sentry/react'\n\nexport type Category = 'deposit' | 'verification'\n\nexport const addCrumb = (category: Category, message: string, level: SeverityLevel = 'info') => {\n addBreadcrumb({\n level,\n category,\n message,\n })\n}\n\nexport const reportWarning = (category: Category, message: string) => {\n addCrumb(category, message, 'warning')\n captureMessage(message)\n}\n\nexport const reportError = (category: Category, message: string) => {\n addCrumb(category, message, 'error')\n captureException(new Error(message))\n}\n","export function last(array: TItem[]): TItem | undefined {\n return array[array.length - 1]\n}\n","const startsWithVowelPattern = /^[aeiou]/i\n\nexport function determineIndefiniteArticle(word: string): string {\n if (startsWithVowelPattern.test(word)) {\n return 'an'\n }\n\n return 'a'\n}\n","let numberFormatter: Intl.NumberFormat\nlet numberFormatterWithZeroDecimal: Intl.NumberFormat\n\nexport function toMoney(value: number, options: { decimalPlaces?: 0 | 2 } = {}): string {\n const { decimalPlaces = 2 } = options\n\n if (!isFinite(value)) {\n return ''\n }\n\n if (decimalPlaces === 0) {\n numberFormatterWithZeroDecimal ??= new Intl.NumberFormat('en-AU', {\n style: 'currency',\n currency: 'AUD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n return numberFormatterWithZeroDecimal.format(Math.round(value))\n }\n\n numberFormatter ??= new Intl.NumberFormat('en-AU', {\n style: 'currency',\n currency: 'AUD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n return numberFormatter.format(value)\n}\n\nexport const roundEstimateDown = (value: number | null, decimals: number) => {\n if (value === null) return 0\n\n const strValue = value.toFixed(10)\n const decimalPosition = strValue.indexOf('.')\n\n if (strValue.indexOf('.') === -1) return value\n\n const sliceEndPosition = strValue.slice(0, decimalPosition + decimals + 1)\n return Number(sliceEndPosition)\n}\n","export function toDisplayPrice(price: number | null) {\n if (price === null) {\n return '-'\n }\n // Truncate to 0 decimal place\n if (price >= 1000) {\n return price.toString().split('.')[0]\n }\n let int\n let dec\n // Truncate to 1 decimal place\n if (price >= 100) {\n ;[int, dec = '0'] = price.toString().split('.')\n return `${int}.${dec.split('')[0] || '0'}`\n }\n // Ensure 2 decimals places\n ;[int, dec = '00'] = price.toString().split('.')\n return `${int}.${dec.length === 1 ? dec + '0' : dec}`\n}\n","const defaults: CurrencySettings = {\n errorOnInvalid: false,\n pattern: '!#',\n negativePattern: '-!#',\n}\n\nexport class Currency {\n public get value() {\n return roundToTwoDecimals(this._value)\n }\n public get rawValue() {\n return this._value\n }\n private readonly _value: number\n private _settings: CurrencySettings\n\n constructor(value: number | string | Currency, opts?: Partial) {\n const settings = { ...defaults, ...opts }\n const v = this.parse(value, settings)\n this._value = v\n this._settings = settings\n }\n\n add(number: number | string | Currency): Currency {\n return new Currency(this._value + this.parse(number, this._settings), this._settings)\n }\n\n subtract(number: number | string | Currency): Currency {\n return new Currency(this._value - this.parse(number, this._settings), this._settings)\n }\n\n multiply(number: number): Currency {\n return new Currency(this._value * number, this._settings)\n }\n\n divide(number: number | string | Currency): Currency {\n return new Currency(this._value / this.parse(number, this._settings, false), this._settings)\n }\n\n dollars(): number {\n return ~~this._value\n }\n\n format(options?: Partial>): string {\n const { pattern, negativePattern } = { ...this._settings, ...options }\n const split = Math.abs(this._value).toFixed(2).split('.')\n const dollars = split[0]\n const cents = split[1]\n\n return (this._value >= 0 ? pattern : negativePattern)\n .replace('!', '$')\n .replace('#', dollars.replace(/(\\d)(?=(\\d{3})+\\b)/g, '$1' + ',') + (cents ? '.' + cents : ''))\n }\n\n toString(): string {\n return roundToTwoDecimals(this._value).toFixed(2)\n }\n\n toJSON(): number {\n return parseFloat(this.toString())\n }\n\n private parse(\n value: number | string | Currency,\n opts: CurrencySettings,\n useRounding = false\n ): number {\n let v = 0\n const { errorOnInvalid } = opts\n\n if (typeof value === 'number' || value instanceof Currency) {\n v = value instanceof Currency ? value._value : value\n } else if (typeof value === 'string') {\n const regex = new RegExp(`[^-\\\\d.]`, 'g')\n const decimalString = new RegExp(`\\\\.`, 'g')\n v =\n parseFloat(\n value\n .replace(/\\((.*)\\)/, '-$1') // allow negative e.g. (1.99)\n .replace(regex, '') // replace any non numeric values\n .replace(decimalString, '.') // convert any decimal values\n ) || 0\n } else {\n if (errorOnInvalid) {\n throw new Error('Invalid Input')\n }\n v = 0\n }\n\n return useRounding ? roundToTwoDecimals(v) : v\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst roundToTwoDecimals = (value: number): number => {\n const s = value.toString()\n if (s.includes('e')) {\n // grotty hax wont work so do it with rounding errors\n return Math.round(value * 100) / 100\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Number(Math.round((s + 'e+2') as any) + 'e-2') // this is some grotty hax to round without errors in js\n}\n\n// =====\n// Types\n// =====\n\ninterface CurrencySettings {\n errorOnInvalid: boolean\n pattern: string\n negativePattern: string\n}\n","export const callCenterPhoneNumber = `tel:+611300363688`\n\nexport const callCenterInternationalPhoneNumber = 'tel:+61894455391'\n","/**\n * In some circumstances it's possible that storage is not supported, such as\n * when it's disabled by the user or, in Safari, all cookies are blocked.\n */\nfunction isLocalStorageSupported() {\n try {\n return (\n 'localStorage' in window &&\n window.localStorage !== null &&\n window.localStorage !== undefined &&\n typeof window.localStorage.getItem === 'function' &&\n typeof window.localStorage.setItem === 'function' &&\n typeof window.localStorage.removeItem === 'function'\n )\n } catch (e) {\n if (e instanceof DOMException && e.name === 'SecurityError') {\n // eslint-disable-next-line no-console\n console.error('User has blocked cookies or disabled browser storage', e)\n }\n\n return false\n }\n}\n\nexport function getFromLocalStorage(key: string): string | null {\n if (isLocalStorageSupported()) {\n try {\n return window.localStorage.getItem(key)\n } catch (e) {\n swallowQuotaExceededError(e as LocalStorageError)\n }\n }\n\n return null\n}\n\nexport function setInLocalStorage(key: string, data: string): void {\n if (isLocalStorageSupported()) {\n try {\n window.localStorage.setItem(key, data)\n } catch (e) {\n swallowQuotaExceededError(e as LocalStorageError)\n }\n }\n}\n\nexport function removeFromLocalStorage(key: string): void {\n if (isLocalStorageSupported()) {\n try {\n window.localStorage.removeItem(key)\n } catch (e) {\n swallowQuotaExceededError(e as LocalStorageError)\n }\n }\n}\n\nfunction swallowQuotaExceededError(e: LocalStorageError): void {\n // MOBILE-477 Ignore localStorage DOM 22 / \"quota exceeded\" error (only). Rethrow other errors.\n if (e.code !== 22 && !/quota/i.test(e.name)) {\n throw e\n }\n}\n\ntype LocalStorageError = { code: number; name: string }\n","import { CommMessage, Contract } from '.'\nimport { CommService } from './commShared'\nimport { v4 } from 'uuid'\n\n// Constants\n\nconst reactNativeConstants = window?.ReactNativeConstants\nexport const OS = reactNativeConstants?.OS\n\nexport const isReactNativeApp = !!window.ReactNativeWebView\nexport const isReactNativeAndroid = isReactNativeApp && OS === 'android'\nexport const isReactNativeIos = isReactNativeApp && OS === 'ios'\n\n/** OS major version */\nexport const MajorVersion = reactNativeConstants?.MajorVersion\n/** Repo RN app build version */\nexport const AppVersion = reactNativeConstants?.AppVersion\n\n// RN Comms\n\nlet commService: CommService\n\nexport const init = (): void => {\n if (!isReactNativeApp) return\n\n commService = new CommService()\n\n if (isReactNativeAndroid) {\n document.addEventListener('message', messageHandler, true)\n } else {\n window.addEventListener('message', messageHandler, true)\n }\n\n // Set up globals for slices\n window.ReactNativeComms = {\n sendToNative,\n subscribeToNative,\n }\n\n sendToNative('WEB_APP_READY')\n}\n\ntype ContractParams = Contract[K] extends never ? undefined : Contract[K]\n\nexport function sendToNative(\n topic: K,\n data?: ContractParams,\n id?: string\n): void {\n const message: CommMessage = {\n topic,\n data,\n id: id ?? v4(),\n }\n window.ReactNativeWebView?.postMessage(JSON.stringify(message))\n}\n\nexport function subscribeToNative(\n topic: K,\n callback: (data: Contract[K]) => void,\n options?: {\n cleanupSignal: AbortSignal\n }\n): {\n dispose: () => void\n} {\n const dispose = () => {\n options?.cleanupSignal.removeEventListener('abort', dispose)\n commService.removeCallback(topic, callback)\n }\n\n commService.addCallback(topic, callback)\n options?.cleanupSignal.addEventListener('abort', dispose, {\n once: true,\n })\n\n return {\n dispose,\n }\n}\n\nfunction messageHandler(message: Event): void {\n const { data: payload } = message as MessageEvent\n let messageId: string | undefined = undefined\n\n try {\n const { topic, data, id = null } = JSON.parse(payload)\n\n messageId = id\n\n commService.notifySubscribers(topic, data)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('Error parsing data from onMessage.nativeEvent.data:', payload, error)\n } finally {\n if (messageId) {\n sendToNative('ACK', undefined, messageId)\n }\n }\n}\n","import { Events, Contract } from '.'\n\nexport class CommService {\n private subscribers: Partial>\n\n constructor() {\n this.subscribers = {}\n }\n\n removeCallback(\n topic: K,\n callbackRef: (data: Contract[K]) => void\n ): void {\n if (!this.subscribers[topic]) return\n const indexToRemove = this.subscribers[topic]?.findIndex(\n currListener => currListener === callbackRef\n )\n if (indexToRemove === -1 || indexToRemove === undefined) return\n this.subscribers[topic]?.splice(indexToRemove, 1)\n }\n\n notifySubscribers(topic: K, data: Contract[K]): void {\n if (!this.subscribers[topic]) return\n this.subscribers[topic]?.forEach(callback => {\n callback(data)\n })\n }\n\n addCallback(topic: K, callbackRef: (data: Contract[K]) => void): void {\n if (!this.subscribers[topic]) {\n this.subscribers[topic] = []\n }\n this.subscribers[topic]?.push(callbackRef as CommsCallback)\n }\n}\n\ntype CommsCallback = (data: Contract[Events]) => void\n","import * as stateMachine from 'rwwa-rx-state-machine'\n\nexport const GiddyUpTabChanged = stateMachine.createSignal('GiddyUpTabChanged')\nexport const QuaddieValueChanged = stateMachine.createSignal('QuaddieValueChanged')\n","import * as stateMachine from 'rwwa-rx-state-machine'\n\nexport const open = stateMachine.createIntent('OPEN MODAL')\nexport const close = stateMachine.createIntent('CLOSE MODAL')\n","import { createIntent, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport * as immutable from 'immutable'\nimport moment from 'moment'\n\n/** @deprecated DO NOT USE */\nexport const navigateHome = createIntent('NavigateHome')\n/** @deprecated DO NOT USE */\nexport const navigateToContactDetailsEdit = createIntent('NavigateToEditContactDetails')\n/** @deprecated DO NOT USE */\nexport const navigateToDepositLimitsView = createIntent('NavigateToDepositLimits')\n/** @deprecated DO NOT USE */\nexport const navigateToDepositLimitsEdit = createIntent('NavigateToEditDepositLimits')\n/** @deprecated DO NOT USE */\nexport const navigateToPendingBets = createIntent('NavigateToPendingBets')\n/** @deprecated DO NOT USE */\nexport const navigateToNextEvents = createIntent('NavigateToNextEvents')\n/** @deprecated DO NOT USE */\nexport const navigateBack = createIntent('Navigate Back')\n/** @deprecated DO NOT USE */\nexport const navigateHistoryBack = createIntent('Navigate History Back')\n/** @deprecated DO NOT USE */\nexport const pushHandlerTag = createIntent('PushHandlerTag')\n/** @deprecated DO NOT USE */\nexport const popHandlerTag = createIntent('PopHandlerTag')\n/** @deprecated DO NOT USE */\nexport const modalNavigateBack = createIntent('ModalNavigateBack')\n/** @deprecated DO NOT USE */\nexport const navigateToLogout = createIntent('NavigateToLogout')\n\n/** @deprecated DO NOT USE */\nexport const navigateToMeeting = createIntent('NavigateToMeeting')\n/** @deprecated DO NOT USE */\nexport const navigateToRace = createIntent('NavigateToRace')\n/** @deprecated DO NOT USE */\nexport const navigateToFixedMeeting = createIntent('NavigateToFixedMeeting')\n/** @deprecated DO NOT USE */\nexport const navigateToFixedRace = createIntent('NavigateToFixedRace')\n/** @deprecated DO NOT USE */\nexport const navigateToFixedProduct = createIntent('NavigateToFixedProduct')\n\n/** @deprecated DO NOT USE */\nexport const navigationState$ = attachDriver({\n path: 'navigation',\n driver: navigationDriver,\n}).distinctUntilChanged()\n\nfunction navigationDriver(state: immutable.OrderedMap, intent: Signal) {\n state = state || immutable.OrderedMap()\n\n switch (intent.tag) {\n case navigateHome: {\n window.location.hash = ''\n break\n }\n\n case navigateHistoryBack: {\n window.history.back()\n break\n }\n\n case navigateToContactDetailsEdit: {\n const { isDesktop, betAccountHolderNumber } = intent.data\n window.location.href = isDesktop\n ? `/account/mypreferences/contactdetailsedit/${betAccountHolderNumber}`\n : `#account/contactdetails/edit/${betAccountHolderNumber}`\n break\n }\n\n case navigateToDepositLimitsView: {\n const isDesktop = intent.data.isDesktop\n const saveSuccess = intent.data.saveSuccess || false\n const accountHolderNumber = intent.data.accountHolderNumber\n\n let url = isDesktop\n ? `/account/depositlimits?saveSuccess=${saveSuccess}`\n : `#account/deposit-limits?saveSuccess=${saveSuccess}`\n\n if (accountHolderNumber) {\n url += `&accountHolderNumber=${accountHolderNumber}`\n }\n window.location.href = url\n break\n }\n\n case navigateToDepositLimitsEdit: {\n const { isDesktop, accountHolderNumber } = intent.data\n const url = isDesktop\n ? `/account/depositlimits/edit/${accountHolderNumber}`\n : `#account/deposit-limits/edit/${accountHolderNumber}`\n window.location.href = url\n break\n }\n\n // TODO remove when Meetings page is taken off the LaunchDarkly flag for everyone\n case navigateToMeeting: {\n window.location.hash =\n '#tote/meetings/' +\n intent.data.id +\n '?date=' +\n moment(intent.data.date).format('YYYY-MM-DD')\n break\n }\n case navigateToRace: {\n window.location.hash =\n '#tote/meetings/' +\n (intent.data.id || intent.data.fixtureId) +\n '/' +\n intent.data.raceNumber +\n '?date=' +\n moment(intent.data.date || intent.data.fixtureDate).format('YYYY-MM-DD')\n break\n }\n case navigateToFixedMeeting: {\n window.location.hash =\n '#fobracing/foo/races/' +\n intent.data.id.toLowerCase() +\n '/' +\n moment(intent.data.date).format('YYYY-MM-DD') +\n '?selectionDate=' +\n moment(intent.data.date).format('YYYY-MM-DD')\n break\n }\n case navigateToFixedRace: {\n window.location.hash =\n '#fobracing/propositions/foo/races/' +\n intent.data.id.toLowerCase() +\n '?selectionDate=' +\n moment(intent.data.date).format('YYYY-MM-DD')\n break\n }\n case navigateToFixedProduct: {\n const date = moment(intent.data.date).format('YYYY-MM-DD')\n window.location.hash =\n '#fobracing/' +\n intent.data.id +\n '/' +\n intent.data.code +\n '/' +\n date +\n '?selectiondate=' +\n date\n break\n }\n\n case navigateToPendingBets: {\n window.location.hash = '#account/activity/pending'\n break\n }\n\n case navigateToNextEvents: {\n window.location.hash = '#next-events'\n break\n }\n\n case pushHandlerTag: {\n return state.set(intent.data, intent.data)\n }\n\n case popHandlerTag: {\n return state.delete(intent.data)\n }\n\n case modalNavigateBack: {\n if (state.size > 0) navigateBack(state.last())\n\n break\n }\n case navigateToLogout: {\n const { isDesktop } = intent.data\n const url = isDesktop ? '/account/logoff' : '#account/logout'\n window.location.href = url\n break\n }\n }\n\n return state\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Object = Record\n\n/** Deep merge a source into a target, retaining target reference\n *\n * Source values will override target values\n *\n * NOTE: target argument will be mutated\n *\n * eg. deepMerge({ 1: 1, 2: 2 }, { 1: null, 3: 3 }) -> { 1: null, 2: 2, 3: 3 }\n */\nexport function deepMerge(\n target: T extends unknown[] ? never : T,\n source: Object\n): T {\n if (!source || !isObject(target)) return target\n\n for (const key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) break\n\n if (isObject(source[key])) {\n if (!target[key] || !isObject(target[key])) {\n ;(target as Object)[key] = {}\n }\n deepMerge(target[key] as Object, source[key] as Object)\n } else {\n ;(target as Object)[key] = source[key]\n }\n }\n\n return target\n}\n\nfunction isObject(item: unknown): boolean {\n return item === Object(item) && !Array.isArray(item)\n}\n","import * as gtm from './GoogleTagManagerService'\nimport * as dataLayer from './AnalyticsDataLayer'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { deepMerge } from '@core/Utils/object/deepMerge'\n\n/**\n * @deprecated The method should not be used for new events\n * It requires you to update the javascript in Tag Manager to pick up any new data from the dataLayer\n * Use GoogleTagManagerService/trackEvent instead to pass both the event name and any associated data\n */\nexport function track(name: string, data?: DeepPartial): void {\n /*\n * deep merge is used to preserve the data layer.\n * Preserving the data layer is currently *required* because its properties are directly accessed and used\n * to write data to via object keys in the legacy code (see `GoogleTagManagerService`).\n */\n updateDataLayer(data)\n dataLayer.addToHistory(name, JSON.stringify(data || {}))\n if (data) {\n gtm.trackEvent(name as Parameters[0], data)\n } else {\n gtm.trackKey(name as Parameters[0])\n }\n}\n\nexport function updateDataLayer(data?: DeepPartial): void {\n if (data) {\n // Make sure we were sent something that can be merged\n deepMerge(dataLayer.data, data)\n dataLayer.saveTrackData()\n }\n}\n\nexport function assignStructuredSearch(data: dataLayer.StructuredSearchData): void {\n dataLayer.data.structuredSearch = { ...dataLayer.data.structuredSearch, ...data }\n dataLayer.saveTrackData()\n}\n\nexport function trackAccountNumber(accountNumber?: string): void {\n updateDataLayer({\n user: {\n accountNumber: accountNumber ?? '',\n },\n })\n}\n\nexport function trackActionInvoked(actionTaken: string): void {\n // Call the action invoked direct call rule\n track(keys.actionInvoked, { actionInvoked: actionTaken })\n}\n\nexport function trackModalState(modalDisplayed: boolean, modalName: string): void {\n updateDataLayer({\n navigation: {\n modalDisplayed: modalDisplayed,\n modalName: modalName,\n },\n })\n}\n\nexport function giddyUpViewed(): void {\n updateDataLayer({\n giddyUp: {\n giddyUpViewed: true,\n },\n })\n}\n\nexport function setGiddyUpQuaddieValue(value: boolean): void {\n updateDataLayer({\n giddyUp: {\n quaddieValueSelected: value,\n },\n })\n}\n\nexport function setGiddyUpTab(tab: string): void {\n updateDataLayer({\n giddyUp: {\n selectedTab: tab,\n },\n })\n}\n\n// Types\ntype DeepPartial = {\n [P in keyof T]?: DeepPartial\n}\n","import { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\n\nexport interface MysteryBetData {\n isQuickPick: boolean\n mysteryType: string\n}\n\nexport type BetConstruction = 'single' | 'betslip' | 'quickbet' | null\n\nexport interface AnalyticsBetData {\n id: number | null\n productType: string\n construction: BetConstruction\n placementMethod: string\n isFirstBet: boolean | null\n racing: {\n tote: {\n cost: number\n numberOfTickets: number\n bonusCashUsed: boolean\n bonusCashAmount: number | null\n }\n fixed: {\n cost: number\n numberOfTickets: number\n bonusCashUsed: boolean\n bonusCashAmount: number | null\n }\n info: string\n selection: object | null\n }\n sports: {\n tote: { cost: number; numberOfTickets: number }\n info: string\n }\n mixed: {\n fixed: {\n cost: number\n numberOfTickets: number\n bonusCashUsed: boolean\n bonusCashAmount: number | null\n }\n }\n specialOffers: string[] | null\n errorMessage: string | null\n betBatchId: string | null\n betType: string | null\n mystery: MysteryBetData | null\n tags: string[] | null\n}\n\nexport interface BiometricStatus {\n present: boolean\n available: boolean\n reason: string\n}\n\nexport interface DeviceInfoPayload {\n deviceModel: number\n deviceFamily: number\n deviceName: string\n deviceMajorVersion: number\n deviceMinorVersion: number\n deviceOSMajorVersion: number\n deviceOSMinorVersion: number\n deviceOSPatchVersion: number\n deviceRawInfo: string\n deviceDisplayName: string\n deviceDisplayPPI: number\n deviceNumCores: number\n deviceCPUFreq: number\n}\n\nexport interface LocalAuthAccount {\n accountNumber: number\n isLocalAuthActive: boolean\n localAuthActivationDateTime: string\n localAuthLastLoginDateTime: string\n localAuthMethod: string\n localAuthMethodAttempted: string\n numberOfFailedLocalAuthAttempts: string\n uniqueUserId: string\n}\nexport interface LocalAuthAnalyticsData {\n //AnalyticsData publish locally for Adobe Analytics\n msgBusName: string\n msgDispatched: string\n msgName: string\n msgType: string\n device: {\n bioMetricsStatus: BiometricStatus\n deviceInfo: DeviceInfoPayload\n isLocalCustomPinAvailable: boolean\n isLocalDevicePinAvailable: boolean\n localAuthAccounts: LocalAuthAccount[]\n }\n accountNumber?: number | string\n eventDateTime: string\n eventName: string\n // Error Data Structure\n errorCode?: number\n errorType?: string\n errorMessage?: string\n}\n\nexport interface NavigationData {\n currentScreenName: string\n currentScreenCode: string\n modalDisplayed: boolean\n modalName: string\n previousScreenName: string\n previousScreenCode: string\n}\n\nexport interface RacingData {\n code: string | null\n date: Date | null\n meetingId: string | null\n raceNumber: number | string\n}\n\nexport interface StructuredSearchCriteria {\n contestType?: string[]\n date?: string[]\n wonLastStart?: boolean\n placedLastStart?: boolean\n gearChange?: boolean\n firstUp?: boolean\n secondUp?: boolean\n trackWinPercentage?: number\n careerWinPercentage?: number\n distanceWinPercentage?: number\n trackdistanceWinPercentage?: number\n barrierNumber?: string[]\n boxNumber?: string[]\n apprentice?: boolean\n favouriteLastStart?: boolean\n weightChanged?: string[]\n distanceChanged?: string[]\n daysSinceLastStart?: {\n min?: number\n max?: number\n }\n daysSinceLastWin?: {\n min?: number\n max?: number\n }\n startsSinceLastSpell?: {\n min?: number\n max?: number\n }\n fixedOddsPrice?: {\n min?: number\n max?: number\n }\n winTrackConditions?: string[]\n location?: {\n locationGroup: string[] | null\n trackIds: string[] | null\n }\n}\n\nexport interface StructuredSearchData {\n criteria: StructuredSearchCriteria | null\n}\n\nexport interface GiddyUpData {\n giddyUpViewed: boolean\n selectedTab: string\n quaddieValueSelected: boolean\n}\n\nexport interface AnalyticsData {\n version: number\n content: { url: string }\n user: {\n accountNumber: string\n accountOperationType: string\n featureToggles: string\n isVisionOpen: boolean\n isHapticsEnabled: boolean\n isEnhancedBetslipEnabled: boolean\n isPayoutNotificationsEnabled?: boolean\n visionChannel?: string\n isBiometricsEnabled?: boolean | null\n }\n preferences: { cashBetting: string; debug: boolean }\n bet: AnalyticsBetData\n deposit: {\n amount: number\n openedWith: string\n }\n quickbet: {\n keypadState: string | null\n opened: { timestamp: Date | null }\n closed: { betPlaced: boolean; timestamp: Date | null }\n }\n structuredSearch: StructuredSearchData\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n specialOfferSelection: any\n localAuthAnalyticsData: LocalAuthAnalyticsData\n actionInvoked: string | null\n navigation: NavigationData\n giddyUp: GiddyUpData\n}\n\nconst history = []\n\nexport const navigationDefaultData: NavigationData = {\n currentScreenName: '',\n currentScreenCode: '',\n modalDisplayed: false,\n modalName: '',\n previousScreenCode: '',\n previousScreenName: '',\n}\n\nexport const giddyUpDefaultData: GiddyUpData = {\n giddyUpViewed: false,\n selectedTab: '',\n quaddieValueSelected: false,\n}\n\n// Setting up the base AnalyticsDataLayer in order to reuse it elsewhere.\n// If you want to initialise a node using a default object rather than doing it inline, you need\n// to spread the object to avoid deepMerge setting a reference to the default object in defaultData\nexport const defaultData: AnalyticsData = {\n version: 1.32,\n content: { url: '' },\n user: {\n accountNumber: '',\n accountOperationType: '',\n featureToggles: '',\n isVisionOpen: false,\n isHapticsEnabled: false,\n isEnhancedBetslipEnabled: false,\n isPayoutNotificationsEnabled: false,\n isBiometricsEnabled: null, //remains null for non-native app session\n },\n preferences: { cashBetting: '', debug: false },\n bet: {\n id: null,\n productType: '' /* single | multi */,\n construction: null /* single | betslip | betslipbeta | quickbet */,\n placementMethod: '' /* account | cash */,\n isFirstBet: null,\n racing: {\n tote: { cost: 0, numberOfTickets: 0, bonusCashUsed: false, bonusCashAmount: 0 },\n fixed: { cost: 0, numberOfTickets: 0, bonusCashUsed: false, bonusCashAmount: 0 },\n info: '',\n selection: null,\n },\n sports: {\n tote: { cost: 0, numberOfTickets: 0 },\n info: '',\n },\n mixed: { fixed: { cost: 0, numberOfTickets: 0, bonusCashUsed: false, bonusCashAmount: 0 } },\n specialOffers: null,\n errorMessage: null,\n betBatchId: null,\n betType: null,\n mystery: null,\n tags: null,\n },\n deposit: {\n amount: 0,\n openedWith: '',\n },\n quickbet: {\n keypadState: null,\n opened: {\n timestamp: null,\n },\n closed: {\n betPlaced: false,\n timestamp: null,\n },\n },\n specialOfferSelection: null,\n localAuthAnalyticsData: {\n msgBusName: '', //eg 'BettingVC'\n msgDispatched: '', //eg '2018-10-30 04:10:20 +0000'\n msgName: '', //eg 'ALYT_LA_MESSAGE'\n msgType: '', //eg 'Analytics'\n device: {\n bioMetricsStatus: {\n available: false,\n present: false,\n reason: '', //eg 'Authentication using BIOMetrics is not available'\n },\n deviceInfo: {\n deviceModel: 0,\n deviceFamily: 0,\n deviceName: '',\n deviceMajorVersion: 0,\n deviceMinorVersion: 0,\n deviceOSMajorVersion: 0,\n deviceOSMinorVersion: 0,\n deviceOSPatchVersion: 0,\n deviceRawInfo: '',\n deviceDisplayName: '',\n deviceDisplayPPI: 0,\n deviceNumCores: 0,\n deviceCPUFreq: 0,\n },\n isLocalCustomPinAvailable: false,\n isLocalDevicePinAvailable: false,\n localAuthAccounts: [\n {\n accountNumber: 0,\n isLocalAuthActive: false,\n localAuthActivationDateTime: '',\n localAuthLastLoginDateTime: '',\n localAuthMethod: '',\n localAuthMethodAttempted: '',\n numberOfFailedLocalAuthAttempts: '',\n uniqueUserId: '',\n },\n ],\n },\n accountNumber: 'UNKNOWN',\n eventDateTime: '', //eg '2018-10-30 04:10:20 +0000'\n eventName: '', //eg 'ALYT_LA_EventName_DisablePIN_Cancel'\n },\n actionInvoked: null,\n navigation: { ...navigationDefaultData },\n\n giddyUp: { ...giddyUpDefaultData },\n structuredSearch: {\n criteria: {},\n },\n}\n\n// CMS content areas and other modules modify this export directory :(\nexport let data = Object.assign(defaultData, {})\n\n/*\n * GTM uses the following keys to identify specific steps during a bet placement:\n * \"bet-account\" = Bet step 1 (pressing the \"bet now\"/\"account\" button)\n * \"bet-account-review\" = Bet step 2 (arriving at the bet confirmation stage after a successful bet proposal)\n * \"bet-account-processed\" = Bet step 3 (arriving at the bet receipt stage after a successful bet placement)\n *\n */\nexport const keys = {\n nav: 'nav-content-url',\n menu: 'nav-menu',\n loginForgotPassword: 'login-forgot-password',\n loginForgotAccountNumber: 'login-forgot-account-number',\n loginForgotAccountNumberSent: 'login-forgot-account-number-sent',\n loginResetPasswordSucces: 'login-reset-password-success',\n loginSuccess: 'login-success',\n loginFailed: 'login-failed',\n logout: 'logout',\n searchQuery: 'searchQuery',\n\n profileSettingsChange: 'profile-settings-change',\n\n accountDropDownOpened: 'account-dropdown-opened',\n accountDropDownClick: 'accountDropDownClick',\n\n navExit: 'nav.exit',\n navNav: 'nav.nav',\n exitToBaseKey: 'nav-exit-',\n exitToFacebook: 'nav-exit-facebook',\n exitToTwitter: 'nav-exit-twitter',\n exitToAndroid: 'nav-exit-android',\n exitToIos: 'nav-exit-ios',\n exitToWebsite: 'nav-exit-website',\n exitToAflHub: 'nav-exit-afl-hub',\n exitToAndroidInstructions: 'nav-android-installation-instructions',\n\n betSelected: 'bet-selected',\n betAccountSelected: 'bet-account',\n betAccountReview: 'bet-account-review',\n betAccountProcessed: 'bet-account-processed',\n\n quickbetOpen: 'quickbet-open',\n quickbetClosed: 'quickbet-closed',\n quickbetAccountSelected: 'bet-account',\n quickbetAccountReview: 'bet-account-review',\n quickbetAccountProcessed: 'bet-account-processed',\n\n quickbetBonusBetButtonShown: 'quickbet-bonus-bet-button-shown',\n quickbetBonusBetButtonActivated: 'quickbet-bonus-bet-button-activated',\n quickbetBonusBetButtonDeactivated: 'quickbet-bonus-bet-button-deactivated',\n quickbetBonusBetSelected: 'quickbet-bonus-bet-selected',\n quickbetBonusBetUnselected: 'quickbet-bonus-bet-unselected',\n quickbetBonusCashSelected: 'quickbet-bonus-cash-selected',\n quickbetBonusCashUnselected: 'quickbet-bonus-cash-unselected',\n quickbetBonusBetProposed: 'quickbet-bonus-bet-proposed',\n quickbetBonusBetAddedToBetslip: 'quickbet-bonus-bet-added-to-betslip',\n quickbetBonusCashRemoved: 'quickbet-bonus-cash-removed',\n quickbetBonusCashButtonActivated: 'quickbet-bonus-cash-button-activated',\n quickbetBonusCashButtonDeactivated: 'quickbet-bonus-cash-button-deactivated',\n mysteryBonusCashButtonActivated: 'mystery-bonus-cash-button-activated',\n mysteryBonusCashButtonDeactivated: 'mystery-bonus-cash-button-deactivated',\n\n betslipBetaSelected: 'bet-account',\n betslipBetaReview: 'bet-account-review',\n betslipBetaProcessed: 'bet-account-processed',\n\n betslipBetAdded: 'add-to-betslip',\n betslipBetRemoved: 'betslip-remove',\n betslipCleared: 'betslip-clear',\n betslipAccountSelected: 'bet-account',\n betslipAccountReview: 'bet-account-review',\n betslipAccountProcessed: 'bet-account-processed',\n betslipCashSelected: 'bet-cash',\n\n betslipBonusBetButtonShown: 'betslip-bonus-bet-button-shown',\n betslipBonusBetButtonActivated: 'betslip-bonus-bet-button-activated',\n betslipBonusBetButtonDeactivated: 'betslip-bonus-bet-button-deactivated',\n betslipBonusBetSelected: 'betslip-bonus-bet-selected',\n betslipBonusBetUnselected: 'betslip-bonus-bet-unselected',\n betslipBonusBetChosen: 'betslip-bonus-bet-chosen',\n betslipBonusBetConfirmed: 'betslip-bonus-bet-confirmed',\n betslipBonusCashRemoved: 'betslip-bonus-cash-removed',\n\n mysterySelected: 'bet-selected',\n mysteryAccountSelected: 'bet-account',\n mysteryReview: 'bet-account-review',\n mysteryReceipt: 'bet-account-processed',\n\n favNumbersSelected: 'bet-selected',\n favNumbersAccountSelected: 'bet-account',\n favNumbersAccountReview: 'bet-account-review',\n favNumbersAccountProcessed: 'bet-account-processed',\n\n tippingSelected: 'bet-selected',\n tippingAccountSelected: 'bet-account',\n tippingAccountReview: 'bet-account-review',\n tippingAccountProcessed: 'bet-account-processed',\n\n multiBetAdded: 'bet-add',\n multiBetRemoved: 'bet-remove',\n multiCleared: 'bet-clear',\n multiAccountSelected: 'bet-account',\n multiAccountReview: 'bet-account-review',\n multiAccountProcessed: 'bet-account-processed',\n multiToastClicked: 'multi_toast_clicked',\n\n accountProcessed: 'account-interaction',\n\n depositBaseKey: 'deposit-',\n checkInBaseKey: 'lbs-checkin-',\n activityBaseKey: 'activity-',\n\n visionOpened: 'vision-opened',\n visionClosed: 'vision-closed',\n visionPositionChanged: 'vision-position-changed',\n visionFullScreenOn: 'vision-full-screen-on',\n visionFullScreenOff: 'vision-full-screen-off',\n visionSky1Selected: 'vision-sky-1-selected',\n visionSky2Selected: 'vision-sky-2-selected',\n visionRacingWASelected: 'vision_racing_wa_selected',\n visionRaceReplaySelected: 'vision_race_replay_selected',\n visionWindowResized: 'vision-window-resized',\n visionMuted: 'vision-mute-on',\n visionUnMuted: 'vision-mute-off',\n\n skyPendingBetsOpen: 'sky_pending_bets_open',\n skyPendingBetsClosed: 'sky_pending_bets_closed',\n\n radioOn: 'radio-on',\n radioOff: 'radio-off',\n\n actionInvoked: 'action-invoked',\n\n trendingBetSelected: 'trending-bet-selected',\n trendingBetSortingChanged: 'trending-bet-sorting-changed',\n\n raceNotificationEnabled: 'race-notification-enabled',\n raceNotificationDisabled: 'race-notification-disabled',\n\n shareBet: 'share-bet',\n shareBetLinkOpen: 'share-bet-link-open',\n shareBetLinkLogin: 'share-bet-link-login',\n shareBetLinkAcquisition: 'share-bet-link-acquisition',\n shareBetLinkPlaced: 'share-bet-link-placed',\n\n shareBlackbook: 'share-blackbook',\n\n rebet: 're-bet',\n loadedBetBetslip: 'loaded-bet-betslip',\n\n takeABreakInformation: 'take-a-break-information',\n takeABreakConfirmation: 'take-a-break-confirmation',\n takeABreakAlreadyActive: 'take-a-break-already-active',\n takeABreakCancel: 'take-a-break-cancel',\n takeABreakSubmitSelection: 'take-a-break-submit-selection',\n takeABreakSubmitSucceeded: 'take-a-break-submit-succeeded',\n takeABreakSubmitFailed: 'take-a-break-submit-failed',\n\n activityStatementsSelected: 'activity-statements-selected',\n activityStatementRequestSubmitted: 'activity-statement-request-submitted',\n activityStatementRequestSuccess: 'activity-statement-request-success',\n activityStatementRequestFailure: 'activity-statement-request-failure',\n activityStatementsUpdateEmail: 'activity-statements-update-email',\n\n androidMigrationNotNow: 'android-migration-not-now',\n androidMigrationReinstall: 'android-migration-re-install',\n\n accountActivityTabChange: 'account-activity-tab-change',\n\n tooltipDismiss: 'tooltip-dismiss',\n\n productSelectionChanged: 'product-selection-changed',\n\n racePromotionLoaded: 'race-promotion-loaded',\n racePromotionOpened: 'race-promotion-opened',\n racePromotionClosed: 'race-promotion-closed',\n racePromotionTermsAndConditionsClicked: 'race-promotion-terms-and-conditions-clicked',\n\n racePreviewLoaded: 'race-preview-loaded',\n racePreviewOpened: 'race-preview-opened',\n racePreviewClosed: 'race-preview-closed',\n\n raceReplayOpened: 'race-replay-opened',\n raceReplayLaunched: 'race_replay_launched',\n raceReplayFullScreen: 'race_replay_fullscreen',\n raceReplayMute: 'race_replay_mute',\n raceReplayClosed: 'race_replay_closed',\n\n videoPreviewLoaded: 'video-preview-loaded',\n videoPreviewOpened: 'video-preview-opened',\n videoPreviewClosed: 'video-preview-closed',\n videoPreviewPlayed: 'video-preview-played',\n videoPreviewNotSupported: 'video-preview-not-supported',\n\n betInformerButtonPressed: 'bet-informer-button-pressed',\n betModifierButtonPressed: 'bet-modifier-button-pressed',\n\n meetingsCalendarNextMonth: 'meetings-calendar-next-month',\n meetingsCalendarPrevMonth: 'meetings-calendar-prev-month',\n meetingsCalendarSelectMonth: 'meetings-calendar-select-month',\n meetingsCalendarOpened: 'meetings-calendar-opened',\n meetingsCalendarSelectedDay: 'meetings-calendar-selected-day',\n meetingsFavouriteAdded: 'meetings-favourite-added',\n meetingsFavouriteRemoved: 'meetings-favourite-removed',\n meetingsFavouriteUsed: 'meetings-favourite-used',\n meetingsRaceCodeToggle: 'meetings-race-code-toggle',\n meetingsDayQuickSelect: 'meetings-day-quick-select',\n meetingsDayPrevArrow: 'meetings-day-prev-arrow',\n meetingsDayNextArrow: 'meetings-day-next-arrow',\n\n tipsBetClicked: 'tips-bet-clicked',\n racePreviewBetClicked: 'race-preview-bet-clicked',\n\n biometricsTogglePressed: 'biometrics-toggle-pressed',\n\n hamburgerMenuClicked: 'hamburger-menu-clicked',\n\n blackbookOddsClicked: 'blackbook-odds-clicked',\n blackbookAlertsUpdated: 'blackbook-alerts-updated',\n blackbookNavigateToRace: 'blackbook-navigate-to-race',\n blackbookEntryDeleteClicked: 'blackbook-entry-delete-clicked',\n blackbookEntryDeleted: 'blackbook-entry-deleted',\n blackbookEntryDeleteCanceled: 'blackbook-entry-delete-canceled',\n blackbookEntryExpanded: 'blackbook-entry-expanded',\n blackbookSortChanged: 'blackbook-sort-changed',\n blackbookCommentClicked: 'blackbook-comment-clicked',\n blackbookCommentCancel: 'blackbook-comment-cancel',\n blackbookCommentSave: 'blackbook-comment-save',\n blackbookAddRunner: 'blackbook-add-runner',\n blackbookGoToBlackbook: 'blackbook-go-to-blackbook',\n blackbookUnableToAdd: 'blackbook-unable-to-add',\n blackbookChangeView: 'blackbook-change-view',\n\n featureBannerViewed: 'view_promotion',\n featureItemBannerViewed: 'view_promotion',\n featureBannerClicked: 'select_promotion',\n featureItemClicked: 'select_promotion',\n\n categoryNavigation: 'category-navigation',\n\n quickDepositShown: 'quick-deposit-shown',\n quickDepositStarted: 'quick-deposit-started',\n quickDepositSucceeded: 'quick-deposit-succeeded',\n quickDepositFailed: 'quick-deposit-failed',\n quickDepositCancelled: 'quick-deposit-cancelled',\n quickDepositOtherDepositClicked: 'quick-deposit-other-deposit-clicked',\n quickDepositEditBetClicked: 'quick-deposit-edit-bet-clicked',\n quickDeposit3dSecure: 'quick-deposit-3d-secure',\n quickDepositNon3dSecure: 'quick-deposit-non-3d-secure',\n quickDeposit3dSecureNotShifted: 'quick-deposit-3d-secure-not-shifted',\n quickDeposit3dSecureError: 'quick-deposit-3d-secure-error',\n quickDeposit3dSecureUserDataSuccess: 'quick-deposit-3d-secure-user-data-success',\n quickDeposit3dSecureUserDataFail: 'quick-deposit-3d-secure-user-data-fail',\n\n signUpClicked: 'sign-up-clicked',\n signUpStart: 'sign-up-start',\n signUpJoin: 'sign-up-join',\n signUpVerifyAddress: 'sign-up-verify-address',\n signUpCreatePassword: 'sign-up-create-password',\n signUpDepositLimits: 'sign-up-deposit-limits',\n signUpUnsuccessful: 'sign_up_unsuccessful',\n signUpUnsuccessfulCallUs: 'sign_up_unsuccessful_call_us',\n signUpComplete: 'sign-up-complete',\n signUpDepositClick: 'sign-up-deposit-click',\n verificationSelectOption: 'verification-select-option',\n /**\n * Old, kebab-cased version is used in signup only. This has renamed to be different of the newer\n * version with underscores to avoid name collisions. This also sets up the newer one\n * to become the dominant version with the switch to snake_cased keys coming up\n */\n signUpVerificationEnterIdentification: 'verification-enter-identification',\n verificationAccountPending: 'verification-account-pending',\n signUpAlreadyHaveAccount: 'sign-up-already-have-account',\n signUpGoBackHomePage: 'sign-up-go-back-home-page',\n signUpNeedAssistance: 'sign-up-need-assistance',\n signUpError: 'sign-up-error',\n\n raceCardSwiped: 'race-card-swiped',\n\n raceCardPendingBetsOpen: 'race_card_pending_bets_open',\n raceCardPendingBetsViewAll: 'race_card_pending_bets_view_all',\n raceCardResultedBetsOpen: 'race_card_resulted_bets_open',\n raceCardResultedBetsViewAll: 'race_card_resulted_bets_view_all',\n\n raceCardSorting: 'race_card_sorting',\n\n skyRaceCardListViewOpen: 'sky_race_card_list_view_open',\n skyRaceCardFilterCodeUpdate: 'sky_race_card_filter_code_update',\n skyRaceCardFilterRegionUpdate: 'sky_race_card_filter_region_update',\n moreSkyRacesLoaded: 'sky_race_card_show_more',\n resetSkyScrollView: 'sky_race_card_return_first_race',\n\n verificationBannerLoaded: 'verification_banner_loaded',\n verificationCallUs: 'verification_call_us',\n verificationVerifyNow: 'verification_now',\n\n verificationStart: 'verification_start',\n verificationDetailsCorrect: 'verification_details_correct',\n verificationEditDetails: 'verification_edit_details',\n verificationEnterIdentification: 'verification_enter_identification',\n verificationSuccess: 'verification_success',\n verificationDepositClick: 'verification_deposit_click',\n verificationFail: 'verification_fail',\n verificationEditDetailsLocked: 'verification_edit_details_locked',\n verificationNeedAssistance: 'verification_need_assistance',\n verificationGoBackHomePage: 'verification_go_back_home_page',\n verificationError: 'verification_error',\n verificationContactUs: 'verification_contact_us',\n verificationCallUsLater: 'verification_call_us_later',\n verificationBetOffer: 'verification_bet_offer',\n verificationGetInTouch: 'verification_get_in_touch',\n verificationSavedDetails: 'verification_saved_details',\n\n withdrawal_error: 'withdrawal_error',\n withdrawal_cancel: 'withdrawal_cancel',\n withdrawal_success: 'withdrawal_success',\n\n optimoveTrack: 'optimove_track',\n\n formOpened: 'form_opened',\n formClosed: 'form_closed',\n} as const\n\nexport const getHistory = () => {\n if (data.preferences.debug) {\n return `history : ${history.length} items`\n } else {\n return 'history : debugging is off. Activate debugging to capture and display history'\n }\n}\n\nexport const addToHistory = (event: string, historyData: string) => {\n if (data.preferences.debug) {\n history.push({ timestamp: new Date(), event: event, data: historyData })\n }\n}\n\nexport const resetBetData = () => {\n data.bet.id = null\n data.bet.productType = ''\n data.bet.construction = null\n data.bet.placementMethod = ''\n data.bet.isFirstBet = null\n data.bet.errorMessage = null\n\n data.bet.racing.tote.numberOfTickets = 0\n data.bet.racing.tote.cost = 0\n data.bet.racing.tote.bonusCashUsed = false\n data.bet.racing.tote.bonusCashAmount = 0\n data.bet.racing.fixed.numberOfTickets = 0\n data.bet.racing.fixed.cost = 0\n data.bet.racing.fixed.bonusCashUsed = false\n data.bet.racing.fixed.bonusCashAmount = 0\n data.bet.racing.info = ''\n data.bet.racing.selection = null\n\n data.bet.sports.tote.numberOfTickets = 0\n data.bet.sports.tote.cost = 0\n data.bet.sports.info = ''\n\n data.bet.mixed.fixed.numberOfTickets = 0\n data.bet.mixed.fixed.cost = 0\n data.bet.mixed.fixed.bonusCashUsed = false\n data.bet.mixed.fixed.bonusCashAmount = 0\n\n data.bet.specialOffers = []\n data.bet.betType = null\n}\n\nconst enum LocalConstants {\n storageKey = '__amplify__AnalyticsDataLayer',\n}\n\nexport const saveTrackData = () => {\n setInLocalStorage(LocalConstants.storageKey, JSON.stringify(data))\n}\n\nexport const loadTrackData = () => {\n const storage = getFromLocalStorage(LocalConstants.storageKey) || ''\n const deserialisedStorage = JSON.parse(storage) as AnalyticsData\n\n if (deserialisedStorage) {\n if (deserialisedStorage.version >= data.version) {\n data = deserialisedStorage\n }\n }\n}\n\nexport const activateDebug = () => {\n data.preferences.debug = true\n saveTrackData()\n}\n\nexport const deactivateDebug = () => {\n data.preferences.debug = false\n saveTrackData()\n}\n","import * as dataLayer from './AnalyticsDataLayer'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { trackAccountNumber } from './Analytics'\nimport { isReactNativeIos, sendToNative } from '@mobi/web-native-comms/web'\nimport { getFeatureValue } from '@core/Utils/hooks/useFeature'\nimport { fullClientVersion } from '@core/Utils/clientVersion'\n\nexport const trackNav = (): void => trackKey(dataLayer.keys.nav)\nexport const trackBet = (): void => trackKey(dataLayer.keys.betSelected)\nexport const trackBetSingleSelected = (): void => trackKey(dataLayer.keys.betSelected)\nexport const trackBetSingleReview = (): void => {\n trackKey(dataLayer.keys.betAccountSelected)\n trackKey(dataLayer.keys.betAccountReview)\n}\nexport const trackBetSingleReceipt = (): void => trackKey(dataLayer.keys.betAccountProcessed)\n\nexport const trackBetSlipAdd = (data: object): void =>\n trackEvent(dataLayer.keys.betslipBetAdded, { data })\nexport const trackBetSlipReview = (): void => {\n trackKey(dataLayer.keys.betslipAccountSelected)\n trackKey(dataLayer.keys.betslipAccountReview)\n}\nexport const trackBetSlipReceipt = (): void => trackKey(dataLayer.keys.betslipAccountProcessed)\nexport const trackBetSlipCashSelected = (): void => trackKey(dataLayer.keys.betslipCashSelected)\nexport const trackBetSlipClear = (): void => trackKey(dataLayer.keys.betslipCleared)\nexport const trackBetSlipRemove = (): void => trackKey(dataLayer.keys.betslipBetRemoved)\n\nexport const trackMysterySelected = (): void => trackKey(dataLayer.keys.mysterySelected)\nexport const trackMysteryReview = (): void => {\n trackKey(dataLayer.keys.mysteryAccountSelected)\n trackKey(dataLayer.keys.mysteryReview)\n}\nexport const trackMysteryReceipt = (): void => trackKey(dataLayer.keys.mysteryReceipt)\n\nexport const trackFavNumbersSelected = (): void => trackKey(dataLayer.keys.favNumbersSelected)\nexport const trackFavNumbersReview = (): void => {\n trackKey(dataLayer.keys.favNumbersAccountSelected)\n trackKey(dataLayer.keys.favNumbersAccountReview)\n}\nexport const trackFavNumbersReceipt = (): void =>\n trackKey(dataLayer.keys.favNumbersAccountProcessed)\n\nexport const trackTippingSelected = (): void => trackKey(dataLayer.keys.tippingSelected)\nexport const trackTippingReview = (): void => {\n trackKey(dataLayer.keys.tippingAccountSelected)\n trackKey(dataLayer.keys.tippingAccountReview)\n}\nexport const trackTippingReceipt = (): void => trackKey(dataLayer.keys.tippingAccountProcessed)\n\nexport const trackMultiAdd = (): void => trackKey(dataLayer.keys.multiBetAdded)\nexport const trackMultiReview = (): void => {\n trackKey(dataLayer.keys.multiAccountSelected)\n trackKey(dataLayer.keys.multiAccountReview)\n}\nexport const trackMultiReceipt = (): void => trackKey(dataLayer.keys.multiAccountProcessed)\nexport const trackMultiClear = (): void => trackKey(dataLayer.keys.multiCleared)\nexport const trackMultiRemove = (): void => trackKey(dataLayer.keys.multiBetRemoved)\n\nexport const trackExit = (externalSite: string): void =>\n trackKey((dataLayer.keys.exitToBaseKey + externalSite) as EventKey)\nexport const trackMenu = (): void => trackKey(dataLayer.keys.menu)\nexport const trackAccount = (): void => trackKey(dataLayer.keys.accountProcessed)\nexport const trackDeposit = (key: string): void =>\n trackKey((dataLayer.keys.depositBaseKey + key) as EventKey)\nexport const trackCheckIn = (key: string): void =>\n trackKey((dataLayer.keys.checkInBaseKey + key) as EventKey)\nexport const trackActivity = (key: string): void =>\n trackKey((dataLayer.keys.activityBaseKey + key) as EventKey)\n\nexport const trackSearchQuery = (searchQueryText: string): void => {\n trackEvent(dataLayer.keys.searchQuery, { searchQueryText })\n}\nexport const trackTrendingBetSelected = (data: object): void =>\n trackEvent(dataLayer.keys.trendingBetSelected, { data })\nexport const trackTrendingBetSortingChanged = (data: object): void =>\n trackEvent(dataLayer.keys.trendingBetSortingChanged, { data })\n\nexport const trackShareBet = (data: object): void => trackEvent(dataLayer.keys.shareBet, { data })\nexport const trackRebet = (data: object): void => trackEvent(dataLayer.keys.rebet, { data })\nexport const trackLoadedBetBetslip = (data: object): void =>\n trackEvent(dataLayer.keys.loadedBetBetslip, { data })\n\nexport const trackTakeABreakInformation = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakInformation, { data })\nexport const trackTakeABreakConfirmation = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakConfirmation, { data })\nexport const trackTakeABreakAlreadyActive = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakAlreadyActive, { data })\nexport const trackTakeABreakCancel = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakCancel, { data })\nexport const trackTakeABreakSubmitSelection = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakSubmitSelection, { data })\nexport const trackTakeABreakSubmitSucceeded = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakSubmitSucceeded, { data })\nexport const trackTakeABreakSubmitFailed = (data: object): void =>\n trackEvent(dataLayer.keys.takeABreakSubmitFailed, { data })\n\nexport const trackActivityStatementsSelected = (accountNumber: number) => {\n trackEvent(dataLayer.keys.activityStatementsSelected, {\n accountNumber,\n })\n}\n\nexport const trackActivityStatementRequestSubmitted = (\n accountNumber: number,\n month: number,\n year: number,\n emailAddresses: string[]\n) => {\n trackEvent(dataLayer.keys.activityStatementRequestSubmitted, {\n accountNumber,\n month,\n year,\n emailAddresses,\n })\n}\n\nexport const trackActivityStatementRequestSuccess = (\n accountNumber: number,\n month: number,\n year: number,\n emailAddresses: string[]\n) => {\n trackEvent(dataLayer.keys.activityStatementRequestSuccess, {\n accountNumber,\n month,\n year,\n emailAddresses,\n })\n}\n\nexport const trackActivityStatementRequestFailure = (\n accountNumber: number,\n month: number,\n year: number,\n emailAddresses: string[]\n) => {\n trackEvent(dataLayer.keys.activityStatementRequestFailure, {\n accountNumber,\n month,\n year,\n emailAddresses,\n })\n}\n\nexport const trackActivityStatementsUpdateEmail = (accountNumber: number) => {\n trackEvent(dataLayer.keys.activityStatementsUpdateEmail, {\n accountNumber,\n })\n}\n\nexport const trackAccountActivityTab = (data: object): void =>\n trackEvent(dataLayer.keys.accountActivityTabChange, { data })\n\nexport const trackTooltipDismissal = (tooltipKey: string) =>\n trackEvent(dataLayer.keys.tooltipDismiss, {\n tooltipKey,\n })\n\nexport interface BonusBetTrackingMetadata {\n accountNumber: string | number\n accountBalance: number | null\n bonusBetBalance: number | null\n bonusCashBalance: number | null\n [key: string]: unknown\n}\n\nexport const trackBonusBetEvent = (eventName: EventKey, metadata: BonusBetTrackingMetadata) => {\n trackEvent(eventName, metadata)\n}\n\nexport const trackRacePromotionLoaded = () => trackEvent(dataLayer.keys.racePromotionLoaded, {})\nexport const trackRacePromotionOpened = () => trackEvent(dataLayer.keys.racePromotionOpened, {})\nexport const trackRacePromotionClosed = () => trackEvent(dataLayer.keys.racePromotionClosed, {})\nexport const trackRacePromotionTermsAndConditionsClicked = () =>\n trackEvent(dataLayer.keys.racePromotionTermsAndConditionsClicked, {})\n\nexport interface HamburgerMenuTrackingMetadata {\n item: string\n [key: string]: unknown\n}\n\nexport type BottomNavigationTrackingMetadata = HamburgerMenuTrackingMetadata\n\nexport const trackSideMenuEvent = (\n eventName: EventKey,\n metadata: HamburgerMenuTrackingMetadata\n) => {\n trackEvent(eventName, metadata)\n}\n\n/**\n * This can be co-located when we remove the bottom navigation radio toggle\n */\nexport const trackOnRadioToggle = (\n isRadioPlaying: boolean,\n sourceComponent: string,\n location: string\n): void => {\n const eventKey = !isRadioPlaying ? dataLayer.keys.radioOn : dataLayer.keys.radioOff\n trackEvent(eventKey, { source: sourceComponent, page: location })\n}\n/**\n * This can be co-located when we remove the bottom navigation vision toggle\n */\nexport const trackOnVisionToggle = (\n isVisionPlaying: boolean,\n sourceComponent: string,\n location: string\n): void => {\n const eventKey = !isVisionPlaying ? dataLayer.keys.visionOpened : dataLayer.keys.visionClosed\n trackEvent(eventKey, { source: sourceComponent, page: location })\n}\nexport const trackRacePreviewLoaded = () => trackEvent(dataLayer.keys.racePreviewLoaded, {})\nexport const trackRacePreviewOpened = () => trackEvent(dataLayer.keys.racePreviewOpened, {})\nexport const trackRacePreviewClosed = () => trackEvent(dataLayer.keys.racePreviewClosed, {})\n\nexport const trackLoginSuccess = (\n accountNumber: string,\n keepLoggedIn: boolean,\n rememberAccount: boolean,\n isBioAuthUsed: boolean\n) => {\n trackEvent(dataLayer.keys.loginSuccess, {\n accountNumber,\n keepLoggedIn,\n rememberAccount,\n isBioAuthUsed,\n })\n}\nexport const trackLoginFailed = (accountNumber: number) => {\n trackEvent(dataLayer.keys.loginFailed, { accountNumber: accountNumber.toString() })\n}\nexport const trackLogout = () => {\n trackEvent(dataLayer.keys.logout, { accountNumber: dataLayer.data.user.accountNumber })\n trackAccountNumber()\n}\nexport const trackLoginForgotPassword = (accountNumber: string) =>\n trackEvent(dataLayer.keys.loginForgotPassword, { accountNumber })\n\nexport const trackLoginForgotAccountNumber = () => trackKey(dataLayer.keys.loginForgotAccountNumber)\nexport const trackLoginForgotAccountNumberSent = (deliveryMethod: string) =>\n trackEvent(dataLayer.keys.loginForgotAccountNumberSent, { deliveryMethod })\nexport const trackLoginResetPasswordSuccess = (accountNumber: string, deliveryMethod: string) =>\n trackEvent(dataLayer.keys.loginResetPasswordSucces, { accountNumber, deliveryMethod })\n\nexport const trackVideoPreviewLoaded = () => trackEvent(dataLayer.keys.videoPreviewLoaded, {})\nexport const trackVideoPreviewOpened = () => trackEvent(dataLayer.keys.videoPreviewOpened, {})\nexport const trackVideoPreviewClosed = () => trackEvent(dataLayer.keys.videoPreviewClosed, {})\nexport const trackVideoPreviewPlayed = () => trackEvent(dataLayer.keys.videoPreviewPlayed, {})\nexport const trackVideoPreviewNotSupported = (streamUrl: string, contentType: string) =>\n trackEvent(dataLayer.keys.videoPreviewNotSupported, {\n streamUrl,\n contentType,\n })\nexport interface BiometricsToggleMetadata {\n isEnabled: boolean\n [key: string]: unknown\n}\n\nexport const trackBiometricsToggle = (eventName: EventKey, metadata: BiometricsToggleMetadata) => {\n trackEvent(eventName, metadata)\n}\n\n// ==============\n// Core Functions\n// ==============\n\nexport type EventKey = (typeof dataLayer.keys)[keyof typeof dataLayer.keys]\n\nexport const trackKey = (key: EventKey): void => {\n userAccountState$?.take(1).subscribe(state => {\n const accountNumber = state?.accountNumber\n window.dataLayer?.push({ event: key, accountNumber, appVersion: fullClientVersion })\n\n if (isReactNativeIos) {\n logFirebaseAnalyticsEvent(key, {\n accountNumber: accountNumber?.toString(),\n appVersion: fullClientVersion,\n })\n }\n })\n}\n\nexport const trackEvent = (event: EventKey, data: Record): void => {\n userAccountState$?.take(1).subscribe(state => {\n const accountNumber = state?.accountNumber\n window.dataLayer?.push({\n event,\n ...data,\n accountNumber: data?.accountNumber ?? accountNumber,\n appVersion: fullClientVersion,\n })\n\n if (isReactNativeIos) {\n logFirebaseAnalyticsEvent(event, {\n ...data,\n accountNumber: (data?.accountNumber ?? accountNumber)?.toString(),\n appVersion: fullClientVersion,\n })\n }\n })\n}\n\nfunction logFirebaseAnalyticsEvent(eventKey: string, data: Record = {}) {\n // blacklist of events we want to drop for now, because they are too noisy\n if (eventKey === 'optimove_track') {\n return\n }\n\n getFeatureValue('SEND_GA_EVENTS_TO_FIREBASE').then(isEnabled => {\n if (isEnabled) {\n const flatData = flattenObjectForFirebase(data)\n sendToNative('GOOGLE_ANALYTICS_WEBVIEW_EVENT', {\n eventKey,\n data: flatData,\n })\n }\n })\n}\n\n// Firebase has a simpler parameter model than universal analytics\n// it can only take simple key/value pairs, not nest objects. This\n// function takes an object and flattens it as much as possible.\n// Some keys still end up getting dropped because they are not supported\n//\n// Converts a structure that looks like this:\n// {\n// accountNumber: '6347611',\n// quickbet: {\n// closed: { betPlaced: false, timestamp: '2024-07-02T06:55:25.258Z' },\n// },\n// }\n//\n// To this:\n// {\n// accountNumber: '6347611',\n// quickbet_closed_betPlaced: false,\n// quickbet_closed_timestamp: '2024-07-02T06:55:25.258Z'\n// }\n//\nfunction flattenObjectForFirebase(\n data: Record\n): Record {\n return flattenObjectRecursive(data, '', {})\n}\n\nfunction flattenObjectRecursive(\n obj: Record,\n prefix: string,\n result: Record\n) {\n const keys = Object.keys(obj)\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n const value = obj[key]\n const keyWithPrefix = prefix ? `${prefix}_${key}` : key\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n if (typeof value === 'string' && (value.length > 64 || value === '')) {\n // empty strings, or strings that are too long shouldn't be logged\n continue\n }\n result[keyWithPrefix] = value\n } else if (typeof value === 'object' && typeof key == 'string' && !!value) {\n flattenObjectRecursive(value as Record, keyWithPrefix, result)\n }\n }\n\n return result\n}\n","export const isHome = () => isHomeUrl(window.location.hash)\n\nexport function navChange(url: string) {\n location.hash = getHashFragment(url)\n}\n\nexport function getHashFragment(url?: string) {\n url = url || window.location.href\n return url.replace(/^[^#]*#?(.*)$/, '$1')\n}\n\nexport function isHomeUrl(url: string): boolean {\n return url === '' || url === '#' || url.search('^[?].*$') > -1\n}\n","import { getServerVersion } from './ServerConfig'\nimport {\n getLastKnownLocationAsString,\n getLastKnownVenueAsString,\n} from '@core/NativeServices/Location/LocationService'\nimport { HasLoggedOut } from '@core/State/UserAccount/userAccountDriver'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\n\nconst ERROR_CODE_APP_VERSION_MISMATCH = 551\nconst ERROR_CODE_UNAUTHORIZED = 401\n\nexport class ApiServiceError extends Error {\n response: Response\n\n constructor(response: Response) {\n super(`Fetch failed. Error code ${response.status}`)\n this.response = response\n }\n}\n\nexport function fetchFromApi(url: string, opts?: RequestInit): Promise {\n const headers = new Headers()\n\n const { headers: optionalHeaders, ...options } = opts || { headers: null }\n\n if (optionalHeaders) {\n let key: keyof typeof optionalHeaders\n for (key in optionalHeaders) {\n if (typeof key !== 'string') continue\n const value = optionalHeaders[key]\n if (typeof value !== 'string') continue\n headers.append(`${key}`, value)\n }\n }\n\n // Custom headers can cause CORS check to fail, so only send if URL is relative (same-origin)\n if (isRelativeUrl(url)) {\n addCustomHeaders(headers)\n }\n\n return window\n .fetch(url, { credentials: 'same-origin', headers: headers, ...options })\n .then(response => {\n if (!response.ok) {\n switch (response.status) {\n case ERROR_CODE_APP_VERSION_MISMATCH:\n window.location.reload()\n break\n case ERROR_CODE_UNAUTHORIZED:\n HasLoggedOut()\n break\n default:\n throw new ApiServiceError(response)\n }\n }\n return response\n })\n}\n\nexport async function get({ url, opts }: { url: string; opts?: RequestInit }): Promise {\n const response = await fetchFromApi(url, opts)\n return response.status === 204 ? (response.text() as unknown as T) : response.json()\n}\n\nexport async function post({\n url,\n body,\n}: {\n url: string\n body?: TBody\n}): Promise {\n const response = await fetchFromApi(url, getPostParameters(body))\n const contentLength = Number(response.headers.get('content-length') ?? -1)\n if (contentLength === 0) {\n return {} as T\n }\n return response.status === 204 ? (response.text() as unknown as T) : response.json()\n}\n\nexport async function deleteAsync({ url, body }: { url: string; body?: unknown }): Promise {\n const response = await fetchFromApi(url, getDeleteParameters(body))\n const contentLength = Number(response.headers.get('content-length') ?? -1)\n if (contentLength === 0) {\n return {} as T\n }\n return response.status === 204 ? (response.text() as unknown as T) : response.json()\n}\n\nfunction isRelativeUrl(url: string) {\n const r = new RegExp('^(?:[a-z]+:)?//', 'i')\n return r.test(url) === false\n}\n\nfunction addCustomHeaders(headers: Headers) {\n const serverVersion = getServerVersion()\n if (serverVersion && !isReactNativeApp) {\n headers.append('X-TabTouch-Version', serverVersion)\n }\n headers.append('X-Location', getLastKnownLocationAsString())\n headers.append('X-Venue', getLastKnownVenueAsString())\n}\n\nexport function getPostParameters(request: TRequest): RequestInit {\n return {\n method: 'POST',\n body: JSON.stringify(request),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n }\n}\n\nexport function getDeleteParameters(request: TRequest): RequestInit {\n return {\n method: 'DELETE',\n body: JSON.stringify(request),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n }\n}\n","export function isInIosBrowser(): boolean {\n return !!(\n navigator.userAgent.match(/iPhone/i) ||\n navigator.userAgent.match(/iPad/i) ||\n navigator.userAgent.match(/iPod/i)\n )\n}\n","/* eslint-disable no-console */\nimport { captureException } from '@sentry/react'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { serverConfigQuery } from '@core/Data/ServerConfig/query'\n\nexport function logDebug(message: string | Error, details?: unknown): void {\n queryClient.fetchQuery(serverConfigQuery).then(\n config => {\n if (config.enableJsConsoleLogging && console) {\n if (message instanceof Error) {\n if (details) {\n console.error(message, details)\n } else {\n console.error(message)\n }\n } else {\n if (details) {\n console.log(message, details)\n } else {\n console.log(message)\n }\n }\n }\n },\n () => null /* don't care if there is no configuration */\n )\n}\n\nexport function logError(message: string | Error, details?: unknown): void {\n logDebug(message, details)\n queryClient.fetchQuery(serverConfigQuery).then(config => {\n if (config.enableSentryIo && message instanceof Error) {\n captureException(message)\n }\n })\n}\n","export const getServerVersion = () => window?.TABTOUCH?.configuration?.serverVersion\n","export const MYSTERY_BET_ROUTE = 'tote/mystery'\n","import { ACCOUNT_ACTIVITY_ROUTE } from './Areas/AccountActivity/constants'\nimport { ACTIVITY_STATEMENTS_ROUTE } from './Areas/Account/ActivityStatements/constants'\nimport { BankAccountRoute, BankAccountEditRoute } from './Areas/BankAccount/constants'\nimport { CHANGE_TEMP_PASSWORD_ROUTE } from './Areas/ChangePassword/constants'\nimport { KAMBI_ROOT_ROUTE } from './Areas/Kambi/constants'\nimport { MYSTERY_BET_ROUTE } from './Areas/MysteryBet/constants'\nimport { PRECOMMITMENT_ROUTE } from './Areas/Account/Precommitment/constants'\nimport { SIGNUP_COMPLETE_ROUTE } from '@core/Areas/Account/SignUp'\nimport { StructuredSearchRoute } from './Areas/StructuredSearch/constants'\nimport { TABLocatorWebRoute } from './Areas/TABLocatorWeb/constants'\nimport { TAKE_A_BREAK_ROUTE } from './Areas/Account/TakeABreak/constants'\nimport { WITHDRAW_ROOT_ROUTE } from '@mobi/account/Areas/Withdraw/Utils'\nimport { SIGNUP_ROOT_ROUTE } from '@mobi/account/Areas/SignUp/Utils'\n\ntype RoutePath = `/${string}`\ntype AppRoutesPath = Readonly\n\nexport const AppRoutes = {\n Home: '/',\n SignUp: `/${SIGNUP_ROOT_ROUTE}`,\n CompletedSignUp: `/${SIGNUP_COMPLETE_ROUTE}`,\n Jackpots: '/jackpots',\n NextEvents: ['/next-events', '/tote/nextevents'],\n /** Transitioning from Kambi to in-house solution @deprecated */\n SportsRoot: `/${KAMBI_ROOT_ROUTE}`,\n /** NEW in-house FOB Sports */\n Sports: '/sports',\n Meetings: '/tote',\n Account: '/account',\n AccountLogout: '/account/logout',\n AccountActivity: [`/${ACCOUNT_ACTIVITY_ROUTE}/:tab`, `/${ACCOUNT_ACTIVITY_ROUTE}`],\n ActivityStatements: `/${ACTIVITY_STATEMENTS_ROUTE}`,\n ChangePassword: '/account/change-password',\n ChangeTemporaryPassword: `/${CHANGE_TEMP_PASSWORD_ROUTE}/:accountNumber(\\\\d+)`,\n Settings: '/account/settings',\n ContactDetails: '/account/contactdetails',\n ContactUs: '/contactus',\n ContactDetailsEdit: '/account/contactdetails/edit/:accountNumber(\\\\d+)',\n MarketingCommunications: '/account/marketingcommunications',\n CloseAccount: '/account/close',\n FavouriteNumbers: '/favourite-numbers',\n StructuredSearch: `/${StructuredSearchRoute}`,\n Withdraw: `/${WITHDRAW_ROOT_ROUTE}`,\n BankAccount: `/${BankAccountRoute}`,\n BankAccountEdit: `/${BankAccountEditRoute}`,\n Precommitment: `/${PRECOMMITMENT_ROUTE}`,\n TakeABreak: `/${TAKE_A_BREAK_ROUTE}`,\n RaceCard: '/tote/meetings/:meetingId/:raceNumber',\n RaceCardSky: '/live-sky-race',\n RaceList: ['/tote/meetings/:meetingId', '/tote/races'],\n RaceEvents: [\n '/fobracing/:product(FR|SR)/:code(Races|Trots|Dogs)/:date?',\n '/fobracing/:product(CLG)/:code(Races|Dogs)/:date?',\n ],\n RaceCardFixedOnly: [\n '/fobracing/propositions/:product(FR|CLG|FFF)/:code(Races|Dogs)/:raceId/:selectiondate?',\n '/fobracing/propositions/:product(FR|FFF)/:code(Trots)/:raceId/:selectiondate?',\n '/fobracing/propositions/:product(FOO)/:code(Races|Dogs|Trots)/:raceId/:selectiondate?',\n ],\n Specials: '/specials',\n MysteryBet: [`/${MYSTERY_BET_ROUTE}`, `/${MYSTERY_BET_ROUTE}/:meetingId/:raceNumber(\\\\d+)`],\n Tipping: '/totesports',\n Blackbook: '/account/blackbook',\n Offers: '/account/offer',\n GoodThings: '/goodthings',\n TABLocatorWeb: `/${TABLocatorWebRoute}`,\n Toolbox: '/toolbox',\n Biometrics: '/account/biometrics',\n Deposit: '/deposit',\n Verification: '/verification',\n DepositLimitsEdit: '/account/deposit-limits/edit/:depositLimitId',\n DepositLimits: '/account/deposit-limits',\n} as const\n\nexport const RACES_ROUTES: AppRoutesPath[] = [\n AppRoutes.AccountActivity,\n AppRoutes.Blackbook,\n AppRoutes.RaceCardFixedOnly,\n AppRoutes.FavouriteNumbers,\n AppRoutes.Jackpots,\n AppRoutes.Meetings,\n AppRoutes.MysteryBet,\n AppRoutes.NextEvents,\n AppRoutes.Offers,\n AppRoutes.RaceEvents,\n AppRoutes.RaceList,\n AppRoutes.Specials,\n AppRoutes.StructuredSearch,\n AppRoutes.Tipping,\n // Non-react route\n '/goodthings',\n]\n","export const TABLocatorWebRoute = 'tablocator'\n","export const ACTIVITY_STATEMENTS_ROUTE = 'account/activity-statements'\nexport const CREATE_ACTIVITY_STATEMENT_PATH = 'api/account/requestActivityStatement'\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { GridRowStyled } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nexport const NothingToShowStyled = styled.div({\n fontSize: '1.2rem',\n fontStyle: 'italic',\n padding: '1em',\n color: hexColors.grey,\n textAlign: 'center',\n})\n\nexport const BetOfferContainerStyled = styled.div({\n backgroundColor: hexColors.white,\n border: `0.1rem solid ${hexColors.veryLightGrey}`,\n boxShadow: '0 0.1rem 0.1rem rgb(0 0 0 / 10%)',\n borderRadius: '0.25em',\n margin: '1.3em 1em 1.3em 1em',\n})\n\nexport const BonusHeaderRowStyled = styled(GridRowStyled)({\n fontSize: '1.3em',\n fontWeight: 'bold',\n color: hexColors.blueDiamond,\n backgroundColor: hexColors.orange,\n marginTop: '0',\n verticalAlign: 'middle',\n padding: '1em 0 1em 0',\n})\n\nexport const BonusCellStyled = styled(GridCell)({\n margin: '0',\n})\n\nexport const BonusIconStyled = styled(Icon)({\n padding: '0 0.3em 0 0.5em',\n})\n\nexport const BonusDetailRowStyled = styled(GridRowStyled)({\n fontSize: '1.2em',\n backgroundColor: hexColors.white,\n padding: '1em 0 0 0.85em',\n})\n\nexport const BonusAmountsRowStyled = styled(GridRowStyled)({\n fontSize: '1.1em',\n backgroundColor: hexColors.white,\n padding: '1em 1em 0 1em',\n})\n\nexport const BonusAmountsHeadingStyled = styled.div({\n fontSize: '1em',\n color: hexColors.grey,\n})\n\nexport const BonusAmountsValueStyled = styled.div({\n fontSize: '1.2em',\n fontWeight: 'bold',\n})\n\nexport const BonusFineprintRowStyled = styled(GridRowStyled)({\n backgroundColor: hexColors.white,\n padding: '1em 1em 0 1em',\n marginBottom: '0.2em',\n})\n\nexport const BonusButtonRowStyled = styled(GridRowStyled)({\n fontSize: '1.1em',\n backgroundColor: hexColors.white,\n margin: '0 0.2em 0.2em 0.2em',\n})\n\nexport const BonusButtonCellStyled = styled(GridCell)({\n width: '100%',\n padding: '0.3em',\n})\n\nexport const FaqContainerStyled = styled.div({\n backgroundColor: hexColors.white,\n border: `0.1rem solid ${hexColors.veryLightGrey}`,\n boxShadow: '0 0.1rem 0.1rem rgb(0 0 0 / 10%)',\n borderRadius: '0.25em',\n margin: '1.3em 1em 1.3em 1em',\n})\n\nexport const FaqLinkStyled = styled.div({\n margin: '1em',\n})\n","import { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\nimport { bool } from 'aws-sdk/clients/signer'\nimport { toMoney } from '@mobi/utils/money'\nimport dayjs from 'dayjs'\nimport React from 'react'\nimport {\n BetOfferContainerStyled,\n BonusAmountsHeadingStyled,\n BonusAmountsRowStyled,\n BonusAmountsValueStyled,\n BonusButtonCellStyled,\n BonusButtonRowStyled,\n BonusCellStyled,\n BonusDetailRowStyled,\n BonusFineprintRowStyled,\n BonusHeaderRowStyled,\n BonusIconStyled,\n} from '../BetOfferPage.styles'\n\ninterface BetOfferItemProps {\n campaign: Campaign\n handleCampaignClick: (campaign: Campaign) => void\n}\n\nexport const BetOfferItem = (data: BetOfferItemProps): JSX.Element | null => {\n if (!shouldDisplayCampaign(data.campaign)) {\n return null\n }\n\n return (\n \n \n \n \n \n {getTitleText(data.campaign)}\n \n \n \n \n {data.campaign.description}\n \n \n\n {shouldDisplayAmounts(data.campaign) && (\n \n \n Total\n {getTotalAmount(data.campaign)}\n \n \n Remaining\n {getRemainingAmount(data.campaign)}\n \n \n )}\n \n \n {getTermsAndConditions(data.campaign)}{' '}\n \n Terms and Conditions\n \n \n \n {shouldShowButton(data.campaign) && (\n \n \n data.handleCampaignClick(data.campaign)}\n >\n {getButtonText(data.campaign)}\n \n \n \n )}\n \n \n )\n}\n\nconst shouldDisplayCampaign = (campaign: Campaign): boolean => {\n return (\n campaign.isActivationPending ||\n (!campaign.isExpired && (campaign.isLive || campaign.isActivated))\n )\n}\n\nconst getTitleText = (campaign: Campaign): string => {\n switch (campaign.triggerType) {\n case 'AccountDepositTrigger':\n return 'Deposit Bonus'\n case 'AccountBetTrigger':\n return 'Bet Match Bonus'\n default:\n return 'Bonus Offer'\n }\n}\n\nconst getButtonText = (campaign: Campaign): string => {\n if (campaign.triggerType === 'AccountDepositTrigger') {\n if (campaign.isLive) {\n return 'Deposit Now'\n }\n }\n\n return 'Bet Now'\n}\n\nconst shouldDisplayAmounts = (campaign: Campaign): boolean => {\n return campaign.initialAmount > 0\n}\n\nconst getTotalAmount = (campaign: Campaign): string | null => {\n return campaign.initialAmount ? toMoney(campaign.initialAmount) : null\n}\n\nconst getRemainingAmount = (campaign: Campaign): string | null => {\n return campaign.remainingAmount ? toMoney(campaign.remainingAmount) : null\n}\n\nconst getTermsAndConditions = (campaign: Campaign): string => {\n const expiryDate = dayjs(campaign.expiry).format('HH:mm, DD MMMM YYYY')\n const rewardExpiryDate = campaign.rewardExpiry\n ? dayjs(campaign.rewardExpiry).format('HH:mm, DD MMMM YYYY')\n : null\n const minimumBet = campaign.minimumAmount\n ? toMoney(campaign.minimumAmount, { decimalPlaces: 0 })\n : campaign.minimumAmount\n\n let minimumBetString = ''\n\n if (minimumBet && campaign.triggerType == 'AccountDepositTrigger') {\n minimumBetString = `Minimum deposit is ${minimumBet}. `\n } else {\n minimumBetString = `Minimum bet is ${minimumBet}. Not valid for multi bets. `\n }\n\n if (campaign.isActivationPending) {\n return `Your bet has been successfully placed and is waiting to be resulted.`\n }\n\n if (campaign.isActivated && rewardExpiryDate) {\n return `Redeem offer by ${rewardExpiryDate}.`\n }\n\n return `${minimumBetString}This offer expires at ${expiryDate}.`\n}\n\nconst shouldShowButton = (campaign: Campaign): bool => {\n return !campaign.isExpired && (campaign.isLive || campaign.isActivated)\n}\n","export const PRECOMMITMENT_API_PATH_PREFIX = '/api/precommitment/'\nexport const PRECOMMITMENT_ROUTE = 'account/precommitment'\n\nexport const DEFAULT_COOLING_OFF_PERIOD_DAYS = 7\n","import { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackEvent, trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport type { DepositLimitFrequency } from '@mobi/api-types'\nimport type { IdentityVerificationMethod } from './Old/IdentityConfirmation/SignUpVerificationOptions'\n\nexport const trackSignUpClick = (location: 'header' | 'login-modal' | 'hamburger') =>\n trackEvent(keys.signUpClicked, {\n location,\n })\n\nexport const trackSignUpStart = () => trackKey(keys.signUpStart)\n\nexport const trackSignUpJoin = () => trackKey(keys.signUpJoin)\n\nexport const trackSignUpVerifyAddress = (addressMethod: 'auto' | 'manual') =>\n trackEvent(keys.signUpVerifyAddress, { addressMethod })\n\nexport const trackSignUpCreatePassword = (\n previousStep: 'verified-address' | 'verified-identification'\n) =>\n trackEvent(keys.signUpCreatePassword, {\n previousStep,\n })\n\nexport const trackSignUpDepositLimits = (\n depositFrequency: DepositLimitFrequency,\n limitAmount: string,\n skipped: boolean\n) =>\n trackEvent(keys.signUpDepositLimits, {\n depositFrequency: depositFrequency ?? 'None',\n limitAmount,\n skipped,\n })\n\nexport const trackSignUpComplete = () => trackKey(keys.signUpComplete)\n\nexport const trackSignUpDepositClick = () => trackKey(keys.signUpDepositClick)\n\nexport const trackVerificationSelectOption = (\n optionSelected: IdentityVerificationMethod,\n repeatAttempt: number\n) =>\n trackEvent(keys.verificationSelectOption, {\n optionSelected: optionSelected ?? 'None',\n repeatAttempt,\n })\n\nexport const trackVerificationEnterIdentification = (\n optionSelected: IdentityVerificationMethod,\n verifyResult: 'success' | 'fail'\n) =>\n trackEvent(keys.signUpVerificationEnterIdentification, {\n optionSelected,\n verifyResult,\n })\n\nexport const trackVerificationAccountPending = () => trackKey(keys.verificationAccountPending)\n\nexport const trackSignUpAlreadyHaveAccount = () => trackKey(keys.signUpAlreadyHaveAccount)\n\nexport const trackSignUpGoBackHomePage = (location: string) =>\n trackEvent(keys.signUpGoBackHomePage, {\n location,\n })\n\nexport const trackSignUpNeedAssistance = () => trackKey(keys.signUpNeedAssistance)\n\nexport const trackSignUpError = (location: string, message: string) =>\n trackEvent(keys.signUpError, {\n location,\n message,\n })\n\nexport const trackSignUpUnsuccessful = () => trackKey(keys.signUpUnsuccessful)\n\nexport const trackSignUpUnsuccessfulCallUs = () => trackKey(keys.signUpUnsuccessfulCallUs)\n","import React, { lazy, Suspense, StrictMode } from 'react'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { useDisableAppHeaderRender } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderRender'\nimport { useFeature } from '@core/Utils/hooks'\n\ntype SignUpDesign = 'unknown' | 'old' | 'new'\n\nconst OldSignUpPage = lazy(() => import('./Old/SignUpPage'))\nconst NewSignUpPage = lazy(() => import('@mobi/account/Areas/SignUp/Components/SignUpPage'))\n\nexport const SignUp = () => {\n const signUpDesign = useFeature('SIGNUP_DESIGN') as SignUpDesign\n useDisableAppHeaderRender()\n\n if (signUpDesign === 'unknown') {\n return \n }\n\n const SignUpPage = signUpDesign === 'new' ? NewSignUpPage : OldSignUpPage\n\n return (\n \n }>\n \n \n \n )\n}\n","export const SIGNUP_COMPLETE_ROUTE = 'CompletedSignUp'\n","export const TAKE_A_BREAK_API_PATH_PREFIX = '/api/account/take-a-break'\nexport const TAKE_A_BREAK_ROUTE = 'account/take-a-break'\n","import { createSlice } from '@reduxjs/toolkit'\n\ntype VerificationState = {\n contactDetailsVerified: boolean\n isVerified: boolean\n}\n\nconst initialState: VerificationState = {\n contactDetailsVerified: false,\n isVerified: false,\n}\n\nconst verificationSlice = createSlice({\n name: 'verification',\n initialState,\n reducers: {\n verifyContactDetails(state) {\n state.contactDetailsVerified = true\n },\n hasBeenVerified(state) {\n state.isVerified = true\n },\n },\n})\n\nexport const { verifyContactDetails, hasBeenVerified } = verificationSlice.actions\n\nexport default verificationSlice.reducer\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\ntype AccountNumberParam = {\n accountNumber: number\n}\n\ntype LocationParam = {\n location: string\n}\n\ntype MessageParam = {\n message: string\n}\n\ntype AnalyticsFunction> = (params: TParams) => void\n\nconst sharedParams = {\n verificationEntry: 'verification-banner',\n verificationFlow: 'self-verification',\n} as const\n\ntype BannerLoadedParams = AccountNumberParam & {\n isVerified: boolean\n}\n\nexport const trackVerificationBannerLoaded: AnalyticsFunction = params =>\n trackEvent('verification_banner_loaded', {\n ...params,\n })\n\nexport const trackVerificationCallUsButtonClicked: AnalyticsFunction<\n AccountNumberParam & LocationParam\n> = params =>\n trackEvent('verification_call_us', {\n ...params,\n })\n\nexport const trackVerificationVerifyNowButtonClicked: AnalyticsFunction<\n AccountNumberParam\n> = params =>\n trackEvent('verification_now', {\n ...params,\n })\n\nexport const trackVerificationStart = () =>\n trackEvent('verification_start', {\n ...sharedParams,\n })\n\ntype ContactDetailsParams = { addressWarning: true | false }\n\nexport const trackVerificationDetailsCorrect: AnalyticsFunction = params =>\n trackEvent('verification_details_correct', {\n ...sharedParams,\n ...params,\n })\n\nexport const trackVerificationEditDetails: AnalyticsFunction = params =>\n trackEvent('verification_edit_details', {\n ...sharedParams,\n ...params,\n })\n\nexport type IdentityDocument = 'licence' | 'passport' | 'medicare'\n\ntype EnterIdentificationParams = (\n | {\n optionSelected: 'none'\n }\n | {\n optionSelected: IdentityDocument\n verifyResult: 'success' | 'fail'\n }\n) & { previousStep: string }\n\nexport const trackVerificationEnterIdentification: AnalyticsFunction<\n EnterIdentificationParams\n> = params =>\n trackEvent('verification_enter_identification', {\n ...sharedParams,\n ...params,\n })\n\ntype VerificationSuccessParams = { previousStep: string }\n\nexport const trackVerificationSuccess: AnalyticsFunction = params =>\n trackEvent('verification_success', { ...sharedParams, ...params })\n\nexport const trackVerificationDepositClick = () =>\n trackEvent('verification_deposit_click', { ...sharedParams })\n\nexport const trackVerificationFail = () => trackEvent('verification_fail', { ...sharedParams })\n\nexport const trackVerificationEditDetailsLocked = () =>\n trackEvent('verification_edit_details_locked', { ...sharedParams })\n\nexport const trackVerificationNeedAssistance: AnalyticsFunction = params =>\n trackEvent('verification_need_assistance', {\n ...sharedParams,\n ...params,\n })\n\nexport const trackVerificationGoBackHomePage: AnalyticsFunction = params =>\n trackEvent('verification_go_back_home_page', {\n ...sharedParams,\n ...params,\n })\n\nexport const trackVerificationError: AnalyticsFunction = params =>\n trackEvent('verification_error', {\n ...sharedParams,\n ...params,\n })\n\nexport const trackVerificationContactUs: AnalyticsFunction = params =>\n trackEvent('verification_contact_us', {\n ...sharedParams,\n ...params,\n })\n\nexport const trackVerificationCallUsLater: AnalyticsFunction = params =>\n trackEvent('verification_call_us_later', {\n ...sharedParams,\n ...params,\n })\n\ntype VerificationBetOfferProps = {\n rewardType: string\n title: string\n}\n\nexport const trackVerificationBetOffer: AnalyticsFunction = params => {\n trackEvent('verification_bet_offer', {\n ...sharedParams,\n ...params,\n })\n}\n\nexport const trackVerificationGetInTouch = () => {\n trackEvent('verification_get_in_touch', {\n ...sharedParams,\n })\n}\n\ntype VerificationSavedDetailsParams = {\n currentAddressEdit: boolean\n previousAddressEdit: boolean\n personalInfoEdit: boolean\n}\nexport const trackVerificationSavedDetails: AnalyticsFunction<\n VerificationSavedDetailsParams\n> = params => {\n trackEvent('verification_saved_details', { ...sharedParams, ...params })\n}\n","import dayjs from 'dayjs'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\n\nexport const getRaceUrl = (campaign: Campaign): string => {\n if (campaign?.redemptionDetails?.race) {\n if (campaign.redemptionDetails.race.fixtureId && campaign.redemptionDetails.race.fixtureDate) {\n let baseUrl = `/#tote/meetings/${campaign.redemptionDetails.race.fixtureId}`\n\n if (campaign.redemptionDetails.race.raceNumber) {\n baseUrl += `/${campaign.redemptionDetails.race.raceNumber}`\n }\n\n baseUrl += `?date=${dayjs(campaign.redemptionDetails.race.fixtureDate).format('YYYY-MM-DD')}`\n return baseUrl\n }\n }\n\n return '/#next-events'\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport type { SortOrder } from '@core/Areas/AccountActivity/types'\n\nexport const accountActivityInitialState: AccountActivityState = {\n activeReplayTicketId: null,\n pendingSortOrder: 'eventStart',\n resultsSortOrder: 'eventStart',\n}\n\nconst accountActivitySlice = createSlice({\n name: 'account-activity',\n initialState: accountActivityInitialState,\n reducers: {\n setActiveReplayTicketId(state, action: PayloadAction) {\n state.activeReplayTicketId = action.payload\n },\n\n setPendingSortOrder(state, action: PayloadAction) {\n state.pendingSortOrder = action.payload\n },\n\n setResultsSortOrder(state, action: PayloadAction) {\n state.resultsSortOrder = action.payload\n },\n },\n})\n\nexport const { setActiveReplayTicketId, setPendingSortOrder, setResultsSortOrder } =\n accountActivitySlice.actions\n\nexport default persistReducer(\n {\n key: 'account-activity',\n whitelist: ['pendingSortOrder'],\n storage,\n debug: !PRODUCTION,\n },\n accountActivitySlice.reducer\n)\n\n// =====\n// Types\n// =====\nexport interface AccountActivityState {\n activeReplayTicketId: number | null\n pendingSortOrder: SortOrder\n resultsSortOrder: SortOrder\n}\n","import type { Tabs } from './types'\n\nexport const ACCOUNT_ACTIVITY_ROUTE = 'account/activity'\n\nexport const ACCOUNT_ACTIVITY_PENDING_ROUTE: RouteWithTab = `${ACCOUNT_ACTIVITY_ROUTE}/pending`\n\nexport const ACCOUNT_ACTIVITY_RESULTS_ROUTE: RouteWithTab = `${ACCOUNT_ACTIVITY_ROUTE}/results`\n\ntype RouteWithTab = `${string}/${Tabs}`\n","import { useQuery } from 'react-query'\nimport { Map } from 'immutable'\n\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { logError } from '@classic/Foundation/Services/LoggingService'\nimport {\n defaultUserAccountState,\n SetSuperpickStatus,\n state$ as userAccountState$,\n SuperpickStatus,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { useObservable } from '@core/Utils/hooks'\n\nexport const ONE_HOUR = 3600000\nexport const DEFAULT_SUPERPICK_STATUS: SuperpickStatus = {\n isLoading: false,\n errorCode: null,\n errorMessage: '',\n tokens: [],\n}\n\nlet cacheCleaner: () => unknown\nexport function refetch() {\n cacheCleaner?.()\n}\n\nexport const useGetSpecialTokens = (isEnabled = true): SuperpickStatus => {\n const accountState = useObservable(userAccountState$, defaultUserAccountState)\n const accountNumber = accountState.accountNumber\n const superpicksMap = accountState.superpicks as unknown as Map\n const superpicks = superpicksMap?.toJS?.() || accountState.superpicks\n const query = useQuery({\n queryKey: ['useGetSpecialTokens-special-tokens', accountNumber],\n queryFn: () => querySpecialTokens(superpicks),\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n cacheTime: ONE_HOUR,\n enabled: isEnabled && !!accountNumber,\n refetchInterval: ONE_HOUR,\n refetchIntervalInBackground: true,\n onSettled: data => SetSuperpickStatus(data),\n })\n\n cacheCleaner = () => {\n SetSuperpickStatus({\n tokens: superpicks?.tokens || [],\n errorCode: null,\n errorMessage: '',\n isLoading: true,\n })\n query.remove()\n }\n return superpicks || DEFAULT_SUPERPICK_STATUS\n}\n\nexport function getSpecialTokenUrl(tokenId: number): Promise {\n const url = `/api/pyos/SpecialUrl/${tokenId}`\n\n return get({ url })\n}\n\nasync function querySpecialTokens(currentStatus: SuperpickStatus | null | undefined) {\n const populatedCurrentTokens = currentStatus?.tokens || DEFAULT_SUPERPICK_STATUS.tokens\n\n SetSuperpickStatus({\n tokens: populatedCurrentTokens,\n isLoading: true,\n errorMessage: currentStatus?.errorMessage || '',\n errorCode: currentStatus?.errorCode == undefined ? null : currentStatus.errorCode,\n })\n const data = await get({\n url: '/api/pyos/RetrieveFobSpecialTokens',\n })\n .then((json): SuperpickStatus => {\n if (!json || json.errorCode !== undefined || json.errorMessage !== undefined) {\n return {\n tokens: populatedCurrentTokens,\n isLoading: false,\n errorMessage: json?.errorMessage || '',\n errorCode: json?.errorCode,\n }\n }\n\n const isTokenFault = !!json.data?.TokensFault\n if (!json.success || isTokenFault) {\n const errorMessage = isTokenFault\n ? json.data?.TokensFault?.Message || 'Currently unable to retrieve SuperPicks'\n : ''\n return {\n tokens: populatedCurrentTokens,\n isLoading: false,\n errorMessage,\n errorCode: isTokenFault ? json.data?.TokensFault.ErrorCode : null,\n }\n }\n\n return {\n tokens: json.data?.Tokens || [],\n isLoading: false,\n errorMessage: '',\n errorCode: null,\n }\n })\n .catch((err): SuperpickStatus => {\n logError(err)\n return {\n tokens: populatedCurrentTokens,\n isLoading: false,\n errorMessage: 'Currently unable to retrieve SuperPicks',\n errorCode: null,\n }\n })\n\n return data\n}\n\ninterface ServiceResponse {\n success: boolean\n errorCode: number\n errorMessage: string\n data: unknown\n}\n\ninterface SpecialUrlResponse extends ServiceResponse {\n data: {\n SpecialUrl: string\n }\n}\n\nexport interface RetrieveFobSpecialTokensResponse extends ServiceResponse {\n data: {\n Tokens: FobSpecialToken[]\n TokensFault: {\n ErrorCode: number\n ErrorName: string\n ExternalCode: string\n Message: string\n }\n }\n}\n\nexport interface FobSpecialToken {\n TokenId: number\n TokenName: string\n BetsAvailable: number\n IsBonusToken: boolean\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@mobi/component-library/Theme/Common'\n\nexport const AppHeaderButtonStyled = styled.button({\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n boxSizing: 'border-box',\n minWidth: '3rem',\n width: 'clamp(3rem, 100%, 4rem)',\n textDecoration: 'none',\n userSelect: 'none',\n cursor: 'pointer',\n background: 0,\n border: 0,\n padding: 0,\n touchAction: 'manipulation',\n color: colors.white,\n})\n","import React, { type PropsWithChildren } from 'react'\nimport { Link, useHistory } from 'react-router-dom'\nimport { useDispatch } from 'react-redux'\nimport styled from '@emotion/styled'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons/Button'\nimport { Icon as IconLegacy } from '@mobi/component-library/Common/Icon/Icon'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon/Icon'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { trackSideMenuEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { state$ as routeState$ } from '@core/State/Navigation/driver'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { trackSignUpClick } from '@core/Areas/Account/SignUp/analytics'\nimport { AppHeaderButtonStyled } from './Buttons.styles'\nimport { toggleIsHamburgerMenuOpen } from '@core/Areas/AppHeader/Store'\n\nexport const HamburgerButton: React.FC = () => {\n const dispatch = useDispatch()\n return (\n {\n dispatch(toggleIsHamburgerMenuOpen(true))\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-open-button' })\n }}\n >\n \n \n )\n}\n\nexport const BackButton: React.FC> = ({\n onClick,\n children,\n}) => {\n const handleBackButtonClick = () => {\n routeState$.take(1).subscribe(routeState => {\n window.location.href = `/${routeState.get('backUrl')}`\n })\n }\n\n return (\n {\n onClick?.()\n handleBackButtonClick()\n }}\n >\n {children ?? }\n \n )\n}\n\nexport const AppHeaderLogo: React.FC<{ onClick?: VoidFunction }> = ({ onClick }) => {\n return (\n onClick?.()} aria-label='TABtouch Logo'>\n \n \n \n \n \n )\n}\n\nexport const SignUpButton = () => {\n const history = useHistory()\n return (\n {\n history.push(AppRoutes.SignUp)\n trackSignUpClick('header')\n }}\n >\n Sign up\n \n )\n}\n\nexport const LoginButton = () => {\n return (\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst LogoButtonStyled = styled(Link)({\n display: 'flex',\n color: colors.white,\n alignItems: 'center',\n justifyContent: 'flex-start',\n containerType: 'inline-size',\n minWidth: '3rem',\n maxWidth: '8rem',\n width: '100%',\n})\n\nconst LogoSVGStyled = styled.span({\n '> svg:nth-of-type(1)': { display: 'none' },\n '> svg:nth-of-type(2)': { display: 'block' },\n\n '@container (min-width: 7rem)': {\n '> svg:nth-of-type(1)': { display: 'block' },\n '> svg:nth-of-type(2)': { display: 'none' },\n },\n})\n","export const BET_SLIP_BUTTON_ID = 'betslip-button'\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nconst appHeaderInitialState: AppHeaderState = {\n isAppHeaderVisible: true,\n isBalanceVisible: true,\n isBetSlipNewOpen: false,\n isDropDownOpen: false,\n isHamburgerMenuOpen: false,\n isStickyEnabled: true,\n isPreviousPendingBetsSportsOnly: false,\n shouldDisableAppHeaderRender: false,\n}\n\nconst appHeaderSlice = createSlice({\n name: 'app-header',\n initialState: appHeaderInitialState,\n reducers: {\n toggleIsAppHeaderSticky(state, { payload }: PayloadAction) {\n state.isStickyEnabled = payload ?? !state.isStickyEnabled\n },\n\n toggleIsAppHeaderVisible(state, { payload }: PayloadAction) {\n state.isAppHeaderVisible = payload ?? !state.isAppHeaderVisible\n },\n\n toggleIsBalanceVisible(state, { payload }: PayloadAction) {\n state.isBalanceVisible = payload ?? !state.isBalanceVisible\n },\n\n toggleIsDropDownOpen(state, { payload }: PayloadAction) {\n state.isDropDownOpen = payload ?? !state.isDropDownOpen\n },\n\n toggleIsHamburgerMenuOpen(state, { payload }: PayloadAction) {\n state.isHamburgerMenuOpen = payload ?? !state.isHamburgerMenuOpen\n },\n\n setDisableAppHeaderRender(state, { payload }: PayloadAction) {\n state.shouldDisableAppHeaderRender = payload\n },\n\n setBetSlipNewIsOpen(state, { payload }: PayloadAction) {\n state.isBetSlipNewOpen = payload\n },\n\n setIsPreviousPendingBetsSportsOnly(state, { payload }: PayloadAction) {\n state.isPreviousPendingBetsSportsOnly = payload\n },\n },\n})\n\nexport const {\n toggleIsAppHeaderSticky,\n toggleIsAppHeaderVisible,\n toggleIsBalanceVisible,\n toggleIsDropDownOpen,\n toggleIsHamburgerMenuOpen,\n setDisableAppHeaderRender,\n setIsPreviousPendingBetsSportsOnly,\n setBetSlipNewIsOpen,\n} = appHeaderSlice.actions\n\nconst presistKeys: (keyof AppHeaderState)[] = [\n 'isBalanceVisible',\n 'isPreviousPendingBetsSportsOnly',\n]\n\nexport default persistReducer(\n {\n key: 'app-header',\n whitelist: presistKeys,\n storage,\n debug: !PRODUCTION,\n },\n appHeaderSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface AppHeaderState {\n isAppHeaderVisible: boolean\n isBalanceVisible: boolean\n isBetSlipNewOpen: boolean\n isDropDownOpen: boolean\n isHamburgerMenuOpen: boolean\n isStickyEnabled: boolean\n isPreviousPendingBetsSportsOnly: boolean\n shouldDisableAppHeaderRender: boolean\n}\n","import React from 'react'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setDisableAppHeaderRender } from '../Store'\n\n/** Only to be used on top level page routes - otherwise changes required */\nexport const useDisableAppHeaderRender = () => {\n const dispatch = useAppDispatch()\n\n React.useEffect(() => {\n dispatch(setDisableAppHeaderRender(true))\n return () => {\n dispatch(setDisableAppHeaderRender(false))\n }\n }, [dispatch])\n}\n","export const BankAccountRoute = 'account/bankaccount'\nexport const BankAccountEditRoute = 'account/bankaccount/edit'\n","import { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nconst initialState: BlackbookState = {\n sortOrder: 'Start Time',\n sortOrderJockeys: 'Start Time',\n}\n\nconst blackbookSlice = createSlice({\n name: 'blackbook',\n initialState,\n reducers: {\n setSortOrder(state, { payload }: PayloadAction) {\n state.sortOrder = payload\n },\n setSortOrderJockeys(state, { payload }: PayloadAction) {\n state.sortOrderJockeys = payload\n },\n },\n})\n\nexport const { setSortOrder, setSortOrderJockeys } = blackbookSlice.actions\n\nexport default persistReducer(\n {\n key: 'blackbook',\n storage,\n whitelist: ['sortOrder'],\n debug: !PRODUCTION,\n },\n blackbookSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface BlackbookState {\n sortOrder: 'Alphabetical' | 'Start Time' | 'Win Price ▲' | 'Win Price ▼'\n sortOrderJockeys: 'Alphabetical' | 'Start Time'\n}\n","export const CHANGE_TEMP_PASSWORD_ROUTE = 'account/change-temporary-password'\n","import { ContactDetailsUpdateRequest } from '../../Data/Account/contactDetails'\nimport { NameDetails, PhoneNumber, Address, BetAccountHolder } from '@mobi/api-types'\n\nimport { ContactDetailsFields, ContactDetailsState } from './driver'\nimport { formatDate } from '@mobi/utils'\n\nconst defaultPhoneCountryCode = '61'\n\nexport function getContactDetailsFields(contactDetails: BetAccountHolder): ContactDetailsFields {\n return {\n betAccountHolderNumber:\n contactDetails.BetAccountHolderNumber && contactDetails.BetAccountHolderNumber,\n fullName: contactDetails.NameDetails && buildName(contactDetails.NameDetails),\n preferredName:\n (contactDetails.NameDetails &&\n contactDetails.NameDetails.PreferredName !== contactDetails.NameDetails.FirstName &&\n contactDetails.NameDetails.PreferredName) ||\n '',\n dateOfBirth: buildDateOfBirth(contactDetails.DateOfBirth as Date),\n email: (contactDetails.Contact && contactDetails.Contact.Email) || '',\n phoneMobile:\n (contactDetails.Contact &&\n contactDetails.Contact.Mobile &&\n buildPhoneNumber(contactDetails.Contact.Mobile)) ||\n '',\n phoneHome:\n (contactDetails.Contact &&\n contactDetails.Contact.HomePhone &&\n buildPhoneNumber(contactDetails.Contact.HomePhone)) ||\n '',\n phoneWork:\n (contactDetails.Contact &&\n contactDetails.Contact.WorkPhone &&\n buildPhoneNumber(contactDetails.Contact.WorkPhone)) ||\n '',\n addressResidential: contactDetails.ResidentialAddress || null,\n addressResidentialMoniker: '',\n addressPostal: contactDetails.PostalAddressSameAsResidential\n ? null\n : contactDetails.PostalAddress || null,\n addressPostalMoniker: '',\n addressPostalSame: !!contactDetails.PostalAddressSameAsResidential,\n driversLicenceNumber:\n (contactDetails.DriversLicence && contactDetails.DriversLicence.Number) || '',\n driversLicenceState:\n (contactDetails.DriversLicence && contactDetails.DriversLicence.State) || '',\n driversLicenceCardNumber:\n (contactDetails.DriversLicence && contactDetails.DriversLicence.CardNumber) || '',\n passportNumber: (contactDetails.Passport && contactDetails.Passport.Number) || '',\n passportCountry: (contactDetails.Passport && contactDetails.Passport.PassportCountry) || '',\n medicareBlueYellowExpiryDate:\n (contactDetails.Medicare && contactDetails.Medicare.BlueYellowMedicareExpiryDate) || null,\n medicareGreenExpiry:\n (contactDetails.Medicare && contactDetails.Medicare.GreenMedicareExpiry) || '',\n medicareCardColour:\n (contactDetails.Medicare && contactDetails.Medicare.MedicareCardColour) || '',\n medicareMiddleNameOnCard:\n (contactDetails.Medicare && contactDetails.Medicare.MedicareMiddleNameOnCard) || '',\n medicareNumber: (contactDetails.Medicare && contactDetails.Medicare.Number) || '',\n medicareReference: (contactDetails.Medicare && contactDetails.Medicare.Reference) || '',\n nameDateOfBirthChanged: !!contactDetails.NameDateOfBirthChanged,\n nameDateOfBirthChangedInitial: !!contactDetails.NameDateOfBirthChanged,\n isInternationalCustomer: isInternationalCustomer(contactDetails.ResidentialAddress),\n }\n}\n\nexport function isInternationalCustomer(residentialAddress?: Address): boolean {\n return (\n residentialAddress !== undefined &&\n residentialAddress.Country.length > 0 &&\n residentialAddress.Country.toLowerCase() !== 'australia'\n )\n}\n\nexport function buildName(name: NameDetails): string {\n return [name.FirstName, name.MiddleName, name.Surname].filter(n => !!n).join(' ')\n}\n\nexport function buildDateOfBirth(dateOfBirth: Date): string {\n return formatDate(dateOfBirth, 'DD MMM YYYY')\n}\n\nexport function buildPhoneNumber(phone: PhoneNumber): string | undefined {\n if (phone.PhoneNumber === '') {\n return undefined\n }\n\n return `${phone.AreaCode ? phone.AreaCode : ''}${phone.PhoneNumber}`\n}\n\nexport function buildAddress(address: Address): string | null {\n if (!address) {\n return null\n }\n const streetNumber = (address.UnitNumber ? `${address.UnitNumber}/` : '') + address.StreetNumber\n const addressLine = `${streetNumber} ${address.StreetName} ${address.StreetType}`\n\n // two spaces between suburb and state as the address lookup returns in this format and we want it to be consistent\n const suburbStatePostcode = `${address.Suburb} ${address.State} ${address.Postcode}`\n\n return `${addressLine}, ${suburbStatePostcode}`\n}\n\nexport function serializeContactDetails(state: ContactDetailsState): ContactDetailsUpdateRequest {\n return {\n BetAccountHolder: {\n BetAccountHolderNumber: state.betAccountHolderNumber || undefined,\n NameChanged: state.nameDateOfBirthChanged,\n Contact: {\n HomePhone: parseLandlinePhoneNumber(state.phoneHome),\n WorkPhone: parseLandlinePhoneNumber(state.phoneWork),\n Mobile: parseMobilePhoneNumber(state.phoneMobile),\n Email: state.email,\n },\n PostalAddressSameAsResidential: state.addressPostalSame,\n DriversLicence: {\n Number: state.driversLicenceNumber,\n State: state.driversLicenceState,\n CardNumber: state.driversLicenceCardNumber,\n },\n Passport: {\n Number: state.passportNumber,\n PassportCountry: state.passportCountry,\n },\n Medicare: {\n BlueYellowMedicareExpiryDate: state.medicareBlueYellowExpiryDate || undefined,\n GreenMedicareExpiry: state.medicareGreenExpiry,\n MedicareCardColour: state.medicareCardColour,\n MedicareMiddleNameOnCard: state.medicareMiddleNameOnCard,\n Number: state.medicareNumber,\n Reference: state.medicareReference,\n },\n ResidentialAddress: state.addressResidential || undefined,\n PostalAddress: state.addressPostalSame ? undefined : state.addressPostal || undefined,\n },\n ResidentialAddressMoniker: state.addressResidentialMoniker,\n VerifyResidentialAddress: state.verifyResidentialAddress,\n PostalAddressMoniker: state.addressPostalMoniker,\n VerifyPostalAddress: state.verifyPostalAddress,\n }\n}\n\nexport function parseLandlinePhoneNumber(phoneNumber: string): PhoneNumber {\n const regex = /^\\s*(\\d{2})(\\d{8})\\s*$/\n const result = phoneNumber && regex.exec(phoneNumber.replace(/\\s/g, ''))\n return result\n ? {\n CountryCode: defaultPhoneCountryCode,\n AreaCode: result[1],\n PhoneNumber: result[2],\n }\n : {\n CountryCode: '',\n AreaCode: '',\n PhoneNumber: '',\n }\n}\n\nexport function parseMobilePhoneNumber(phoneNumber: string): PhoneNumber {\n const regex = /^\\s*(\\d{10})\\s*$/\n const result = phoneNumber && regex.exec(phoneNumber.replace(/\\s/g, ''))\n return result\n ? {\n CountryCode: defaultPhoneCountryCode,\n AreaCode: '',\n PhoneNumber: result[1],\n }\n : {\n CountryCode: '',\n AreaCode: '',\n PhoneNumber: '',\n }\n}\n","import { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport type { State } from 'rwwa-data-access'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { saveContactDetails, ContactDetails } from '../../Data/Account/contactDetails'\nimport { Address, BetAccountHolder } from '@mobi/api-types'\nimport { serializeContactDetails, buildAddress } from './data-transforms'\nimport { ReinitialiseReverificationDetails } from '../Reverification/driver'\n\nexport interface ContactDetailsFields {\n betAccountHolderNumber: number | null\n fullName: string\n preferredName: string\n dateOfBirth: string\n email: string\n phoneMobile: string\n phoneHome: string\n phoneWork: string\n addressResidentialMoniker: string\n addressResidential: Address | null\n addressPostal: Address | null\n addressPostalMoniker: string\n addressPostalSame: boolean\n driversLicenceNumber: string\n driversLicenceState: string\n driversLicenceCardNumber: string\n passportNumber: string\n passportCountry: string\n medicareBlueYellowExpiryDate: Date | null\n medicareGreenExpiry: string\n medicareCardColour: string\n medicareMiddleNameOnCard: string\n medicareNumber: string\n medicareReference: string\n agreeToVerifyAdditionalDetails?: boolean\n nameDateOfBirthChanged: boolean\n nameDateOfBirthChangedInitial: boolean\n isInternationalCustomer: boolean\n}\n\nexport interface ValidationErrors {\n email: string | boolean\n phoneMobile: string | boolean\n phoneHome: string | boolean\n phoneWork: string | boolean\n addressResidentialMoniker: string | boolean\n addressPostalMoniker: string | boolean\n driversLicenceNumber: string | boolean\n driversLicenceState: string | boolean\n driversLicenceCardNumber: string | boolean\n passportNumber: string | boolean\n passportCountry: string | boolean\n medicareBlueYellowExpiryDate: string | boolean\n medicareGreenExpiry: string | boolean\n medicareCardColour: string | boolean\n medicareNumber: string | boolean\n medicareReference: string | boolean\n}\n\nexport interface ValidationErrorsRecord\n extends TypedRecord,\n ValidationErrors {}\n\nexport type ContactDetailsState = {\n updateSuccess: boolean\n loading: boolean\n updateFailed: boolean\n isReverificationSuccess: boolean | null\n isAdditionalDetailsChanged: boolean\n verifyResidentialAddress: boolean\n verifyPostalAddress: boolean\n snapshotAfterUpdate?: ContactDetailsState\n validationErrors: ValidationErrorsRecord\n} & ContactDetailsFields\n\nexport const defaultValidationErrors: ValidationErrors = {\n email: false,\n phoneMobile: false,\n phoneHome: false,\n phoneWork: false,\n addressResidentialMoniker: false,\n addressPostalMoniker: false,\n driversLicenceNumber: false,\n driversLicenceState: false,\n driversLicenceCardNumber: false,\n passportNumber: false,\n passportCountry: false,\n medicareBlueYellowExpiryDate: false,\n medicareGreenExpiry: false,\n medicareCardColour: false,\n medicareNumber: false,\n medicareReference: false,\n}\n\nconst ValidationErrorsFactory = makeTypedFactory(\n defaultValidationErrors\n)\n\nexport const defaultContactDetailsState: ContactDetailsState = {\n betAccountHolderNumber: null,\n updateSuccess: false,\n loading: false,\n fullName: '',\n preferredName: '',\n dateOfBirth: '',\n email: '',\n phoneMobile: '',\n phoneHome: '',\n phoneWork: '',\n addressResidential: null,\n addressResidentialMoniker: '',\n verifyResidentialAddress: false,\n addressPostal: null,\n addressPostalMoniker: '',\n verifyPostalAddress: false,\n addressPostalSame: false,\n driversLicenceNumber: '',\n driversLicenceState: '',\n driversLicenceCardNumber: '',\n passportNumber: '',\n passportCountry: '',\n medicareBlueYellowExpiryDate: null,\n medicareGreenExpiry: '',\n medicareCardColour: '',\n medicareMiddleNameOnCard: '',\n medicareNumber: '',\n medicareReference: '',\n isReverificationSuccess: null,\n updateFailed: false,\n isAdditionalDetailsChanged: false,\n agreeToVerifyAdditionalDetails: true,\n isInternationalCustomer: false,\n snapshotAfterUpdate: undefined,\n validationErrors: ValidationErrorsFactory(),\n nameDateOfBirthChanged: false,\n nameDateOfBirthChangedInitial: false,\n}\n\nexport enum ValidationFields {\n email = 'email',\n phoneMobile = 'phoneMobile',\n phoneHome = 'phoneHome',\n phoneWork = 'phoneWork',\n addressResidentialMoniker = 'addressResidentialMoniker',\n addressPostalMoniker = 'addressPostalMoniker',\n driversLicenceNumber = 'driversLicenceNumber',\n driversLicenceState = 'driversLicenceState',\n driversLicenceCardNumber = 'driversLicenceCardNumber',\n passportNumber = 'passportNumber',\n passportCountry = 'passportCountry',\n medicareBlueYellowExpiryDate = 'medicareBlueYellowExpiryDate',\n medicareGreenExpiry = 'medicareGreenExpiry',\n medicareCardColour = 'medicareCardColour',\n medicareNumber = 'medicareNumber',\n medicareReference = 'medicareReference',\n}\n\nexport const UpdateFields = createSignal('UpdateFields')\nexport const SaveButtonClicked = createSignal('SaveButtonClicked')\nexport const Reset = createSignal('Reset')\nexport const UpdateSuccess = createSignal('UpdateSuccess')\nexport const UpdateFailed = createSignal('UpdateFailed')\nexport const ReverificationSucceeded = createSignal('ReverificationSucceeded')\nexport const ReverificationFailed = createSignal('ReverificationFailed')\nexport const ChangeValue = createSignal<{\n field: keyof ContactDetailsFields\n value: string | boolean | Date\n}>('ChangeValue')\nexport const ValidateField = createSignal<{ field: keyof ContactDetailsFields }>('ValidateField')\nexport const ChangeResidentialAddress = createSignal<{\n addressResidentialMoniker: string\n addressResidential?: Address\n}>('ChangeResidentialAddress')\nexport const ChangePostalAddress = createSignal<{\n addressPostalMoniker: string\n addressPostal?: Address\n}>('ChangePostalAddress')\n\nexport interface ContactDetailsStateRecord\n extends TypedRecord,\n ContactDetailsState {}\nexport const ContactDetailsStateFactory = makeTypedFactory<\n ContactDetailsState,\n ContactDetailsStateRecord\n>(defaultContactDetailsState)\n\nexport function contactDetailsDriver(\n state = ContactDetailsStateFactory(),\n signal: Signal\n): ContactDetailsStateRecord {\n switch (signal.tag) {\n case UpdateFields: {\n const contactDetails: ContactDetailsFields = signal.data\n const addressResidential = contactDetails.addressResidential && {\n ...contactDetails.addressResidential,\n }\n const addressPostal = contactDetails.addressPostal && { ...contactDetails.addressPostal }\n const newState = state.merge({\n ...contactDetails,\n addressResidential,\n addressResidentialMoniker: buildAddress(addressResidential as Address),\n addressPostal,\n addressPostalMoniker: buildAddress(addressPostal as Address),\n })\n return newState.merge({\n snapshotAfterUpdate: newState,\n })\n }\n\n case Reset: {\n return state.merge({\n ...defaultContactDetailsState,\n })\n }\n\n case SaveButtonClicked: {\n // don't try and save again if it's saving now\n if (state.get('loading')) {\n return state\n }\n\n const validationErrors = validateAllFields(state)\n const isValid = isFieldValidationSuccess(\n state.addressPostalSame,\n state.isAdditionalDetailsChanged,\n !!state.agreeToVerifyAdditionalDetails,\n validationErrors\n )\n if (!isValid) {\n return state.merge({\n validationErrors,\n })\n }\n\n save(state)\n\n return state.merge({\n loading: true,\n })\n }\n\n case ChangeResidentialAddress: {\n const { addressResidentialMoniker, addressResidential } = signal.data\n let newState = state.set('addressResidentialMoniker', addressResidentialMoniker)\n const verifyResidentialAddress =\n haveResidentailAddressChanged(newState) && !addressResidential\n\n const fieldError = validateAField(ValidationFields.addressResidentialMoniker, newState)\n\n if (newState.hasIn(['validationErrors', 'addressResidentialMoniker'])) {\n newState = newState.setIn(['validationErrors', 'addressResidentialMoniker'], fieldError)\n }\n\n return newState.merge({\n addressResidentialMoniker,\n addressResidential: addressResidential || state.get('addressResidential'),\n verifyResidentialAddress,\n })\n }\n\n case ChangePostalAddress: {\n const { addressPostalMoniker, addressPostal } = signal.data\n let newState = state.set('addressPostalMoniker', addressPostalMoniker)\n const verifyPostalAddress = havePostalAddressChanged(newState) && !addressPostal\n\n const fieldError = validateAField(ValidationFields.addressPostalMoniker, newState)\n\n if (newState.hasIn(['validationErrors', 'addressPostalMoniker'])) {\n newState = newState.setIn(['validationErrors', 'addressPostalMoniker'], fieldError)\n }\n return newState.merge({\n addressPostalMoniker,\n addressPostal: addressPostal || state.get('addressPostal'),\n verifyPostalAddress,\n })\n }\n\n case ChangeValue: {\n const { field, value } = signal.data\n let newState = state.set(field, value)\n const fieldError = validateAField(field, newState)\n const isAdditionalDetailsChanged = haveAdditionalDetailsChanged(newState)\n\n if (newState.hasIn(['validationErrors', field])) {\n newState = newState.setIn(['validationErrors', field], fieldError)\n }\n\n return newState.merge({\n isAdditionalDetailsChanged,\n })\n }\n\n case ValidateField: {\n const { field } = signal.data\n const fieldError = validateAField(field, state)\n\n return state.setIn(['validationErrors', field], fieldError)\n }\n\n case UpdateSuccess: {\n return state.merge({\n loading: false,\n updateSuccess: true,\n isReverificationSuccess: false,\n updateFailed: false,\n })\n }\n\n case ReverificationSucceeded: {\n return state.merge({\n loading: false,\n isReverificationSuccess: true,\n })\n }\n\n case ReverificationFailed: {\n return state.merge({\n loading: false,\n isReverificationSuccess: false,\n updateFailed: false, // for reverification to have failed, the save must have succeeded\n })\n }\n\n case UpdateFailed: {\n return state.merge({\n loading: false,\n updateSuccess: false,\n updateFailed: true,\n })\n }\n\n default:\n return state\n }\n}\n\nfunction validateAllFields(state: ContactDetailsStateRecord): ValidationErrors {\n return {\n email: validateAField(ValidationFields.email, state),\n phoneMobile: validateAField(ValidationFields.phoneMobile, state),\n phoneHome: validateAField(ValidationFields.phoneHome, state),\n phoneWork: validateAField(ValidationFields.phoneWork, state),\n addressResidentialMoniker: validateAField(ValidationFields.addressResidentialMoniker, state),\n addressPostalMoniker: validateAField(ValidationFields.addressPostalMoniker, state),\n driversLicenceNumber: validateAField(ValidationFields.driversLicenceNumber, state),\n driversLicenceState: validateAField(ValidationFields.driversLicenceState, state),\n driversLicenceCardNumber: validateAField(ValidationFields.driversLicenceCardNumber, state),\n passportNumber: validateAField(ValidationFields.passportNumber, state),\n passportCountry: validateAField(ValidationFields.passportCountry, state),\n medicareBlueYellowExpiryDate: validateAField(\n ValidationFields.medicareBlueYellowExpiryDate,\n state\n ),\n medicareGreenExpiry: validateAField(ValidationFields.medicareGreenExpiry, state),\n medicareCardColour: validateAField(ValidationFields.medicareCardColour, state),\n medicareNumber: validateAField(ValidationFields.medicareNumber, state),\n medicareReference: validateAField(ValidationFields.medicareReference, state),\n }\n}\n\nexport function validateAField(\n field: ValidationFields,\n state: ContactDetailsStateRecord\n): string | false {\n const value = state.get(field)\n const medicareNumber = state.get('medicareNumber')\n const medicareColor = state.get('medicareCardColour').trim().toLowerCase()\n\n switch (field) {\n case ValidationFields.email:\n return !isEmailValid(value) ? 'Please enter a valid email address' : false\n case ValidationFields.phoneMobile:\n return !isPhoneNumberValid(value) ? 'Please enter a valid Australian mobile number' : false\n case ValidationFields.phoneHome:\n case ValidationFields.phoneWork:\n return value && !isPhoneNumberValid(value)\n ? 'Please enter a valid Australian phone number'\n : false\n case ValidationFields.addressPostalMoniker:\n case ValidationFields.addressResidentialMoniker:\n return !value ? 'Please enter a valid address' : false\n case ValidationFields.driversLicenceState:\n return !!state.get('driversLicenceNumber') && !value ? 'Please select a state' : false\n case ValidationFields.driversLicenceNumber:\n return (!value && !!state.get('driversLicenceState')) ||\n (value && !isLicenceNumberValid(value))\n ? 'Please enter a valid licence number'\n : false\n case ValidationFields.driversLicenceCardNumber: {\n if (state.get('driversLicenceState') && value && !isLicenceCardNumberValid(value)) {\n return 'Please enter a valid licence card number'\n }\n\n return false\n }\n case ValidationFields.passportCountry:\n return !isPassportCountryValid({\n passportNumber: state.get('passportNumber'),\n passportCountry: value,\n })\n ? 'Please select a country'\n : false\n case ValidationFields.passportNumber:\n return !isPassportNumberValid({\n passportNumber: value,\n passportCountry: state.get('passportCountry'),\n })\n ? 'Please enter a valid passport number'\n : false\n case ValidationFields.medicareNumber: {\n const haveReferenceOrColor = !!state.get('medicareReference') || !!medicareColor\n return (haveReferenceOrColor && !value) || (!!value && !/^\\d{10}$/.test(value))\n ? 'Please enter a valid medicare number'\n : false\n }\n case ValidationFields.medicareReference:\n return !!medicareNumber && !value ? '1 - 9' : false\n case ValidationFields.medicareCardColour:\n return !!medicareNumber && !value ? 'Please select a card color' : false\n case ValidationFields.medicareGreenExpiry: {\n if (medicareColor === 'green') {\n return !!medicareNumber && !value ? 'Please select a valid expiry' : false\n }\n return false\n }\n case ValidationFields.medicareBlueYellowExpiryDate: {\n if (medicareColor === 'yellow' || medicareColor === 'blue') {\n return !!medicareNumber && !value ? 'Please select a valid expiry' : false\n }\n return false\n }\n default:\n return false\n }\n}\n\nexport function isEmailValid(email: string) {\n const emailValidation =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n return emailValidation.test(email)\n}\n\nexport function isPhoneNumberValid(phone: string) {\n const phoneValidation = /^0[0-8]\\d{8}$/\n return phoneValidation.test(phone)\n}\n\nexport function isPassportNumberValid({\n passportNumber,\n passportCountry,\n}: Pick) {\n return !!passportNumber || !passportCountry\n}\n\nexport function isPassportCountryValid({\n passportNumber,\n passportCountry,\n}: Pick) {\n return !!passportCountry || !passportNumber\n}\n\nexport function isLicenceNumberValid(licenceNumber: string) {\n // eslint-disable-next-line no-useless-escape\n return /^[a-zA-Z0-9 \\-]+$/.test(licenceNumber)\n}\n\nexport const isLicenceCardNumberValid = (licenceCardNumber: string) =>\n /^[a-z0-9]+$/i.test(licenceCardNumber)\n\nexport function isFieldValidationSuccess(\n addressPostalSame: boolean,\n isAdditionalDetailsChanged: boolean,\n agreeToVerifyAdditionalDetails: boolean,\n validationErrors: ValidationErrors\n): boolean {\n return (\n !validationErrors.email &&\n !validationErrors.phoneMobile &&\n !validationErrors.addressResidentialMoniker &&\n (addressPostalSame || !validationErrors.addressPostalMoniker) &&\n !validationErrors.driversLicenceNumber &&\n !validationErrors.driversLicenceState &&\n !validationErrors.passportCountry &&\n !validationErrors.passportNumber &&\n !validationErrors.medicareNumber &&\n !validationErrors.medicareReference &&\n !validationErrors.medicareCardColour &&\n !validationErrors.medicareBlueYellowExpiryDate &&\n !validationErrors.medicareGreenExpiry &&\n (!isAdditionalDetailsChanged || agreeToVerifyAdditionalDetails)\n )\n}\n\nexport function save(state: ContactDetailsStateRecord) {\n saveContactDetails(serializeContactDetails(state.toJS()))\n .then(resp => {\n if (resp.isReverificationSuccess) {\n ReverificationSucceeded()\n } else if (resp.isReverificationSuccess === false) {\n ReverificationFailed()\n } else if (resp.isContactDetailsUpdateSuccess) {\n UpdateSuccess()\n } else {\n UpdateFailed()\n }\n })\n .catch(() => {\n UpdateFailed()\n })\n .finally(() => {\n // always refresh contact details and reverification details\n ContactDetails.hardInvalidate(\n null as unknown as State,\n `${state.betAccountHolderNumber}`\n )\n ReinitialiseReverificationDetails()\n\n queryClient\n .invalidateQueries(\n {\n queryKey: [queryKeys.userContactDetails],\n },\n {\n cancelRefetch: true,\n }\n )\n .then(() => {\n //\n })\n })\n}\n\nexport function haveAdditionalDetailsChanged(currentState: ContactDetailsStateRecord): boolean {\n const snapshotAfterUpdate = currentState.get('snapshotAfterUpdate') as ContactDetailsState\n\n if (!snapshotAfterUpdate) {\n return false\n }\n\n return (\n currentState.driversLicenceNumber !== snapshotAfterUpdate.driversLicenceNumber ||\n currentState.driversLicenceState !== snapshotAfterUpdate.driversLicenceState ||\n currentState.medicareBlueYellowExpiryDate !==\n snapshotAfterUpdate.medicareBlueYellowExpiryDate ||\n currentState.medicareCardColour !== snapshotAfterUpdate.medicareCardColour ||\n currentState.medicareGreenExpiry !== snapshotAfterUpdate.medicareGreenExpiry ||\n currentState.medicareMiddleNameOnCard !== snapshotAfterUpdate.medicareMiddleNameOnCard ||\n currentState.medicareNumber !== snapshotAfterUpdate.medicareNumber ||\n currentState.medicareReference !== snapshotAfterUpdate.medicareReference ||\n currentState.passportCountry !== snapshotAfterUpdate.passportCountry ||\n currentState.passportNumber !== snapshotAfterUpdate.passportNumber\n )\n}\n\nexport function haveResidentailAddressChanged(currentState: ContactDetailsStateRecord): boolean {\n const snapshotAfterUpdate = currentState.get('snapshotAfterUpdate') as ContactDetailsState\n\n if (!snapshotAfterUpdate) {\n return false\n }\n\n return currentState.addressResidentialMoniker !== snapshotAfterUpdate.addressResidentialMoniker\n}\n\nexport function havePostalAddressChanged(currentState: ContactDetailsStateRecord): boolean {\n const snapshotAfterUpdate = currentState.get('snapshotAfterUpdate') as ContactDetailsState\n\n if (!snapshotAfterUpdate) {\n return false\n }\n\n return currentState.addressPostalMoniker !== snapshotAfterUpdate.addressPostalMoniker\n}\n\nexport const state$ = attachDriver({\n path: 'contactDetails',\n driver: contactDetailsDriver,\n})\n","import React, { type FC, Suspense, lazy } from 'react'\nimport styled from '@emotion/styled'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableProperties } from '@core/Utils/hooks'\nimport { MainContainer } from '@core/Components/Containers'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { type DepositFlow } from '@mobi/account/Areas/Deposit/typings/types'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { needsExtraBottomPadding } from '../Navigation/Components/TabNavigation/Components/WebOnlyNav/WebOnlyNav'\n\nconst App = lazy(() => import('@mobi/account/Areas/Deposit/App'))\n\nexport type DepositProps = {\n asModal?: boolean\n flow: DepositFlow\n}\n\nexport const Deposit: FC = ({ asModal = false, flow }) => {\n const { accountNumber, accountBalance } = useObservableProperties(\n userAccountState$,\n ['accountNumber', 'accountBalance'],\n {\n accountNumber: null,\n accountBalance: 0,\n }\n )\n const isBodyScrollLocked = accountNumber !== null && asModal\n const containerElementRef = useBodyScrollLock(isBodyScrollLocked)\n\n // This page cannot be loaded if the user isn't logged in anyway\n if (accountNumber === null) {\n return null\n }\n\n return (\n }>\n \n \n {asModal && \n \n )\n}\n\nconst DepositMainContainer = styled(MainContainer)({\n background: colors.white,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n minHeight: '100vh',\n paddingBottom: needsExtraBottomPadding ? '5rem' : '0',\n})\n\nconst ModalBackdrop = styled.div({\n position: 'fixed',\n zIndex: -1,\n top: 0,\n left: `calc(-50vw)`,\n right: 0,\n bottom: 0,\n width: '150vw',\n height: '100vh',\n backgroundColor: 'rgba(0,0,0,0.5)',\n animation: `fadeIn 400ms ease forwards`,\n})\n","import React from 'react'\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { OverlayOpen } from '@core/Components/Overlay'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\nimport { Deposit, type DepositProps } from './Deposit'\nimport { type DepositFlow } from '@mobi/account/Areas/Deposit/typings/types'\n\nexport const openDepositModal = (flow: DepositFlow) =>\n openDeposit({\n asModal: true,\n flow,\n })\n\nexport function openDeposit(props?: DepositProps) {\n if (props?.asModal) {\n // `props` can no longer be undefined here as `asModal` must be `true`\n OverlayOpen({\n Component: () => ,\n layer: layering.overlayHigh,\n })\n } else {\n if (window.location.hash !== '#deposit') {\n window.location.hash = '#deposit'\n }\n }\n\n trackOptimoveEvent({\n eventName: 'set_page_visit',\n data: { customURL: '/', pageTtile: 'DEPOSIT' },\n })\n}\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\nexport function trackTopNavigationClicked(linkText: string) {\n trackEvent(keys.categoryNavigation, {\n 'menu-position': 'top',\n cn_target: linkText,\n })\n}\n\nexport function trackBottomNavigationClicked(linkText: string) {\n trackEvent(keys.categoryNavigation, {\n 'menu-position': 'bottom',\n cn_target: linkText,\n })\n}\n","export const KAMBI_ROOT_ROUTE = 'tabtouch-sports'\nexport const KAMBI_HOME_HASH_ROUTE = `#${KAMBI_ROOT_ROUTE}/home` as const\n\nexport const KAMBI_BETHISTORY_HASH_ROUTE = `#${KAMBI_ROOT_ROUTE}/bethistory` as const\nexport const KAMBI_PENDING_HASH_ROUTE = `${KAMBI_BETHISTORY_HASH_ROUTE}/open` as const\nexport const KAMBI_RESULTED_HASH_ROUTE = `${KAMBI_BETHISTORY_HASH_ROUTE}/settled` as const\n\nexport const KAMBI_CSS_HIDDEN_CLASS = 'mobi__kambi-hide-element'\nexport const KAMBI_BETSLIP_DIV_CLASS = 'mobi__kambi-betslip-unpinned'\nexport const KAMBI_DIV_ID = 'KambiBC'\n\nexport const KAMBI_WRAPPER_DIV_ID = 'mobi_kambi-wrapper'\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nconst loginInitialState: LoginState = {\n isLoginShown: false,\n isKeepMeLoggedIn: false,\n isBiometricsEnabledOnTempPasswordChange: false,\n}\n\nconst loginSlice = createSlice({\n name: 'login',\n initialState: loginInitialState,\n reducers: {\n setIsLoginShown(\n state,\n {\n payload: {\n shouldShow,\n onLoginSuccessCallback,\n onLoginSuccessRedirectUrl,\n onLoginCancelledRedirectUrl,\n },\n }: PayloadAction\n ) {\n state.isLoginShown = shouldShow\n state.onLoginSuccessCallback =\n typeof onLoginSuccessCallback === 'function' ? onLoginSuccessCallback : undefined\n state.onLoginSuccessRedirectUrl = onLoginSuccessRedirectUrl\n state.onLoginCancelledRedirectUrl = onLoginCancelledRedirectUrl\n },\n\n setIsKeepMeLoggedIn(state, { payload }: PayloadAction) {\n state.isKeepMeLoggedIn = payload\n },\n\n setIsBiometricsEnabledOnTempPasswordChange(state, { payload }: PayloadAction) {\n state.isBiometricsEnabledOnTempPasswordChange = payload\n },\n },\n})\n\nexport const { setIsLoginShown, setIsKeepMeLoggedIn, setIsBiometricsEnabledOnTempPasswordChange } =\n loginSlice.actions\n\nexport default persistReducer(\n {\n key: 'login',\n whitelist: ['isKeepMeLoggedIn'],\n storage,\n debug: !PRODUCTION,\n },\n loginSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface LoginState {\n isLoginShown: boolean\n /** Server sets extended expiry (shown in app only) */\n isKeepMeLoggedIn: boolean\n onLoginSuccessRedirectUrl?: string\n onLoginCancelledRedirectUrl?: string\n onLoginSuccessCallback?(): void\n isBiometricsEnabledOnTempPasswordChange: boolean\n}\n\ntype SetIsLoginShownOpen = Pick<\n LoginState,\n 'onLoginSuccessCallback' | 'onLoginSuccessRedirectUrl' | 'onLoginCancelledRedirectUrl'\n>\ntype SetIsLoginShown =\n | ({\n shouldShow: false\n } & { [P in keyof SetIsLoginShownOpen]: never })\n | ({\n shouldShow: true\n } & SetIsLoginShownOpen)\n","import { navChange } from '@classic/Foundation/Navigation/Nav'\nimport { get, post } from '@classic/Foundation/Services/ApiService'\nimport { refreshLogonState } from './refreshLogonState'\n\nconst AUTH_ROOT_API = '/api/authentication'\n\n// MOBI requires capitalised root - work is needed to fix\nexport const postLogon = (body: LogonRequestData) =>\n post({ url: `/api/Authentication/Logon`, body })\n\nexport const postLogout = (): Promise => {\n return post({ url: `${AUTH_ROOT_API}/logoff` }).then(() => {\n refreshLogonState()\n navChange('/#')\n })\n}\n\n/** Salted cookie value is sent to server for unsalting */\nexport const getRememberAccountNumber = (): Promise =>\n get<{ accountNumber: number }>({\n url: `${AUTH_ROOT_API}/GetAccountNumber`,\n }).then(data =>\n !data || !data.accountNumber || !Number.isInteger(data.accountNumber)\n ? undefined\n : data.accountNumber\n )\n\nexport const getIsAuthenticated = () =>\n get({ url: `${AUTH_ROOT_API}/IsAuthenticated` })\n\nexport const getIsLoggedOn = (): Promise =>\n getIsAuthenticated().then(data => !!data.accountNumber)\n\n/////////\n// Types\n/////////\nexport type LogonResult = {\n isSuccessful: boolean\n mustChangePassword: boolean\n}\n\nexport type LogonRequestData = {\n accountNumber: number\n password: string\n rememberAccount: boolean\n keepLoggedIn: boolean\n loginViaBioAuth?: boolean\n}\n\ntype LoggedOut = {\n accountNumber: null\n loggedIn: false\n}\n\ntype LoggedIn = {\n accountNumber: number\n loggedIn: true\n}\n\ntype TokenResponse = {\n // HTML string\n token: string\n}\n\nexport type IsAuthenticatedResponse = (LoggedIn | LoggedOut) & TokenResponse\n","import { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { trackLoginFailed } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { refreshLogonState } from './refreshLogonState'\nimport { postLogon } from './api'\n\nexport const attemptLogin = (data: Parameters[0]): Promise =>\n postLogon(data)\n .then(result => {\n if (result.isSuccessful) {\n refreshLogonState()\n return { isSuccessful: true }\n }\n\n if (!result.mustChangePassword) trackLoginFailed(data.accountNumber)\n\n // Only the React Native app needs to be notified. It hooks into this message and removes\n // credentials from the phone's KeyChain as they're no longer valid.\n if (isReactNativeApp && !!data.loginViaBioAuth) {\n sendToNative('INCORRECT_PASSWORD_OR_ACCOUNT', {\n accountNumber: data.accountNumber,\n requiresReset: result.mustChangePassword,\n })\n }\n\n return {\n isSuccessful: false,\n mustChangePassword: result.mustChangePassword,\n errorMessage: 'The account or password details you entered are invalid. Please try again.',\n }\n })\n .catch(() => ({\n isSuccessful: false,\n errorMessage: 'Sorry, something went wrong. Please try again.',\n }))\n\n// =====\n// Types\n// =====\n\ninterface AttemptLoginReturn {\n isSuccessful: boolean\n mustChangePassword?: boolean\n errorMessage?: string\n}\n","import { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\nexport type triggerBiometricsPromptProps = {\n onSuccess: (accountNumber: number, password: string) => void\n}\n\nexport const triggerBiometricsPrompt = ({\n onSuccess,\n}: triggerBiometricsPromptProps): (() => void) => {\n if (!isReactNativeApp) return () => null\n\n sendToNative('BIOMETRIC_AUTH_REQUEST')\n\n const { dispose } = subscribeToNative('BIOMETRIC_AUTH_SUCCESS', ({ accountNumber, password }) => {\n onSuccess(accountNumber, password)\n })\n\n return dispose\n}\n","import { HasLoggedIn, HasLoggedOut } from '@core/State/UserAccount/userAccountDriver'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { getIsAuthenticated } from './api'\nimport { hideLogin, showLogin } from './showLogin'\n\nexport async function refreshLogonState(forceLogon?: boolean) {\n try {\n const data = await getIsAuthenticated()\n\n // #anti-forgery: Required for the current version of the app, the api breaks without it\n const antiforgeryEl = document.getElementById('anti-forgery')\n if (antiforgeryEl) antiforgeryEl.innerHTML = data.token\n\n // #AccountNumber: Used in LaunchDarklyService on init (remove if login state changes)\n const serverRenderedLoginEl = document.getElementById('AccountNumber') as HTMLInputElement\n const shouldRemoveServerRenderedLoginEl =\n serverRenderedLoginEl &&\n serverRenderedLoginEl.value &&\n (!data.accountNumber || serverRenderedLoginEl.value !== data.accountNumber.toString())\n if (shouldRemoveServerRenderedLoginEl) serverRenderedLoginEl.remove()\n\n if (!data.accountNumber) {\n HasLoggedOut()\n // If we're in a React Native context and the loggedIn state is false, we\n // will notify the native side so it can be reflected there as well\n // so we can prevent the native app from getting out of sync.\n if (isReactNativeApp) sendToNative('USER_DID_LOGOUT')\n if (forceLogon) showLogin()\n return\n }\n\n HasLoggedIn({ accountNumber: data.accountNumber })\n if (forceLogon) hideLogin()\n } catch {\n hideLogin()\n }\n}\n","import { store } from '@core/Store'\nimport { setIsLoginShown, LoginState } from '../Store'\n\nexport const showLogin = ({\n onLoginSuccessCallback,\n onLoginSuccessRedirectUrl,\n onLoginCancelledRedirectUrl,\n}: ShowLoginOptions = {}) => {\n store.dispatch(\n setIsLoginShown({\n shouldShow: true,\n onLoginSuccessCallback,\n onLoginSuccessRedirectUrl,\n onLoginCancelledRedirectUrl,\n })\n )\n}\n\nexport const hideLogin = () => {\n store.dispatch(setIsLoginShown({ shouldShow: false }))\n}\n\n// =====\n// Types\n// =====\n\ntype ShowLoginOptions = Partial<\n Pick<\n LoginState,\n 'onLoginSuccessCallback' | 'onLoginSuccessRedirectUrl' | 'onLoginCancelledRedirectUrl'\n >\n>\n","import { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nconst meetingsInitialState: MeetingsState = {\n currentCodeTab: 'races',\n favourites: [],\n}\n\nconst meetingsSlice = createSlice({\n name: 'meetings',\n initialState: meetingsInitialState,\n reducers: {\n toggleMeetingsFavourite(state, { payload }: PayloadAction) {\n if (state.favourites.includes(payload))\n state.favourites = state.favourites.filter(fav => fav !== payload)\n else state.favourites.push(payload)\n },\n\n setMeetingsRaceCode(state, { payload }: PayloadAction) {\n state.currentCodeTab = payload\n },\n },\n})\n\nexport const { toggleMeetingsFavourite, setMeetingsRaceCode } = meetingsSlice.actions\n\nexport default persistReducer(\n {\n key: 'meetings',\n storage,\n debug: !PRODUCTION,\n whitelist: ['favourites'],\n },\n meetingsSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface MeetingsState {\n currentCodeTab: RaceCodesLowerCase\n favourites: string[]\n}\n","import React, { MouseEvent, TouchEvent } from 'react'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { css, Global } from '@emotion/react'\nimport { hexColors } from '@mobi/settings'\nimport type { Contract } from '@mobi/web-native-comms'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { colors, font, measurements } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { isInIosBrowser } from '@classic/Foundation/Services/Device/DeviceIdentificationService'\nimport { navigateToLastRacesPath } from '@core/State/Navigation/helpers/navigateToLastRacesPath'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { KAMBI_DIV_ID, KAMBI_ROOT_ROUTE } from '@core/Areas/Kambi/constants'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { selectIsSkyVideoPlayerOpen } from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport { useRadio } from './hooks/useRadio'\nimport { trackBottomNavigationClicked } from '@core/Areas/Home/analytics'\nimport { navigateToSkyRacePage } from '@core/Areas/RaceCardSky/helpers/navigateToSkyRacePage'\nimport { useIsFobSportsFeatureActive } from '@core/Areas/Sports/hooks/useIsFobSportsFeatureActive'\n\nconst iosBottomPaddingCss = css`\n :root {\n --ios-bottom-app-switcher-height: env(safe-area-inset-bottom, 0px);\n }\n`\n\nconst enum LocalConstants {\n ActiveTabClassName = 'js-bottom-tab-nav--active',\n}\n\nexport const needsExtraBottomPadding = !isReactNativeApp && isInIosBrowser()\n\nexport const WebOnlyNav = ({\n activeTab,\n}: {\n activeTab: Contract['SET_ACTIVE_TAB']['activeTab']\n}) => {\n const isSkyVideoPlayerOpen = useAppSelector(selectIsSkyVideoPlayerOpen)\n\n const isNewSportsFeatureEnabled = useIsFobSportsFeatureActive()\n\n const { isRadioBusy } = useRadio(isSkyVideoPlayerOpen)\n\n const isHomePage = activeTab === 'Home'\n const isSports = activeTab === 'Sports'\n const isRaces = activeTab === 'Races'\n\n const getKambiBetslipTransform = (heightCss: string) => {\n if (!isReactNativeApp) {\n return css`\n .mod-KambiBC-betslip,\n .mod-KambiBC-betslip__outer-wrapper-mask {\n transform: translateY(calc(${heightCss} * -1));\n }\n\n .mod-KambiBC-betslip-container--pinned .mod-KambiBC-betslip,\n .mod-KambiBC-betslip-container--pinned .mod-KambiBC-betslip__outer-wrapper-mask {\n transform: unset;\n }\n\n #${KAMBI_DIV_ID} {\n max-width: ${measurements.mobi.maxWidth} !important;\n margin: auto !important;\n }\n `\n }\n return ''\n }\n\n const bottomNavRef = React.useRef(null)\n const height = needsExtraBottomPadding\n ? 'calc(5rem + var(--ios-bottom-app-switcher-height, 0))'\n : '5rem'\n\n const isSkyRacingTabActive = activeTab === 'SkyRacing'\n\n const handleSkyRacingClick = () => {\n navigateToSkyRacePage()\n trackBottomNavigationClicked('Watch')\n }\n\n const handleRacesClick = (e: React.MouseEvent) => {\n e.preventDefault()\n navigateToLastRacesPath()\n onNavItemClicked(e)\n }\n\n return (\n \n {/* Make sure there's always padding at the bottom of the body so that scrolling can reach\n all the way to the end without the nav bar blocking anything.*/}\n \n\n \n \n Home\n \n\n \n \n Races\n \n\n \n \n Sports\n \n\n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction onNavItemClicked(e: MouseEvent | TouchEvent) {\n const text = (e.currentTarget?.textContent ?? '').trim()\n if (text) trackBottomNavigationClicked(text)\n}\n\n// ======\n// Styles\n// ======\n\nconst WebOnlyContainerStyled = styled.div<{ height: string }>(\n {\n display: 'flex',\n boxSizing: 'border-box',\n position: 'fixed',\n zIndex: 2,\n bottom: 0,\n left: 0,\n right: 0,\n margin: '0 auto',\n height: measurements.mobi.bottomTabsHeight,\n width: '100%',\n minWidth: measurements.mobi.minWidth,\n maxWidth: measurements.mobi.maxWidth,\n background: '#FEFEFE',\n color: hexColors.grey,\n borderTop: `1px solid ${hexColors.gainsboro}`,\n alignItems: 'flex-start',\n paddingTop: '0.5rem',\n\n strong: {\n paddingTop: '0.2rem',\n fontFamily: font.family.primary,\n fontSize: font.size.xs.fontSize,\n letterSpacing: font.size.xs.letterSpacing,\n lineHeight: font.size.xs.lineHeight,\n fontWeight: font.weight.regular,\n },\n\n 'button, a': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textDecoration: 'none',\n background: 'none',\n color: 'inherit',\n border: 0,\n margin: 0,\n padding: 0,\n\n '&:active': {\n background: hexColors.veryLightGrey,\n },\n },\n\n [`.${LocalConstants.ActiveTabClassName}`]: {\n color: colors.lavender[600],\n },\n\n button: {\n position: 'relative',\n\n '> span': {\n position: 'absolute',\n top: '0.2rem',\n left: '50%',\n transform: 'translateX(-50%)',\n marginLeft: '-0.9rem',\n padding: '0.2rem 0.3rem',\n fontSize: '0.6rem',\n fontStyle: 'italic',\n fontWeight: 700,\n lineHeight: 1,\n textTransform: 'uppercase',\n borderRadius: '0.2rem',\n background: colors.error[500],\n color: colors.white,\n },\n },\n },\n ({ height }) => ({ height })\n)\n","import React from 'react'\nimport { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\n\nimport { setRadioPlaying } from '@core/Areas/Navigation/Store'\nimport { selectIsRadioPlaying } from '@core/Areas/Navigation/Store/selectors'\nimport { setCloseSkyVideoPlayer } from '@core/Areas/SkyVideoPlayer/Store'\n\nconst enum LocalConstants {\n TABtouchRadio = 'https://racingradio.rwwa.com.au/live',\n}\n\n// Audio Element is module scoped to allow play while using app\nlet globalAudioElement: HTMLAudioElement | null = null\n\nexport const useRadio = (\n isVisionPlaying: boolean\n): {\n handleRadioToggle(): void\n isRadioPlaying: boolean\n isRadioBusy: boolean\n} => {\n const isRadioPlaying = useAppSelector(selectIsRadioPlaying)\n const dispatch = useAppDispatch()\n const [isRadioBusy, setIsRadioBusy] = React.useState(false)\n const [audioElement, setAudioElement] = React.useState(globalAudioElement)\n\n const pause = React.useCallback(\n (isReactNativeApp: boolean) => {\n if (isReactNativeApp) {\n sendToNative('REQUEST_RADIO_STATE', { isPlaying: false })\n } else {\n audioElement?.pause()\n }\n\n dispatch(setRadioPlaying(false))\n },\n [audioElement, dispatch]\n )\n\n React.useEffect(() => {\n if (!isReactNativeApp) {\n return undefined\n }\n\n const { dispose: disposeNativeRadioStateListener } = subscribeToNative(\n 'NOTIFY_RADIO_STATE',\n data => {\n dispatch(setRadioPlaying(data.isPlaying))\n if (data.isPlaying) {\n dispatch(setCloseSkyVideoPlayer())\n }\n\n setIsRadioBusy(false)\n }\n )\n\n return disposeNativeRadioStateListener\n }, [dispatch])\n\n // Stop Radio if Vision is playing\n React.useEffect(() => {\n if (!isVisionPlaying) return\n pause(isReactNativeApp)\n }, [isVisionPlaying, dispatch, pause])\n\n // Synchronize Radio state with UI on mount\n React.useEffect(() => {\n if (isReactNativeApp) {\n sendToNative('REQUEST_RADIO_STATE')\n return undefined\n }\n\n if (!audioElement) {\n dispatch(setRadioPlaying(false))\n return undefined\n }\n\n dispatch(setRadioPlaying(!audioElement.paused && !!audioElement.currentTime))\n\n const onPauseEvent = () => dispatch(setRadioPlaying(false))\n audioElement.addEventListener('pause', onPauseEvent)\n const onPlayEvent = () => dispatch(setRadioPlaying(true))\n audioElement.addEventListener('play', onPlayEvent)\n\n return () => {\n audioElement?.removeEventListener('pause', onPauseEvent)\n audioElement?.removeEventListener('play', onPlayEvent)\n }\n }, [audioElement, dispatch])\n\n const handleRadioToggle = React.useCallback(() => {\n if (isRadioPlaying) {\n pause(isReactNativeApp)\n return\n }\n\n // Handle Play\n setIsRadioBusy(true)\n if (isReactNativeApp) {\n sendToNative('REQUEST_RADIO_STATE', { isPlaying: true })\n } else {\n if (!globalAudioElement) globalAudioElement = new Audio(LocalConstants.TABtouchRadio)\n setAudioElement(globalAudioElement)\n globalAudioElement.setAttribute('src', LocalConstants.TABtouchRadio)\n globalAudioElement.load()\n globalAudioElement\n .play()\n .then(() => dispatch(setRadioPlaying(true)))\n .catch(() => pause(isReactNativeApp))\n .finally(() => setIsRadioBusy(false))\n }\n\n dispatch(setCloseSkyVideoPlayer())\n }, [dispatch, pause, isRadioPlaying])\n\n return {\n handleRadioToggle,\n isRadioPlaying,\n isRadioBusy,\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nexport interface NavigationState {\n isRadioPlaying: boolean\n}\n\nconst commonInitialState: NavigationState = {\n isRadioPlaying: false,\n}\n\nconst navigationSlice = createSlice({\n name: 'navigation',\n initialState: commonInitialState,\n reducers: {\n setRadioPlaying(state, action: PayloadAction) {\n state.isRadioPlaying = action.payload\n },\n },\n})\n\nexport const { setRadioPlaying } = navigationSlice.actions\n\nexport default navigationSlice.reducer\n","import { RootState } from '@core/Store'\n\nexport const selectIsRadioPlaying = (state: RootState): boolean => state.navigation.isRadioPlaying\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { NotificationTime } from '../types'\n\nexport const initialState: NotificationState = {\n notifications: {},\n}\n\nconst slice = createSlice({\n name: 'notification-button',\n initialState: initialState,\n reducers: {\n registerNotification(\n state,\n action: PayloadAction<{ eventId: string; notificationTimes: NotificationTime[] }>\n ) {\n if (action.payload?.eventId && action.payload.notificationTimes.length) {\n state.notifications = {\n ...state.notifications,\n [action.payload.eventId]: action.payload.notificationTimes,\n }\n }\n },\n\n registerNotifications(\n state,\n action: PayloadAction<{ eventId: string; notificationTimes: NotificationTime[] }[]>\n ) {\n const filtered = action.payload.filter(x => x.notificationTimes?.length)\n if (!filtered.length) {\n return\n }\n state.notifications = {\n ...state.notifications,\n ...Object.fromEntries(filtered.map(x => [x.eventId, x.notificationTimes])),\n }\n },\n\n unregisterNotification(state, action: PayloadAction) {\n if (action.payload in state.notifications) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete state.notifications[action.payload]\n state.notifications = {\n ...state.notifications,\n }\n }\n },\n },\n})\n\nexport const { registerNotification, unregisterNotification, registerNotifications } = slice.actions\n\nexport default slice.reducer\n\n// =====\n// Types\n// =====\nexport interface NotificationState {\n /** map of eventId: list of notification times in minutes */\n notifications: Record\n}\n","import styled from '@emotion/styled'\nimport { PasswordComponentTheme } from './themes'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { InputField } from '@mobi/component-library/Common/Input'\n\ninterface Theme {\n theme?: PasswordComponentTheme\n}\n\nexport const PasswordVisibilityToggleStyled = styled('button')(\n {\n background: 'none',\n color: 'inherit',\n border: 'none',\n padding: '0.5rem',\n font: 'inherit',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n position: 'absolute',\n right: '0.5rem',\n\n '&:focus': {\n outline: 'auto 5px -webkit-focus-ring-color', // override mobi outline cancelling\n },\n },\n\n ({ theme }) => ({\n color: theme.icon.text.color,\n backgroundColor: theme.icon.background,\n top: theme.toggle.top,\n })\n)\n\nexport const PasswordVisibilityToggleLabelStyled = styled('span')(\n {\n marginRight: '0.3rem',\n },\n\n ({ theme }) => ({\n color: theme.icon.text.color,\n fontSize: theme.icon.text.size,\n })\n)\n\nexport const PasswordHideIconStyled = styled(Icon)(({ theme }) => ({\n color: theme.icon.text.color,\n fontSize: theme.icon.size,\n}))\n\nexport const PasswordInputStyled = styled(InputField)(\n {\n margin: '0.5rem 0 1rem 0',\n paddingRight: '8rem',\n },\n\n ({ theme }) => ({\n backgroundColor: theme.input.background,\n margin: theme.input.margin,\n padding: theme.input.padding,\n })\n)\n\nexport const PasswordGroupStyled = styled('div')({\n position: 'relative',\n})\n\nexport const PasswordFormStyled = styled('div')(\n {\n display: 'block',\n position: 'relative',\n fontSize: '1.2rem',\n },\n\n ({ theme }) => ({\n color: theme.label.text.color,\n fontSize: theme.label.text.size,\n })\n)\n\nexport const PasswordLabelStyled = styled('label')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n})\n","import React from 'react'\nimport { PasswordThemes, getPasswordTheme } from '../themes'\nimport { ThemeProvider } from '@emotion/react'\nimport {\n PasswordVisibilityToggleStyled,\n PasswordHideIconStyled,\n PasswordVisibilityToggleLabelStyled,\n} from '../Password.styles'\n\ninterface PasswordVisibilityToggleProps {\n isPasswordVisible: boolean\n onClick: () => void\n themeName?: PasswordThemes\n hasText?: boolean\n}\n\nexport function PasswordVisibilityToggle({\n themeName,\n onClick,\n isPasswordVisible,\n hasText = true,\n}: PasswordVisibilityToggleProps): JSX.Element {\n const theme = getPasswordTheme(themeName)\n // This is to prevent onBlur of input field when selecting toggle\n const onMouseDown = (event: React.MouseEvent) => event.preventDefault()\n const testAutomationId = { [`data-tid-password-${isPasswordVisible ? 'hide' : 'show'}`]: '' }\n\n return (\n \n \n {hasText && (\n \n {isPasswordVisible ? 'Hide' : 'Show'}\n \n )}\n \n \n \n )\n}\n","import React from 'react'\nimport { ThemeProvider } from '@emotion/react'\nimport {\n PasswordFormStyled,\n PasswordInputStyled,\n PasswordLabelStyled,\n PasswordGroupStyled,\n} from '../Password.styles'\nimport { getPasswordTheme, PasswordThemes } from '../../Password/themes'\nimport { PasswordVisibilityToggle } from './VisibilityToggle'\n\nexport interface PasswordComponent {\n labelName: string\n themeName?: PasswordThemes\n onChange: (event: React.FormEvent) => void | null\n onBlur?: (event: React.FormEvent) => void | null\n onVisibleToggle: () => void\n isPasswordVisible: boolean\n validationError: false | string\n shouldScrollIntoView?: boolean\n testId?: string\n}\n\nexport function PasswordComponent({\n labelName,\n themeName,\n onChange,\n onBlur,\n onVisibleToggle,\n isPasswordVisible,\n validationError,\n shouldScrollIntoView,\n testId,\n}: PasswordComponent): JSX.Element {\n const labelRef = React.useRef(null)\n const theme = getPasswordTheme(themeName)\n const onChangePassword = (event: React.FormEvent) => {\n onChange(event)\n }\n\n const onFocus = () =>\n shouldScrollIntoView && labelRef.current?.scrollIntoView && labelRef.current?.scrollIntoView()\n\n return (\n \n \n \n {labelName || 'Password*'}\n \n \n \n \n \n \n \n )\n}\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\n\nexport interface PasswordState {\n new: string | null\n newBlurred: boolean\n confirm: string | null\n confirmBlurred: boolean\n validationError: string | false\n confirmValidationError: string | false\n isValidLength: boolean\n hasNumber: boolean\n hasSpecialCharacters: boolean\n hasUpperCase: boolean\n hasLowerCase: boolean\n invalidCharacters: string\n isPasswordVisible: boolean\n isConfirmPasswordVisible: boolean\n hasAttemptedCreatePassword: boolean\n isValidationSuccess: boolean\n isPasswordWithinFiftyChars: boolean\n hasConsecutiveRepeatCharacters: boolean\n}\n\nexport const defaultPasswordState: PasswordState = {\n new: null,\n newBlurred: false,\n confirm: null,\n confirmBlurred: false,\n validationError: false,\n confirmValidationError: false,\n isValidLength: false,\n hasNumber: false,\n hasSpecialCharacters: false,\n hasUpperCase: false,\n hasLowerCase: false,\n invalidCharacters: '',\n isPasswordVisible: false,\n isConfirmPasswordVisible: false,\n hasAttemptedCreatePassword: false,\n isValidationSuccess: false,\n isPasswordWithinFiftyChars: false,\n hasConsecutiveRepeatCharacters: false,\n}\n\nexport const UpdateNewPassword = createSignal('UpdateNewPassword')\nexport const UpdateConfirmPassword = createSignal('UpdateConfirmPassword')\nexport const NewPasswordOnBlur = createSignal('NewPasswordOnBlur')\nexport const ConfirmPasswordOnBlur = createSignal('ConfirmPasswordOnBlur')\nexport const ValidatePassword = createSignal('ValidatePassword')\nexport const CreatePassword = createSignal('CreatePassword')\nexport const IsPasswordVisible = createSignal('IsPasswordVisible')\nexport const IsConfirmPasswordVisible = createSignal('IsConfirmPasswordVisible')\nexport const Reset = createSignal('Reset')\n\nexport interface PasswordStateRecord extends TypedRecord, PasswordState {}\nexport const PasswordStateFactory = makeTypedFactory(\n defaultPasswordState\n)\n\nexport function passwordDriver(\n state = PasswordStateFactory(),\n signal: Signal\n): PasswordStateRecord {\n switch (signal.tag) {\n case UpdateNewPassword: {\n const newPassword = signal.data\n const newState = state.merge({\n new: newPassword,\n isValidLength: isPasswordValidLength(newPassword),\n hasNumber: hasNumber(newPassword),\n hasSpecialCharacters: hasSpecialCharacters(newPassword),\n hasUpperCase: hasUpperCase(newPassword),\n hasLowerCase: hasLowerCase(newPassword),\n invalidCharacters: getInvalidCharacters(newPassword),\n isPasswordWithinFiftyChars: isPasswordWithinFiftyChars(newPassword),\n hasConsecutiveRepeatCharacters: hasConsecutiveRepeatCharacters(newPassword),\n })\n\n if (\n newState.get('hasAttemptedCreatePassword') ||\n newState.get('newBlurred') ||\n !!newState.get('confirm')\n ) {\n ValidatePassword()\n }\n\n return newState\n }\n\n case UpdateConfirmPassword: {\n const confirm = signal.data\n\n if (state.get('hasAttemptedCreatePassword') || state.get('confirmBlurred')) {\n ValidatePassword()\n }\n\n return state.merge({\n confirm,\n })\n }\n\n case CreatePassword: {\n ValidatePassword()\n\n return state.merge({\n hasAttemptedCreatePassword: true,\n })\n }\n\n case NewPasswordOnBlur: {\n ValidatePassword()\n\n return state.merge({\n newBlurred: true,\n })\n }\n\n case ValidatePassword: {\n let newState = state\n\n if (\n (!!newState.get('new') && !!newState.get('confirm')) ||\n newState.get('hasAttemptedCreatePassword')\n ) {\n newState = newState.merge({\n confirmValidationError: getConfirmPasswordError(newState),\n })\n }\n\n newState = newState.merge({\n validationError: getPasswordErrorMessageFromState(newState),\n })\n\n return newState.merge({\n isValidationSuccess:\n !newState.get('validationError') &&\n !!newState.get('confirm') &&\n !newState.get('confirmValidationError'),\n })\n }\n\n case ConfirmPasswordOnBlur: {\n ValidatePassword()\n\n return state.merge({\n confirmBlurred: true,\n })\n }\n\n case IsPasswordVisible: {\n return state.merge({\n isPasswordVisible: !state.get('isPasswordVisible'),\n })\n }\n\n case IsConfirmPasswordVisible: {\n return state.merge({\n isConfirmPasswordVisible: !state.get('isConfirmPasswordVisible'),\n })\n }\n\n case Reset: {\n return state.merge({\n ...defaultPasswordState,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport function isPasswordValid(password: string) {\n const isValidLength = isPasswordValidLength(password)\n const hasNumberOrSymbol = hasNumber(password) || hasSpecialCharacters(password)\n const hasUpperAndLowerCaseCharacters = hasUpperCase(password) && hasLowerCase(password)\n const hasInvailLetters = getInvalidCharacters(password)\n const isWithinFiftyChars = isPasswordWithinFiftyChars(password)\n const hasConsecutiveRepeatChars = hasConsecutiveRepeatCharacters(password)\n return (\n isValidLength &&\n hasNumberOrSymbol &&\n hasUpperAndLowerCaseCharacters &&\n !hasInvailLetters &&\n isWithinFiftyChars &&\n !hasConsecutiveRepeatChars\n )\n}\n\nexport function isPasswordValidLength(password: string) {\n return password && password.length >= 8\n}\n\nexport function hasNumber(password: string) {\n return /[0-9]/.test(password)\n}\n\nexport function hasSpecialCharacters(password: string) {\n // Special Characters refers to 35 ASCII speical characters not Unicode characters\n // eslint-disable-next-line no-useless-escape\n return /[ -/:-@\\[-`{-~]/.test(password) // a group of 4 inclusive ranges: from space to / ,from : to @ ,from [ to `,from { to ~\n}\n\nexport function hasUpperCase(password: string) {\n return /[A-Z]/.test(password)\n}\n\nexport function hasLowerCase(password: string) {\n return /[a-z]/.test(password)\n}\n\nexport function getInvalidCharacters(password: string) {\n return password.replace(/[\\x20-\\x7E]/g, '') // remove valid ASCII characters from the string and retain Invalid Characters\n}\n\nexport function isPasswordWithinFiftyChars(password: string) {\n if (!password) {\n return true\n }\n\n return password.length <= 50\n}\n\nexport function hasConsecutiveRepeatCharacters(password: string) {\n return /(.)\\1\\1/.test(password)\n}\n\nexport function getPasswordErrorMessageFromState(state: PasswordStateRecord): string | false {\n const isValidLength = state.get('isValidLength')\n const hasNumberOrSymbol = state.get('hasNumber') || state.get('hasSpecialCharacters')\n const hasUpperAndLowerCaseCharacters = state.get('hasUpperCase') && state.get('hasLowerCase')\n const invalidCharacters = state.get('invalidCharacters')\n const isWithinFiftyChars = state.get('isPasswordWithinFiftyChars')\n const hasConsecutiveRepeatChars = state.get('hasConsecutiveRepeatCharacters')\n if (\n isValidLength &&\n hasNumberOrSymbol &&\n hasUpperAndLowerCaseCharacters &&\n isWithinFiftyChars &&\n !hasConsecutiveRepeatChars\n ) {\n if (invalidCharacters) {\n return `Your password should not have invalid character(s) '${invalidCharacters}'.`\n }\n return false\n }\n const errorMessage: string[] = []\n if (!isValidLength) {\n errorMessage.push('have 8 or more characters')\n }\n if (!hasNumberOrSymbol) {\n errorMessage.push('have at least one number or special character')\n }\n if (!hasUpperAndLowerCaseCharacters) {\n errorMessage.push('have both upper and lowercase characters')\n }\n if (!isWithinFiftyChars) {\n errorMessage.push('have less than 50 characters')\n }\n if (hasConsecutiveRepeatChars) {\n errorMessage.push(`not contain three or more consecutive repeating characters. I.e. 'ddd'`)\n }\n if (invalidCharacters) {\n errorMessage.push(`and not contain invalid character(s) '${invalidCharacters}'`)\n }\n return `Your password should ${errorMessage.join(', ')}.`\n}\n\nexport function getConfirmPasswordError(state: PasswordStateRecord): string | false {\n const newPassword = state.get('new')\n const confirmPassword = state.get('confirm')\n\n if (newPassword !== confirmPassword) {\n return 'The passwords you entered do not match.'\n } else {\n return false\n }\n}\n\nexport const state$ = attachDriver({\n path: 'password',\n driver: passwordDriver,\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { RulesThemeSettings } from './InteractiveRules'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\ninterface SingleRuleStyledProps {\n isHighlighted?: boolean\n}\n\ninterface Theme {\n theme?: RulesThemeSettings\n}\n\nexport const InteractiveRulesListStyled = styled('ul')(\n {\n paddingLeft: '0rem',\n listStyle: 'none',\n color: hexColors.dimGrey,\n },\n ({ theme }) => ({\n color: theme.text.color,\n backgroundColor: theme.background,\n margin: theme.margin,\n })\n)\n\nexport const SingleRuleStyled = styled('li')(\n {\n marginTop: '0.5rem',\n display: 'flex',\n alignItems: 'center',\n },\n ({ theme }) => ({\n fontSize: theme.text.size,\n }),\n ({ isHighlighted }) => ({\n color: isHighlighted ? hexColors.sushi : undefined,\n fontWeight: isHighlighted ? 'bold' : undefined,\n })\n)\n\nexport const TickedIconStyled = styled(Icon)(\n {\n marginRight: '0.5rem',\n },\n ({ theme }) => ({\n fontSize: theme.tickIcon ? theme.tickIcon.size : '1.5rem',\n }),\n ({ isHighlighted }) => ({\n color: isHighlighted ? hexColors.sushi : hexColors.veryLightGrey,\n })\n)\n","import React from 'react'\nimport { ThemeProvider } from '@emotion/react'\nimport { hexColors } from '@mobi/settings'\nimport {\n InteractiveRulesListStyled,\n SingleRuleStyled,\n TickedIconStyled,\n} from './InteractiveRules.styles'\n\nexport interface RulesThemeSettings {\n background?: string\n text: {\n color: string\n size: string\n }\n tickIcon: {\n size: string\n }\n color: string\n margin: string\n padding: string\n size: string\n top: string\n}\n\nexport interface RuleProps {\n description: string\n isRuleMet: boolean\n key: string\n}\ninterface InteractiveRulesProps {\n theme?: RulesThemeSettings\n rules: RuleProps[]\n}\n\nexport function InteractiveRules({ theme, rules }: InteractiveRulesProps): JSX.Element {\n const defaultTheme = {\n text: {\n color: hexColors.dimGrey,\n size: '1.4rem',\n },\n }\n\n return (\n \n {Rules(rules)}\n \n )\n}\n\nfunction Rules(rules: RuleProps[]) {\n return rules.map(rule => {\n return (\n \n \n {rule.description}\n \n )\n })\n}\n","import React from 'react'\nimport { observeImmutable } from '../../Components/HOCs/observe'\nimport {\n state$ as passwordState$,\n PasswordStateRecord,\n UpdateNewPassword,\n IsPasswordVisible,\n UpdateConfirmPassword,\n IsConfirmPasswordVisible,\n ConfirmPasswordOnBlur,\n NewPasswordOnBlur,\n} from './driver'\nimport { PasswordThemes, getPasswordTheme } from './themes'\nimport { PasswordComponent } from './Components'\nimport { RuleProps, InteractiveRules } from '../../Components/InteractiveRules/InteractiveRules'\n\ninterface ComplexPasswordProps {\n themeName?: PasswordThemes\n shouldScrollIntoView?: boolean\n}\n\n// As no password field values are stored in state, call `ValidateConfirmPassword` signal in onChangeConfirmPassword passed by consumer\nexport function ComplexPassword(themeName?: PasswordThemes, shouldScrollIntoView?: boolean) {\n return (\n \n )\n}\n\n// As no password field values are stored in state, call `ValidateConfirmPassword` signal in onChangeConfirmPassword passed by consumer\nexport const ComplexPasswordObserve = observeImmutable(\n passwordState$,\n ({ record, ...props }) => {\n const { isPasswordVisible, isConfirmPasswordVisible, validationError, confirmValidationError } =\n record\n\n const onChangeNewPassword = (event: React.FormEvent) => {\n UpdateNewPassword(event.currentTarget.value)\n }\n const onChangeConfirmPassword = (event: React.FormEvent) => {\n UpdateConfirmPassword(event.currentTarget.value)\n }\n\n return (\n
    \n \n \n \n
    \n )\n }\n)\n\nconst PasswordRulesList = observeImmutable(\n passwordState$,\n ({ record, ...props }) => {\n const { isValidLength, hasNumber, hasSpecialCharacters, hasUpperCase, hasLowerCase } = record\n const hasNumberOrSymbol = hasNumber || hasSpecialCharacters\n const hasUpperAndLowerCaseCharacters = hasUpperCase && hasLowerCase\n\n const rulesArray: RuleProps[] = [\n { description: '8 or more characters', isRuleMet: isValidLength, key: 'isValidLength' },\n {\n description: 'Uppercase & lowercase characters',\n isRuleMet: hasUpperAndLowerCaseCharacters,\n key: 'hasUpperAndLowerCaseCharacters',\n },\n {\n description: 'At least one number or special character',\n isRuleMet: hasNumberOrSymbol,\n key: 'hasNumberOrSymbol',\n },\n ]\n const themeRules = getPasswordTheme(props.themeName).rules\n return \n }\n)\n","import colors from '@core/Settings/colors'\nimport { RulesThemeSettings } from '@core/Components/InteractiveRules/InteractiveRules'\n\ninterface ThemeSettings {\n background: string\n text: {\n color?: string\n size?: string\n }\n color: string\n margin: string\n padding: string\n size: string\n top: string\n}\n\nexport enum PasswordThemes {\n light = 'light',\n lightSignup = 'lightSignup',\n dark = 'dark',\n}\nexport interface PasswordComponentTheme {\n label: ThemeSettings\n input: ThemeSettings\n rules: RulesThemeSettings\n icon: ThemeSettings\n toggle: ThemeSettings\n}\n\nexport const lightTheme: PasswordComponentTheme = {\n label: {\n text: {\n color: colors.password.light.label.text,\n },\n } as ThemeSettings,\n input: {\n background: colors.password.light.input.background,\n } as ThemeSettings,\n toggle: {\n top: '0.75rem',\n } as ThemeSettings,\n rules: {\n text: {\n color: colors.password.light.rules.text,\n size: '1.4rem',\n },\n margin: '1rem 0 1.5rem 0',\n } as RulesThemeSettings,\n icon: {\n text: {\n color: colors.password.light.icon.text,\n },\n } as ThemeSettings,\n}\n\nconst lightSignup: PasswordComponentTheme = {\n label: {\n text: {\n color: colors.password.light.label.text,\n size: '1em',\n },\n } as ThemeSettings,\n input: {\n text: {\n size: '0.85em',\n },\n background: colors.password.light.input.background,\n padding: '0.5em',\n margin: '0.25em 0 0.5em 0',\n } as ThemeSettings,\n toggle: {\n top: '0.3rem',\n } as ThemeSettings,\n rules: {\n text: {\n color: colors.password.light.rules.text,\n size: '1rem',\n },\n margin: '1rem 0 1.5rem 0',\n tickIcon: {\n size: '1rem',\n },\n } as RulesThemeSettings,\n icon: {\n color: colors.password.light.icon.text,\n size: '1.2em',\n text: {\n size: '1.2em',\n },\n } as ThemeSettings,\n}\n\nexport const darkTheme: PasswordComponentTheme = {\n label: {\n background: colors.password.dark.label.background,\n text: {\n color: colors.password.dark.label.text,\n },\n } as ThemeSettings,\n input: {\n background: colors.password.dark.input.background,\n } as ThemeSettings,\n toggle: {\n top: '0.75rem',\n } as ThemeSettings,\n rules: {\n text: {\n color: colors.password.dark.rules.text,\n },\n margin: '1rem 0 1.5rem 0',\n background: colors.password.dark.icon.background,\n } as RulesThemeSettings,\n icon: {\n text: {\n color: colors.password.dark.icon.text,\n },\n background: colors.password.dark.icon.background,\n } as ThemeSettings,\n}\n\nexport function getPasswordTheme(theme?: PasswordThemes): PasswordComponentTheme {\n switch (theme) {\n case PasswordThemes.light:\n return lightTheme\n case PasswordThemes.lightSignup:\n return lightSignup\n case PasswordThemes.dark:\n return darkTheme\n default:\n return lightTheme\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\ntype QuickDepositState = {\n lastDepositError?: string\n depositStatus: 'idle' | 'preparing' | 'depositing'\n}\n\nconst initialState: QuickDepositState = {\n lastDepositError: undefined,\n depositStatus: 'idle',\n}\n\nconst quickDepositSlice = createSlice({\n name: 'quick-deposit',\n initialState,\n reducers: {\n closeQuickDeposit() {\n return initialState\n },\n clearQuickDepositError(state) {\n state.lastDepositError = undefined\n },\n onQuickDepositError(state, action: PayloadAction) {\n state.lastDepositError = action.payload\n },\n setQuickDepositStatus(\n state,\n action: PayloadAction<{ depositStatus: QuickDepositState['depositStatus'] }>\n ) {\n state.depositStatus = action.payload.depositStatus\n },\n },\n})\n\nexport const {\n closeQuickDeposit,\n onQuickDepositError,\n clearQuickDepositError,\n setQuickDepositStatus,\n} = quickDepositSlice.actions\n\nexport default quickDepositSlice.reducer\n","export const QUICKBET_MODAL_ID = 'modalQuickbet'\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit'\nimport type { MarketCodesType } from '@mobi/api-types'\nimport type { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\n\nexport const raceCardInitialState: RaceCardState = {\n currentBetType: null,\n currentRacePageQueryKey: null,\n toteSwapState: [[], null],\n selectedProposition: null,\n}\n\nconst raceCardSlice = createSlice({\n name: 'race-card',\n initialState: raceCardInitialState,\n reducers: {\n /** Used exclusively to FixedOddsMarkets at present */\n setSelectedProposition(\n state,\n { payload }: PayloadAction\n ) {\n if (payload === null) {\n state.selectedProposition = null\n return\n }\n if (state.selectedProposition === null) {\n state.selectedProposition = payload\n return\n }\n\n const shouldToggleSelection =\n payload[0] === state.selectedProposition[0] && payload[1] === state.selectedProposition[1]\n\n state.selectedProposition = shouldToggleSelection ? null : payload\n },\n\n /** NOT primary source - tracked from BetTypeSelector -> StartersPageVM */\n setCurrentBetType(state, { payload }: PayloadAction) {\n state.currentBetType = payload\n },\n\n /** Tote swapping via BetModifier for Insurance and Starting Price */\n setToteSwapOptions(state, { payload }: PayloadAction) {\n const activeToteSwap = state.toteSwapState[1]\n state.toteSwapState = [\n payload,\n payload.some(opt => opt === activeToteSwap) ? activeToteSwap : null,\n ]\n },\n setActiveToteSwap(state, { payload }: PayloadAction) {\n state.toteSwapState[1] = payload\n state.selectedProposition = null\n },\n\n /** Captured race page react query key for deeply nested knockout */\n setRacePageReactQueryKey(state, { payload }: PayloadAction<(string | number)[] | null>) {\n state.currentRacePageQueryKey = payload\n },\n },\n})\n\nexport const {\n setSelectedProposition,\n setCurrentBetType,\n setActiveToteSwap,\n setToteSwapOptions,\n setRacePageReactQueryKey,\n} = raceCardSlice.actions\n\nexport default raceCardSlice.reducer\n\n// =====\n// Types\n// =====\n\nexport interface RaceCardState {\n currentBetType: AvailableBetType['betType'] | null\n currentRacePageQueryKey: (string | number)[] | null\n toteSwapState: [availableOptions: ToteSwapOptions[], activeOption: ToteSwapOptions | null]\n selectedProposition: [marketCode: MarketCodesType, propositionSeq: number] | null\n}\n\ntype AvailableBetType = { betType: BetType; name: string; hasJackpot: boolean }\n\ntype ToteSwapOptions = Extract\n","import { useQuery, UseQueryOptions } from 'react-query'\n\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { RaceStatus } from '@mobi/api-types'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\nimport { store } from '@core/Store'\nimport { bool } from 'aws-sdk/clients/signer'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { getSkyRaceLimit } from '../Store/selectors'\nimport { setSkyRaceLimit } from '../Store'\n\nconst MaxRefetchInterval = 120_000\n\nexport const SkyPageLimit = 50\n\nexport interface NextSkyRace extends NextRace {\n RaceStatus: RaceStatus\n IsoCountryCode: string\n SimplePlacings: string\n}\n\nexport const useNextSkyRaces = (\n props?: UseQueryOptions<{ nextRaces: NextSkyRace[] }>\n): {\n nextRaces: NextSkyRace[]\n isLoading: bool\n isError: bool\n isMoreToFetch: bool\n refetch: () => void\n fetchMoreRaces: () => void\n resetLimit: () => void\n} => {\n const limit = useAppSelector(getSkyRaceLimit)\n\n const fetchSkyRaces = async () => {\n return await get<{ nextRaces: NextSkyRace[] }>({\n url: `/webapi/race/GetNextSkyRaces${limit ? `?limit=${limit}` : ''}`,\n })\n }\n\n const { isLoading, isError, data, refetch } = useQuery<{\n nextRaces: NextSkyRace[]\n }>([queryKeys.nextSkyRaces, limit], fetchSkyRaces, {\n enabled: true,\n refetchOnWindowFocus: true,\n refetchOnMount: true,\n refetchIntervalInBackground: false,\n refetchInterval: MaxRefetchInterval,\n keepPreviousData: true,\n ...props,\n })\n\n const fetchMoreRaces = () => {\n store.dispatch(setSkyRaceLimit(limit + SkyPageLimit))\n trackEvent(analyticsKeys.moreSkyRacesLoaded, {\n clickCount: limit / SkyPageLimit,\n })\n }\n\n const resetLimit = () => {\n store.dispatch(setSkyRaceLimit(SkyPageLimit))\n }\n\n const nextRaces = data?.nextRaces || []\n\n return {\n nextRaces,\n isLoading,\n isError,\n isMoreToFetch: nextRaces.length === limit,\n refetch: refetch,\n fetchMoreRaces,\n resetLimit,\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { SkyPageLimit } from '../Hooks/useNextSkyRaces'\n\nexport const skyRacesInitialState: SkyRacesState = {\n filters: { races: true, dogs: true, trots: true, international: true, local: true },\n isSelectedRaceScrolledOutOfView: false,\n resetTimestamp: 0,\n isSkyRaceListViewOpen: false,\n skyRaceLimit: SkyPageLimit,\n}\n\nconst skyRacesSlice = createSlice({\n name: 'sky-races',\n initialState: skyRacesInitialState,\n reducers: {\n toggleFilter(state, { payload }: PayloadAction) {\n const newFilters = {\n ...state.filters,\n [payload]: !state.filters[payload],\n }\n if (validateFilters(newFilters)) state.filters = newFilters\n },\n\n setIsSelectedRaceScrolledOutOfView(state, { payload }: PayloadAction) {\n state.isSelectedRaceScrolledOutOfView = payload\n },\n\n setResetTimestamp(state) {\n state.resetTimestamp = Date.now()\n },\n\n toggleIsSkyRaceListViewOpen(state, { payload }: PayloadAction) {\n state.isSkyRaceListViewOpen = payload ?? !state.isSkyRaceListViewOpen\n },\n setSkyRaceLimit(state, { payload }: PayloadAction) {\n state.skyRaceLimit = payload\n },\n },\n})\n\nexport const {\n toggleFilter,\n setIsSelectedRaceScrolledOutOfView,\n setResetTimestamp,\n toggleIsSkyRaceListViewOpen,\n setSkyRaceLimit,\n} = skyRacesSlice.actions\n\nexport default skyRacesSlice.reducer\n\n// =============\n// Local Helpers\n// =============\n\nconst validateFilters = (newFilters: FilterOptions) => {\n // Needs at least 1 race code filter set\n if (!newFilters.dogs && !newFilters.races && !newFilters.trots) return false\n // Needs at least Int'l or Local filter set\n if (!newFilters.international && !newFilters.local) return false\n\n return true\n}\n\n// =====\n// Types\n// =====\n\nexport type FilterOptions = {\n races: boolean\n dogs: boolean\n trots: boolean\n international: boolean\n local: boolean\n}\n\nexport interface SkyRacesState {\n filters: FilterOptions\n isSelectedRaceScrolledOutOfView: boolean\n /** Used to reset to latest race if changed while on sky race route */\n resetTimestamp: number\n isSkyRaceListViewOpen: boolean\n skyRaceLimit: number\n}\n","import { RootState } from '@core/Store'\n\nexport const getSkyRaceFilters = ({ skyRaces }: RootState) => skyRaces.filters\nexport const getResetTimestamp = ({ skyRaces }: RootState) => skyRaces.resetTimestamp\nexport const getIsSkyRaceListViewOpen = ({ skyRaces }: RootState) => skyRaces.isSkyRaceListViewOpen\nexport const getSkyRaceLimit = ({ skyRaces }: RootState) => skyRaces.skyRaceLimit\nexport const getIsSelectedRaceScrolledOutOfView = ({ skyRaces }: RootState) =>\n skyRaces.isSelectedRaceScrolledOutOfView\n","import { AppRoutes } from '@core/AppRoutes'\nimport { store } from '@core/Store'\nimport { setResetTimestamp } from '../Store'\nimport { trackVisionOpened } from '@core/Areas/SkyVideoPlayer/analytics'\n\nexport const navigateToSkyRacePage = () => {\n const skyRaceCardHashRoute = AppRoutes.RaceCardSky.replace('/', '#')\n\n trackVisionOpened({ openLocation: 'sky-page', channel: 'Sky1' })\n\n if (window.location.hash === skyRaceCardHashRoute) {\n store.dispatch(setResetTimestamp())\n } else {\n window.location.hash = skyRaceCardHashRoute\n }\n}\n","import Rx from 'rx'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport { declareResourceType } from 'rwwa-data-access'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\n\nexport interface ReverificationDetail {\n requiresReverification: boolean\n reverificationDue: boolean\n numDaysRemaining: number | null\n hasAttemptedReverification: boolean\n betAccountHolderNumber: number | null\n}\n\nconst defaultDetails: ReverificationDetail = {\n requiresReverification: false,\n reverificationDue: false,\n numDaysRemaining: null,\n hasAttemptedReverification: false,\n betAccountHolderNumber: null,\n}\n\nexport interface ReverificationDetailRecord\n extends TypedRecord,\n ReverificationDetail {}\n\nexport const ReverificationDetailKey = 'me'\nconst ReverificationDetailsTypeKey = 'reverificationDetails'\n\nexport const ReverificationDetails = declareResourceType({\n typeKey: ReverificationDetailsTypeKey,\n // @ts-expect-error Legacy - use better data management solution\n fetchMultipleNoPromise,\n hardTimeToLive: 200,\n map: x => recordify(x as ReverificationDetail),\n})\n\nfunction fetchMultipleNoPromise(keys: string[]) {\n return Rx.Observable.fromPromise(\n fetchReverificationDetails()\n .then(response => ({\n [ReverificationDetailsTypeKey]: {\n [ReverificationDetailKey]: response,\n },\n }))\n .then(result => ({ keys, result }))\n .catch(() => ({\n keys,\n result: { [ReverificationDetailsTypeKey]: { [ReverificationDetailKey]: defaultDetails } },\n }))\n )\n}\n\nfunction fetchReverificationDetails() {\n return apiService.get({ url: '/$_/api/account/reverificationDetails' })\n}\n\ninterface ConfirmReverificationResponse {\n isReverificationSuccess: boolean\n error: string\n}\n\nexport function confirmAllReverificationDetails(model: {\n betAccountHolderNumber: number\n}): Promise {\n return apiService.post({\n url: '/$_/api/contactDetails/confirmAllReverificationDetailsAsync',\n body: model,\n })\n}\n","import type { State } from 'rwwa-data-access'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport {\n ReverificationDetails,\n ReverificationDetailKey,\n ReverificationDetailRecord,\n confirmAllReverificationDetails,\n} from '@core/Data/Account/reverificationDetails'\nimport { HasLoggedIn, HasLoggedOut } from '@core/State/UserAccount/userAccountDriver'\nimport { isHomeUrl } from '@classic/Foundation/Navigation/Nav'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\nimport { NavigatedTo } from '@core/State/Navigation/driver'\n\nexport interface ReverificationState {\n betAccountHolderNumber: number | null\n isFeatureActive: boolean\n numDaysRemaining: number | null\n requiresReverification: boolean\n reverificationDue: boolean\n hasAttemptedReverification: boolean\n onHomePage: boolean\n userInitiatedReverification: boolean\n remindMeLater: boolean\n isLoading: boolean\n isReverificationSuccess: boolean\n isReverificationFailed: boolean\n isReverificationCompleted: boolean\n}\n\nexport const defaultReverificationState: ReverificationState = {\n betAccountHolderNumber: null,\n isFeatureActive: true,\n numDaysRemaining: null,\n requiresReverification: false,\n reverificationDue: false,\n hasAttemptedReverification: false,\n onHomePage: false,\n userInitiatedReverification: false,\n remindMeLater: false,\n isLoading: false,\n isReverificationSuccess: false,\n isReverificationFailed: false,\n isReverificationCompleted: false,\n}\n\nexport const localStorageRemindMeLaterKeyPart = 'tabtouch-reverification-remindmelater-dateiso'\n\nexport const GetReverificationDetailDidSucceed = createSignal(\n 'GetReverificationDetailDidSucceed'\n)\nconst GetReverificationDetailDidFail = createSignal('GetReverificationDetailDidFail')\nexport const ShowReverificationPopup = createSignal('ShowReverificationPopup')\nexport const ConfirmReverificationDetails = createSignal<{ betAccountHolderNumber: number }>(\n 'ConfirmReverificationDetails'\n)\nconst ReverificationSucceeded = createSignal('ReverificationSucceeded')\nconst ReverificationFailed = createSignal('ReverificationFailed')\nexport const ReverificationCompleted = createSignal('ReverificationCompleted')\nexport const RemindMeLater = createSignal('RemindMeLater')\nexport const ReinitialiseReverificationDetails = createSignal('ReinitialiseReverificationDetails')\n\nexport interface ReverificationStateRecord\n extends TypedRecord,\n ReverificationState {}\nconst ReverificationStateFactory = makeTypedFactory(\n defaultReverificationState\n)\n\nexport function reverificationDriver(\n state = ReverificationStateFactory(),\n signal: Signal\n): ReverificationStateRecord {\n switch (signal.tag) {\n case HasLoggedIn: {\n reinitialise()\n return state\n }\n\n case HasLoggedOut: {\n state = ReverificationStateFactory()\n return state\n }\n\n case ReinitialiseReverificationDetails: {\n if (state.get('isFeatureActive')) {\n reinitialise()\n }\n // reset betAccountHolderNumber so that we don't show popup for the primary when the secondary should be displayed\n return state.set('betAccountHolderNumber', null)\n }\n\n case NavigatedTo: {\n const onHomePage = isHomeUrl(signal.data.url)\n if (!onHomePage) {\n return state.merge({\n onHomePage,\n })\n }\n\n // if reverification is due, then clear remind me later on every navigation\n if (state.get('reverificationDue')) {\n return state.merge({\n onHomePage,\n remindMeLater: false,\n })\n }\n\n const remindMeLaterLastSetDate = getRemindMeLaterLastSetDate(state)\n if (remindMeLaterLastSetDate === null) {\n // remind me later is not stored on the device, so fall back to the one we're tracking locally\n return state.merge({\n onHomePage,\n })\n }\n\n const remindMeLater = shouldRemindMeLater(remindMeLaterLastSetDate)\n return state.merge({\n onHomePage,\n remindMeLater,\n })\n }\n\n case GetReverificationDetailDidSucceed: {\n const data: ReverificationDetailRecord = signal.data\n\n let newState = state.merge(data)\n\n // For joint account holders, resetting the values after primary is complete\n if (newState.get('isReverificationCompleted') && newState.get('requiresReverification')) {\n newState = newState.merge({\n isReverificationCompleted: false,\n isReverificationSuccess: false,\n isReverificationFailed: false,\n })\n }\n\n if (data.reverificationDue) {\n return newState.set('remindMeLater', false)\n }\n const remindMeLaterLastSetDate = getRemindMeLaterLastSetDate(newState)\n const remindMeLater = shouldRemindMeLater(remindMeLaterLastSetDate)\n return newState.set('remindMeLater', remindMeLater)\n }\n\n case GetReverificationDetailDidFail: {\n return state\n }\n\n case ShowReverificationPopup: {\n return state.merge({\n userInitiatedReverification: true,\n // for joint bet account holders, resetting values\n isReverificationCompleted: false,\n isReverificationFailed: false,\n })\n }\n\n case ConfirmReverificationDetails: {\n if (state.get('isLoading')) {\n return state\n }\n\n const betAccountHolderNumber = signal.data\n\n confirmAllReverificationDetails(betAccountHolderNumber)\n .then(({ isReverificationSuccess }) => {\n if (isReverificationSuccess) {\n ReverificationSucceeded()\n } else {\n ReverificationFailed()\n }\n })\n .catch(ReverificationFailed)\n\n return state.merge({\n isLoading: true,\n })\n }\n\n case ReverificationSucceeded: {\n return state.merge({\n isReverificationSuccess: true,\n isLoading: false,\n })\n }\n\n case ReverificationFailed: {\n return state.merge({\n isLoading: false,\n isReverificationFailed: true,\n })\n }\n\n case ReverificationCompleted: {\n // not re-intialising when there is a failure in re-verification\n if (!state.get('isReverificationFailed')) {\n reinitialise()\n }\n\n return state.merge({\n isReverificationCompleted: true,\n })\n }\n\n case RemindMeLater: {\n const dateIso = new Date().toISOString().substring(0, 10)\n const localStorageRemindMeLaterKey = getRemindMeLaterKey(state)\n setInLocalStorage(localStorageRemindMeLaterKey, dateIso)\n\n return state.merge({\n userInitiatedReverification: false,\n remindMeLater: true,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nfunction reinitialise() {\n ReverificationDetails.hardInvalidate(\n null as unknown as State,\n ReverificationDetailKey\n )\n beginGetReverificationDetail()\n}\n\nfunction beginGetReverificationDetail() {\n ReverificationDetails.getPromise(ReverificationDetailKey)\n .then(reverificationDetail => GetReverificationDetailDidSucceed(reverificationDetail))\n .catch(() => GetReverificationDetailDidFail())\n}\n\nfunction getRemindMeLaterKey(state: ReverificationStateRecord): string {\n return `${localStorageRemindMeLaterKeyPart}-${state.get('betAccountHolderNumber')}`\n}\n\nfunction getRemindMeLaterLastSetDate(state: ReverificationStateRecord): string {\n const localStorageRemindMeLaterKey = getRemindMeLaterKey(state)\n return getFromLocalStorage(localStorageRemindMeLaterKey) as unknown as string\n}\n\nfunction shouldRemindMeLater(remindMeLaterLastSetDate: string): boolean {\n // if the stored date is today, then we don't show them, otherwise we do\n const nowIso = new Date().toISOString()\n return nowIso.indexOf(remindMeLaterLastSetDate) === 0\n}\n\nexport const state$ = attachDriver({\n path: 'reverification',\n driver: reverificationDriver,\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nexport const initialState: DeepReadonly = {\n hapticFeedback: {\n enabled: true,\n },\n enhancedBetslip: {\n enabled: true,\n touched: false,\n },\n newSports: {\n enabled: true,\n },\n newBetSlip: {\n enabled: true,\n },\n}\n\nconst settingsSlice = createSlice({\n name: 'settings',\n initialState,\n reducers: {\n setHapticFeedbackSetting(state, { payload }: PayloadAction) {\n state.hapticFeedback.enabled = payload\n },\n setNewSportsSetting(state, { payload }: PayloadAction) {\n state.newSports.enabled = payload\n },\n setNewBetSlipSetting(state, { payload }: PayloadAction) {\n state.newBetSlip.enabled = payload\n },\n setEnhancedBetslipSetting(state, { payload }: PayloadAction) {\n state.enhancedBetslip.enabled = payload\n state.enhancedBetslip.touched = true\n },\n },\n})\n\nexport const {\n setHapticFeedbackSetting,\n setEnhancedBetslipSetting,\n setNewSportsSetting,\n setNewBetSlipSetting,\n} = settingsSlice.actions\n\nconst whitelist: (keyof SettingsState)[] = [\n 'hapticFeedback',\n 'enhancedBetslip',\n 'newSports',\n 'newBetSlip',\n]\nexport default persistReducer(\n { key: 'settings', storage, whitelist, debug: !PRODUCTION },\n settingsSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface SettingsState {\n hapticFeedback: Setting\n enhancedBetslip: TouchedSetting\n newSports: Setting\n newBetSlip: Setting\n}\n\ntype Setting = { enabled: boolean }\n\ntype TouchedSetting = Setting & { touched: boolean }\n","import { RootState } from '@core/Store'\n\nexport const getEnhancedBetslipSettings = ({ settings }: RootState) => {\n return {\n enhancedBetslip: settings.enhancedBetslip.enabled,\n hasUserTouchedEnhancedBetslip: settings.enhancedBetslip.touched,\n }\n}\nexport const getHasUserTouchedEnhancedBetslipSetting = ({ settings }: RootState) =>\n settings.enhancedBetslip.touched\nexport const getEnhancedBetslipSetting = ({ settings }: RootState) =>\n settings.enhancedBetslip.enabled\nexport const isHapticFeedbackSettingEnabled = ({ settings }: RootState) =>\n settings.hapticFeedback.enabled\nexport const getNewSportsSetting = ({ settings }: RootState) => settings.newSports.enabled\nexport const getNewBetSlipSetting = ({ settings }: RootState) => settings.newBetSlip.enabled\n","import React from 'react'\nimport { fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { setEntitlementStatus, setCloseSkyVideoPlayer } from '@core/Areas/SkyVideoPlayer/Store'\n\ninterface VisionEntitlementCheckRes {\n CallToAction: null\n Condition: string\n Entitlement: { BamEntitlementId: string }\n HiddenReasonText: string | null\n IsEntitled: boolean\n ReasonText: string | null\n}\n\nexport const useEntitlement = () => {\n const dispatch = useAppDispatch()\n const isEntitled = useAppSelector(state => state.skyVideoPlayer.isEntitled)\n\n React.useEffect(() => {\n if (typeof isEntitled === 'boolean') {\n return\n }\n\n fetchFromApi('/Vision/EntitlementCheck')\n .then(res => res.json())\n .then(({ IsEntitled, ReasonText }: VisionEntitlementCheckRes) => {\n const notEntitledMessage = ReasonText || 'Not authorised to view Vision'\n // Delay Close (Android 10 crashes if too soon)\n if (!IsEntitled) {\n setTimeout(() => {\n dispatch(setCloseSkyVideoPlayer())\n displayVisionNotEntitledMessage(notEntitledMessage)\n }, 2000)\n }\n\n // Update Vision State\n dispatch(\n setEntitlementStatus({\n isEntitled: IsEntitled,\n notEntitledMessage: !IsEntitled ? notEntitledMessage : undefined,\n })\n )\n })\n }, [dispatch, isEntitled])\n}\n\nexport function displayVisionNotEntitledMessage(message: string) {\n RegisterToast({\n id: 'VisionNotEntitled',\n message: message,\n position: 'bottom',\n type: 'error',\n timeout: 0,\n })\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport storage from 'redux-persist/lib/storage'\nimport { persistReducer } from 'redux-persist'\nimport { isReactNativeApp, AppVersion } from '@mobi/web-native-comms/web'\nimport { displayVisionNotEntitledMessage } from '../Components/VideoPlayer/helpers/useEntitlement'\nimport {\n trackFullScreenOff,\n trackFullScreenOn,\n trackSelectedChannel,\n trackVisionClosed,\n trackVisionMute,\n trackVisionUnMute,\n} from '../analytics'\nimport { ChannelType } from '@mobi/component-library/Common/Svg/SkyTv/SkyTvSvg'\n\ninterface RaceReplayTitle {\n raceNumber?: number\n trackName?: string\n position?: string\n starterName?: string\n starterNumber?: number\n}\n\nconst skyVideoPlayerInitialState: SkyVideoPlayerState = {\n selectedChannel: 'Sky1',\n playerStatus: 'floating',\n previousPlayerStatus: 'floating',\n isPlayerOpen: false,\n isPlaying: false,\n isMuted: true,\n isFullscreen: false,\n isControlShowing: false,\n isEntitled: null,\n dockedPlayerHeight: null,\n\n isPendingBetsDrawerOpen: false,\n canRenderPendingBetsDrawer: false,\n\n raceReplayKey: '',\n raceReplayUrl: '',\n raceReplayUrlChanged: false,\n raceReplayTitle: undefined,\n raceReplayMeetingDate: '',\n\n raceReplayElapsedSeconds: 0,\n raceReplayDurationSeconds: 0,\n}\n\nconst skyVideoPlayerSlice = createSlice({\n name: 'sky-video-player',\n initialState: skyVideoPlayerInitialState,\n reducers: {\n setIsFullscreen(state, { payload: isFullscreen }: PayloadAction) {\n if (isFullscreen) {\n trackFullScreenOn()\n } else {\n trackFullScreenOff()\n }\n state.isFullscreen = isFullscreen\n },\n\n setIsPendingBetsDrawerOpen(\n state,\n { payload: isPendingBetsDrawerOpen }: PayloadAction\n ) {\n state.isPendingBetsDrawerOpen = isPendingBetsDrawerOpen\n },\n\n setCanRenderPendingBetsDrawer(\n state,\n { payload: isEnoughRoomToRender }: PayloadAction\n ) {\n state.canRenderPendingBetsDrawer = isEnoughRoomToRender\n },\n\n setIsPlaying(state, { payload: isPlaying }: PayloadAction) {\n state.isPlaying = isPlaying\n if (!isPlaying) {\n state.isFullscreen = false\n }\n },\n\n setIsMuted(state, { payload: isMuted }: PayloadAction) {\n if (isMuted) {\n trackVisionMute()\n } else {\n trackVisionUnMute()\n }\n state.isMuted = isMuted\n },\n\n setSelectedChannel(\n state,\n { payload: selectedChannel }: PayloadAction\n ) {\n if (state.selectedChannel === selectedChannel) return\n trackSelectedChannel(selectedChannel)\n\n state.selectedChannel = selectedChannel\n state.isPlaying = true\n },\n\n setIsControlShowing(state, { payload: isControlShowing }: PayloadAction) {\n state.isControlShowing = isControlShowing\n },\n\n setEntitlementStatus(\n state,\n { payload }: PayloadAction<{ isEntitled: boolean; notEntitledMessage?: string }>\n ) {\n state.isEntitled = payload.isEntitled\n if (!payload.isEntitled) {\n state.notEntitledMessage = payload.notEntitledMessage\n }\n },\n\n setSkyVideoPlayerStatus(state, { payload }: PayloadAction) {\n if (state.isEntitled === false) {\n displayVisionNotEntitledMessage(state.notEntitledMessage || '')\n return\n }\n\n const newPreviousPlayerStatus = state.playerStatus\n state.playerStatus = payload.playerStatus || state.previousPlayerStatus\n state.previousPlayerStatus = newPreviousPlayerStatus\n\n state.isPlayerOpen = true\n state.isPlaying = true\n state.isMuted = payload.isMuted || state.isMuted\n state.selectedChannel = payload.selectedChannel || state.selectedChannel\n state.isFullscreen = false\n state.isPendingBetsDrawerOpen = false\n\n state.raceReplayKey = payload.raceReplayKey || state.raceReplayKey\n\n const raceReplayUrl = payload.raceReplayUrl || state.raceReplayUrl\n state.raceReplayUrlChanged = raceReplayUrl != state.raceReplayUrl\n state.raceReplayUrl = raceReplayUrl\n state.raceReplayTitle = payload.raceReplayTitle || state.raceReplayTitle\n state.raceReplayMeetingDate = payload.raceReplayMeetingDate || state.raceReplayMeetingDate\n },\n\n setCloseSkyVideoPlayer(\n state,\n { payload = { shouldTrack: true } }: PayloadAction<{ shouldTrack: boolean } | undefined>\n ) {\n if (state.isPlayerOpen && payload.shouldTrack) trackVisionClosed()\n state.isPlayerOpen = false\n\n resetRaceReplayState(state)\n },\n\n setSkyDockedPlayerHeight(state, { payload }: PayloadAction) {\n state.dockedPlayerHeight = payload\n },\n\n resetSkyVideoPlayerPersistedState(state) {\n state.isPlayerOpen = skyVideoPlayerInitialState.isPlayerOpen\n state.selectedChannel = skyVideoPlayerInitialState.selectedChannel\n state.isPlaying = skyVideoPlayerInitialState.isPlaying\n state.isMuted = skyVideoPlayerInitialState.isMuted\n\n resetRaceReplayState(state)\n },\n\n setRaceReplayElapsedSeconds(state, { payload }: PayloadAction) {\n state.raceReplayElapsedSeconds = Math.ceil(payload)\n },\n\n setRaceReplayDurationSeconds(state, { payload }: PayloadAction) {\n state.raceReplayDurationSeconds = Math.ceil(payload)\n },\n },\n})\n\nfunction resetRaceReplayState(state: SkyVideoPlayerState) {\n state.raceReplayKey = skyVideoPlayerInitialState.raceReplayKey\n state.raceReplayUrl = skyVideoPlayerInitialState.raceReplayUrl\n\n state.raceReplayTitle = skyVideoPlayerInitialState.raceReplayTitle\n state.raceReplayMeetingDate = skyVideoPlayerInitialState.raceReplayMeetingDate\n\n state.raceReplayElapsedSeconds = skyVideoPlayerInitialState.raceReplayElapsedSeconds\n state.raceReplayDurationSeconds = skyVideoPlayerInitialState.raceReplayDurationSeconds\n}\n\nexport const {\n resetSkyVideoPlayerPersistedState,\n setIsFullscreen,\n setIsPlaying,\n setSkyVideoPlayerStatus,\n setCloseSkyVideoPlayer,\n setIsPendingBetsDrawerOpen,\n setCanRenderPendingBetsDrawer,\n setIsMuted,\n setSelectedChannel,\n setIsControlShowing,\n setEntitlementStatus,\n setSkyDockedPlayerHeight,\n\n setRaceReplayDurationSeconds,\n setRaceReplayElapsedSeconds,\n} = skyVideoPlayerSlice.actions\n\nconst persistKeys: StateKeys[] =\n isReactNativeApp && AppVersion && Number(AppVersion.split('.')[0]) >= 221\n ? ['isPlayerOpen', 'selectedChannel', 'isPlaying', 'isMuted']\n : []\n\nexport default persistReducer(\n {\n key: 'sky-player',\n whitelist: persistKeys,\n storage,\n debug: !PRODUCTION,\n },\n skyVideoPlayerSlice.reducer\n)\n\n// =====\n// Types\n// =====\n\nexport interface SkyVideoPlayerState {\n selectedChannel: ChannelType\n playerStatus: 'floating' | 'docked' | 'fullscreen'\n previousPlayerStatus: 'floating' | 'docked' | 'fullscreen'\n isPlayerOpen: boolean\n isPlaying: boolean\n isMuted: boolean\n isFullscreen: boolean\n isControlShowing: boolean\n isEntitled: null | boolean\n dockedPlayerHeight: null | number\n notEntitledMessage?: string\n isPendingBetsDrawerOpen: boolean\n canRenderPendingBetsDrawer: boolean\n\n raceReplayKey: string\n raceReplayUrl: string\n raceReplayUrlChanged: boolean\n raceReplayTitle: RaceReplayTitle | undefined\n raceReplayMeetingDate: string\n raceReplayElapsedSeconds: number\n raceReplayDurationSeconds: number\n}\n\ntype SetSkyVideoPlayerStatusOptions = Partial<\n Pick<\n SkyVideoPlayerState,\n | 'playerStatus'\n | 'selectedChannel'\n | 'isMuted'\n | 'raceReplayKey'\n | 'raceReplayUrl'\n | 'raceReplayTitle'\n | 'raceReplayMeetingDate'\n >\n>\n\ntype StateKeys = keyof SkyVideoPlayerState\n","import type { RootState } from '@core/Store'\n\nexport const selectIsSkyVideoPlayerOpen = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.isPlayerOpen\n\nexport const selectIsVideoPlayerFloating = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.playerStatus === 'floating'\n\nexport const selectIsDockedSkyVideoPlayerOpen = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.playerStatus === 'docked' && skyVideoPlayer.isPlayerOpen\n\nexport const selectDockedPlayerHeight = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.dockedPlayerHeight\n\nexport const selectCanRenderPendingBetsDrawer = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.canRenderPendingBetsDrawer\n\nexport const selectIsPendingBetsDrawerOpen = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.isPendingBetsDrawerOpen\n\nexport const selectVideoPlayerChannel = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.selectedChannel\n\nexport const selectVideoPlayerStatus = ({ skyVideoPlayer }: RootState) =>\n skyVideoPlayer.playerStatus\n\nexport const selectRaceReplay = ({ skyVideoPlayer }: RootState) => ({\n trackName: skyVideoPlayer.raceReplayTitle?.trackName,\n raceNumber: skyVideoPlayer.raceReplayTitle?.raceNumber,\n meetingDate: skyVideoPlayer.raceReplayMeetingDate,\n})\n","import {\n type EventKey,\n trackEvent,\n trackKey,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { debounceFn } from '@mobi/utils/functions'\nimport type { SkyVideoPlayerState } from './Store'\nimport { RaceCodesLowerCase } from '../Racing/Types/MeetingInformation'\n\nexport const trackVisionOpened = (\n opts: { channel: SkyVideoPlayerState['selectedChannel'] } & (\n | { openLocation: 'bottom-navigation'; headerState?: never }\n | { openLocation: 'race-card' | 'form'; headerState: 'sticky' | 'default' }\n | { openLocation: 'sky-page'; headerState?: 'sticky' | 'default' }\n ) & { raceCode?: RaceCodesLowerCase }\n) => {\n trackEvent(analyticsKeys.visionOpened, opts)\n}\n\nexport const trackVisionClosed = () => {\n trackKey(analyticsKeys.visionClosed)\n}\n\nexport const trackFullScreenOn = debounceFn(() => {\n trackKey(analyticsKeys.visionFullScreenOn)\n}, 1000)\n\nexport const trackFullScreenOff = debounceFn(() => {\n trackKey(analyticsKeys.visionFullScreenOff)\n}, 1000)\n\nexport const trackVisionUnMute = debounceFn(() => {\n trackKey(analyticsKeys.visionUnMuted)\n}, 1000)\n\nexport const trackVisionMute = debounceFn(() => {\n trackKey(analyticsKeys.visionMuted)\n}, 1000)\n\nexport const trackSelectedChannel = (channel: SkyVideoPlayerState['selectedChannel']) => {\n const keys: Record = {\n Sky1: analyticsKeys.visionSky1Selected,\n Sky2: analyticsKeys.visionSky2Selected,\n RacingWA: analyticsKeys.visionRacingWASelected,\n Replay: analyticsKeys.visionRaceReplaySelected,\n }\n trackKey(keys[channel])\n}\n","import { useSelector } from 'react-redux'\nimport { useFeature } from '@core/Utils/hooks/useFeature'\nimport { getNewSportsSetting } from '@core/Areas/Settings/Store/selectors'\n\nexport const useIsFobSportsFeatureActive = () => {\n const isNewSportsFeatureSettingActive = useSelector(getNewSportsSetting)\n const isNewSportsFeatureActive = useFeature('FIXED_ODDS_SPORTS')\n\n return isNewSportsFeatureActive && isNewSportsFeatureSettingActive\n}\n","export const StructuredSearchRoute = 'smart-form'\n","import { createSlice } from '@reduxjs/toolkit'\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nconst toolboxInitialState = {\n isReactQueryDevToolsEnabled: false,\n}\n\nconst toolboxSlice = createSlice({\n name: 'toolbox',\n initialState: toolboxInitialState,\n reducers: {\n toggleReactQueryDevTools(state) {\n state.isReactQueryDevToolsEnabled = !state.isReactQueryDevToolsEnabled\n },\n },\n})\n\nexport const { toggleReactQueryDevTools } = toolboxSlice.actions\n\nexport default persistReducer(\n {\n key: 'toolbox',\n storage,\n },\n toolboxSlice.reducer\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SuggestionsContainerStyled = styled.div({\n backgroundColor: hexColors.white,\n border: `1px solid ${hexColors.veryLightGrey}`,\n borderTop: 0,\n boxSizing: 'border-box',\n margin: '-1rem 0 1rem 0',\n width: '100%',\n\n '& ul': {\n // override user-agent styles for the
      \n listStyle: 'none',\n margin: 0,\n padding: 0,\n },\n\n '&:empty': {\n border: 0,\n },\n})\n\nexport const SuggestionStyled = styled.div<{ isHighlighted: boolean }>(({ isHighlighted }) => ({\n backgroundColor: isHighlighted ? hexColors.gainsboro : undefined,\n padding: '1rem',\n fontSize: '1.4rem',\n}))\n","import React from 'react'\nimport Autosuggest, { type ChangeEvent } from 'react-autosuggest'\nimport { Signal, createSignal, attachDriver } from 'rwwa-rx-state-machine'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport { SuggestionStyled, SuggestionsContainerStyled } from './Autocomplete.styles'\nimport { InputBoxStyled, ValidationErrorStyled } from '@mobi/component-library/Common/Input'\n\nexport interface AutocompleteProps {\n id: string\n inputProps: Partial>\n selection: TSuggestion | null\n errorMessage: string | boolean\n autoFocus?: boolean\n backgroundColor?: string\n placeholder?: string\n fontFamily?: string\n disabled?: boolean\n getSuggestionValue: Autosuggest.GetSuggestionValue\n getSuggestionsForInputValue: (inputValue: string) => TSuggestion[] | Promise\n onSelection: (suggestion: TSuggestion | null) => void\n}\n\ninterface AutocompleteState {\n inputValue: string\n selection: TSuggestion | null\n suggestions: TSuggestion[]\n}\n\ninterface AutocompleteRecord\n extends TypedRecord>,\n AutocompleteState {}\n\nexport class Autocomplete extends React.Component, AutocompleteState> {\n private defaultState: AutocompleteState = {\n inputValue: '',\n selection: null,\n suggestions: [],\n }\n\n private autocomplete$: Rx.Observable> | undefined\n private sub: Rx.IDisposable | undefined\n\n private ChangeInput = createSignal(`ChangeInput-${this.props.id}`)\n private ClearSuggestions = createSignal(`ClearSuggestions-${this.props.id}`)\n private GetSuggestions = createSignal(`GetSuggestions-${this.props.id}`)\n private SetSuggestions = createSignal(`SetSuggestions-${this.props.id}`)\n private ChangeSelection = createSignal(`ChangeSelection-${this.props.id}`)\n private BlurInput = createSignal(`BlurInput-${this.props.id}`)\n private Initialize = createSignal(`Initialize-${this.props.id}`)\n private Update = createSignal(`Update-${this.props.id}`)\n\n constructor(props: AutocompleteProps) {\n super(props)\n this.state = this.defaultState\n }\n\n public componentDidMount(): void {\n this.autocomplete$ = attachDriver({\n driver: this.driver,\n path: `autocomplete-${this.props.id}`,\n })\n this.sub = this.autocomplete$.subscribe(x => {\n this.setState({\n inputValue: x.inputValue,\n suggestions: x.suggestions,\n selection: (x.toJS() as AutocompleteState).selection, // toJS unwraps the `selection: Immutable.Map` into just `selection: T | null`\n })\n })\n\n this.Initialize(this.props.selection)\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps): void {\n if (this.props.selection !== prevProps.selection) {\n this.Update(this.props.selection)\n }\n }\n\n public componentWillUnmount(): void {\n if (this.sub) {\n this.sub.dispose()\n }\n }\n\n public render(): JSX.Element {\n const Auto = Autosuggest as unknown as React.JSXElementConstructor>\n\n const { inputValue, suggestions } = this.state\n const {\n autoFocus,\n errorMessage,\n backgroundColor,\n placeholder,\n fontFamily,\n disabled,\n ...autosuggestProps\n } = this.props\n\n const mergedProps = {\n ...autosuggestProps,\n focusInputOnSuggestionClick: false, // don't restore focus as it would show keyboard on mobile\n suggestions,\n inputProps: {\n ...this.props.inputProps,\n value: inputValue || '', // can't be null, complains about changing from controlled to uncontrolled component\n type: 'search',\n onChange: (event: ChangeEvent, changeEvent: ChangeEvent) => {\n this.ChangeInput(changeEvent.newValue)\n if (this.props.inputProps.onChange) {\n // @ts-expect-error Library type issue\n this.props.inputProps.onChange(event, changeEvent)\n }\n },\n // @ts-expect-error Library type issue\n onBlur: (event: React.FocusEvent, { highlightedSuggestion }) => {\n this.BlurInput(highlightedSuggestion)\n if (this.props.inputProps.onBlur) {\n this.props.inputProps.onBlur(event)\n }\n },\n },\n onSuggestionsFetchRequested: ({ value }: Record) =>\n this.GetSuggestions(value),\n onSuggestionsClearRequested: () => this.ClearSuggestions(),\n // @ts-expect-error Library type issue\n onSuggestionSelected: (_, { suggestion }) => this.ChangeSelection(suggestion),\n // @ts-expect-error Library type issue\n renderSuggestion: (suggestion, { isHighlighted }) => (\n \n {this.props.getSuggestionValue(suggestion)}\n \n ),\n renderInputComponent: (propsForInput: Record) => (\n \n ),\n // @ts-expect-error Library type issue\n renderSuggestionsContainer: ({ containerProps, children }) => (\n {children}\n ),\n }\n\n return (\n
      \n \n {suggestions.length === 0 && errorMessage && (\n {errorMessage}\n )}\n
      \n )\n }\n\n private driver: (state: AutocompleteRecord, signal: Signal) => AutocompleteRecord = (\n state = recordify, AutocompleteRecord>(this.defaultState),\n signal: Signal\n ) => {\n switch (signal.tag) {\n case this.ClearSuggestions: {\n return state.set('suggestions', [])\n }\n\n case this.SetSuggestions: {\n return state.set('suggestions', signal.data)\n }\n\n case this.GetSuggestions: {\n const suggestions = this.props.getSuggestionsForInputValue(state.inputValue)\n if (suggestions instanceof Promise) {\n suggestions\n .then(results => this.SetSuggestions(results))\n .catch(() => {\n /* leave suggestions as they are */\n })\n return state\n }\n\n return state.set('suggestions', suggestions)\n }\n\n case this.ChangeInput: {\n // set the input value and remove any existing selection\n if (state.get('selection') !== null) {\n this.props.onSelection(null)\n const newInputValue = getInputDifference(state.get('inputValue'), signal.data)\n return state.merge({\n inputValue: newInputValue,\n selection: null,\n })\n }\n return state.merge({\n inputValue: signal.data,\n })\n }\n\n case this.BlurInput: {\n const hasSelection = state.get('selection') !== null\n const highlightedSuggestion = signal.data\n\n if (hasSelection && !highlightedSuggestion) {\n return state\n }\n\n if (highlightedSuggestion) {\n this.props.onSelection(highlightedSuggestion)\n return state.set('selection', highlightedSuggestion)\n }\n\n this.props.onSelection(null)\n return state.merge({\n inputValue: '',\n selection: null,\n })\n }\n\n case this.ChangeSelection: {\n this.props.onSelection(signal.data)\n return state.set('selection', signal.data)\n }\n\n case this.Update: {\n const selection: T | null = signal.data\n\n if (!selection) {\n return state\n }\n\n return state.merge({\n selection,\n inputValue: selection ? this.props.getSuggestionValue(selection) : '',\n })\n }\n\n case this.Initialize: {\n const selection: T | null = signal.data\n\n return state.merge({\n selection,\n inputValue: selection ? this.props.getSuggestionValue(selection) : '',\n })\n }\n\n default:\n return state\n }\n }\n}\n\nfunction getInputDifference(inputValuePrevious: string, inputValue: string) {\n const previousInput: string[] = inputValuePrevious.split('')\n const currentInput: string[] = inputValue.split('')\n\n if (currentInput.length >= previousInput.length) {\n return currentInput.reduce(\n (acc, val, idx) => (val !== previousInput[idx] && acc === '' ? val : acc),\n ''\n )\n }\n return ''\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { colors, measurements } from '@mobi/component-library/Theme/Common'\n\ntype BackgroundColors = 'white' | 'grey' | 'black' | 'surface50' | 'surface300'\n\nconst containerColors: Record = {\n grey: hexColors.gainsboro,\n black: hexColors.black,\n white: colors.white,\n surface50: colors.surface[50],\n surface300: colors.surface[300],\n}\n\nexport interface MainContainerProps {\n background?: BackgroundColors\n padding?: string\n forceSizing?: boolean\n}\n\nexport const MainContainerStyled = styled.section(\n {\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: '80em',\n margin: '0 auto',\n },\n\n ({ background, padding, forceSizing = true }) => ({\n backgroundColor: background ? containerColors[background] : undefined,\n minWidth: forceSizing ? measurements.mobi.minWidth : undefined,\n minHeight: forceSizing ? `calc(100vh - ${measurements.mobi.headerHeight})` : undefined,\n padding,\n })\n)\n","import styled, { CSSObject } from '@emotion/styled'\n\ntype Props = {\n gutterSize?: string\n}\n\n/**\n * scrollable should be set to true when dealing with scrollable areas\n *\n * @see https://web.archive.org/web/20170707053030/http://www.brunildo.org/test/overscrollback.html\n */\ntype GapXProps = Props & {\n scrollable?: boolean\n}\n\nconst DEFAULT_GUTTER_SIZE = '1rem'\n\nexport const GapX = styled.div(props => makeGapXCSS(props))\n\nexport const GapY = styled.div(({ gutterSize = DEFAULT_GUTTER_SIZE }) => ({\n '> *:not(:last-child)': {\n marginBottom: gutterSize,\n },\n}))\n\nexport function makeGapXCSS({\n gutterSize = DEFAULT_GUTTER_SIZE,\n scrollable = false,\n}: GapXProps): CSSObject {\n const margin: CSSObject = {\n marginRight: gutterSize,\n }\n\n const selector = scrollable ? '> *' : '> *:not(:last-child)'\n\n return {\n [selector]: margin,\n }\n}\n","import React from 'react'\nimport Rx from 'rx'\nimport { Loading, Errored, ErroredInstance, State, Repository } from 'rwwa-data-access'\nimport { logError } from '../../Utils'\n\n/** @deprecated DO NOT USE */\nexport function connect<\n // Ensure that TSpecification is a map of Repos\n TSpecification extends {\n [K in keyof TSpecification]: Repository\n },\n>(specification: TSpecification) {\n // The type of values passed to the inner component from data access\n type TAccessed = {\n [K in keyof TSpecification]: TSpecification[K]['__type_marker__'] | Loading | Errored\n }\n\n // The keys we require to use this component\n type TRemoteKeys = {\n [K in keyof TSpecification]: string\n }\n\n const keys = Object.keys(specification)\n // @ts-expect-error Legacy - deprecated\n const repos = keys.map(key => specification[key] as Repository)\n\n type Observed = { key: string; state: State }[]\n const latest$: Rx.Observable = Rx.Observable.combineLatest(\n repos.map(repo => repo.data$),\n (...latest) => latest.map((value, index) => ({ key: keys[index], state: value }))\n )\n\n function factory(\n Inner: React.FC\n ): React.ComponentClass\n function factory(\n Inner: React.ComponentClass\n ): React.ComponentClass\n function factory(\n Inner: React.FC | React.ComponentClass\n ) {\n return class extends React.Component {\n private subscription?: Rx.IDisposable\n\n constructor(props: Readonly) {\n super(props)\n this.state = { currentState: null }\n }\n\n public UNSAFE_componentWillMount() {\n this.subscription = latest$.subscribe(latest => {\n try {\n this.setState({ currentState: latest })\n } catch (e) {\n logError(e as Error)\n }\n })\n }\n\n public componentWillUnmount() {\n if (this.subscription) {\n this.subscription.dispose()\n }\n }\n\n public shouldComponentUpdate(\n nextProps: Readonly,\n nextState: { currentState: Observed }\n ) {\n if (this.props !== nextProps) {\n if (JSON.stringify(this.props) !== JSON.stringify(nextProps)) {\n return true\n }\n }\n\n if (!this.state.currentState || !nextState.currentState) {\n return true\n }\n\n return (\n this.state.currentState.length !== nextState.currentState.length ||\n !this.state.currentState.every(\n (map, index) => map.state === nextState.currentState[index].state\n )\n )\n }\n\n public render() {\n if (this.state.currentState === null) {\n return
      \n }\n\n const props = { ...(this.props as object) }\n\n this.state.currentState.forEach(specRow => {\n const resourceKey = (this.props as Record)[specRow.key] as string\n\n if (resourceKey) {\n const instance = (\n (specification as Record)[specRow.key] as Repository\n ).getFrom(specRow.state, resourceKey)\n ;(props as Record)[specRow.key] = instance\n } else {\n ;(props as Record)[specRow.key] = ErroredInstance\n }\n })\n\n return React.createElement(Inner, props as unknown as null)\n }\n }\n }\n\n return factory\n}\n","import React from 'react'\nimport Rx from 'rx'\nimport { Record } from 'immutable'\n\nexport interface ObserveHOCState {\n currentValue: TObservedValue\n hasReceivedValue: boolean\n}\n\nexport function observeImmutable(\n observable$: Rx.Observable,\n WrappedComponent:\n | React.ComponentClass<{ record: TRecord } & TProps>\n | React.FC<{ record: TRecord } & TProps>\n) {\n {\n return observe<{ record: TRecord }, TProps>(\n observable$.select((record: TRecord) => ({ record })),\n WrappedComponent\n )\n }\n}\n\nexport function observe(\n observable$: Rx.Observable,\n WrappedComponent:\n | React.ComponentClass\n | React.FC\n) {\n return class ObservableHOC extends React.Component> {\n sub: Rx.Disposable | undefined\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(props: any) {\n super(props)\n this.state = { currentValue: null as TObservedValue, hasReceivedValue: false }\n }\n\n public UNSAFE_componentWillMount() {\n this.sub = observable$.distinctUntilChanged().subscribe(x => {\n this.setState({ currentValue: x, hasReceivedValue: true })\n })\n }\n\n public componentWillUnmount() {\n if (this.sub) this.sub.dispose()\n }\n\n public render() {\n if (this.state.hasReceivedValue) {\n if (!PRODUCTION) {\n if (this.state.currentValue instanceof Record) {\n return (\n \n Cannot spread an immutable record as properties of a component. Provide a nested\n object or use observeImmutable.\n \n )\n }\n }\n return \n }\n return null\n }\n }\n}\n","import styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { TransitionStatus } from 'react-transition-group'\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\nimport { lessOrEqualThan } from '@mobi/component-library/Utils/media'\nimport { QUICKBET_MODAL_ID } from '@core/Areas/Quickbet/constants'\nimport { ModalItem } from './types'\nimport { BET_SLIP_BUTTON_ID } from '@core/Areas/AppHeader/Components/MyBetsButtons/Components/BetSlipButton/constants'\n\nconst enum LocalConstants {\n BezierUp = 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n BezierDown = 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n}\n\nexport const ANIMATION_DURATION_MS = 400\n\nexport const ModalScreenCoverStyled = styled('div')({\n position: 'fixed',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n top: 0,\n bottom: 0,\n width: '100%',\n zIndex: layering.modalOverlay,\n // Prevent iPhone zooming when tapping buttons quickly\n touchAction: 'manipulation',\n})\n\nexport const ModalPositionStyled = styled('div')<{ position: ModalItem['position'] }>(\n {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: '48rem',\n minHeight: '10rem',\n margin: '0 auto',\n backgroundColor: 'transparent',\n willChange: 'auto',\n },\n ({ position = 'bottom' }) => ({\n justifyContent: { bottom: 'flex-end', middle: 'center' }[position],\n })\n)\n\nexport const ModalAnimationContainerStyled = styled('div')<{\n status: TransitionStatus\n exitAnimation?: ModalItem['exitAnimation']\n}>(\n {\n position: 'relative',\n zIndex: 2,\n padding: '0 1.5rem 1.5rem',\n [lessOrEqualThan('px350')]: {\n padding: 0,\n },\n\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n },\n ({ status, exitAnimation }) => {\n if (status === 'entering') {\n return {\n animation: `${moveUp} ${ANIMATION_DURATION_MS}ms ${LocalConstants.BezierUp} forwards`,\n }\n }\n\n if (status === 'exiting') {\n return {\n animation:\n exitAnimation && Object.prototype.hasOwnProperty.call(customAnimations, exitAnimation)\n ? customAnimations[exitAnimation]()\n : `${moveDown} ${ANIMATION_DURATION_MS}ms ${LocalConstants.BezierDown} forwards`,\n }\n }\n\n return undefined\n }\n)\n\nexport const ModalContentContainerStyled = styled('div')<{ cornerStyle: ModalItem['cornerStyle'] }>(\n {\n overflow: 'hidden',\n position: 'relative',\n backgroundColor: hexColors.white,\n },\n ({ cornerStyle = 'square' }) =>\n cornerStyle === 'round' && {\n maskImage: 'radial-gradient(white, black)',\n borderRadius: '1rem',\n }\n)\n\nexport const ModalCloseButtonStyled = styled('button')>(\n {\n position: 'absolute',\n top: 0,\n right: 0,\n width: '5.5rem',\n height: '4rem',\n padding: 0,\n border: 0,\n backgroundColor: 'transparent',\n fontSize: '1.6rem',\n },\n ({ color = 'light' }) => ({\n color: color === 'light' ? hexColors.black : hexColors.white,\n })\n)\n\nexport const ModalBackgroundStyled = styled('div')<{ status: TransitionStatus }>(\n {\n position: 'absolute',\n zIndex: 1,\n top: 0,\n bottom: 0,\n width: '100%',\n opacity: 0,\n transition: `opacity ${ANIMATION_DURATION_MS}ms linear`,\n background: 'rgba(0, 0, 0, 0.7)',\n },\n ({ status }) => {\n if (status === 'exiting') {\n return {\n animation: `${fadeOut} ${ANIMATION_DURATION_MS}ms ${LocalConstants.BezierDown} forwards`,\n }\n } else {\n return {\n animation: `${fadeIn} ${ANIMATION_DURATION_MS}ms ${LocalConstants.BezierUp} forwards`,\n }\n }\n }\n)\n\nconst moveUp = keyframes({ from: { transform: 'translateY(100%)' } })\nconst moveDown = keyframes({ to: { transform: 'translateY(100%)' } })\nconst fadeIn = keyframes({ to: { opacity: 1 } })\nconst fadeOut = keyframes({ from: { opacity: 1 } })\n\n// =================\n// Animation Helpers\n// =================\n\nconst customAnimations = {\n addToBetslip: () =>\n modalAnimation(\n document.getElementById(QUICKBET_MODAL_ID),\n document.querySelector('#betslipButton') || document.getElementById(BET_SLIP_BUTTON_ID)\n ),\n}\n\ntype ModalAnimationElement = HTMLElement | null\nconst modalAnimation = (source: ModalAnimationElement, target: ModalAnimationElement) => {\n if (!source || !target) return `${fadeOut} ${ANIMATION_DURATION_MS + 50}ms linear forwards`\n\n const {\n left: sourceLeft,\n top: sourceTop,\n height: sourceHeight,\n width: sourceWidth,\n } = source.getBoundingClientRect()\n const {\n left: targetLeft,\n top: targetTop,\n height: targetHeight,\n width: targetWidth,\n } = target.getBoundingClientRect()\n\n const scale = targetHeight / sourceHeight\n const translateX = Math.floor(targetLeft - sourceLeft - sourceWidth / 2 + targetWidth / 2)\n const translateY = Math.floor(targetTop - sourceTop - sourceHeight / 2 + targetHeight)\n\n const translateToTarget = keyframes({\n to: {\n transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,\n opacity: 0.5,\n },\n })\n\n return `${translateToTarget} ${ANIMATION_DURATION_MS + 50}ms linear forwards`\n}\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Transition, TransitionGroup, TransitionStatus } from 'react-transition-group'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useAppSelector } from '@core/Store/hooks'\nimport {\n ANIMATION_DURATION_MS,\n ModalScreenCoverStyled as ScreenCover,\n ModalPositionStyled as Position,\n ModalAnimationContainerStyled as AnimationContainer,\n ModalContentContainerStyled as ContentContainer,\n ModalBackgroundStyled as Background,\n ModalCloseButtonStyled as CloseButton,\n} from './Modal.styles'\nimport type { ModalItem } from './types'\nimport { closeModal } from './store'\n\n/** Handles rendering of open modal instances */\n/** @deprecated - Use Overlays/Modal/Modal.tsx instead */\nexport const ModalContainer: React.FC = () => {\n const items = useAppSelector(rootState => rootState.modal.items)\n\n return (\n \n {items.map(item => (\n \n {status => }\n \n ))}\n \n )\n}\n\n// Single modal instance\nconst Modal = ({\n status,\n item: {\n id,\n modalComponent,\n modalComponentProps,\n color,\n exitAnimation,\n isDismissable = true,\n onCloseCallback,\n position,\n cornerStyle,\n },\n}: {\n status: TransitionStatus\n item: ModalItem\n}) => {\n const modalContainerRef = useBodyScrollLock()\n const dispatch = useDispatch()\n\n const handleClose = () => {\n if (status !== 'entering' && isDismissable) dispatch(closeModal({ id }))\n }\n\n React.useEffect(() => {\n return onCloseCallback\n }, [onCloseCallback])\n\n return (\n \n \n \n \n {isDismissable && (\n \n \n \n )}\n\n \n \n \n \n\n \n \n )\n}\n\n// React.memo w/ areEqual = true ensures no further renders of modal content after mount\nconst Content = React.memo(\n ({\n content,\n contentProps = {},\n }: {\n content: React.ElementType\n contentProps?: Record\n }) => {\n const Content = content\n return \n },\n () => true\n)\n\nContent.displayName = 'Modal.Content'\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { ModalItem } from './types'\n\n// =============\n// Async actions\n// =============\n\n// Used to set exit animation before removal\n/** @deprecated - Use Overlays/Modal/Modal.tsx instead */\nexport const closeModal = createAsyncThunk(\n 'modal/closeModal',\n ({ id, exitAnimation }: CloseModalArgs, thunkAPI) => {\n if (exitAnimation) thunkAPI.dispatch(modalSlice.actions.setExitAnimation({ id, exitAnimation }))\n return { id }\n }\n)\n\n// =====\n// Store\n// =====\n\nconst modalInitialState: ModalStore = {\n items: [],\n}\n\nconst modalSlice = createSlice({\n name: 'modal',\n initialState: modalInitialState,\n reducers: {\n openModal({ items }, { payload }: PayloadAction) {\n const index = items.findIndex(item => item.id === payload.id)\n if (index === -1) {\n items.push(payload)\n } else {\n items[index] = payload\n }\n },\n preventDismissal({ items }, { payload }: PayloadAction) {\n items.filter(item => item.id === payload).map(item => (item.isDismissable = false))\n },\n allowDismissal({ items }, { payload }: PayloadAction) {\n items.filter(item => item.id === payload).map(item => (item.isDismissable = true))\n },\n setExitAnimation(state, { payload: { id, exitAnimation } }: SetExitAnimationArgs) {\n const item = state.items.find(item => item.id === id)\n if (item) item.exitAnimation = exitAnimation\n },\n closeAllModals(state) {\n state.items = []\n },\n },\n extraReducers: builder => {\n builder.addCase(closeModal.fulfilled, (state, action) => {\n state.items = state.items.filter(item => item.id !== action.payload.id)\n })\n },\n})\n\n/** @deprecated - Use Overlays/Modal/Modal.tsx instead */\nexport const { openModal, closeAllModals, preventDismissal, allowDismissal } = modalSlice.actions\nexport default modalSlice.reducer\n\n// =====\n// Types\n// =====\n\nexport interface ModalStore {\n items: ModalItem[]\n}\n\ntype CloseModalArgs = Pick\ntype SetExitAnimationArgs = PayloadAction>\n","import styled from '@emotion/styled'\nimport { measurements, layering } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\nimport { AppHeaderButtonStyled } from '@core/Areas/AppHeader/Components/Buttons/Buttons.styles'\n\ntype Props = {\n layer: typeof layering.overlayLow | typeof layering.overlayHigh\n}\n\nexport const OverlayStyled = styled.div(({ layer }) => ({\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: layer ?? layering.overlayLow,\n width: '100%',\n maxWidth: '80em',\n margin: '0 auto',\n background: hexColors.white,\n display: 'flex',\n flexDirection: 'column',\n}))\n\nexport const OverlayHeaderStyled = styled.div({\n width: '100%',\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n height: measurements.mobi.headerHeight,\n minHeight: measurements.mobi.headerHeight,\n background: hexColors.blueDiamond,\n})\n\nexport const OverlayHeadingStyled = styled.h1({\n marginLeft: '1rem',\n fontSize: '1.8rem',\n textTransform: 'uppercase',\n color: hexColors.white,\n})\n\nexport const OverlayCloseButtonStyled = styled(AppHeaderButtonStyled)({\n marginLeft: 'auto',\n})\n","import React from 'react'\nimport anime from 'animejs'\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport Transition, { type TransitionStatus } from 'react-transition-group/Transition'\nimport { observeImmutable } from '../HOCs'\nimport { type OverlayStateRecord, state$, type OverlayState } from './OverlayDriver'\nimport { OverlayReset } from './signals'\nimport { OverlayStyled } from './Overlay.styles'\n\nconst ANIMATION_DURATION = 150\nconst ANIMATION_OPACITY = { entering: [0, 1], exiting: [1, 0] }\nconst ANIMATION_TRANSLATEY = { entering: ['3rem', 0], exiting: [0, '3rem'] }\n\ntype ChildProps = {\n status: TransitionStatus\n layer: typeof layering.overlayLow | typeof layering.overlayHigh\n children: React.ReactNode\n}\n\nclass OverlayChild extends React.Component {\n private overlayRef = React.createRef()\n\n public componentDidUpdate() {\n const currentStatus = this.props.status\n\n if (currentStatus === 'entering' || currentStatus === 'exiting') {\n anime({\n targets: this.overlayRef.current,\n opacity: {\n value: ANIMATION_OPACITY[currentStatus],\n duration: ANIMATION_DURATION / 2,\n },\n translateY: {\n value: ANIMATION_TRANSLATEY[currentStatus],\n },\n easing: 'easeOutQuart',\n duration: ANIMATION_DURATION,\n delay: 20,\n })\n }\n }\n\n public componentWillUnmount() {\n OverlayReset()\n }\n\n public render() {\n return (\n \n {this.props.children}\n \n )\n }\n}\n\nexport const OverlayComponent = ({ isOpen, Component, layer }: OverlayState): JSX.Element => (\n \n {status => {\n return (\n \n {Component && }\n \n )\n }}\n \n)\n\n/** Used by Betslip, Search */\nexport const Overlay = observeImmutable(\n state$,\n ({ record: { Component, isOpen, layer } }) => (\n \n )\n)\n","import type { ElementType } from 'react'\nimport { attachDriver, type Signal } from 'rwwa-rx-state-machine'\nimport { makeTypedFactory, type TypedRecord } from 'typed-immutable-record'\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { OverlayClose, OverlayOpen, OverlayReset } from './signals'\nimport type { OverlayOpenProps } from '@core/Components/Overlay/types'\n\nexport interface OverlayState {\n Component: ElementType | null\n layer: typeof layering.overlayLow | typeof layering.overlayHigh\n isOpen: boolean\n}\nexport const defaultState: OverlayState = {\n Component: null,\n layer: layering.overlayLow,\n isOpen: false,\n}\n\nexport interface OverlayStateRecord extends TypedRecord, OverlayState {}\nconst OverlayStateFactory = makeTypedFactory(defaultState)\n\nexport const driver = (state = OverlayStateFactory(), signal: Signal) => {\n switch (signal.tag) {\n case OverlayOpen: {\n const data: OverlayOpenProps | null = signal.data\n\n if (data !== null && typeof data !== 'string' && 'layer' in data) {\n return state.merge({\n Component: data.Component,\n layer: data.layer,\n isOpen: true,\n })\n }\n\n return state.merge({\n Component: data,\n layer: layering.overlayLow,\n isOpen: true,\n })\n }\n\n case OverlayClose: {\n return state.merge({\n isOpen: false,\n })\n }\n\n case OverlayReset: {\n return state.merge({\n ...defaultState,\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({ driver, path: `Overlay-React` })\n","import { createSignal } from 'rwwa-rx-state-machine'\nimport type { OverlayOpenProps } from '@core/Components/Overlay/types'\n\nexport const OverlayOpen = createSignal('OverlayOpen')\nexport const OverlayClose = createSignal('OverlayClose')\nexport const OverlayReset = createSignal('OverlayReset')\n","import styled from '@emotion/styled'\nimport type { CSSProperties } from 'react'\nimport { hexColors } from '@mobi/settings'\n\nexport interface PopupThemeSettings {\n popup: {\n transform?: CSSProperties['transform']\n }\n}\n\nexport const defaultTheme: PopupThemeSettings = {\n popup: {\n transform: undefined,\n },\n}\n\nexport const PopupStyled = styled('div')<{ theme?: PopupThemeSettings }>(\n {\n backgroundColor: hexColors.white,\n boxShadow: `0 0 10px rgba(0,0,0,0.5)`,\n left: '50%',\n margin: '2rem auto 2rem -14rem',\n padding: '1rem',\n position: 'absolute',\n textAlign: 'center',\n top: '2rem',\n width: '26em',\n fontSize: '1rem',\n },\n ({ theme }) => {\n const { transform } = theme && theme.popup ? theme.popup : defaultTheme.popup\n return {\n transform,\n }\n }\n)\nPopupStyled.displayName = 'Popup'\n\nexport const PopupContainerStyled = styled('div')({\n backgroundColor: 'rgba(0,0,0,0.4)',\n left: '0',\n margin: 0,\n position: 'absolute',\n textAlign: 'center',\n top: '0',\n width: '100%',\n height: '100%',\n zIndex: 201,\n})\nPopupContainerStyled.displayName = 'PopupContainer'\n\nexport const PopupCenteredStyled = styled('div')({\n backgroundColor: hexColors.white,\n boxShadow: `0 0 10px rgba(0,0,0,0.5)`,\n position: 'fixed',\n width: '30rem',\n top: '50%',\n transform: 'translate(0, -50%)',\n left: '0',\n right: '0',\n margin: 'auto',\n})\n\nexport const PopupContainerCenteredStyled = styled('div')({\n backgroundColor: 'rgba(0,0,0,0.4)',\n top: '0',\n width: '100%',\n height: '100%',\n zIndex: 201,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n})\n\nexport interface PopupTitleStyledProps {\n isDesktop?: boolean\n}\n\nexport const PopupTitleStyled = styled('strong')(({ isDesktop }) => ({\n textAlign: 'center',\n fontSize: isDesktop ? '1.7rem' : '1.6rem',\n lineHeight: '2.4rem',\n}))\nPopupTitleStyled.displayName = 'PopupTitle'\n","import * as immutable from 'immutable'\nimport { v4 as uuid } from 'uuid'\nimport { attachDriver, Signal, createSignal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\n\nexport interface ToastItem {\n id: string\n message: string\n position?: 'top' | 'bottom'\n type?: 'default' | 'error'\n /** Number of seconds eg. 0.2, 3 or 0 for infinite */\n timeout?: number\n spinner?: boolean\n}\n\n// Signals\nexport const RegisterToast = createSignal & Pick>(\n 'RegisterToast'\n)\nexport const RemoveToast = createSignal('RemoveToast')\n\n// Driver State\nexport interface ToastDriverState {\n items: immutable.List\n}\nexport const defaultState: ToastDriverState = { items: immutable.List() }\n\nexport interface ToastStateRecord extends TypedRecord, ToastDriverState {}\nexport const ToastStateFactory = makeTypedFactory(defaultState)\n\nexport const driver = (state = ToastStateFactory(), signal: Signal): ToastStateRecord => {\n switch (signal.tag) {\n case RegisterToast: {\n if (state.items.some(item => item.id === signal.data.id)) {\n return state\n }\n return state.merge({\n items: state.items.push({ id: uuid(), position: 'bottom', ...signal.data }),\n })\n }\n\n case RemoveToast: {\n return state.merge({\n items: state.items.filter(item => item.id !== signal.data),\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({ driver, path: `Toast` })\n","import Rx from 'rx'\nimport { recordify, TypedRecord } from 'typed-immutable-record'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport { BetAccount } from '@mobi/api-types'\nimport { declareResourceType } from 'rwwa-data-access'\n\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\n\nconst BetAccountDetailsKey = 'betAccountDetails'\nexport const BetAccountKey = 'betAccountKey'\n\nexport interface BetAccountRecord extends TypedRecord, BetAccount {}\n\n/**\n * @deprecated Use useBetAccount React Query hook instead\n */\nexport const BetAccountRepo = declareResourceType({\n typeKey: BetAccountDetailsKey,\n // @ts-expect-error Legacy - use better data management solution\n fetchMultipleNoPromise,\n hardTimeToLive: 2 * 60 * 60 * 1000, // 2 hours\n map: betAccount => recordify(betAccount),\n})\n\nfunction fetchMultipleNoPromise(keys: string[]) {\n // need to check if user is logged in because otherwise a race condition can\n // cause this call to get stuck in an infinite loop\n const isLoggedInCheck = new Promise((resolve, reject) => {\n userAccountState$?.take(1).subscribe(state => {\n const isLoggedIn = state.isLoggedIn ?? false\n\n if (isLoggedIn) {\n resolve(isLoggedIn)\n } else {\n reject()\n }\n })\n })\n\n return Rx.Observable.fromPromise(\n isLoggedInCheck\n .then(() => {\n return apiService.get({ url: '/$_/api/account/getBetAccountDetails' })\n })\n .then(response => ({\n [BetAccountDetailsKey]: {\n [BetAccountKey]: response,\n },\n }))\n .then(result => ({ keys, result }))\n .catch(error => ({ keys, error }))\n )\n}\n","import Rx from 'rx'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport { declareResourceType } from 'rwwa-data-access'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport { BetAccountHolder, FullSingleBetAccountHolder } from '@mobi/api-types'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { BetAccountKey, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport {\n PrecommitmentModel,\n savePrecommitmentDetails,\n} from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\n\n// store the account's contact details under this key\nexport const ContactDetailsKey = 'me'\nconst ContactDetailsTypeKey = 'contactDetails'\n\ninterface ContactDetailsRecord extends TypedRecord, BetAccountHolder {}\n\n/** @deprecated Use react query -> useContactDetails */\nexport const ContactDetails = declareResourceType({\n typeKey: 'contactDetails',\n // @ts-expect-error Legacy - use better data management solution\n fetchMultipleNoPromise,\n hardTimeToLive: 200,\n map: x => recordify(x as BetAccountHolder),\n})\n\nfunction fetchMultipleNoPromise(keys: string[]) {\n const betAccountHolderNumber = keys[0]\n return Rx.Observable.fromPromise(\n fetchContactDetails(betAccountHolderNumber)\n .then(response => ({\n [ContactDetailsTypeKey]: {\n [betAccountHolderNumber]: response,\n },\n }))\n .then(result => ({ keys, result }))\n .catch(error => ({ keys, error }))\n )\n}\n\nexport function fetchContactDetails(\n betAccountHolderNumber: string | null\n): Promise {\n const isBetAccountHolderNumber = /^\\d+$/.test(\n (betAccountHolderNumber && betAccountHolderNumber.trim()) || ''\n )\n const url = isBetAccountHolderNumber\n ? `/$_/api/getContactDetailsForContact/${betAccountHolderNumber}`\n : '/$_/api/contactDetails'\n\n return apiService.get({ url })\n}\n\nexport interface ContactDetailsUpdateRequest {\n VerifyResidentialAddress: boolean\n VerifyPostalAddress: boolean\n ResidentialAddressMoniker: string\n PostalAddressMoniker: string\n BetAccountHolder: FullSingleBetAccountHolder\n}\n\nexport function saveContactDetails(model: ContactDetailsUpdateRequest) {\n return apiService.post<{\n isReverificationSuccess: boolean\n isContactDetailsUpdateSuccess: string\n }>({\n url: '/$_/api/contactDetails/updatedetails',\n body: model,\n })\n}\n\nexport async function savePrecommitments(model: PrecommitmentModel) {\n const onCompletion = () => {\n queryClient.removeQueries(queryKeys.depositInitialData)\n BetAccountRepo.invalidate(BetAccountKey)\n }\n await savePrecommitmentDetails(model, onCompletion)\n}\n","import Rx from 'rx'\nimport { declareResourceType, IKeyMap } from 'rwwa-data-access'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport type { Race } from '@mobi/betslip/types'\nimport { filterObject } from '../helpers'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { MeetingInformationDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/DataTransferObjects'\n\ninterface RaceMap {\n races: IKeyMap\n}\n\nexport interface RaceRecord extends TypedRecord, Race {}\n\nexport const Races = declareResourceType({\n fetchMultiple: fetchMultiple as unknown as undefined,\n typeKey: 'races',\n map: toImmutable,\n maxToKeep: 100,\n hardTimeToLive: 60000,\n})\n\nexport function createRaceObjectFromResponse(\n meetingDto: MeetingInformationDataTransferObject\n): Race {\n return {\n meetingId: meetingDto.MeetingId,\n meetingCode: meetingDto.MeetingCodeText,\n meetingDate: meetingDto.MeetingDate,\n meetingName: meetingDto.MeetingName,\n raceNumber: meetingDto.SelectedRace.RaceNumber,\n raceTime: meetingDto.SelectedRace.RaceTime,\n type: meetingDto.SelectedRace.RaceType,\n acceptorKeys: [],\n distance: meetingDto.SelectedRace.Distance,\n key: meetingDto.SelectedRace.Key,\n }\n}\n\nfunction toImmutable(race: Race): RaceRecord {\n return recordify(race).merge({\n acceptorKeys: race.acceptorKeys,\n })\n}\n\n// ti-1180: Maximum number of keys to request at a time so as not to exceed the 260 character URL limit in IIS.\n// - base url: 50 (e.g. http://tabtouch-mobi.local.rwwaq.com.au/api/races/)\n// - each key: 8 (currently 6 digits, + 1 for delimiter, + 1 to allow for growth to 7 digits)\n// - max keys: (260 - 50) / 8 = 26.5\n// (go with 10 just in case)\n\nconst MAX_KEYS_TO_REQUEST = 10\n\nfunction fetchMultiple(keys: string[]) {\n return (\n Rx.Observable.fromArray(keys)\n .bufferWithCount(MAX_KEYS_TO_REQUEST)\n .select(raceKeys => get({ url: `/api/races/${raceKeys.join(',')}` }))\n .select(promise => Rx.Observable.fromPromise(promise))\n .mergeAll() as unknown as Rx.Observable\n ).selectMany(raceMap => {\n const success = filterObject(\n raceMap.races,\n race => race.meetingName !== '-- not found --'\n ) as IKeyMap\n const success$ = Rx.Observable.just({\n keys: Object.keys(success),\n result: Promise.resolve({ races: success }),\n })\n\n const failed = filterObject(\n raceMap.races,\n race => race.meetingName === '-- not found --'\n ) as IKeyMap\n const failed$ = Rx.Observable.just({\n keys: Object.keys(failed),\n result: Promise.reject('Could not find races'),\n })\n\n // @ts-expect-error Legacy - use better data management solution\n return Rx.Observable.concat(success$, failed$)\n })\n}\n","import Rx from 'rx'\nimport { declareResourceType, IKeyMap } from 'rwwa-data-access'\nimport type { Acceptor } from '@mobi/betslip/types'\nimport { filterObject } from '../helpers'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { type TypedRecord, recordify } from 'typed-immutable-record'\n\nexport interface ImageSize {\n width: number\n height: number\n y: number\n}\nexport interface ImageUrlWithSize {\n url: string\n size: ImageSize\n}\n\nexport interface ImageUrlWithSizes {\n small: ImageUrlWithSize\n large: ImageUrlWithSize\n larger: ImageUrlWithSize\n largest: ImageUrlWithSize\n}\n\nexport interface MysteryAcceptor {\n name: string\n number: number\n}\n\ninterface AcceptorMap {\n acceptors: IKeyMap\n}\n\nexport interface AcceptorRecord extends TypedRecord, Acceptor {}\n\nexport const Acceptors = declareResourceType({\n typeKey: 'acceptors',\n // @ts-expect-error Legacy - use better data management solution\n fetchMultiple,\n map: x => recordify(x),\n maxToKeep: 100,\n hardTimeToLive: 60000,\n})\n\n// ti-1180: Maximum number of keys to request at a time so as not to exceed the 260 character URL limit in IIS.\n// - base url: 54 (e.g. http://tabtouch-mobi.local.rwwaq.com.au/api/acceptors/)\n// - each key: 11 (6 digit race key, +1 to allow for growth to 7 digits, +3 for acceptor, +1 for delimiter)\n// - max keys: (260 - 54) / 11 = 18.72\n// (go with 10 just in case)\n\nconst MAX_KEYS_TO_REQUEST = 10\n\nfunction fetchMultiple(keys: string[]) {\n return (\n Rx.Observable.fromArray(keys)\n .bufferWithCount(MAX_KEYS_TO_REQUEST)\n .select(acceptorKeys => get({ url: `/api/acceptors/${acceptorKeys.join(',')}` }))\n .select(promise => Rx.Observable.fromPromise(promise))\n .mergeAll() as unknown as Rx.Observable\n ).selectMany(acceptorMap => {\n const success = filterObject(\n acceptorMap.acceptors,\n acceptor => acceptor.name !== '-- not found --'\n ) as IKeyMap\n\n const success$ = Rx.Observable.just({\n keys: Object.keys(success),\n result: Promise.resolve({ acceptors: success }),\n })\n\n const failed = filterObject(\n acceptorMap.acceptors,\n acceptor => acceptor.name === '-- not found --'\n ) as IKeyMap\n const failed$ = Rx.Observable.just({\n keys: Object.keys(failed),\n result: Promise.reject('Could not find acceptors'),\n })\n\n // @ts-expect-error Legacy - use better data management solution\n return Rx.Observable.concat(success$, failed$)\n })\n}\n","import Rx from 'rx'\nimport { filterObject } from './helpers'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport { IKeyMap } from 'rwwa-data-access'\n\n// IIS has a 260 char limit for all requested URLs\n// Without resource type or keys, the URL is 50 chars: https://tabtouch-mobi.local.rwwaq.com.au/api/data/\nconst MAX_PATH_LENGTH = 260 - 50\n\ninterface DataFetcher {\n keys: string[]\n result?: IKeyMap>\n error?: Error\n}\n\n// Nullable resources are usually fetched from /api/data/resourceType/resourceKeys and\n// can be \"null\" which means they do not exist\n// It is different to other fetches which expect non-existant resources to not be null\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function fetchNullableResourcesWithKeys, Resource>(\n keys: string[],\n resourceType: string\n): Rx.Observable> {\n if (!keys || !keys.length || !resourceType) {\n return Rx.Observable.just>({\n keys: keys || [],\n error: new Error('Resource type or keys are empty'),\n })\n }\n\n // 99% of the time keys will be the same length, so assume all keys are as long as the longest key\n const maxKeyLength = keys.reduce((prevKey, key) => Math.max(prevKey, key.length), 0)\n const urlPath = `/api/data/${resourceType}/`\n const availableLengthForKeys = MAX_PATH_LENGTH - urlPath.length\n const keySeparator = ','\n const numToBuffer = Math.floor(availableLengthForKeys / (maxKeyLength + keySeparator.length))\n\n return (\n Rx.Observable.fromArray(keys)\n .bufferWithCount(numToBuffer)\n .select(bufferedKeys =>\n apiService.get({\n url: `${urlPath}${bufferedKeys.join(keySeparator)}`,\n opts: { credentials: 'include' },\n })\n )\n .select(promise => Rx.Observable.fromPromise(promise))\n .mergeAll() as unknown as Rx.Observable\n ).selectMany(result => {\n const success = filterObject(result[resourceType], resource => resource !== null)\n const success$ = Rx.Observable.just>({\n keys: Object.keys(success),\n result: { [resourceType]: success },\n })\n\n const failed = filterObject(result[resourceType], resource => resource === null)\n const failedKeys = Object.keys(failed)\n if (failedKeys.length > 0) {\n const failed$ = Rx.Observable.just>({\n keys: failedKeys,\n error: new Error(\n `Failed to fetch resource ${resourceType} keys ${Object.keys(failed).join(',')}`\n ),\n })\n return Rx.Observable.concat(success$, failed$)\n }\n\n return success$\n })\n}\n","import { TypedRecord, recordify } from 'typed-immutable-record'\nimport { List } from 'immutable'\nimport { declareResourceType, IKeyMap } from 'rwwa-data-access'\nimport { fetchNullableResourcesWithKeys } from '../fetchResources'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\n\nexport interface PoolKeyCollection {\n items: string[]\n}\n\ninterface PoolKeyMap {\n poolKeys: IKeyMap\n}\n\nexport type PoolKeysRecord = List\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const PoolKeys = declareResourceType({\n fetchMultipleNoPromise: keys =>\n fetchNullableResourcesWithKeys(keys, 'poolKeys'),\n typeKey: 'poolKeys',\n map: (x: PoolKeyCollection) => x && List(x.items),\n maxToKeep: 100,\n hardTimeToLive: 60000,\n})\n\nexport type PoolType = 'Racing' | 'FavouriteNumbers' | 'Tipping'\nexport type FixtureType = 'Races' | 'Trots' | 'Dogs'\n\ninterface Pool {\n key: string\n type: PoolType\n name: string\n status: string\n fixtureKey: string\n raceKeys: string[]\n grossAmount: number\n netJackpotAmount: number\n}\n\nexport interface RacingPool extends Pool {\n fixtureType: FixtureType\n}\nexport interface RacingPoolRecord extends TypedRecord, RacingPool {}\n\nexport interface FavouriteNumberPool extends Pool {\n scheduledCloseDateTime: Date\n}\nexport interface FavouriteNumberPoolRecord\n extends TypedRecord,\n FavouriteNumberPool {}\n\nexport interface TippingPool extends Pool {\n sportName: string\n sportDescription: string\n sportType: string\n sportCode: keyof typeof iconPaths\n gameStartDateTime: Date\n numGames: number\n}\nexport interface TippingPoolRecord extends TypedRecord, TippingPool {}\n\ninterface PoolMap {\n pool: IKeyMap\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Pools = declareResourceType({\n fetchMultipleNoPromise: keys => fetchNullableResourcesWithKeys(keys, 'pool'),\n typeKey: 'pool',\n map: (x: TippingPool | FavouriteNumberPool | RacingPool) => {\n switch (x.type) {\n case 'FavouriteNumbers':\n return recordify(x as FavouriteNumberPool)\n case 'Tipping':\n return recordify(x as TippingPool)\n default:\n return recordify(x as RacingPool)\n }\n },\n maxToKeep: 100,\n hardTimeToLive: 60000,\n})\n\nexport function isRacingPool(\n pool: TippingPool | RacingPool | FavouriteNumberPool\n): pool is RacingPool {\n return pool.type === 'Racing'\n}\n\nexport function isFavouriteNumbersPool(\n pool: TippingPool | RacingPool | FavouriteNumberPool\n): pool is FavouriteNumberPool {\n return pool.type === 'FavouriteNumbers'\n}\n\nexport function isTippingPool(\n pool: TippingPool | RacingPool | FavouriteNumberPool\n): pool is TippingPool {\n return pool.type === 'Tipping'\n}\n","import { dayjs } from '@mobi/utils'\nimport type { Tabs } from '@core/Areas/AccountActivity/types'\n\n/** DO NOT EXPORT - Compiler will remove reference */\nconst enum LocalConstants {\n accountBase = 'account',\n accountActivityBase = 'account-activity',\n primaryAccountHolderDetailsBase = 'primary-account-holder-details',\n blackbookRunnersBase = 'blackbook-runners',\n racePageFormBase = 'race-page-form',\n racePageCompleteBase = 'race-page-complete',\n raceReplyBase = 'race-replay',\n braintreeBase = 'braintree',\n}\n\nexport const queryKeys = {\n accountBase: LocalConstants.accountBase,\n accountContactDetails: (accountNumber: number) =>\n `${LocalConstants.accountBase}-contact-${accountNumber}`,\n accountPreferences: (accountNumber: number) =>\n `${LocalConstants.accountBase}-preferences-${accountNumber}`,\n\n accountActivityBase: LocalConstants.accountActivityBase,\n accountActivityData: (tab: Tabs, isOrderByEvent: boolean, userSelectedDate?: string) => [\n LocalConstants.accountBase,\n LocalConstants.accountActivityBase,\n tab,\n isOrderByEvent,\n userSelectedDate,\n ],\n\n primaryAccountHolderDetails: (accountNumber: number) =>\n `${LocalConstants.primaryAccountHolderDetailsBase}-${accountNumber}`,\n\n activityStatementsAccountDetails: 'account-details',\n activityStatementsAccountHolders: 'account-holders',\n\n banner: 'banner',\n raceCardPromotion: 'race-card-promotion',\n\n blackbookComments: 'blackbook-comments',\n blackbookDetails: 'blackbook-details',\n blackbookRunnersBase: LocalConstants.blackbookRunnersBase,\n blackbookRunners: (account: number | null) => [LocalConstants.blackbookRunnersBase, account],\n blackbookRunnersForJockey: (jockeyName: string) => ['blackbook-jockey-rides', jockeyName],\n\n eventDetails: 'event-details',\n\n feedBackContacts: 'contacts',\n feedBackSubjects: 'subjects',\n\n getBankAccount: 'getBankAccount',\n inducement: 'inducement',\n kambiPendingTicketsCount: 'kambi-pending-tickets-count',\n meetingPreview: 'meeting-preview',\n meetings: (date: string) => `meetings-${date}`,\n raceList: (meeting: string, date: string) => [meeting.toLowerCase(), date],\n\n mysteryBetDetails: 'mystery-bet-details',\n mysteryQuickPickPropose: 'mystery-quick-pick-propose',\n\n nextRaces: 'nextRaces',\n nextSkyRaces: 'next-sky-races',\n\n notifications: 'notifications',\n\n pendingTicketsCount: LocalConstants.accountBase + 'pending-tickets-count',\n\n racePendingTickets: (raceKey: string) => [LocalConstants.accountBase, 'race-tickets', raceKey],\n raceResultedTickets: (\n meetingId: string,\n meetingDate: string,\n raceNumber: string,\n hasFixedResulted: boolean\n ) => [\n LocalConstants.accountBase,\n 'race-tickets',\n meetingId,\n meetingDate,\n raceNumber,\n hasFixedResulted,\n ],\n\n precommitmentDetails: 'precommitment-page-details',\n\n // Used in RaceCard to invalidate cache due to legacy implementation\n racePageCompleteBase: LocalConstants.racePageCompleteBase,\n racePageFormBase: LocalConstants.racePageFormBase,\n racePageStartersForRaces: 'race-page-starters-for-races',\n\n racePageForm: (meetingId: string, meetingDate: Date | string, raceNumber: number) => [\n LocalConstants.racePageFormBase,\n meetingId.toLowerCase(),\n dayjs(meetingDate).format('YYYY-MM-DD'),\n raceNumber,\n ],\n racePageFieldSummary: (\n racecourseSeq: number | undefined,\n meetingDate: string | undefined,\n raceNumber: number | undefined\n ) => [\n LocalConstants.racePageFormBase,\n racecourseSeq,\n dayjs(meetingDate).format('YYYY-MM-DD'),\n raceNumber,\n 'racePageFieldSummary',\n ],\n racePageFieldFOOForm: (\n racecourseSeq: number | undefined,\n meetingDate: string | undefined,\n raceNumber: number | undefined\n ) => [\n LocalConstants.racePageFormBase,\n racecourseSeq,\n dayjs(meetingDate).format('YYYY-MM-DD'),\n raceNumber,\n 'racePageFieldFOOForm',\n ],\n racePageComplete: (meetingId: string, meetingDate: Date | string, raceNumber: number) => [\n LocalConstants.racePageCompleteBase,\n meetingId.toLowerCase(),\n dayjs(meetingDate).format('YYYY-MM-DD'),\n raceNumber,\n ],\n videoEntitlementRequest: (videoKey: string) => [LocalConstants.raceReplyBase, videoKey],\n raceReplayRequest: (meetingId: string, meetingDate: Date | string, raceNumber: number) => [\n LocalConstants.raceReplyBase,\n meetingId.toLowerCase(),\n dayjs(meetingDate).format('YYYY-MM-DD'),\n raceNumber,\n ],\n\n sameRaceMultiGetSelectionPrice: 'sameRaceMultiGetSelectionPrice',\n signUpContactDetails: 'sign-up-contact-details',\n specials: 'specials',\n specialsTerms: 'specials-terms',\n takeABreak: 'take-a-break',\n\n serverConfig: 'mobi-server-config',\n\n toteSportsCurrentPools: 'tote-sports-current-pools',\n toteSportsPool: 'tote-sports-pool',\n toteSportsResultedPools: 'tote-sports-resulted-pools',\n\n trendingBets: 'trendingBets',\n videoPreview: 'video-preview',\n\n depositInitialData: 'deposit/initial-data',\n\n userContactDetails: 'user-contact-details',\n} as const\n","import { QueryClient } from 'react-query'\n\nexport const queryClient = new QueryClient()\n","import { UseQueryOptions } from 'react-query'\nimport type { ServerConfiguration as ServerConfig } from '@mobi/api-types'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { queryKeys } from '../ReactQuery/constants'\n\n// TODO: Upgrade react-query to get full type support with queryOptions api\n\nexport const serverConfigQuery: UseQueryOptions = {\n queryKey: queryKeys.serverConfig,\n queryFn: () => get({ url: '/api/config' }),\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n staleTime: 1_000 * 60 * 60, // 1hr\n} as const\n","export function filterObject(\n object: Record,\n predicate: (value: T, key: string) => boolean\n): Record {\n return Object.keys(object)\n .filter(key => predicate(object[key], key))\n .reduce(\n (acc, key) => {\n acc[key] = object[key]\n return acc\n },\n {} as Record\n )\n}\n\nexport function mapObject<\n SourceObject extends Record,\n NewObject extends Record,\n>(object: SourceObject, iterator: (value: unknown, key: string) => unknown): NewObject {\n const keys = Object.keys(object as object)\n\n const newObject = {} as NewObject\n\n keys.forEach(key => {\n const value = object[key]\n\n const newValue = iterator(value, key)\n\n // @ts-expect-error Typing issues\n newObject[key] = newValue\n })\n\n return newObject\n}\n","import { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { logError } from '@core/Utils'\nimport type { Contract } from '@mobi/web-native-comms'\n\ninterface LastKnownLocation {\n latitude: string\n longitude: string\n isoCode: string\n}\n\nlet lastKnownLocation: Contract['LBS_LAST_KNOWN_LOCATION_UPDATED'] | undefined\nlet lastKnownVenue: Contract['PULSE_LAST_KNOWN_VENUE_UPDATED'] | undefined\n\nexport function startLocationServiceListeners(): void {\n if (isReactNativeApp) {\n startReactNativeLocationServiceListeners()\n }\n}\n\nfunction startReactNativeLocationServiceListeners() {\n subscribeToNative('LBS_LAST_KNOWN_LOCATION_UPDATED', payload => {\n lastKnownLocation = payload\n })\n subscribeToNative('PULSE_LAST_KNOWN_VENUE_UPDATED', payload => {\n lastKnownVenue = payload\n })\n subscribeToNative('PULSE_FAILED_TO_UPDATE_LAST_KNOWN_VENUE', payload => {\n logError(`Failed to update last known venue (payload ${JSON.stringify(payload)})`)\n })\n\n sendToNative('LBS_REQUEST_LAST_KNOWN_LOCATION')\n sendToNative('PULSE_REQUEST_LAST_KNOWN_VENUE')\n}\n\nexport function getLastKnownLocation(): LastKnownLocation | undefined {\n return lastKnownLocation\n}\n\nexport function getLastKnownVenue(): Contract['PULSE_LAST_KNOWN_VENUE_UPDATED'] | undefined {\n return lastKnownVenue\n}\n\nexport function getLastKnownLocationAsString(): string {\n if (!lastKnownLocation) {\n return ''\n }\n\n const isoCode = lastKnownLocation.isoCode ? `,${lastKnownLocation.isoCode}` : ''\n return `${lastKnownLocation.latitude},${lastKnownLocation.longitude}${isoCode}`\n}\n\nexport function getLastKnownVenueAsString(): string {\n return `${JSON.stringify(lastKnownVenue)}`\n}\n","import { sendToNative } from '@mobi/web-native-comms/web'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport type { Contract } from '@mobi/web-native-comms'\n\nexport function trackOptimoveEvent(event: Contract['OPTIMOVE_TRACK']) {\n trackEvent('optimove_track', event)\n sendToNative('OPTIMOVE_TRACK', event)\n}\n","import { hexColors } from '@mobi/settings'\nimport { mix, transparentize } from 'polished'\n\n/** @deprecated Please DO NOT use this object, other options:\n * - Use generic mobi { colors } from '@mobi/settings' (ONLY generic high level, ie. brandPrimary etc)\n * - Use local `colors.ts` or `themes.ts` files\n * - Use { hexColors } from '@mobi/settings'\n *\n * This object does not follow the co-location principle, making maintenance difficult.\n */\nexport const colors = {\n campaigns: {\n receipt: {\n text: hexColors.cobalt,\n },\n panel: {\n text: hexColors.white,\n background: hexColors.summerSky,\n },\n },\n\n expandablePanel: {\n dark: {\n header: {\n text: hexColors.white,\n background: hexColors.black,\n },\n content: {\n background: hexColors.white,\n text: hexColors.black,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.white,\n },\n inline: {\n background: hexColors.whiteSmoke,\n text: hexColors.black,\n boxShadow: hexColors.nightRider,\n },\n informationIcon: hexColors.summerSky,\n },\n light: {\n header: {\n text: hexColors.black,\n background: hexColors.whiteSmoke,\n },\n content: {\n background: hexColors.whiteSmoke,\n text: hexColors.black,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.black,\n },\n inline: {\n background: hexColors.whiteSmoke,\n text: hexColors.black,\n boxShadow: hexColors.nightRider,\n },\n },\n white: {\n header: {\n text: hexColors.nero,\n background: hexColors.white,\n border: hexColors.gainsboro,\n },\n content: {\n background: hexColors.white,\n text: hexColors.nero,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.darkGrey,\n },\n inline: {\n background: hexColors.white,\n text: hexColors.nero,\n boxShadow: hexColors.nightRider,\n },\n },\n bonusbet: {\n header: {\n text: hexColors.white,\n background: hexColors.summerSky,\n },\n content: {\n background: hexColors.summerSky,\n text: hexColors.white,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.white,\n },\n inline: {\n background: hexColors.summerSky,\n text: hexColors.white,\n boxShadow: hexColors.nightRider,\n },\n },\n purple: {\n header: {\n text: hexColors.white,\n background: hexColors.studio,\n specialIcon: hexColors.white,\n },\n content: {\n background: hexColors.white,\n text: hexColors.black,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.white,\n },\n inline: {\n background: hexColors.whiteSmoke,\n text: hexColors.black,\n boxShadow: hexColors.nightRider,\n },\n },\n greyWhite: {\n header: {\n text: hexColors.grey,\n background: hexColors.white,\n },\n content: {\n background: hexColors.white,\n text: hexColors.black,\n boxShadow: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.grey,\n },\n inline: {\n background: hexColors.whiteSmoke,\n text: hexColors.black,\n boxShadow: hexColors.nightRider,\n },\n },\n },\n\n subContentHeader: {\n text: hexColors.white,\n background: hexColors.nero,\n detailsText: hexColors.gainsboro,\n },\n\n nextEvents: {\n distance: {\n text: hexColors.dimGrey,\n },\n toggle: {\n background: hexColors.gainsboro,\n text: hexColors.white,\n selected: {\n text: hexColors.white,\n background: hexColors.chocolate,\n },\n unselected: {\n text: hexColors.darkGrey,\n background: hexColors.white,\n border: hexColors.veryLightGrey,\n },\n },\n jackpot: {\n text: hexColors.orange,\n },\n },\n\n betslip: {\n background: hexColors.white,\n text: hexColors.black,\n header: {\n text: hexColors.white,\n background: hexColors.blueDiamond,\n },\n expandable: {\n badge: {\n background: hexColors.white,\n text: hexColors.black,\n },\n },\n pill: {\n background: transparentize(0.5, hexColors.black),\n text: hexColors.white,\n },\n item: {\n background: hexColors.white,\n border: hexColors.gainsboro,\n boxShadow: transparentize(0.8, hexColors.black),\n text: hexColors.black,\n disabled: {\n background: hexColors.whiteSmoke,\n text: hexColors.grey,\n },\n empty: {\n text: hexColors.charCoal,\n },\n },\n investment: {\n background: hexColors.whiteSmoke,\n border: hexColors.veryLightGrey,\n boxShadow: transparentize(0.9, hexColors.black),\n text: hexColors.black,\n disabled: {\n background: hexColors.gainsboro,\n text: transparentize(0.6, hexColors.black),\n },\n },\n receipt: {\n header: {\n background: hexColors.sushi,\n color: hexColors.white,\n },\n },\n summary: {\n background: hexColors.black,\n color: hexColors.white,\n title: {\n text: hexColors.darkGrey,\n },\n value: {\n text: hexColors.lemon,\n },\n },\n superPick: {\n available: {\n border: hexColors.veryLightGrey,\n },\n selected: {\n border: hexColors.orange,\n background: hexColors.orange,\n },\n disabled: {\n text: hexColors.white,\n border: hexColors.veryLightGrey,\n background: hexColors.veryLightGrey,\n },\n },\n errors: {\n investment: {\n text: hexColors.freeSpeechRed,\n },\n container: {\n background: hexColors.veryLightGrey,\n },\n noticeBox: {\n background: hexColors.white,\n text: hexColors.black,\n },\n betLeg: {\n color: hexColors.freeSpeechRed,\n },\n },\n removeButton: {\n color: hexColors.darkGrey,\n disabled: {\n color: hexColors.grey,\n },\n },\n multiDetails: {\n border: hexColors.gainsboro,\n label: {\n color: hexColors.dimGrey,\n },\n amount: {\n color: hexColors.black,\n },\n },\n formulas: {\n background: hexColors.white,\n border: hexColors.gainsboro,\n text: hexColors.black,\n comboText: hexColors.dimGrey,\n disabled: {\n background: hexColors.veryLightGrey,\n text: transparentize(0.6, hexColors.black),\n },\n },\n },\n\n quickbet: {\n header: {\n background: hexColors.blueDiamond,\n text: hexColors.white,\n pill: {\n background: transparentize(0.5, hexColors.black),\n },\n },\n silk: {\n background: transparentize(0.85, hexColors.black),\n },\n investment: {\n background: transparentize(0.88, hexColors.white),\n text: hexColors.white,\n active: {\n background: hexColors.white,\n text: hexColors.blueDiamond,\n },\n legInfo: {\n text: hexColors.blueDiamond,\n background: 'transparent',\n boosted: {\n background: hexColors.orange,\n text: hexColors.black,\n },\n },\n },\n },\n\n priceChange: {\n increase: {\n text: hexColors.sushi,\n },\n decrease: {\n text: hexColors.cinnabar,\n },\n none: {\n text: hexColors.white,\n active: {\n text: hexColors.blueDiamond,\n },\n },\n },\n\n messages: {\n error: {\n text: hexColors.freeSpeechRed,\n background: mix(0.9, 'white', hexColors.freeSpeechRed),\n border: mix(0.8, 'white', hexColors.freeSpeechRed),\n },\n success: {\n text: hexColors.sushi,\n background: mix(0.9, 'white', hexColors.sushi),\n border: mix(0.8, 'white', hexColors.sushi),\n },\n info: {\n text: hexColors.summerSky,\n background: mix(0.9, 'white', hexColors.summerSky),\n border: mix(0.8, 'white', hexColors.summerSky),\n },\n warning: {\n text: hexColors.chocolate,\n background: mix(0.9, 'white', hexColors.chocolate),\n border: mix(0.8, 'white', hexColors.chocolate),\n },\n },\n\n password: {\n light: {\n label: {\n text: hexColors.dimGrey,\n },\n input: {\n background: hexColors.white,\n },\n rules: {\n text: hexColors.dimGrey,\n },\n icon: {\n text: hexColors.black,\n },\n },\n dark: {\n label: {\n text: hexColors.white,\n background: hexColors.blueDiamond,\n },\n input: {\n background: hexColors.gainsboro,\n },\n rules: {\n text: hexColors.white,\n },\n icon: {\n text: hexColors.black,\n background: 'transparent',\n },\n },\n },\n\n meetingList: {\n dateNavigation: {\n activeBackground: hexColors.chocolate,\n activeBorder: hexColors.chocolate,\n activeText: hexColors.white,\n background: hexColors.white,\n border: hexColors.veryLightGrey,\n text: hexColors.black,\n oldBackground: hexColors.nero,\n },\n calendar: {\n baseBackground: hexColors.gainsboro,\n icon: hexColors.grey,\n directionalArrow: hexColors.black,\n headerText: hexColors.black,\n days: {\n hoverBackground: hexColors.grey,\n hoverText: hexColors.white,\n inThisMonth: {\n inText: hexColors.black,\n outText: hexColors.veryLightGrey,\n inBackground: hexColors.white,\n outBackground: hexColors.whiteSmoke,\n boxShadow: hexColors.whiteSmoke,\n },\n isDayToday: {\n background: hexColors.chocolate,\n text: hexColors.white,\n isNotText: hexColors.black,\n },\n isSelected: {\n background: hexColors.chocolate,\n text: hexColors.white,\n },\n },\n matrix: {\n background: hexColors.whiteSmoke,\n },\n select: {\n text: hexColors.darkGrey,\n border: hexColors.black,\n background: hexColors.white,\n },\n },\n },\n\n raceList: {\n fixtureStatus: {\n textDark: hexColors.black,\n textLight: hexColors.white,\n },\n quaddieChip: {\n background: hexColors.crimson,\n text: hexColors.white,\n },\n results: {\n text: hexColors.cinnabar,\n },\n class: {\n text: hexColors.dimGrey,\n },\n jackpot: {\n text: hexColors.orange,\n },\n specials: {\n text: hexColors.orange,\n },\n },\n\n fixedFlucs: {\n separator: hexColors.whiteSmoke,\n dividends: {\n separator: hexColors.veryLightGrey,\n },\n label: hexColors.dimGrey,\n },\n\n fixtureStatus: {\n text: hexColors.white,\n disabledtext: hexColors.grey,\n green: hexColors.sushi,\n orange: hexColors.tangerine,\n red: hexColors.freeSpeechRed,\n grey: hexColors.gainsboro,\n },\n\n specialIndicator: {\n foreground: hexColors.orange,\n background: hexColors.white,\n },\n\n starters: {\n buttonSelection: {\n default: {\n background: `linear-gradient(to bottom, ${hexColors.white}, ${hexColors.whiteSmoke})`,\n color: hexColors.nero,\n secondary: hexColors.grey,\n borderColor: hexColors.veryLightGrey,\n },\n selected: {\n background: hexColors.nero,\n color: hexColors.white,\n borderColor: hexColors.nero,\n },\n disabled: {\n background: hexColors.gainsboro,\n color: hexColors.grey,\n },\n priceChange: {\n background: hexColors.infoBlueLight,\n arrow: {\n borderColor: hexColors.infoBlueDark,\n },\n selected: {\n background: hexColors.infoBlueDark,\n },\n },\n },\n },\n\n search: {\n launchicon: {\n icon: hexColors.white,\n },\n header: {\n background: hexColors.blueDiamond,\n },\n background: hexColors.white,\n initialText: hexColors.darkGrey,\n container: {\n text: hexColors.white,\n background: hexColors.affair,\n },\n list: {\n background: hexColors.gainsboro,\n },\n input: {\n background: hexColors.affair,\n text: hexColors.white,\n placeholder: hexColors.lola,\n },\n result: {\n background: hexColors.white,\n border: hexColors.gainsboro,\n status: hexColors.freeSpeechRed,\n secondary: hexColors.dimGrey,\n scratched: hexColors.freeSpeechRed,\n },\n highlights: {\n background: hexColors.paleCornflowerBlue,\n },\n },\n\n structuredSearch: {\n initialText: hexColors.darkGrey,\n container: {\n text: hexColors.white,\n background: hexColors.white,\n reset: hexColors.studio,\n },\n section: {\n background: hexColors.white,\n },\n groupheader: {\n text: hexColors.nightRider,\n },\n tabs: {\n background: hexColors.gainsboro,\n count: {\n background: hexColors.whiteSmoke,\n text: hexColors.grey,\n },\n },\n summary: {\n text: hexColors.lemon,\n },\n separator: {\n border: hexColors.gainsboro,\n min: hexColors.whiteSmoke,\n max: hexColors.veryLightGrey,\n },\n toggle: {\n text: hexColors.grey,\n },\n resultDetails: {\n text: hexColors.dimGrey,\n fixed: hexColors.scooter,\n },\n },\n\n rangeInput: {\n track: {\n foreground: hexColors.charCoal,\n background: hexColors.veryLightGrey,\n },\n tooltip: {\n background: hexColors.gainsboro,\n color: hexColors.charCoal,\n },\n indicator: {\n notdragged: hexColors.charCoal,\n dragged: hexColors.charCoal,\n shadow: hexColors.darkGrey,\n },\n },\n\n structuredSearchLocationModal: {\n header: {\n text: hexColors.white,\n background: hexColors.blueDiamond,\n button: hexColors.lilac,\n },\n icon: {\n fill: hexColors.darkGrey,\n code: hexColors.white,\n },\n },\n}\nexport default colors\n","/** Locations needed for CRM wrapper processing */\nexport enum TABLocation {\n Mobi = 538,\n Desktop = 285,\n}\n","import { attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { makeTypedFactory, TypedRecord } from 'typed-immutable-record'\nimport { OnFeatureChange } from './signals'\nimport * as immutable from 'immutable'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FeatureFlags = Record\n\nexport interface FeatureFlagState {\n /** Specifies whether feature flags are based on anonymous or ID */\n isUserAnonymous: boolean\n /** set to true when ld client event 'ready' is dispatched */\n isLdInitialized?: boolean\n features: immutable.Map\n}\n\nconst defaultState: Readonly = {\n isUserAnonymous: true,\n isLdInitialized: false,\n features: immutable.fromJS({}),\n}\n\nexport interface FeatureFlagDriverRecord\n extends TypedRecord,\n FeatureFlagState {}\n\nconst Factory = makeTypedFactory(defaultState)\n\nexport function featureFlagDriver(state = Factory(), signal: Signal): FeatureFlagDriverRecord {\n switch (signal.tag) {\n case OnFeatureChange: {\n if (!signal.data.features) {\n return state\n }\n return state.merge({\n features: { ...state.features.toJS(), ...signal.data.features },\n isLdInitialized: state.isLdInitialized || signal.data.isLdInitialized,\n isUserAnonymous:\n signal.data.isUserAnonymous === undefined\n ? state.isUserAnonymous\n : signal.data.isUserAnonymous,\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n path: 'featureFlags',\n driver: featureFlagDriver,\n})\n","import { createSignal } from 'rwwa-rx-state-machine'\nimport { FeatureFlags } from './driver'\n\nexport const OnFeatureChange = createSignal<{\n features: FeatureFlags\n isUserAnonymous?: boolean\n isLdInitialized: boolean\n}>('OnFeatureChange')\n","import { fromJS } from 'immutable'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { StateMap } from 'typings/immutable'\nimport { isHomeUrl } from '@classic/Foundation/Navigation/Nav'\nimport { HashRoute, RouteStack } from '.'\nimport { isRaceRoute } from './helpers/isRaceRoute'\n\nconst enum LocalConstants {\n meetingsHashRoute = '#tote',\n}\n\ninterface RouteState {\n currentUrl: HashRoute\n routeStack: RouteStack\n backUrl: HashRoute\n lastRacesPath: HashRoute\n}\n\nexport const defaultState: RouteState = {\n currentUrl: (location.hash as HashRoute) || '#',\n routeStack: ['#'],\n backUrl: '#',\n lastRacesPath: LocalConstants.meetingsHashRoute,\n}\n\n/** ONLY used where legacy router (Nav.js) successfully updates route */\nexport const NavigatedTo = createSignal<{ url: string }>('NavigatedTo')\n\nexport type RouteDriverStateMap = StateMap\n\nexport function routeDriver(\n state: RouteDriverStateMap = fromJS(defaultState),\n signal: Signal\n): RouteDriverStateMap {\n switch (signal.tag) {\n case NavigatedTo: {\n const payloadUrl = signal.data.url.replace('#', '') as string\n const isHome = isHomeUrl(payloadUrl)\n const newRoute = isHome ? '#' : (`#${payloadUrl}` as const)\n\n const currentStack = state.get('routeStack').toJS()\n const lastPath = currentStack[currentStack.length - 1]\n\n if (newRoute === lastPath) return state\n\n const newStack = getNewStack(newRoute, currentStack)\n const currentUrl = newStack[newStack.length - 1]\n\n const lastRacesPath = getRacePathValues({\n currentUrl,\n lastRacesPath: state.get('lastRacesPath'),\n })\n\n return state.merge({\n currentUrl,\n routeStack: newStack,\n backUrl: getBackUrlFromStack(newStack),\n lastRacesPath,\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n path: 'routeDriver',\n driver: routeDriver,\n})\n\n// Local Helpers\n\nfunction getRacePathValues({\n lastRacesPath,\n currentUrl,\n}: Pick): HashRoute {\n const cleanedCurrentUrlPath = currentUrl.replace('#', '/').split('?')[0]\n const isCurrentUrlRacePath = isRaceRoute(cleanedCurrentUrlPath)\n const isCurrentUrlMeetingsPath = isCurrentUrlRacePath && cleanedCurrentUrlPath === '/tote'\n\n const newLastRacesPath = isCurrentUrlRacePath\n ? isCurrentUrlMeetingsPath\n ? LocalConstants.meetingsHashRoute\n : currentUrl\n : lastRacesPath\n\n return newLastRacesPath\n}\n\n/** Creates new stack, allowing registered middleware to modify - for use ONLY in driver */\nfunction getNewStack(newRoute: HashRoute, currentStack: RouteStack): RouteStack {\n // Reset stack if home\n if (newRoute === '#') return ['#']\n\n // Remove last route when user navigates back\n if (newRoute === getBackUrlFromStack(currentStack) && currentStack.length > 1) {\n return currentStack.slice(0, -1) as RouteStack\n }\n\n // Add new route to stack\n return [...currentStack, newRoute]\n}\n\nfunction getBackUrlFromStack(stack: RouteStack): HashRoute {\n return stack[stack.length - 2] || '#'\n}\n","import { matchPath } from 'react-router'\nimport { RACES_ROUTES } from '@core/AppRoutes'\n\nexport const isRaceRoute = (path: string): boolean =>\n RACES_ROUTES.some(route => matchPath(path, route as string))\n","import { store } from '@core/Store'\nimport { setMeetingsRaceCode } from '@core/Areas/Meetings/Store'\nimport { QUICKBET_MODAL_ID } from '@core/Areas/Quickbet/constants'\nimport { closeModal } from '@core/Components/Modal'\nimport { state$ as navState$ } from '../driver'\n\nconst enum LocalConstants {\n MeetingsPageHash = '#tote',\n}\n\nexport const navigateToLastRacesPath = () => {\n navState$.take(1).subscribe(navState => {\n store.dispatch(closeModal({ id: QUICKBET_MODAL_ID }))\n\n const lastRacesPath = navState.get('lastRacesPath')\n const currentHashPath = navState.get('currentUrl')\n\n const newRacesPath =\n currentHashPath === lastRacesPath ? LocalConstants.MeetingsPageHash : lastRacesPath\n\n if (currentHashPath.split('?')[0] === LocalConstants.MeetingsPageHash) {\n store.dispatch(setMeetingsRaceCode('races'))\n }\n\n window.location.href = newRacesPath\n })\n}\n","import {\n UpdateAccountBalance,\n Campaign,\n UpdateCampaigns,\n UpdateBonusBalance,\n} from './userAccountDriver'\nimport { post } from '@classic/Foundation/Services/ApiService'\nimport { sendToNative } from '@mobi/web-native-comms/web'\n\nexport async function fetchAccountBalanceAsync(): Promise {\n const { balance } = await getAccountBalance()\n\n UpdateAccountBalance({ balance })\n sendToNative('ACCOUNT_BALANCE', { balance })\n}\n\nexport async function fetchCampaignsAsync(): Promise {\n const response = await getCampaigns()\n UpdateCampaigns(response.campaigns)\n UpdateBonusBalance({\n bonusBetBalance: response.bonusBetBalance,\n bonusCashBalance: response.bonusCashBalance,\n })\n}\n\nexport interface GetAccountBalanceResponse {\n balance: number\n withdrawableBalance: number\n}\n\nexport interface GetCampaignsResponse {\n bonusBetBalance: number\n bonusCashBalance: number\n campaigns: Campaign[]\n}\n\nexport function getAccountBalance(): Promise {\n return post({ url: '/api/account/balance' })\n}\n\nexport function getCampaigns(): Promise {\n return post({ url: '/api/account/campaigns' })\n}\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { List as ImmutableList } from 'immutable'\nimport { hasValue } from '@mobi/utils'\nimport { List as ImmutableListExtended } from 'typings/immutable'\nimport {\n DEFAULT_SUPERPICK_STATUS,\n FobSpecialToken,\n} from '@core/Areas/AppHeader/Components/AccountDropDown/Components/helpers/useGetSpecialTokens'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\n\nexport type CampaignTriggerType =\n | 'AccountDefaultTrigger'\n | 'AccountBetTrigger'\n | 'AccountDepositTrigger'\n | 'AccountTrigger'\n | 'AccountWinningBetTrigger'\n\nexport type CampaignRewardType = 'BonusBetReward' | 'BonusCashReward' | 'CashReward' | 'Reward'\n\nexport interface Campaign {\n id: number\n triggerType: CampaignTriggerType\n rewardType: CampaignRewardType\n title: string\n description: string\n expiry: Date\n rewardExpiry: Date\n minimumAmount: number\n initialAmount: number\n remainingAmount: number\n isActivated: boolean\n isActivationPending: boolean\n isExpired: boolean\n isLive: boolean\n isNotActivated: boolean\n isRedeemed: boolean\n redeemableBy: string\n redemptionDetails: null | {\n race: {\n fixtureId: number\n raceNumber: number\n fixtureDate: Date\n }\n }\n}\n\nexport interface SuperpickStatus {\n isLoading: boolean\n tokens: FobSpecialToken[]\n errorMessage: string\n errorCode: number | null\n}\n\nexport interface UserAccountState {\n isLoggedIn: boolean | null\n hasEvaluatedUserAuth: boolean\n accountBalance: number | null\n accountBalanceUpdatedTime: number | null\n bonusBetBalance: number | null\n bonusCashBalance: number | null\n campaigns: ImmutableList | null // All campaigns, regardless of state\n activeCampaigns: ImmutableList | null // Active only\n availableCampaigns: ImmutableList | null // Available i.e. on the home screen\n accountNumber: number | null\n residentialDetail: ImmutableListExtended | null\n superpicks: SuperpickStatus\n}\n\nexport const defaultUserAccountState: UserAccountState = {\n isLoggedIn: null,\n accountBalance: null,\n hasEvaluatedUserAuth: false,\n accountBalanceUpdatedTime: null,\n bonusBetBalance: null,\n bonusCashBalance: null,\n campaigns: null,\n activeCampaigns: null,\n availableCampaigns: null,\n accountNumber: null,\n residentialDetail: null,\n superpicks: {\n isLoading: false,\n tokens: [],\n errorMessage: '',\n errorCode: null,\n },\n}\n\nexport const UpdateAccountBalance = createSignal<{ balance: number | string }>(\n 'UpdateAccountBalance'\n)\nexport const UpdateBonusBalance = createSignal<{\n bonusBetBalance: number | string\n bonusCashBalance: number | string\n}>('UpdateBonusBalance')\nexport const HasLoggedIn = createSignal<{ accountNumber: number | string }>('HasLoggedIn')\nexport const HasLoggedOut = createSignal('HasLoggedOut')\nexport const UpdateCampaigns = createSignal('UpdateCampaigns')\nexport type ResidentialDetail = [country: string, state: string]\nexport const SetResidentialDetail = createSignal('SetResidentialDetail')\nexport const SetSuperpickStatus = createSignal('SetSuperpickStatus')\n\nexport interface UserAccountStateRecord\n extends TypedRecord,\n UserAccountState {}\n\nexport const UserAccountStateFactory = makeTypedFactory(\n defaultUserAccountState\n)\n\nexport function userAccountDriver(\n state = UserAccountStateFactory(),\n signal: Signal\n): UserAccountStateRecord {\n switch (signal.tag) {\n case HasLoggedIn: {\n const { accountNumber } = signal.data\n return state.merge({\n isLoggedIn: true,\n hasEvaluatedUserAuth: true,\n accountNumber,\n })\n }\n\n case HasLoggedOut: {\n return state.merge({\n ...defaultUserAccountState,\n hasEvaluatedUserAuth: true,\n isLoggedIn: false,\n })\n }\n\n case UpdateAccountBalance: {\n const { balance } = signal.data\n const timestamp = Date.now()\n // handle null, undefined, ''\n if (hasValue(balance)) {\n const newAccountBalance = +balance\n if (Number.isFinite(newAccountBalance) && newAccountBalance !== state.accountBalance) {\n trackOptimoveEvent({\n eventName: 'account_balance_updated',\n data: { balance: newAccountBalance },\n })\n\n return state.merge({\n accountBalance: newAccountBalance,\n accountBalanceUpdatedTime: timestamp,\n })\n }\n }\n return state\n }\n\n case UpdateBonusBalance: {\n const { bonusBetBalance, bonusCashBalance } = signal.data\n\n return state.merge({\n bonusBetBalance,\n bonusCashBalance,\n })\n }\n\n case UpdateCampaigns: {\n const campaigns = ImmutableList(signal.data as Campaign[])\n const activeCampaigns = ImmutableList(\n signal.data.filter((x: Campaign) => x.isActivated) as Campaign[]\n )\n const availableCampaigns = ImmutableList(\n signal.data.filter((x: Campaign) => !(x.isRedeemed || x.isExpired))\n )\n\n return state.merge({\n campaigns,\n activeCampaigns,\n availableCampaigns,\n })\n }\n\n case SetResidentialDetail: {\n return state.merge({\n residentialDetail: signal.data,\n })\n }\n\n case SetSuperpickStatus: {\n const newState = state.merge({\n superpicks: signal.data || DEFAULT_SUPERPICK_STATUS,\n })\n newState.superpicks.tokens = signal.data?.isLoading\n ? state.superpicks.tokens\n : signal.data?.tokens || []\n return newState\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'user-account',\n driver: userAccountDriver,\n})\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\nimport type { RootState, AppDispatch } from '.'\n\nexport const useAppSelector: TypedUseSelectorHook = useSelector\nexport const useAppDispatch = () => useDispatch()\n","import { combineReducers } from '@reduxjs/toolkit'\nimport bets from './Bets'\nimport workflow from './Workflow'\nimport config from './Config'\n\n/** IMPORTANT ensure reducer is correctly namespaced on root reducer ie. `reducer: { betslip }` */\nexport const betslip = combineReducers({ bets, workflow, config })\n\n/** Redux state specific to betslip package @requires Host to use betslip namespace */\nexport type AppState = { betslip: ReturnType }\n","import { configureStore } from '@reduxjs/toolkit'\nimport { FLUSH, PAUSE, PERSIST, persistStore, PURGE, REGISTER, REHYDRATE } from 'redux-persist'\n\nimport accountActivity from '@core/Areas/AccountActivity/Store'\nimport appHeader from '@core/Areas/AppHeader/Store'\nimport blackbook from '@core/Areas/Blackbook/Store'\nimport login, { setIsLoginShown } from '@core/Areas/Login/Store'\nimport modal, { closeModal, openModal } from '@core/Components/Modal/store'\nimport signUp from '@mobi/account/Areas/SignUp/Store/'\nimport toolbox from '@core/Areas/Toolbox/Store'\nimport navigation from '@core/Areas/Navigation/Store'\nimport meetings from '@core/Areas/Meetings/Store'\nimport raceCard from '@core/Areas/RaceCard/Store'\nimport settings from '@core/Areas/Settings/Store'\nimport skyVideoPlayer from '@core/Areas/SkyVideoPlayer/Store'\nimport quickDeposit from '@core/Areas/QuickDeposit/Store'\nimport deposit from '@mobi/account/Areas/Deposit/Store/deposit'\nimport verification from '@core/Areas/Account/Verification/Store'\nimport skyRaces from '@core/Areas/RaceCardSky/Store'\nimport notifications from '@core/Areas/Notifications/Store'\nimport { betslip } from '@mobi/betslip/Store'\nimport { listenerMiddleware } from './listenerMiddleware'\n\nexport const store = configureStore({\n reducer: {\n accountActivity,\n appHeader,\n betslip,\n blackbook,\n deposit,\n login,\n meetings,\n modal,\n navigation,\n raceCard,\n settings,\n signUp,\n skyRaces,\n skyVideoPlayer,\n toolbox,\n quickDeposit,\n verification,\n notifications,\n },\n devTools: !PRODUCTION,\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n openModal.type,\n closeModal.pending.type,\n setIsLoginShown.type,\n ],\n ignoredPaths: ['modal.items', 'login.onLoginSuccessCallback'],\n },\n }).prepend(listenerMiddleware.middleware),\n})\n\nexport const persistor = persistStore(store)\n\n// Types\nexport type RootState = ReturnType\nexport type AppDispatch = typeof store.dispatch\n","import {\n createListenerMiddleware,\n type TypedStartListening,\n type TypedStopListening,\n} from '@reduxjs/toolkit'\nimport { type RootState, type AppDispatch } from './index'\n\nexport const listenerMiddleware = createListenerMiddleware()\n\nexport const startListening = listenerMiddleware.startListening as AppStartListening\nexport const stopListening = listenerMiddleware.stopListening as AppStopListening\n\n// Types\n\ntype AppStartListening = TypedStartListening\ntype AppStopListening = TypedStopListening\n","const shortClientVersion = `${VERSION_MAJOR}.${VERSION_MINOR}`\nexport const fullClientVersion = BUILD_NUMBER\n ? `${shortClientVersion}.${BUILD_NUMBER}`\n : shortClientVersion\n","import { useEffect } from 'react'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { fetchAccountBalanceAsync } from '@core/State/UserAccount/async-signals'\nimport { useLogon } from './useLogon'\n\nlet lastVisibilityChangeTime = Date.now()\n\nfunction refreshBalanceIfInForeground() {\n if (\n Date.now() - lastVisibilityChangeTime > 5 * 60_000 &&\n document.visibilityState === 'visible'\n ) {\n fetchAccountBalanceAsync()\n }\n\n // this will get set both when the app is hidden and when it is foregrounded. We only want to\n // make the balance request if it has been in the background for a while, bet set it for both\n // state changes just in case this event gets triggered more often than expected - we don't want\n // to spam the balance endpoint\n lastVisibilityChangeTime = Date.now()\n}\n\n// The user balance is refreshed by push events, but if these happen on mobile while the\n// app is backgrounded the users balance never gets updated, and it has to wait until they\n// tap the pill menu or some other action causes a refresh. This hook will listen for the\n// app to get foregrounded via the webview visibility change event and request the balance\n// as long as it hasn't been refreshed too recently already\nexport function useRefreshBalanceOnForeground() {\n const { isLoggedIn } = useLogon()\n\n useEffect(() => {\n if (!isReactNativeApp || !isLoggedIn) {\n return\n }\n\n document.addEventListener('visibilitychange', refreshBalanceIfInForeground)\n return () => document.removeEventListener('visibilitychange', refreshBalanceIfInForeground)\n }, [isLoggedIn])\n}\n","import { Repository, Loading, Errored, LoadingInstance } from 'rwwa-data-access'\nimport { useState, useEffect } from 'react'\n\ninterface DataState {\n data: T | Loading | Errored\n}\n\nexport function useDataAccess(repository: Repository, key: string): DataState {\n const [state, setState] = useState>({ data: LoadingInstance })\n useEffect(() => {\n const subscription = repository.data$.distinctUntilChanged().subscribe(state => {\n const newState = repository.getFrom(state, key)\n setState({ data: newState })\n })\n return () => {\n subscription.dispose()\n }\n }, [repository, key])\n return state\n}\n","import React from 'react'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\n\ntype Features = keyof typeof FeatureFlags\n\ntype ExtractPartialType = TKey extends Features\n ? (typeof FeatureFlags)[TKey]['defaultValue'] extends boolean\n ? boolean\n : (typeof FeatureFlags)[TKey]['defaultValue']\n : never\n\ntype FeatureValueType<\n TKey extends Features,\n _TValue = ExtractPartialType,\n> = _TValue extends boolean\n ? boolean\n : _TValue extends number\n ? number\n : _TValue extends string\n ? string\n : _TValue\n\nexport function useFeature(feature: T): FeatureValueType {\n const { key } = FeatureFlags[feature]\n\n const [state, setState] = React.useState(() => {\n // initialise state from featureState$ to avoid temporarily assigning incorrect hard coded default values, i.e. avoid unnecessary rerender\n // - refer synchronous behavior: https://rxjs.dev/guide/observable#observables-as-generalizations-of-functions\n let currentValue = FeatureFlags[feature].defaultValue\n featureState$\n .subscribe(record => {\n // if unavailable (e.g. during LD initialisation), then revert to the hardcoded default value\n currentValue = record.get('features').get(key) ?? currentValue\n })\n .dispose()\n\n return currentValue\n })\n\n React.useEffect(() => {\n const subscription = featureState$\n .map(state => state.get('features').get(key))\n // if unavailable (e.g. during LD initialisation), then filter it out as we already have our state initialised, i.e. avoid unnecessary rerender\n .filter(data => data !== undefined)\n .distinctUntilChanged()\n .subscribe(data => setState(data))\n return () => subscription.dispose()\n }, [key])\n\n return state as FeatureValueType\n}\n\nexport function getFeatureValue(feature: T): Promise> {\n return new Promise(resolve => {\n featureState$.take(1).subscribe(state => {\n resolve(state.features.get(FeatureFlags[feature].key))\n })\n })\n}\n","import { state$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableProperties } from './useObservable'\n\ninterface UseLogonResult {\n isLoggedIn: boolean | null\n accountNumber: number | null\n}\n\nexport function useLogon(): UseLogonResult {\n return useObservableProperties(state$, ['isLoggedIn', 'accountNumber'], {\n isLoggedIn: null,\n accountNumber: null,\n })\n}\n","import { useState, useEffect } from 'react'\nimport { TypedRecord } from 'typed-immutable-record'\n\nexport function useObservable & T>(\n driver: Rx.Observable,\n initial: T\n): TRecord\n\nexport function useObservable(driver: Rx.Observable, initial: T): T\n\nexport function useObservable(driver: Rx.Observable, initial: T): T {\n const [state, setState] = useState(initial)\n useEffect(() => {\n const subscription = driver.distinctUntilChanged().subscribe(data => {\n setState(data)\n })\n return () => subscription.dispose()\n }, [driver])\n return state\n}\n\nexport function useObservableProperties(\n driver: Rx.Observable,\n properties: K[],\n initial: Pick\n): Pick {\n const [state, setState] = useState>(initial)\n useEffect(() => {\n const subscription = driver\n .map(value => {\n const result: Pick = {} as Pick\n properties.forEach(p => (result[p] = value[p]))\n return result\n })\n .distinctUntilChanged()\n .subscribe(data => {\n setState(data)\n })\n return () => subscription.dispose()\n }, [])\n return state\n}\n","import React from 'react'\nimport { TypedRecord } from 'typed-immutable-record'\nimport { StateMap, PoJoOrMap } from 'typings/immutable'\nconst { useState, useEffect } = React\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype PropsFromTypedRecord = Exclude, keyof TypedRecord>[]\n\ntype PickPoJoOrStateMap = {\n [P in K]: PoJoOrMap\n}\n\nexport function useObservableImmutable(\n // @ts-expect-error Legacy - use redux toolkit\n driver: Rx.Observable>,\n property: (keyof T)[]\n): PickPoJoOrStateMap\n\nexport function useObservableImmutable>(\n driver: Rx.Observable,\n property: PropsFromTypedRecord\n): Pick\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useObservableImmutable(driver: any, property: any): any {\n const [state, setState] = useState>({})\n\n useEffect(() => {\n const subscription = driver\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((val: any) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return property.reduce((accu: Record, p: any) => {\n accu[p] = val.get(p)\n return accu\n }, {})\n })\n .distinctUntilChanged()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .subscribe((data: React.SetStateAction, never>>) => {\n setState(data)\n })\n return () => subscription.dispose()\n }, [])\n\n return state\n}\n","import React from 'react'\n\nexport function usePrevious(value: T): T | undefined {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = React.useRef()\n\n // Store current value in ref\n React.useEffect(() => {\n ref.current = value\n }, [value]) // Only re-run if value changes\n\n // Return previous value (happens before update in useEffect above)\n return ref.current\n}\n","import React from 'react'\n\ninterface PriceDisplayState {\n win: string\n place: string | undefined\n}\n\ntype WpChangeTypeState = Record\n\ninterface UsePriceChangeAnimationReturnState {\n wpChangeTypeState: WpChangeTypeState\n priceDisplayState: PriceDisplayState\n}\n\ninterface UsePriceChangeAnimationReturnApi {\n setWpChangeTypeState: React.Dispatch>\n setPriceDisplayState: React.Dispatch>\n}\n\nexport type PriceChangeType = 'UP' | 'DOWN' | null\n\nexport function usePriceChangeAnimation(\n priceWin: string,\n pricePlace?: string,\n suppressAnimation = false\n): [UsePriceChangeAnimationReturnState, UsePriceChangeAnimationReturnApi] {\n const [wpChangeTypeState, setWpChangeTypeState] = React.useState({\n win: null,\n place: null,\n })\n\n const [priceDisplayState, setPriceDisplayState] = React.useState({\n win: priceWin,\n place: pricePlace,\n })\n\n const timer1IdRef = React.useRef()\n const timer2IdRef = React.useRef()\n\n const prevWinPriceRef = React.useRef()\n const prevPlacePriceRef = React.useRef()\n\n React.useEffect(() => {\n if (suppressAnimation) {\n setPriceDisplayState({ win: priceWin, place: pricePlace })\n } else {\n const winChangeType = getPriceChangeType(priceWin, prevWinPriceRef.current)\n const placeChangeType = pricePlace\n ? getPriceChangeType(pricePlace, prevPlacePriceRef.current)\n : null\n\n if (!!winChangeType || !!placeChangeType) {\n setWpChangeTypeState({ win: winChangeType, place: placeChangeType })\n\n timer1IdRef.current = window.setTimeout(() => {\n setPriceDisplayState({ win: priceWin, place: pricePlace })\n }, 750)\n\n timer2IdRef.current = window.setTimeout(() => {\n setWpChangeTypeState({ win: null, place: null })\n }, 2000)\n } else if (\n (!prevWinPriceRef.current && !!priceWin) ||\n (!prevPlacePriceRef.current && !!pricePlace) ||\n priceWin === '-' ||\n pricePlace === '-'\n ) {\n setPriceDisplayState({ win: priceWin, place: pricePlace })\n }\n }\n\n return function cleanUp() {\n if (timer1IdRef.current) {\n clearTimeout(timer1IdRef.current)\n timer1IdRef.current = undefined\n }\n if (timer2IdRef.current) {\n clearTimeout(timer2IdRef.current)\n timer2IdRef.current = undefined\n }\n }\n }, [priceWin, pricePlace, suppressAnimation])\n\n // Update previous values AFTER effect above\n React.useEffect(() => {\n prevWinPriceRef.current = priceWin\n prevPlacePriceRef.current = pricePlace\n }, [pricePlace, priceWin])\n\n const state = { wpChangeTypeState, priceDisplayState }\n const api = { setWpChangeTypeState, setPriceDisplayState }\n\n return [state, api]\n}\n\n// =======\n// Helpers\n// =======\nfunction getPriceChangeType(curr: string, prev?: string): PriceChangeType {\n if (!prev || curr === '-') {\n return null\n }\n\n const currNum = Number.parseFloat(curr) || 0\n const prevNum = Number.parseFloat(prev) || 0\n\n if (currNum > prevNum) {\n return 'UP'\n }\n if (currNum < prevNum) {\n return 'DOWN'\n }\n\n return null\n}\n","export const sortNumberAscending = (a: number, b: number) => a - b\n","export function timed unknown>(\n operation: string,\n fn: TFunc\n): ReturnType {\n if (PRODUCTION) {\n return fn() as ReturnType\n }\n\n // eslint-disable-next-line no-console\n console.time(operation)\n const result = fn() as ReturnType\n // eslint-disable-next-line no-console\n console.timeEnd(operation)\n\n return result\n}\n","import { captureException } from '@sentry/react'\n\nexport function logError(err: Error | string, logToSentry?: boolean): void {\n if (console) {\n // eslint-disable-next-line no-console\n console.error(err)\n }\n\n if (logToSentry) {\n captureException(err)\n }\n}\n","import { isErrored, type Repository } from 'rwwa-data-access'\n\nexport async function getFromRepo(repository: Repository, key: string): Promise {\n const result = await repository.getPromise(key)\n\n if (isErrored(result)) {\n throw new Error(`Unable to fetch key '${key}' from repository`)\n }\n\n return result\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n/*!\n * Amplify 1.1.2\n *\n * Copyright 2011 - 2013 appendTo LLC. (http://appendto.com/team)\n * Dual licensed under the MIT or GPL licenses.\n * http://appendto.com/open-source-licenses\n *\n * http://amplifyjs.com\n */\n\nconst subscriptions: Record<\n string,\n { callback: Function; context: Function; priority?: number }[]\n> = {}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function publish(topic: string, ...args: any[]): boolean {\n if (typeof topic !== 'string') {\n throw new Error('You must provide a valid topic to publish.')\n }\n\n const topicSubscriptions = subscriptions[topic] || []\n\n let ret = true\n for (const subscription of topicSubscriptions) {\n const result = subscription.callback.apply(subscription.context, args)\n if (result === false) {\n break\n }\n ret = false\n }\n return !ret\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function subscribe(topic: string, context: any, callback?: any, priority?: any) {\n if (typeof topic !== 'string') {\n throw new Error('You must provide a valid topic to create a subscription.')\n }\n if (arguments.length === 3 && typeof callback === 'number') {\n priority = callback\n callback = context\n context = null\n }\n if (arguments.length === 2) {\n callback = context\n context = null\n }\n priority = priority || 10\n let topicIndex = 0\n let added\n const topics = topic.split(/\\s/)\n const topicLength = topics.length\n for (; topicIndex < topicLength; topicIndex++) {\n topic = topics[topicIndex]\n added = false\n if (!subscriptions[topic]) {\n subscriptions[topic] = []\n }\n\n let i = subscriptions[topic].length - 1\n const subscriptionInfo = {\n callback: callback,\n context: context,\n priority: priority,\n }\n for (; i >= 0; i--) {\n // @ts-expect-error legacy dep\n if (subscriptions[topic][i].priority <= priority) {\n subscriptions[topic].splice(i + 1, 0, subscriptionInfo)\n added = true\n break\n }\n }\n if (!added) {\n subscriptions[topic].unshift(subscriptionInfo)\n }\n }\n return callback\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unsubscribe(topic: string, context: any, callback?: any) {\n if (typeof topic !== 'string') {\n throw new Error('You must provide a valid topic to remove a subscription.')\n }\n if (arguments.length === 2) {\n callback = context\n context = null\n }\n if (!subscriptions[topic]) {\n return\n }\n let length = subscriptions[topic].length,\n i = 0\n for (; i < length; i++) {\n if (subscriptions[topic][i].callback === callback) {\n if (!context || subscriptions[topic][i].context === context) {\n subscriptions[topic].splice(i, 1)\n\n // Adjust counter and length for removed item\n i--\n length--\n }\n }\n }\n}\n","import jQuery from 'jquery'\n\nexport function bindLiveEvent(\n eventType: string,\n elementQuerySelector: string,\n cb: (e: Event) => void\n) {\n document.addEventListener(eventType, event => {\n const qs = document.querySelectorAll(elementQuerySelector)\n\n if (!qs) return\n\n let el = event.target\n let index = -1\n while (el && (index = Array.prototype.indexOf.call(qs, el)) === -1) {\n el = (el as HTMLElement).parentElement\n }\n\n if (index > -1) {\n return cb.call(el, event)\n }\n })\n}\n\nexport function showPopup(popupDiv: JQuery) {\n //delay 50 milliseconds to allow background layout completed\n setTimeout(() => {\n jQuery('div .popup').hide()\n const documentHeight = jQuery(document).height()\n popupDiv.css({ height: documentHeight }).fadeIn('fast')\n popupDiv.children('.overlay').animate({ opacity: 0.6 }, 'fast')\n\n const scrollTop = window.pageYOffset\n ? window.pageYOffset\n : document.body.parentElement\n ? document.body.parentElement.scrollTop\n : 0\n\n const newHeight = popupDiv.children('.window').height() + scrollTop + 100\n if (newHeight > documentHeight) {\n popupDiv.children('.overlay').css({ height: newHeight })\n }\n }, 50)\n}\n","import * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport * as common from '@classic/Foundation/Common'\nimport { logDebug } from './LoggingService'\n\ncommon.bindLiveEvent(\n 'click',\n '[data-msg-publish]',\n function (this: { dataset: { msgPublish: string; msgData: unknown } }) {\n //Do not use an arrow function here (changes \"this\")\n const topic = this.dataset.msgPublish\n let data = this.dataset.msgData\n\n try {\n data = JSON.parse(data as string)\n } catch {\n //Assume a string\n }\n\n publish(topic, data)\n }\n)\n\n/** @deprecated Best to observe state changes or actions raised */\nexport function publish(topic: string, data?: unknown): void {\n amplify.publish(topic, data)\n logDebug(`MessageBusService.publish('${topic}')`)\n}\n\n/** @deprecated Best to observe state changes or actions raised */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function subscribe(topic: string, func: (x?: any) => void, context?: unknown): void {\n amplify.subscribe(topic, context, func)\n logDebug(`MessageBusService.subscribe('${topic}')`)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unsubscribe(topic: string, func: (x?: any) => void): void {\n amplify.unsubscribe(topic, func)\n logDebug(`MessageBusService.unsubscribe('${topic}')`)\n}\n","import { queryClient } from '@core/Data/ReactQuery'\nimport { serverConfigQuery } from '@core/Data/ServerConfig/query'\nimport * as gtm from './GoogleTagManagerService'\nimport * as msgBusService from '../Services/MessageBusService'\nimport * as loggingService from '../Services/LoggingService'\nimport * as dataLayer from './AnalyticsDataLayer'\n\nlet started = false\n\n// TODO: This type is incomplete. It *seems* to be related to Bet.cs in the backend\ntype Bet = {\n ModelType: string\n ExpectedCost: number\n ProductCode: string\n}\n\nfunction cleanseNumber(number: string | number): number {\n if (typeof number === 'string') {\n number = number.replace('$', '')\n }\n return parseInt(number.toString())\n}\nfunction cleanseCurrency(amount: string | number): number {\n if (typeof amount === 'string') {\n amount = amount.replace('$', '')\n }\n return parseFloat(amount.toString())\n}\n\nfunction start() {\n if (!started) {\n dataLayer.loadTrackData()\n\n msgBusService.subscribe('nav.nav', (url: string) => {\n if (url) {\n // ti-1234 - filtering to reduce adobe licence consumption\n if (!/#vision\\/home/.test(url)) {\n dataLayer.data.content.url = url\n dataLayer.saveTrackData()\n dataLayer.addToHistory('navigation', url)\n gtm.trackNav()\n }\n }\n })\n\n msgBusService.subscribe('nav.menu', function (direction) {\n dataLayer.addToHistory('menu', direction)\n if (direction === 'open') {\n gtm.trackMenu()\n }\n })\n\n msgBusService.subscribe('nav.exit', function (externalSite) {\n dataLayer.addToHistory('site exit', externalSite)\n gtm.trackExit(externalSite)\n })\n\n msgBusService.subscribe('account.processed', function (operationType) {\n dataLayer.data.user.accountOperationType = operationType\n dataLayer.saveTrackData()\n dataLayer.addToHistory('account', operationType)\n gtm.trackAccount()\n })\n\n msgBusService.subscribe('account.deposit', function (data) {\n //if (data.amount > 0) {\n dataLayer.data.deposit.amount = data.amount\n dataLayer.saveTrackData()\n //}\n dataLayer.addToHistory('deposit', JSON.stringify(dataLayer.keys.depositBaseKey + data.step))\n gtm.trackDeposit(data.step)\n })\n\n msgBusService.subscribe('lbs.checkin', function (checkInStep) {\n dataLayer.addToHistory('checkin', JSON.stringify(dataLayer.keys.checkInBaseKey + checkInStep))\n gtm.trackCheckIn(checkInStep)\n })\n\n msgBusService.subscribe('bet.single.selected', function (data) {\n dataLayer.resetBetData()\n dataLayer.data.bet.productType = 'single'\n if (data.type == 'toteracing') {\n dataLayer.data.bet.racing.tote.numberOfTickets = 1\n } else if (data.type == 'fobracing') {\n dataLayer.data.bet.racing.fixed.numberOfTickets = 1\n }\n\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.single.selected', JSON.stringify(data))\n gtm.trackBetSingleSelected()\n })\n\n msgBusService.subscribe('bet.single.review', async function () {\n dataLayer.addToHistory('bet.single.review', JSON.stringify({ mode: 'single' }))\n dataLayer.data.bet.construction = 'single'\n gtm.trackBetSingleReview()\n })\n\n msgBusService.subscribe('bet.single.receipt', async function (data) {\n dataLayer.resetBetData()\n\n dataLayer.data.bet.id = cleanseNumber(data.ticket)\n dataLayer.data.bet.productType = 'single'\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'account'\n\n switch (data.betType) {\n case 'toteracing': {\n dataLayer.data.bet.racing.tote.numberOfTickets = 1\n dataLayer.data.bet.racing.tote.cost = cleanseCurrency(data.toteBetValue)\n break\n }\n case 'fobracing': {\n const winValue = data.fobWinValue ? cleanseCurrency(data.fobWinValue) : 0\n const placeValue = data.fobPlaceValue ? cleanseCurrency(data.fobPlaceValue) : 0\n dataLayer.data.bet.racing.fixed.numberOfTickets = 1\n dataLayer.data.bet.racing.fixed.cost =\n cleanseCurrency(winValue) + cleanseCurrency(placeValue)\n if (data.specialOffer) {\n dataLayer.data.bet.specialOffers = data.specialOffer.split(',')\n }\n break\n }\n }\n\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.single.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackBetSingleReceipt()\n })\n\n msgBusService.subscribe('bet.betslip.review', function (bets: Bet[]) {\n dataLayer.resetBetData()\n let numToteRacingBets = 0\n let costOfToteRacingBets = 0\n let numFixedRacingBets = 0\n let costOfFixedRacingBets = 0\n\n for (const bet of bets) {\n const isToteBet = ['ToteRacing', 'ToteAllUpBet'].includes(bet.ModelType)\n\n if (isToteBet) {\n numToteRacingBets++\n costOfToteRacingBets += bet.ExpectedCost\n } else {\n numFixedRacingBets++\n costOfFixedRacingBets += bet.ExpectedCost\n }\n }\n\n dataLayer.data.bet.racing.tote.numberOfTickets = numToteRacingBets\n dataLayer.data.bet.racing.tote.cost = costOfToteRacingBets\n dataLayer.data.bet.racing.fixed.numberOfTickets = numFixedRacingBets\n dataLayer.data.bet.racing.fixed.cost = costOfFixedRacingBets\n\n dataLayer.data.bet.productType = 'single'\n dataLayer.data.bet.construction = 'betslip'\n dataLayer.data.bet.placementMethod = 'account'\n dataLayer.saveTrackData()\n\n dataLayer.addToHistory('bet.betslip.review', JSON.stringify({ productType: 'single' }))\n gtm.trackBetSlipReview()\n })\n\n msgBusService.subscribe('bet.betslip.receipt', function (receipt) {\n dataLayer.data.bet.id = cleanseNumber(receipt[0].TicketNumber)\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.betslip.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackBetSlipReceipt()\n })\n\n msgBusService.subscribe('bet.betslip.cash.selected', function (productType) {\n dataLayer.data.bet.productType = productType\n dataLayer.data.bet.construction = 'betslip'\n dataLayer.data.bet.placementMethod = 'cash'\n dataLayer.saveTrackData()\n\n dataLayer.addToHistory(\n 'bet.betslip.cash.selected',\n JSON.stringify({ productType: productType })\n )\n gtm.trackBetSlipCashSelected()\n })\n\n msgBusService.subscribe('bet.betslip.remove', function () {\n dataLayer.addToHistory('bet.betslip.remove', '')\n gtm.trackBetSlipClear()\n })\n\n msgBusService.subscribe('bet.betslip.clear', function () {\n dataLayer.resetBetData()\n dataLayer.addToHistory('bet.betslip.clear', '')\n gtm.trackBetSlipClear()\n })\n\n msgBusService.subscribe('bet.mystery.selected', function () {\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.mystery.selected', JSON.stringify({ betType: 'toteracing' }))\n gtm.trackMysterySelected()\n })\n\n msgBusService.subscribe('bet.mystery.review', function () {\n dataLayer.data.bet.productType = 'single'\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'account'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.mystery.review', JSON.stringify({ productType: 'single' }))\n gtm.trackMysteryReview()\n })\n\n msgBusService.subscribe('bet.mystery.receipt', function (receipt) {\n dataLayer.resetBetData()\n dataLayer.data.bet.id = cleanseNumber(receipt.tickets[0].ticketNumber)\n dataLayer.data.bet.racing.tote.numberOfTickets = receipt.tickets.length\n dataLayer.data.bet.racing.tote.cost = cleanseCurrency(receipt.totalCost)\n dataLayer.data.bet.betType = 'Mystery'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.mystery.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackMysteryReceipt()\n })\n\n msgBusService.subscribe('bet.favnumbers.selected', function () {\n dataLayer.addToHistory('bet.favnumbers.selected', JSON.stringify({ betType: 'toteracing' }))\n gtm.trackFavNumbersSelected()\n })\n\n msgBusService.subscribe('bet.favnumbers.review', function () {\n dataLayer.data.bet.productType = 'single'\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'account'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.favnumbers.review', JSON.stringify({ productType: 'single' }))\n gtm.trackFavNumbersReview()\n })\n\n msgBusService.subscribe('bet.favnumbers.receipt', function (receipt) {\n dataLayer.resetBetData()\n dataLayer.data.bet.id = cleanseNumber(receipt.tickets[0].ticketNumber)\n dataLayer.data.bet.racing.tote.numberOfTickets = receipt.tickets.length\n dataLayer.data.bet.racing.tote.cost = cleanseCurrency(receipt.totalCost)\n dataLayer.data.bet.betType = 'Favourite Numbers'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.favnumbers.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackFavNumbersReceipt()\n })\n\n msgBusService.subscribe('bet.tipping.selected', function () {\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.tipping.selected', JSON.stringify({ betType: 'totesports' }))\n gtm.trackTippingSelected()\n })\n\n msgBusService.subscribe('bet.tipping.review', function () {\n dataLayer.data.bet.productType = 'single'\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'account'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.tipping.review', JSON.stringify({ productType: 'single' }))\n gtm.trackTippingReview()\n })\n\n msgBusService.subscribe('bet.tipping.receipt', function (receipt) {\n dataLayer.resetBetData()\n dataLayer.data.bet.id = cleanseNumber(receipt.tickets[0].ticketNumber)\n dataLayer.data.bet.sports.tote.numberOfTickets = receipt.tickets.length\n dataLayer.data.bet.sports.tote.cost = cleanseCurrency(receipt.totalCost)\n dataLayer.data.bet.betType = 'Tipping'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.tipping.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackTippingReceipt()\n })\n\n msgBusService.subscribe('bet.multi.add', function () {\n dataLayer.addToHistory('bet.multi.add', JSON.stringify({ betType: 'mixed' }))\n gtm.trackMultiAdd()\n })\n\n msgBusService.subscribe('bet.multi.review', function () {\n dataLayer.data.bet.productType = 'multi'\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'account'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.multi.review', JSON.stringify({ productType: 'multi' }))\n gtm.trackMultiReview()\n })\n\n msgBusService.subscribe('bet.multi.receipt', function (receipt) {\n dataLayer.resetBetData()\n dataLayer.data.bet.id = cleanseNumber(receipt.ticketNumber)\n dataLayer.data.bet.mixed.fixed.numberOfTickets = 1\n dataLayer.data.bet.mixed.fixed.cost = cleanseCurrency(receipt.totalCost)\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.multi.receipt', JSON.stringify(dataLayer.data.bet))\n gtm.trackMultiReceipt()\n })\n\n msgBusService.subscribe('bet.multi.remove', function () {\n dataLayer.addToHistory('bet.multi.remove', '')\n gtm.trackMultiRemove()\n })\n\n msgBusService.subscribe('bet.multi.clear', function () {\n dataLayer.resetBetData()\n dataLayer.addToHistory('bet.multi.clear', '')\n gtm.trackMultiClear()\n })\n\n msgBusService.subscribe('bet.cash.selected', function (productType) {\n dataLayer.data.bet.productType = productType\n dataLayer.data.bet.construction = 'single'\n dataLayer.data.bet.placementMethod = 'cash'\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.cash.selected', JSON.stringify({ productType: productType }))\n })\n\n msgBusService.subscribe('bet.cash.receipt', function (receipt) {\n dataLayer.data.bet.id = cleanseNumber(receipt.ticket)\n\n if (dataLayer.data.bet.productType === 'multi') {\n dataLayer.resetBetData()\n dataLayer.data.bet.id = cleanseNumber(receipt.ticket)\n dataLayer.data.bet.mixed.fixed.numberOfTickets = 1\n dataLayer.data.bet.mixed.fixed.cost = cleanseCurrency(receipt.totalCost)\n }\n\n dataLayer.saveTrackData()\n dataLayer.addToHistory('bet.cash.receipt', JSON.stringify(receipt))\n })\n\n msgBusService.subscribe('bet.cash.remove', function (data) {\n dataLayer.data.bet.id = cleanseNumber(data.ticket)\n dataLayer.addToHistory('bet.cash.remove', JSON.stringify(data))\n })\n\n msgBusService.subscribe('bet.cash.clear', function () {\n dataLayer.resetBetData()\n dataLayer.addToHistory('bet.cash.clear', '')\n })\n\n msgBusService.subscribe('specialoffer.selected', function (data) {\n dataLayer.addToHistory('specialoffer.selected', JSON.stringify(data))\n dataLayer.data.specialOfferSelection = data.Title\n dataLayer.saveTrackData()\n })\n\n msgBusService.subscribe('specialoffer.cleared', function () {\n dataLayer.addToHistory('specialoffer.cleared', '')\n dataLayer.data.specialOfferSelection = null\n dataLayer.saveTrackData()\n })\n\n msgBusService.publish('analytics.started', null)\n loggingService.logDebug('AnalyticsService - started')\n started = true\n } else {\n loggingService.logDebug('AnalyticsService - already started')\n }\n}\n\nfunction stop() {\n if (started) {\n msgBusService.unsubscribe('nav.nav', gtm.trackNav)\n msgBusService.unsubscribe('nav.exit', gtm.trackExit)\n msgBusService.unsubscribe('nav.menu', gtm.trackMenu)\n\n loggingService.logDebug('AnalyticsService - stopped')\n started = false\n } else {\n loggingService.logDebug('AnalyticsService - already stopped')\n }\n}\n\nexport async function init() {\n const data = await queryClient.fetchQuery(serverConfigQuery)\n if (data.enableAnalytics) start()\n else stop()\n}\n","import ko from 'knockout'\nimport template from './modal-template.tpl.html'\n\nko.components.register('tt-modal', {\n viewModel: {\n createViewModel: (params: { viewModel: unknown }) => params.viewModel,\n },\n template: template,\n})\n","import ko from 'knockout'\nimport jQuery from 'jquery'\nimport * as stateMachine from 'rwwa-rx-state-machine'\nimport * as bodyScrollLock from '@mobi/utils/functions/bodyScrollLock'\nimport * as modalIntents from '@classic/AppUtils/Framework/Intent/modal'\nimport * as navigationIntents from '@classic/AppUtils/Framework/Intent/navigation'\nimport * as messageBus from '@classic/Foundation/Services/MessageBusService'\nimport * as analytics from '@classic/Foundation/Analytics/Analytics'\n\nimport './modal-register'\n\nexport const close = modalIntents.close\n\nexport const open = (title: string, component: unknown) => {\n modalIntents.open({ component, title })\n}\nconst back = navigationIntents.modalNavigateBack\n\nexport function init() {\n window.addEventListener('hashchange', close)\n const element = document.getElementById('modal-container-host')\n if (element) {\n ko.cleanNode(element)\n }\n ko.applyBindings({ viewModel }, element)\n}\n\nconst defaultState = {\n title: 'No title',\n isOpen: false,\n close,\n component: null,\n showBackButton: false,\n back,\n}\n\nfunction setState(currentState: Record, state: Record) {\n return Object.assign({}, currentState, state)\n}\n\nfunction modalDriver(state: Record, intent: stateMachine.Signal) {\n state = state || defaultState\n\n switch (intent.tag) {\n case modalIntents.open: {\n analytics.trackModalState(true, intent.data.title)\n if (document.body.classList.contains('js-has-open-modal'))\n publishModalClose(state.title as string)\n\n const modalEl = document.getElementById('modal-container')\n bodyScrollLock.registerBodyScrollLock(modalEl as HTMLDivElement)\n\n const capturedTop = getScrollTop()\n setScrollTop(0)\n\n document.body.classList.add('js-has-open-modal')\n\n return setState(state, {\n capturedTop: capturedTop,\n isOpen: true,\n title: intent.data.title,\n component: intent.data.component,\n })\n }\n\n case modalIntents.close: {\n analytics.trackModalState(false, '')\n document.body.classList.remove('js-has-open-modal')\n\n setScrollTop(state.capturedTop as number)\n publishModalClose(state.title as string)\n\n const modalEl = document.getElementById('modal-container')\n bodyScrollLock.deregisterBodyScrollLock(modalEl as HTMLDivElement)\n\n return setState(state, { isOpen: false })\n }\n }\n return state\n}\n\nconst $modalState = stateMachine.attachDriver({ path: 'modal', driver: modalDriver })\n\nconst viewModel = {\n title: ko.observable().extend({ deferred: true }),\n isOpen: ko.observable().extend({ deferred: true }),\n close: close,\n showBackButton: ko.observable().extend({ deferred: true }),\n back: back,\n component: ko.observable().extend({ deferred: true }),\n}\n\n;(viewModel as unknown as { displayComponent: unknown }).displayComponent = ko\n .pureComputed(() => viewModel.isOpen() && viewModel.component())\n .extend({ deferred: true })\n\n$modalState\n .distinctUntilChanged()\n .combineLatest(navigationIntents.navigationState$, function (modal, nav) {\n return { modal: modal, nav: nav }\n })\n .subscribe(function (state) {\n viewModel.title(state.modal.title)\n viewModel.isOpen(state.modal.isOpen)\n viewModel.showBackButton(state.nav.size)\n if (viewModel.component() !== (state.modal && state.modal.component)) {\n viewModel.component(state.modal.component)\n }\n })\n\nfunction publishModalClose(title: string) {\n messageBus.publish('modal.did_close', { title: title })\n}\n\nfunction setScrollTop(scrollTop: number) {\n jQuery('html, body').animate({ scrollTop }, 0)\n}\n\nfunction getScrollTop() {\n // if the element is not scrolled, it will (should) return 0\n return Math.max(jQuery('body').scrollTop(), jQuery('html').scrollTop())\n}\n","import { AppRoutes } from '@core/AppRoutes'\nimport { KAMBI_HOME_HASH_ROUTE } from '@core/Areas/Kambi/constants'\nimport { getNewSportsSetting } from '@core/Areas/Settings/Store/selectors'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { store } from '@core/Store'\nimport { FeatureFlags } from '@mobi/settings'\n\nexport const navigateToSportsPath = () => {\n featureState$.take(1).subscribe(state => {\n const isNewSportsFeatureActive = state.features.get(\n FeatureFlags.FIXED_ODDS_SPORTS.key\n ) as boolean\n const isNewSportsFeatureSettingActive = getNewSportsSetting(store.getState())\n\n window.location.href =\n isNewSportsFeatureActive && isNewSportsFeatureSettingActive\n ? AppRoutes.Sports.replace('/', '#')\n : KAMBI_HOME_HASH_ROUTE\n })\n}\n","import { isReactNativeApp, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { store } from '@core/Store'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { closeAllModals } from '@core/Components/Modal'\nimport { toggleIsDropDownOpen, toggleIsHamburgerMenuOpen } from '@core/Areas/AppHeader/Store'\nimport { setIsLoginShown } from '@core/Areas/Login/Store'\nimport { navigateToLastRacesPath } from '@core/State/Navigation/helpers/navigateToLastRacesPath'\nimport { navigateToSportsPath } from '@core/State/Navigation/helpers/navigateToSportsPath'\n\nexport const startDeepLinkingListeners = (): void => {\n if (isReactNativeApp) {\n subscribeToNative('DEEP_LINK_OPEN', ({ url }) => {\n try {\n closeAllPopups()\n const urlObject = new URL(url)\n const isSearchParamOnly = urlObject.search.includes('=') && urlObject.hash.length === 0\n\n window.location.href =\n urlObject.hostname === window.location.hostname\n ? isSearchParamOnly\n ? urlObject.search\n : urlObject.hash\n : urlObject.href\n } catch {\n // eslint-disable-next-line no-console\n console.error('Bad deep link')\n }\n })\n\n subscribeToNative('NAVIGATE_WEB_RACES', navigateToLastRacesPath)\n subscribeToNative('NAVIGATE_WEB_SPORTS', navigateToSportsPath)\n }\n}\n\nfunction closeAllPopups() {\n OverlayClose()\n store.dispatch(toggleIsHamburgerMenuOpen(false))\n store.dispatch(toggleIsDropDownOpen(false))\n store.dispatch(closeAllModals())\n store.dispatch(setIsLoginShown({ shouldShow: false }))\n}\n","import { UserAccountStateRecord } from '@core/State/UserAccount/userAccountDriver'\n\nconst WESTERN_AUSTRALIA = 'AU_WESTERN_AUSTRALIA'\nconst SOUTH_AUSTRALIA = 'AU_SOUTH_AUSTRALIA'\n\nexport type KambiRegulationId = typeof WESTERN_AUSTRALIA | typeof SOUTH_AUSTRALIA\n\nconst AU_COUNTRY_CODE = 'AU'\nconst SA_STATE_CODE = 'SA'\n\nexport function isUserResidentOfSA(\n residentialDetail: UserAccountStateRecord['residentialDetail']\n): boolean {\n if (!residentialDetail) return false\n\n const [country, state] = residentialDetail.toArray()\n return country === AU_COUNTRY_CODE && state === SA_STATE_CODE\n}\n\nexport function isUserAccountStatePending(userAccountRecord: UserAccountStateRecord): boolean {\n return (\n // Login state not ready\n userAccountRecord.isLoggedIn === null ||\n // Login state is true but residential detail not ready\n (userAccountRecord.isLoggedIn && !userAccountRecord.residentialDetail)\n )\n}\n\nexport function determineUserRegulationId(\n residentialDetail: UserAccountStateRecord['residentialDetail']\n): typeof WESTERN_AUSTRALIA | typeof SOUTH_AUSTRALIA {\n return isUserResidentOfSA(residentialDetail) ? SOUTH_AUSTRALIA : WESTERN_AUSTRALIA\n}\n","import * as cookies from 'js-cookie'\n\nexport function isCookieSet(cookieName: string) {\n return getCookieValue(cookieName) !== undefined\n}\n\nexport function getCookieValue(cookieName: string): string | undefined {\n return cookies.get(cookieName)\n}\n\nexport function setCookieValue(\n cookieName: string,\n value: string,\n options?: cookies.CookieAttributes\n) {\n cookies.set(cookieName, value, options)\n}\n\nexport function clearCookieValue(cookieName: string) {\n cookies.remove(cookieName)\n}\n","import { ApiServiceError, post } from '@classic/Foundation/Services/ApiService'\nimport { isUserAccountStatePending } from '@core/Areas/Kambi/helpers/regulation'\nimport { getLastKnownLocation, getLastKnownVenue } from './Location/LocationService'\n\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { getCookieValue } from '@classic/Foundation/Services/CookieService'\n\ninterface IMetadata {\n latitude?: number\n longitude?: number\n deviceIdentifier?: string\n pulseLocationId?: number\n}\n\nexport function startMetadataStatusUpdate(): void {\n setInterval(updateMetadata, 300000)\n}\n\nexport const updateMetadata = async (): Promise => {\n const { isLoggedIn } = await userAccountState$\n .skipWhile(isUserAccountStatePending)\n .take(1)\n .toPromise()\n\n if (isLoggedIn) {\n const gpsPosition = getLastKnownLocation()\n const pulseLocation = getLastKnownVenue()\n\n const metadata: IMetadata = {\n latitude: Number(gpsPosition?.latitude),\n longitude: Number(gpsPosition?.longitude),\n deviceIdentifier: getCookieValue('tt-dv'),\n pulseLocationId: Number(pulseLocation?.venueId),\n }\n\n post({\n url: '/api/metadata/update-metadata',\n body: metadata,\n }).catch(e => {\n if (e instanceof ApiServiceError && e.response.status === 403) {\n /* this can happen when auth cookie expires but state machine\n thinks user is still logged in. Handle silently so global error handler\n doesn't cause a sentry error event */\n return Promise.resolve()\n } else {\n return Promise.reject(e)\n }\n })\n }\n}\n","import dayjs from 'dayjs'\nimport { subscribeToNative, sendToNative, isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { AuthStatus, updatePushNotificationsAuthStatus } from '@core/Data/Account/pushNotifications'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\n\nconst AuthStatusLocalStorageKey = 'push-notification-auth-status'\nconst AuthStatusUpdatePeriodHours = 24\n\nexport function startPushNotificationsAuthStatus(): void {\n if (isReactNativeApp) {\n userAccountState$\n .where(state => !!state.isLoggedIn)\n .take(1)\n .subscribe(state => {\n const { dispose } = subscribeToNative('RESPONSE_PUSH_AUTH_STATUS', payload => {\n try {\n const persistedAuthStatus = getFromLocalStorage(AuthStatusLocalStorageKey)\n const oldStatus = persistedAuthStatus\n ? (JSON.parse(persistedAuthStatus) as AuthStatus)\n : null\n\n const newStatus: AuthStatus = {\n deviceId: payload.deviceId,\n status: payload.status,\n accountNumber: state.accountNumber,\n lastUpdated: new Date(),\n }\n\n if (\n !oldStatus ||\n newStatus.deviceId !== oldStatus.deviceId ||\n newStatus.status !== oldStatus.status ||\n newStatus.accountNumber !== oldStatus.accountNumber ||\n dayjs(newStatus.lastUpdated).diff(oldStatus.lastUpdated, 'hours', true) >=\n AuthStatusUpdatePeriodHours\n ) {\n // eslint-disable-next-line no-console\n console.log('syncing push notification auth status: ', newStatus)\n setInLocalStorage(AuthStatusLocalStorageKey, JSON.stringify(newStatus))\n updatePushNotificationsAuthStatus(newStatus)\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error updating push notification auth status:', e)\n }\n dispose()\n })\n\n sendToNative('REQUEST_PUSH_AUTH_STATUS')\n })\n }\n}\n","import * as apiService from '@classic/Foundation/Services/ApiService'\nimport { UserAccountStateRecord } from '@core/State/UserAccount/userAccountDriver'\nimport { Contract } from '@mobi/web-native-comms'\n\nexport interface AuthStatus {\n deviceId?: Contract['RESPONSE_PUSH_AUTH_STATUS']['deviceId']\n status?: Contract['RESPONSE_PUSH_AUTH_STATUS']['status']\n accountNumber: UserAccountStateRecord['accountNumber']\n lastUpdated: Date\n}\n\nexport function updatePushNotificationsAuthStatus(body: AuthStatus) {\n return apiService.post({\n url: '/api/account/updatePushNotificationsAuthStatus',\n body,\n })\n}\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\n\nlet hidden = 'hidden'\nlet visibilityChange = 'visibilitychange'\nif (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hidden = 'hidden'\n visibilityChange = 'visibilitychange'\n} else if (typeof document.msHidden !== 'undefined') {\n hidden = 'msHidden'\n visibilityChange = 'msvisibilitychange'\n} else if (typeof document.webkitHidden !== 'undefined') {\n hidden = 'webkitHidden'\n visibilityChange = 'webkitvisibilitychange'\n}\n\ninterface DeviceState {\n hidden: boolean\n hiddenLastChange: number\n onLine: boolean\n fcmToken?: string\n fcmTokenStatus?: string\n}\n\nexport const defaultDeviceState: DeviceState = {\n hidden: false,\n hiddenLastChange: Date.now(),\n onLine: true,\n fcmToken: '',\n fcmTokenStatus: '',\n}\n\ndocument.addEventListener(\n visibilityChange,\n () => {\n StateChanged({\n hidden: document[hidden as keyof typeof document] as boolean,\n hiddenLastChange: Date.now(),\n })\n },\n false\n)\n\n// native app doesn't trigger visiblitychange event consistently\n// this is workaround\nlet lastFired = new Date().getTime()\nwindow.setInterval(() => {\n const now = new Date().getTime()\n if (now - lastFired > 5000) {\n StateChanged({ hidden: false, hiddenLastChange: Date.now() })\n }\n lastFired = now\n}, 1000)\n\nwindow.addEventListener('offline', () => StateChanged({ onLine: navigator.onLine }))\nwindow.addEventListener('online', () => StateChanged({ onLine: navigator.onLine }))\n\nexport const FcmTokenUpdated = createSignal<{ fcmTokenStatus: string; fcmToken: string }>(\n 'FcmTokenUpdated'\n)\nconst StateChanged = createSignal>('DeviceStateChanged')\n\ninterface DeviceStateRecord extends TypedRecord, DeviceState {}\nconst DeviceStateFactory = makeTypedFactory(defaultDeviceState)\n\nexport function deviceStateDriver(state = DeviceStateFactory(), signal: Signal): DeviceStateRecord {\n switch (signal.tag) {\n case StateChanged:\n return state.mergeDeep(signal.data)\n case FcmTokenUpdated:\n return state.merge({\n fcmToken: signal.data.fcmToken,\n fcmTokenStatus: signal.data.fcmTokenStatus,\n })\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n path: 'deviceState',\n driver: deviceStateDriver,\n}).debounce(500)\n","import { FcmTokenUpdated } from '@core/State/Device'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { subscribeToNative, isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { store } from '@core/Store'\nimport { registerNotifications } from '@core/Areas/Notifications/Store'\nimport { NotificationTime } from '@core/Areas/Notifications/types'\n\n// Get FCM Token from native app then call API / registrations\n// and get all notification registrations for that FCM Token\nexport function startRaceKeyNotification() {\n if (!isReactNativeApp) return\n const { dispose } = subscribeToNative(\n 'RESPONSE_FCM_REGISTRATION_TOKEN_SUCCESS',\n (data: { token: string }) => {\n dispose()\n handleFCMToken(data)\n }\n )\n sendToNative('REQUEST_FCM_REGISTRATION_TOKEN')\n}\n\nfunction handleFCMToken(data: { token: string }) {\n const fcmToken = data.token\n\n FcmTokenUpdated({ fcmToken, fcmTokenStatus: 'Success' })\n\n get({ url: `/api/notification/registrations?token=${fcmToken}` }).then(notifs => {\n // a notification is returned from api as '|'\n store.dispatch(\n registerNotifications(\n notifs.map(x => {\n const [eventId, times] = x.split('|', 2)\n return {\n eventId,\n notificationTimes:\n times?.split(',').map(x => parseInt(x, 10) as NotificationTime) || [],\n }\n })\n )\n )\n })\n}\n","import { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\nexport const startWebviewIsAliveListener = (): void => {\n if (!isReactNativeApp) return\n\n subscribeToNative('REQUEST_WEBVIEW_IS_ALIVE', () => {\n sendToNative('RESPONSE_WEBVIEW_IS_ALIVE')\n })\n}\n","import * as ko from 'knockout'\nimport React from 'react'\nimport { createRoot, Root } from 'react-dom/client'\nimport { Provider } from 'react-redux'\nimport { QueryClientProvider } from 'react-query'\nimport { store } from '@core/Store'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\n\nconst mapOfReactRoots = new WeakMap()\n\nko.bindingHandlers.react = {\n init: (element: Element) => {\n ko.utils.domNodeDisposal.addDisposeCallback(element, () => {\n const root = mapOfReactRoots.get(element)\n setTimeout(() => {\n root?.unmount()\n mapOfReactRoots.delete(element)\n })\n })\n return { controlsDescendantBindings: true }\n },\n\n update: (\n element: Element,\n valueAccessor: () => ko.MaybeSubscribable>,\n allBindingsAccessor?\n ) => {\n const componentType = ko.unwrap(valueAccessor())\n const options = ko.unwrap(allBindingsAccessor?.())\n\n if (options && componentType) {\n const props = ko.toJS(options.props)\n const nonObservables = options.nonObservables ?? {}\n\n let wrappedComponent = React.createElement(componentType, { ...props, ...nonObservables })\n\n if (options.shouldWrapWithRedux) {\n // @ts-expect-error Typing issue\n wrappedComponent = React.createElement(Provider, { store }, wrappedComponent)\n }\n\n if (options.shouldWrapWithReactQuery) {\n // @ts-expect-error Typing issue\n wrappedComponent = React.createElement(\n QueryClientProvider,\n { client: queryClient },\n wrappedComponent\n )\n }\n\n let root: Root\n if (mapOfReactRoots.has(element)) {\n root = mapOfReactRoots.get(element) as Root\n } else {\n root = createRoot(element)\n mapOfReactRoots.set(element, root)\n }\n root.render(wrappedComponent)\n }\n },\n}\n","import { getToteRaceEventTopic } from 'tabtouch-push-contract'\n\nexport const getFobPriceChangeTopic = (marketId: string): string => {\n return `tabtouch/fob/market/${marketId}/#`\n}\n\nexport const getFobSportsPriceChangeTopic = (\n marketId: number,\n outcomeId: number,\n marketTypeCode: string\n): string => {\n return `tabtouch/sports/market/${marketId}/outcome/${outcomeId}/${marketTypeCode}/price-changed`\n}\n\nexport const getFobMarketSettlementTopic = (marketId: string): string => {\n return `tabtouch/fob/market/${marketId}/settlement`\n}\n\ntype ToteRaceStatus =\n | 'priceChanged'\n | 'statusChanged'\n | 'acceptorChanged'\n | 'poolCompleted'\n | 'resultsDelay'\n | 'abandonedChanged'\n | 'all'\n\nexport const getToteRaceTopic = (raceId: string, option: { type: ToteRaceStatus }): string => {\n if (option.type === 'priceChanged') {\n return `tabtouch/tote/race/${raceId}/price-changed`\n }\n\n if (option.type === 'statusChanged') {\n return `tabtouch/tote/race/${raceId}/status-changed`\n }\n\n if (option.type === 'resultsDelay') {\n return `tabtouch/tote/race/${raceId}/delay-results-changed`\n }\n\n if (option.type === 'poolCompleted') {\n return `tabtouch/tote/race/${raceId}/pool-completed`\n }\n\n if (option.type === 'acceptorChanged') {\n return `tabtouch/tote/race/${raceId}/acceptor/#`\n }\n\n if (option.type === 'abandonedChanged') {\n return `tabtouch/tote/race/${raceId}/abandon-changed`\n }\n\n return `tabtouch/tote/race/${raceId}/#`\n}\n\nexport const getToteRaceTopics = (raceId: string, options: ToteRaceStatus[]): string[] => {\n return options.map(type => getToteRaceTopic(raceId, { type }))\n}\n\nexport function getAccountTopic(accountNumber: number): string {\n return `tabtouch/account/${accountNumber}/#`\n}\n\nexport const getFobPriceChangeByPropositionTopic = (propositionId: string | number): string => {\n return `tabtouch/fob/market/+/prop/${propositionId}/price-changed`\n}\n\nconst getRaceBroadcast = (): string => {\n return getToteRaceEventTopic('+') // Want to subscribe to all race broadcast events. '+' is the wildcard for this.\n}\n\nexport const getGlobalPushSubscriptions = (): string[] => {\n // Array of all of the topics we wish to globally subscribe to at startup\n return [getRaceBroadcast()]\n}\n","import { fromJS } from 'immutable'\nimport { attachDriver, createSignal, Signal } from 'rwwa-rx-state-machine'\nimport { StateMap } from 'typings/immutable'\n\nexport interface KambiState {\n isVisible: boolean\n isLoggedIn: boolean\n isBetslipMaximized: boolean\n logoutToken: string | null\n loginPending: boolean\n isKambiRendered: boolean\n playerSessionId?: string\n isBrowserSupported: boolean\n}\n\nexport const DisplayKambiClient = createSignal('DisplayKambi')\nexport const HideKambiClient = createSignal('HideKambi')\nexport const LoggedInKambiPlayer = createSignal('LoggedInKambi')\nexport const LoggedOutKambiPlayer = createSignal('LoggedOutKambi')\nexport const BeginKambiLogin = createSignal('BeginKambiLogin')\nexport const EndKambiLogin = createSignal('EndKambiLogin')\nexport const RemoveKambiSpinner = createSignal('RemoveKambiSpinner')\nexport const UnsupportedBrowser = createSignal('UnsupportedBrowser')\n\n/** This is ONLY used to track Kambi state - use wapi.set() to change betslip maximize */\nexport const UpdateBetslipMaximized = createSignal('UpdateBetslipMaximized')\n\n/** This is ONLY used to track kambi user state - DO NOT change */\nexport const UpdateUserData = createSignal('UpdateUserData')\n\nexport const defaultState: KambiState = {\n isVisible: false,\n isLoggedIn: false,\n isBetslipMaximized: false,\n logoutToken: null,\n loginPending: false,\n isKambiRendered: false,\n isBrowserSupported: true,\n}\n\nexport type KambiStateStateMap = StateMap\n\nexport function driver(state = fromJS(defaultState), signal: Signal): KambiStateStateMap {\n switch (signal.tag) {\n case DisplayKambiClient: {\n return state.merge({ isVisible: true })\n }\n\n case HideKambiClient: {\n return state.merge({ isVisible: false })\n }\n\n case BeginKambiLogin: {\n return state.merge({ loginPending: true })\n }\n\n case EndKambiLogin: {\n return state.merge({ loginPending: false })\n }\n\n case LoggedInKambiPlayer: {\n return state.merge({ isLoggedIn: true, logoutToken: signal.data, loginPending: false })\n }\n\n case LoggedOutKambiPlayer: {\n return state.merge({ isLoggedIn: false, logoutToken: null, loginPending: false })\n }\n\n case UpdateBetslipMaximized: {\n return state.merge({\n isBetslipMaximized: signal.data,\n })\n }\n\n case UpdateUserData: {\n return state.merge({\n playerSessionId: signal.data,\n })\n }\n\n case RemoveKambiSpinner: {\n return state.merge({\n isKambiRendered: true,\n })\n }\n\n case UnsupportedBrowser: {\n return state.merge({\n isBrowserSupported: false,\n isKambiRendered: true,\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n driver,\n path: 'kambi',\n})\n","import { state$ as kambiState$ } from '@core/Areas/Kambi/driver'\n\ninterface KambiHistoryResponse {\n historyCoupons: unknown\n range: { start: number; size: number; more: boolean }\n}\n\nexport const kambiPlayerApi = () => {\n return {\n PendingBetHistory: pendingBetHistory,\n }\n}\n\nasync function pendingBetHistory(): Promise {\n const kambiState = await kambiState$.take(1).toPromise()\n const playerSessionId = kambiState.get('playerSessionId')\n\n if (!playerSessionId) return undefined\n\n let betHistory\n try {\n const response = await fetch(\n `${window._kc.apiPlayerBaseUrl}coupon/history?range_size=100&range_start=0&status=PENDING`,\n {\n credentials: 'same-origin',\n headers: {\n authorization: `Bearer ${playerSessionId}`,\n },\n }\n )\n\n betHistory =\n response.status === 204\n ? (response.text() as unknown as KambiHistoryResponse)\n : response.json()\n } catch {\n // eslint-disable-next-line no-console\n console.error('Fail to fetch sports bet history')\n return undefined\n }\n\n return betHistory\n}\n","import { get } from '@classic/Foundation/Services/ApiService'\nimport { kambiPlayerApi } from '@core/Areas/Kambi/helpers/kambiPlayerApi'\n\n// ======\n// Racing\n// ======\n\nexport type PendingTicketsCountResponse = { pendingTicketsCount?: number }\n\nexport const fetchRacePendingTicketsCount = () =>\n get({\n url: '/$_/accountActivity/tickets/pending/count',\n })\n\n// =====\n// Kambi\n// =====\n\nexport type KambiPendingTicketsCountResponse = number | undefined\n\nexport const fetchKambiPendingTicketCount = async () => {\n try {\n const response = await kambiPlayerApi().PendingBetHistory()\n\n return response?.range.size\n } catch {\n return undefined\n }\n}\n","import { UseQueryOptions } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport {\n fetchKambiPendingTicketCount,\n fetchRacePendingTicketsCount,\n type PendingTicketsCountResponse,\n type KambiPendingTicketsCountResponse,\n} from './api'\n\nconst enum LocalConstants {\n PollingTimeMs = 1_000 * 60 * 15,\n}\n\nconst pollingQueryOptions: UseQueryOptions = {\n refetchOnWindowFocus: true,\n refetchOnMount: true,\n cacheTime: LocalConstants.PollingTimeMs,\n staleTime: LocalConstants.PollingTimeMs,\n refetchInterval: LocalConstants.PollingTimeMs,\n} as const\n\n// ======\n// Racing\n// ======\n\nexport const racingPendingTicketsQuery: UseQueryOptions = {\n queryKey: queryKeys.pendingTicketsCount,\n queryFn: fetchRacePendingTicketsCount,\n} as const\n\nexport const racingPendingTicketsPollingQuery: UseQueryOptions = {\n ...racingPendingTicketsQuery,\n ...(pollingQueryOptions as UseQueryOptions),\n}\n\n// =====\n// Kambi\n// =====\n\nexport const kambiPendingTicketsQuery: UseQueryOptions = {\n queryKey: queryKeys.kambiPendingTicketsCount,\n queryFn: fetchKambiPendingTicketCount,\n} as const\n\nexport const kambiPendingTicketsPollingQuery: UseQueryOptions = {\n ...kambiPendingTicketsQuery,\n ...(pollingQueryOptions as UseQueryOptions),\n} as const\n","import { queryClient } from '@core/Data/ReactQuery'\nimport { kambiPendingTicketsPollingQuery, racingPendingTicketsPollingQuery } from './queries'\n\nexport function invalidateRacingPendingTicketsQueryData() {\n queryClient.invalidateQueries(racingPendingTicketsPollingQuery)\n}\n\nexport function invalidateKambiPendingTicketsQueryData() {\n queryClient.invalidateQueries(kambiPendingTicketsPollingQuery)\n}\n","// @ts-expect-error No types for library\nimport * as awsIot from 'aws-iot-device-sdk'\nimport { CognitoIdentityCredentials, AWSError } from 'aws-sdk/global'\nimport Rx from 'rx'\nimport { PushEvent } from 'tabtouch-push-contract'\n\nexport type EventNotificationApiSettings = {\n url: string\n region: string\n identityPoolId: string\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet mqttClient: any\nlet environmentConfig: EventNotificationApiSettings\nlet cognitoCredentials: CognitoIdentityCredentials | null\nlet logging = false\n\nconst topicRefCount: Record = {}\n\nexport const internalEvent$ = new Rx.Subject()\n\nexport const event$ = internalEvent$\n .groupBy(event => event.topic)\n .flatMap(group =>\n group\n .scan((acc: EventData, curr: EventData) => {\n if (\n !acc ||\n (curr.payload.sequence && curr.payload.sequence > acc.payload.sequence) ||\n (curr.payload.emitterTimestamp &&\n curr.payload.emitterTimestamp > acc.payload.emitterTimestamp)\n ) {\n return curr\n }\n\n return acc\n })\n .distinctUntilChanged()\n .debounce(200)\n )\n\nconst cachedTopics: string[] = []\n\nexport interface EventData {\n topic: string\n payload: PushEvent\n}\n\nconst decodeMessage = (message: unknown) => {\n if (!message) {\n return null\n }\n\n const payload = JSON.parse(message.toString())\n return payload\n}\n\nconst generateClientId = () => {\n return `mqttjs_${Math.random().toString(16).substr(2, 8)}`\n}\n\nlet connectionCloseCounter = 0\nlet connectionCloseLastSeen: number = Number.MAX_SAFE_INTEGER\nlet resetMqttClient = false\nlet clientId: string\n\nconst startMqtt = (accessKeyId: string, secretAccessKey: string, sessionToken: string) => {\n clientId = generateClientId()\n mqttClient = awsIot.device({\n region: environmentConfig.region,\n host: environmentConfig.url,\n protocol: 'wss',\n maximumReconnectTimeMs: 32000,\n debug: false,\n accessKeyId,\n secretKey: secretAccessKey,\n sessionToken,\n clientId,\n })\n\n mqttClient.on('connect', () => {\n if (resetMqttClient) {\n resetMqttClient = false\n for (const topic in topicRefCount) {\n if (Object.prototype.hasOwnProperty.call(topicRefCount, topic)) {\n mqttClient.subscribe(topic)\n }\n }\n }\n\n if (cachedTopics.length > 0) {\n iotSubscribeTopics(cachedTopics)\n cachedTopics.length = 0\n }\n })\n\n mqttClient.on('reconnect', () => logError('Iot reconnect'))\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mqttClient.on('message', (topic: string, payload: any) => {\n const parsedPayload = decodeMessage(payload)\n logInfo('Received', topic, parsedPayload)\n internalEvent$.onNext({ topic, payload: parsedPayload })\n })\n\n // FIXME: Close is getting called very often\n mqttClient.on('close', () => {\n if (Date.now() - connectionCloseLastSeen < 30000) {\n connectionCloseLastSeen = Date.now()\n } else {\n connectionCloseLastSeen = Number.MAX_SAFE_INTEGER\n connectionCloseCounter = 0\n }\n connectionCloseCounter++\n\n if (connectionCloseCounter === 3) {\n logError('IoT connection closes too often, try to reset')\n mqttClient.end(true)\n resetMqttClient = true\n getCredentialsForIot(\n cognitoCredentials as CognitoIdentityCredentials,\n (key: string, secret: string, session: string) => {\n startMqtt(key, secret, session)\n }\n )\n }\n\n if (connectionCloseCounter === 4) {\n // if close still happens after resetMqttClient, log it\n logError('IoT connection closes too often, fail to fix by resetting')\n }\n })\n\n mqttClient.on('error', (error: Event) => {\n getCredentialsForIot(\n cognitoCredentials as CognitoIdentityCredentials,\n (key: string, secret: string, session: string) => {\n mqttClient.updateWebSocketCredentials(key, secret, session)\n }\n )\n\n logError(`Iot error: ${error.currentTarget && error.currentTarget.toString()}`)\n })\n}\n\nconst getCredentialsForIot = (\n credentials: CognitoIdentityCredentials,\n callback: (accesskeyId: string, secretAccessKey: string, sessionToken: string) => void\n) => {\n if (!credentials) {\n logError('credentials object is null')\n return\n }\n\n credentials.get((err: AWSError) => {\n if (!err) {\n callback(credentials.accessKeyId, credentials.secretAccessKey, credentials.sessionToken)\n } else {\n logError(err.toString())\n }\n })\n}\n\nexport const iotInitClient = (eventNotificationApiSettings: EventNotificationApiSettings) => {\n if (mqttClient) return\n\n environmentConfig = eventNotificationApiSettings\n logInfo('Init')\n cognitoCredentials = new CognitoIdentityCredentials(\n {\n IdentityPoolId: environmentConfig.identityPoolId,\n },\n {\n region: environmentConfig.region,\n }\n )\n getCredentialsForIot(cognitoCredentials, startMqtt)\n}\n\nexport const iotCloseClient = () => {\n if (!mqttClient) return\n\n mqttClient.end()\n mqttClient = null\n}\n\nconst iotRemoveTopicsfromCache = (topics: string[]) => {\n topics.forEach(topic => {\n const index = cachedTopics.findIndex(v => v === topic)\n if (index >= 0) {\n cachedTopics.splice(index, 1)\n }\n })\n}\n\nexport const iotSubscribeTopics = (topics: string[]): Rx.Observable => {\n if (!mqttClient) {\n topics.forEach(topic => cachedTopics.push(topic))\n } else {\n logInfo('Subscribing topics', topics)\n topics.forEach(topic => {\n topicRefCount[topic] = (topicRefCount[topic] || 0) + 1\n if (topicRefCount[topic] === 1) {\n mqttClient.subscribe(topic)\n }\n })\n }\n return event$\n}\n\nexport const iotUnsubscribeTopics = (topics: string[]): void => {\n iotRemoveTopicsfromCache(topics)\n if (mqttClient) {\n logInfo('Unsubscribing topics', topics)\n topics.forEach(topic => {\n if (topicRefCount[topic] > 0) {\n topicRefCount[topic]--\n }\n\n if (topicRefCount[topic] === 0) {\n mqttClient.unsubscribe(topic)\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete topicRefCount[topic]\n }\n })\n }\n}\n\n/*\n * Utils\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst logInfo = (message: string, ...optionalParams: any[]) => {\n if (logging) {\n // eslint-disable-next-line no-console\n console.log(`iot: ${message}`, ...optionalParams)\n }\n}\n\n// eslint-disable-next-line no-console\nconst logError = (err: Error | string): void => console?.error(err)\n\nif (window) {\n window.iot = window.iot || {\n getClientId: () => clientId,\n enableLogging: () => (logging = true),\n\n // eslint-disable-next-line no-console\n getSubscriptions: () => console.table(topicRefCount),\n }\n}\n","import { iotInitClient } from '@mobi/utils/awsiot'\nimport { serverConfigQuery } from '@core/Data/ServerConfig/query'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\n\nqueryClient.fetchQuery(serverConfigQuery).then(serverConfig => {\n iotInitClient(serverConfig.eventNotificationApi)\n})\n","import { Observable, IDisposable } from 'rx'\nimport { FeatureFlags } from '@mobi/settings'\nimport { getAccountTopic } from '@mobi/utils/awsiot/topics'\nimport { balanceUpdate, payIdUpdate } from '@mobi/account/Utils/iotEvents'\nimport { invalidateRacingPendingTicketsQueryData } from '@core/Data/Account/PendingTicketsCount/helpers'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport {\n iotSubscribeTopics,\n iotUnsubscribeTopics,\n isAccountBalanceChangedPushEvent,\n} from '../PushData'\nimport { state$ as featureState$ } from '../LaunchDarklyFeatures/driver'\nimport { state$ as userAccountState$ } from './userAccountDriver'\nimport { fetchAccountBalanceAsync } from './async-signals'\n\nlet pushDataSubscription: IDisposable | null = null\n\nexport const register = (): void => {\n let accountNumberLoggedIn: number | null = null\n\n Observable.combineLatest(\n userAccountState$,\n featureState$,\n ({ isLoggedIn, accountNumber }, featureStateRecord) => ({\n isLoggedIn,\n accountNumber,\n isAccountPushFeatureActive: featureStateRecord.features.get(\n FeatureFlags.PUSHDATA_USERINFO.key\n ) as boolean,\n })\n )\n .distinctUntilChanged()\n .subscribe(managePushDataSubscription)\n\n function managePushDataSubscription({\n isLoggedIn,\n accountNumber,\n isAccountPushFeatureActive,\n }: {\n isLoggedIn: boolean | null\n accountNumber: number | null\n isAccountPushFeatureActive: boolean\n }) {\n // Do initial fetch and set up subscription\n if (isAccountPushFeatureActive && isLoggedIn && !pushDataSubscription) {\n subscribe(accountNumber as number)\n }\n // Unsubscribe and dispose of subscription\n if (!!pushDataSubscription && (!isAccountPushFeatureActive || !isLoggedIn)) {\n unsubscribe()\n }\n }\n\n function subscribe(accountNumber: number) {\n accountNumberLoggedIn = accountNumber\n\n const pushEventSubscription = iotSubscribeTopics([getAccountTopic(accountNumber)])\n pushDataSubscription = pushEventSubscription.subscribe(({ payload }) => {\n if (!payload) return\n\n if (isAccountBalanceChangedPushEvent(payload) && payload.transactionType === 'Payout') {\n invalidateRacingPendingTicketsQueryData()\n }\n\n balanceUpdate(payload, queryClient, () => {\n fetchAccountBalanceAsync()\n })\n payIdUpdate(payload, accountNumber, queryClient)\n })\n }\n\n function unsubscribe() {\n if (accountNumberLoggedIn === null) {\n return\n }\n\n iotUnsubscribeTopics([getAccountTopic(accountNumberLoggedIn)])\n if (!!pushDataSubscription && pushDataSubscription.dispose) {\n pushDataSubscription.dispose()\n pushDataSubscription = null\n }\n }\n}\n","import { createSignal } from 'rwwa-rx-state-machine'\nimport type { BetSlipResponse, BetSlipErrorResponse } from '@mobi/betslip/types'\nimport { BetslipExpandableTypes, BetslipItem, BetslipScrollPosition } from './driver'\nimport { FormulaFields } from './Components/MultiFormula/MultiFormula'\nimport { PriceSources } from '@core/Data/Betting/selections'\n\n// general\nexport const BetslipDepositModalClosed = createSignal('BetslipDepositModalClosed')\nexport const OnOpen = createSignal('OnOpen')\nexport const OnClose = createSignal('OnClose')\nexport const ClearBetslip = createSignal('ClearBetslip')\nexport const EditBets = createSignal('EditBets')\nexport const ToggleBetslipExpandable =\n createSignal('ToggleBetslipExpandable')\nexport const CloseBetslipExpandable = createSignal('CloseBetslipExpandable')\n\n/**\n * @todo Rename to KeepSelections\n */\nexport const KeepBets = createSignal('KeepBets')\nexport const ScrollTo = createSignal('ScrollTo')\n\n// singles\nexport const AddSingleToBetslip = createSignal('AddSingleToBetslip')\nexport const AddSinglesToBetslip = createSignal('AddSinglesToBetslip')\nexport const RemoveSingleBet = createSignal>('RemoveSingleBet')\nexport const UpdateItemInBetslip = createSignal('UpdateItemInBetslip')\nexport const DeselectSuperPick = createSignal('DeselectSuperPick')\n\nexport interface UpdateBetslipItemPriceData {\n propositionId: string\n winPrice: number\n placePrice: number | null\n priceSource: PriceSources\n}\n\nexport interface UpdateMultiBetSpendData {\n field: FormulaFields | 'value'\n value: number\n bonusBetId?: number\n isBonusCash?: boolean\n}\n\nexport const UpdateBetslipItemPrice =\n createSignal('UpdateBetslipItemPrice')\n\n// multi\nexport const UpdateMultiBetSpend = createSignal('UpdateMultiBetSpend')\nexport const ToggleMultiBet = createSignal('ToggleMultiBet')\nexport const ToggleMultiLegBetType = createSignal('ToggleMultiLegBetType')\nexport const ToggleMultiFormulaExpanded = createSignal('ToggleMultiFormulaExpanded')\n\n// requests\nexport const RefreshBetslip = createSignal<{ betslipItemIds?: string[] }>('RefreshBetslip')\nexport const RemoveBonusBetsFromBetslip = createSignal('RemoveBonusBetsFromBetslip')\n\nexport interface RefreshBetslipSuccessfulData {\n response: BetSlipResponse[]\n ignorePriceChanges: boolean\n}\nexport const RefreshBetslipSuccessful = createSignal(\n 'RefreshBetslipSuccessful'\n)\n\nexport const RefreshBetslipFailed = createSignal('RefreshBetslipFailed')\nexport const ProposeAllBets = createSignal('ProposeAllBets')\nexport const ProposeAllBetsSuccessful = createSignal('ProposeAllBetsSuccessful')\nexport const ProposeAllBetsFailed = createSignal('ProposeAllBetsFailed')\nexport const ConfirmAllBets = createSignal('ConfirmAllBets')\nexport const ConfirmAllBetsSuccessful = createSignal('ConfirmAllBetsSuccessful')\nexport const ConfirmAllBetsFailed = createSignal('ConfirmAllBetsFailed')\n","import { SetResidentialDetail, state$ } from './userAccountDriver'\nimport { state$ as navigationState$ } from '@core/State/Navigation'\nimport { trackAccountNumber } from '@classic/Foundation/Analytics/Analytics'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { store } from '@core/Store'\nimport { toggleIsDropDownOpen } from '@core/Areas/AppHeader/Store'\nimport { fetchCampaignsAsync, fetchAccountBalanceAsync } from './async-signals'\nimport { register as registerUserAccountPushData } from './push-data'\nimport { BetAccountKey, BetAccountRecord, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { syncLoginStateWithNativeApp } from '@core/NativeServices/LoginStateRegister/LoginStateRegister'\nimport { updateMetadata } from '@core/NativeServices/MetadataService'\nimport { RemoveBonusBetsFromBetslip } from '@core/Areas/Betslip/signals'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\nimport { trackLogout } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport function registerUserAccountSideEffects(): void {\n registerUserAccountPushData()\n\n // Handle Side Effects Based on State Changes\n state$\n .pairwise()\n .distinctUntilChanged()\n .subscribe(([prevState, newState]) => {\n const hasLoggedOut = prevState.isLoggedIn === true && newState.isLoggedIn === false\n const hasLoggedIn = !prevState.isLoggedIn && newState.isLoggedIn === true\n const hasLogInStateChanged = prevState.isLoggedIn !== newState.isLoggedIn\n\n if (hasLoggedIn) {\n fetchAccountBalanceAsync()\n fetchCampaignsAsync()\n updateMetadata()\n trackAccountNumber(`${newState.accountNumber || ''}`)\n\n BetAccountRepo.getPromise(BetAccountKey).then((betAccount: BetAccountRecord) => {\n syncLoginStateWithNativeApp(betAccount)\n const { ResidentialCountry, ResidentialState } = betAccount\n SetResidentialDetail([ResidentialCountry, ResidentialState])\n\n if (typeof betAccount.IsIDVerified === 'boolean') {\n trackOptimoveEvent({\n eventName: 'account_verification_status',\n data: { verified: betAccount.IsIDVerified },\n })\n }\n })\n }\n\n if (hasLoggedOut) {\n trackLogout()\n queryClient.removeQueries(queryKeys.accountBase)\n store.dispatch(toggleIsDropDownOpen(false))\n\n navigationState$.take(1).subscribe(navState => {\n if (navState.get('currentUrl')?.includes('account')) {\n navigateHome()\n }\n })\n }\n\n if (hasLogInStateChanged) {\n RemoveBonusBetsFromBetslip()\n }\n })\n}\n","import type { BetAccountRecord } from '@core/Data/Account/betAccount'\nimport {\n HasLoggedIn,\n HasLoggedOut,\n state$ as userAccountState$,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\n\nexport function startUserLoginListeners(): void {\n HasLoggedOut.signal$.subscribe(() => {\n if (isReactNativeApp) {\n sendToNative('USER_DID_LOGOUT')\n return\n }\n })\n\n HasLoggedIn.signal$.subscribe(() => {\n userAccountState$.take(1).subscribe(userAccountState => {\n const accountNumber = userAccountState.accountNumber as number\n if (isReactNativeApp) {\n sendToNative('USER_DID_LOGIN', { accountNumber })\n return\n }\n })\n })\n}\n\nexport function syncLoginStateWithNativeApp(betAccount: BetAccountRecord): void {\n const data = {\n accountNumber: betAccount.BetAccountNumber,\n accountNumberHash: betAccount.BetAccountNumberHash,\n accountBalance: betAccount.Balance,\n }\n\n if (isReactNativeApp) {\n sendToNative('HAS_LOGGED_IN', data)\n return\n }\n}\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\n\nexport const ToggleFixedFlucs = createSignal('ToggleFixedFlucs')\nexport const ToggleShowAllForm = createSignal('ToggleShowAllForm')\nexport const ToggleMarketMovers = createSignal('ToggleMarketMovers')\nexport const ToggleDoubleProvDiv = createSignal('ToggleDoubleProvDiv')\nexport const ToggleQuaddieProvDiv = createSignal('ToggleQuaddieProvDiv')\nexport const ToggleInfoToolbarVisible = createSignal('ToggleInfoToolbarVisible')\nexport const ToggleStewardsCommentsVisible = createSignal('ToggleStewardsCommentsVisible')\nexport const ToggleTipsVisible = createSignal('ToggleTipsVisible')\nexport const ToggleResultsVisible = createSignal('ToggleResultsVisible')\nexport const ToggleFieldVisible = createSignal('ToggleFieldVisible')\nexport const ToggleRaceReplayVisible = createSignal('ToggleRaceReplayVisible')\nexport const ToggleRacePreviewVisible = createSignal('ToggleRacePreviewVisible')\n\nexport interface BettingV2CommandState {\n showFixedFlucs: boolean\n showAllForm: boolean\n showMarketMovers: boolean\n showDoubleProvDiv: boolean\n showQuaddieProvDiv: boolean\n infoToolBarVisible: boolean\n commentsVisible: boolean\n tipsVisible: boolean\n resultsVisible: boolean\n fieldVisible: boolean\n replayVisible: boolean\n previewVisible: boolean\n}\n\nexport const bettingV2CommandStateDefaultState: BettingV2CommandState = {\n showFixedFlucs: false,\n showAllForm: false,\n showMarketMovers: false,\n showDoubleProvDiv: false,\n showQuaddieProvDiv: false,\n infoToolBarVisible: false,\n commentsVisible: false,\n tipsVisible: false,\n resultsVisible: true,\n fieldVisible: false,\n replayVisible: false,\n previewVisible: false,\n}\n\nexport interface BettingV2CommandStateRecord\n extends TypedRecord,\n BettingV2CommandState {}\nexport const BettingV2CommandStateFactory = makeTypedFactory<\n BettingV2CommandState,\n BettingV2CommandStateRecord\n>(bettingV2CommandStateDefaultState)\n\nexport function bettingV2CommandDriver(\n state = BettingV2CommandStateFactory(),\n signal: Signal\n): BettingV2CommandStateRecord {\n switch (signal.tag) {\n case ToggleFixedFlucs: {\n return state.merge({\n showFixedFlucs: !state.showFixedFlucs,\n })\n }\n\n case ToggleShowAllForm: {\n return state.merge({\n showAllForm: !state.showAllForm,\n })\n }\n\n case ToggleMarketMovers: {\n return state.merge({\n showMarketMovers: !state.showMarketMovers,\n })\n }\n\n case ToggleDoubleProvDiv: {\n return state.merge({\n showDoubleProvDiv: !state.showDoubleProvDiv,\n })\n }\n\n case ToggleQuaddieProvDiv: {\n return state.merge({\n showQuaddieProvDiv: !state.showQuaddieProvDiv,\n })\n }\n\n case ToggleInfoToolbarVisible: {\n return state.merge({\n infoToolBarVisible: !state.infoToolBarVisible,\n })\n }\n\n case ToggleStewardsCommentsVisible: {\n return state.merge({\n commentsVisible: !state.commentsVisible,\n })\n }\n\n case ToggleTipsVisible: {\n return state.merge({\n tipsVisible: !state.tipsVisible,\n })\n }\n\n case ToggleResultsVisible: {\n return state.merge({\n resultsVisible: true,\n fieldVisible: false,\n })\n }\n\n case ToggleFieldVisible: {\n return state.merge({\n resultsVisible: false,\n fieldVisible: true,\n })\n }\n\n case ToggleRaceReplayVisible: {\n return state.merge({\n replayVisible: !state.replayVisible,\n })\n }\n\n case ToggleRacePreviewVisible: {\n return state.merge({\n previewVisible: !state.previewVisible,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'betting-v2-commands',\n driver: bettingV2CommandDriver,\n})\n","import { state$ as BettingV2CommandState$ } from './driver'\nimport { trackActionInvoked } from '../../../Foundation/Analytics/Analytics'\n\nconst segmentPrefix = 'RaceBettingPageCommand-'\n\nexport interface RaceBettingPageCommandSideEffectsSubscriptions {\n showFormSubscription: Rx.IDisposable | null\n showFixedFlucsSubscription: Rx.IDisposable | null\n showMarketMoversSubscription: Rx.Disposable | null\n showDoubleProvDivSubscription: Rx.Disposable | null\n showQuaddieProvDivSubScription: Rx.Disposable | null\n}\n\nexport function registerRaceBettingPageCommandSideEffects(): RaceBettingPageCommandSideEffectsSubscriptions {\n const returnSubscriptions: RaceBettingPageCommandSideEffectsSubscriptions = {\n showFormSubscription: null,\n showFixedFlucsSubscription: null,\n showMarketMoversSubscription: null,\n showDoubleProvDivSubscription: null,\n showQuaddieProvDivSubScription: null,\n }\n\n returnSubscriptions.showFormSubscription = BettingV2CommandState$.map(\n record => record.showAllForm\n )\n .distinctUntilChanged()\n .skip(1) // Ignore initial state from subscribing\n .subscribe(selected => {\n trackActionInvoked(\n `${segmentPrefix}Show-All-Form-button: ${selected ? 'selected' : 'deselected'}`\n )\n })\n\n returnSubscriptions.showFixedFlucsSubscription = BettingV2CommandState$.map(\n record => record.showFixedFlucs\n )\n .distinctUntilChanged()\n .skip(1) // Ignore initial state from subscribing\n .subscribe(selected => {\n trackActionInvoked(\n `${segmentPrefix}Fixed-Flucs-button: ${selected ? 'selected' : 'deselected'}`\n )\n })\n\n returnSubscriptions.showMarketMoversSubscription = BettingV2CommandState$.map(\n record => record.showMarketMovers\n )\n .distinctUntilChanged()\n .skip(1) // Ignore initial state from subscribing\n .subscribe(selected => {\n trackActionInvoked(\n `${segmentPrefix}Market-Movers-button: ${selected ? 'selected' : 'deselected'}`\n )\n })\n\n returnSubscriptions.showDoubleProvDivSubscription = BettingV2CommandState$.map(\n record => record.showDoubleProvDiv\n )\n .distinctUntilChanged()\n .skip(1) // Ignore initial state from subscribing\n .subscribe(selected => {\n trackActionInvoked(\n `${segmentPrefix}Double-Prov-Div-button: ${selected ? 'selected' : 'deselected'}`\n )\n })\n\n returnSubscriptions.showQuaddieProvDivSubScription = BettingV2CommandState$.map(\n record => record.showQuaddieProvDiv\n )\n .distinctUntilChanged()\n .skip(1) // Ignore initial state from subscribing\n .subscribe(selected => {\n trackActionInvoked(\n `${segmentPrefix}Quaddie-Prov-Div-button: ${selected ? 'selected' : 'deselected'}`\n )\n })\n\n return returnSubscriptions\n}\n","export function toTitleCase(s: string): string {\n // Replace multiple whitespaces with single, and split\n const split = s.replace(/\\s+/g, ' ').split(' ')\n const upper = split\n .map(s => {\n if (!s) return s\n if (/^\\(.+\\)$/.test(s)) return s\n return s[0].toUpperCase() + s.slice(1).toLowerCase()\n })\n .join(' ')\n return upper.trim()\n}\n\nexport function capitalize(s: string) {\n return `${s.charAt(0).toUpperCase()}${s.slice(1)}`\n}\n","import styled from '@emotion/styled'\nimport { ParagraphProps } from './Paragraph'\n\ntype ParagraphStyledProps = Pick\n\nexport const ParagraphStyled = styled('p')(({ align, isDesktop }) => ({\n fontSize: isDesktop ? '1.5rem' : 'inherit',\n textAlign: align,\n}))\n","import React, { type CSSProperties } from 'react'\nimport { ParagraphStyled } from './Paragraph.styles'\n\nexport interface ParagraphProps {\n children: React.ReactNode\n align?: CSSProperties['textAlign']\n className?: string\n isDesktop?: boolean\n}\n\nexport function Paragraph({\n align = 'left',\n children,\n className,\n isDesktop,\n ...options\n}: ParagraphProps) {\n return (\n \n {children}\n \n )\n}\n","export const fontFamilies = {\n /** Default font stack using system fonts like Arial & Helvetica */\n default: 'Arial, Helvetica, sans-serif',\n /** TABtouch brand font */\n get brand() {\n return `\"PFSquare\", \"Arial Bold\", ${fontFamilies.default}`\n },\n}\n\nexport const fontFamiliesBold = {\n /** Default font stack using system fonts like Arial & Helvetica */\n default: 'Arial, Helvetica, sans-serif',\n /** TABtouch brand font */\n get brand() {\n return `\"PFSquareBold\", \"Bold\", ${fontFamilies.default}`\n },\n}\n\n/** NOTE: emotion converts numbers into pixel values. */\nexport const fontSizes = {\n root: 10, // the element\n vision: {\n root: '14px',\n },\n betslip: {\n summary: {\n fontSize: '1.2rem',\n fontSizeMedium: '1.4rem',\n fontSizeLarge: '1.6rem',\n },\n },\n informationPanel: {\n fontSize: '1.2rem',\n },\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport enum NoticeBoxTypes {\n Info,\n Error,\n Success,\n Warning,\n}\n\ninterface NoticeBoxStyledProps {\n noticeBoxType?: NoticeBoxTypes\n hasBorder?: boolean\n isDesktop?: boolean\n}\n\nexport const NoticeBoxStyled = styled('div')(\n {\n lineHeight: 1.2,\n margin: '0 0 1rem',\n padding: '1rem',\n },\n\n ({ hasBorder, isDesktop }) => ({\n border: hasBorder ? `0.1rem solid ${hexColors.veryLightGrey}` : undefined,\n backgroundColor: hasBorder ? hexColors.white : undefined,\n fontSize: isDesktop ? '1.4rem' : '1.2rem',\n })\n)\n\nexport const NoticeBoxSingleStyled = styled(NoticeBoxStyled)({\n padding: '0.5rem',\n})\n\nexport const NoticeBoxIconStyled = styled('div')({\n display: 'flex',\n width: '4.2rem',\n})\n\nexport const NoticeBoxTitleStyled = styled('p')({\n fontSize: '1.4rem', // overriding mobi styles\n margin: '0 0 1rem',\n\n // NoticeBoxTitle can be rendered by itself (no subtitle or children)\n '&:last-child': {\n marginBottom: 0,\n },\n})\n\nexport const NoticeBoxChildContentWrapperStyled = styled('div')({\n fontSize: '1.2rem',\n\n // As we allow children to be passed into the component,\n // we need to override mobi styles at least for paragraphs. Any other kind of content\n // or component used as a child of NoticeBox will require its own styling.\n // Source of the problem: `scss/base/_legacy-globals.scss`\n '& p': {\n fontSize: 'inherit',\n textAlign: 'inherit',\n margin: '1rem 0',\n\n '&:last-child': {\n marginBottom: 0,\n },\n },\n})\n","import React, { type FC, type HTMLAttributes } from 'react'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '@core/Settings'\nimport {\n NoticeBoxTitleStyled,\n NoticeBoxStyled,\n NoticeBoxTypes,\n NoticeBoxIconStyled,\n NoticeBoxChildContentWrapperStyled,\n NoticeBoxSingleStyled,\n} from './NoticeBox.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\ntype Props = {\n title?: string | null\n subtitle?: string | null\n noticeBoxType?: NoticeBoxTypes\n hideIcon?: boolean\n hasBorder?: boolean\n className?: string\n testId?: string | null\n buttonClick?: () => void\n buttonText?: string\n children?: React.ReactNode\n} & Pick, 'role' | 'aria-label'>\n\nexport const NoticeBox: FC = ({\n title,\n subtitle,\n noticeBoxType,\n hideIcon = false,\n hasBorder,\n children,\n className,\n testId = title,\n buttonClick,\n buttonText = 'OK',\n ...htmlAttributes\n}) => {\n const titleTestId = { 'data-tid-notice-box-title': title }\n\n return (\n \n \n {!hideIcon && (\n \n \n \n )}\n \n {title && (\n \n {title}\n \n )}\n\n {(subtitle || children) && (\n \n {subtitle ?

      {subtitle}

      : null}\n {children}\n
      \n )}\n
      \n\n {buttonClick && (\n \n \n \n {buttonText}\n \n \n \n )}\n
      \n \n )\n}\n\nexport function NoticeBoxSingle({\n title,\n noticeBoxType,\n hasBorder,\n testId,\n isDesktop,\n}: {\n title: React.ReactNode\n noticeBoxType?: NoticeBoxTypes\n hasBorder?: boolean\n testId?: string\n isDesktop?: boolean\n}): JSX.Element {\n const testAutomationValue = testId || ''\n const testAutomationId = { 'data-tid-notice-box-single': testAutomationValue }\n\n return (\n \n \n \n \n \n {title}\n \n \n )\n}\n\nconst NoticeBoxIcon = ({ type }: { type?: NoticeBoxTypes }) => {\n if (type === undefined)\n return \n\n switch (type) {\n case NoticeBoxTypes.Error:\n return \n case NoticeBoxTypes.Success:\n return \n case NoticeBoxTypes.Warning:\n return \n default:\n case NoticeBoxTypes.Info:\n return \n }\n}\n","import styled from '@emotion/styled'\nimport { PopupStyled } from '@core/Components/Popup/Popup.styles'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\n\ninterface AnniversaryPopupProps {\n isDesktop?: boolean\n}\n\nexport const AnniversaryPopup = styled(PopupStyled)(({ isDesktop }) => ({\n fontSize: '1.4rem',\n width: isDesktop ? '30rem' : '26rem',\n}))\n\nAnniversaryPopup.displayName = 'AnniversaryPopup'\n\ninterface InfoCopyStyledProps {\n isDesktop?: boolean\n}\n\nexport const InfoCopyStyled = styled(Paragraph)(({ isDesktop }) => ({\n fontSize: isDesktop ? '1.5rem' : '1.2rem',\n marginBottom: 0,\n}))\n\nInfoCopyStyled.displayName = 'InfoCopyStyled'\n","import React from 'react'\nimport { toTitleCase } from '@mobi/utils/string'\nimport type { BamAccountHolder } from '@mobi/api-types'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { InfoCopyStyled as InfoCopy } from '../DepositLimitsAnniversaryPopup/DepositLimitsAnniversaryPopup.styles'\n\nexport interface AnniversaryPopupContentProps {\n isDesktop?: boolean\n accountHolder: BamAccountHolder | null\n onKeepLimit(): void\n onChangeLimit(): void\n}\n\nexport function AnniversaryPopupContent(props: AnniversaryPopupContentProps) {\n const { isDesktop, accountHolder, onKeepLimit, onChangeLimit } = props\n\n if (accountHolder === null) {\n return null\n }\n\n return (\n \n \n Hi {accountHolder.FullName}, to continue betting, please review your\n deposit limit.\n \n \n \n \n }\n noticeBoxType={NoticeBoxTypes.Info}\n hasBorder={true}\n testId='current-limit'\n isDesktop={isDesktop}\n />\n \n \n \n \n Keep\n \n \n \n \n \n \n Change\n \n \n \n \n \n Why do we ask this?\n
      \n At TABtouch we support responsible wagering. To help you manage your betting, this is your\n annual reminder to review your deposit limit. You can also review this at any time by\n visiting deposit limit in My Account menu.\n
      \n
      \n )\n}\n\ntype ExistingDepositLimitProps = Pick<\n BamAccountHolder,\n 'PreCommitmentMaxDepositAmount' | 'PreCommitmentMaxDepositFrequency'\n>\n\nfunction CurrentLimit(props: ExistingDepositLimitProps) {\n return props.PreCommitmentMaxDepositAmount && props.PreCommitmentMaxDepositFrequency ? (\n \n ) : (\n \n )\n}\n\nexport function ExistingDepositLimit({\n PreCommitmentMaxDepositAmount,\n PreCommitmentMaxDepositFrequency,\n}: ExistingDepositLimitProps) {\n return (\n \n Currently set to{' '}\n \n ${PreCommitmentMaxDepositAmount} {toTitleCase(PreCommitmentMaxDepositFrequency || '')}\n \n \n )\n}\n\nexport function NoDepositLimit() {\n return (\n \n No deposit limit set\n \n )\n}\n","import React from 'react'\nimport { PopupContainerStyled, PopupStyled } from '@core/Components/Popup/Popup.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\ninterface PopupNoticeBoxProps {\n title: string\n subtitle?: string\n noticeBoxType?: NoticeBoxTypes\n onClose?: () => void\n closeText?: string\n children?: React.ReactNode\n}\n\nexport function PopupNoticeBox({\n title,\n subtitle,\n noticeBoxType,\n onClose,\n closeText = 'Close',\n children,\n}: PopupNoticeBoxProps) {\n return (\n \n \n \n {children}\n \n onClose?.()}\n color='primary'\n uppercaseText={true}\n testId='notice-box-close'\n >\n {closeText}\n \n \n \n )\n}\n","import React from 'react'\nimport { DepositLimitFrequency } from '@mobi/api-types'\nimport { NoticeBoxTypes, NoticeBoxSingle } from '@core/Components/NoticeBox'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\nimport { PopupNoticeBox } from '@core/Components/PopupNoticeBox'\nimport { formatDate } from '@mobi/utils'\nimport { toMoney } from '@mobi/utils/money'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\nexport const SuccessMessage = () => (\n \n)\n\ninterface CoolingOffNoticeBoxProps {\n coolingOffEndDate: Date\n}\n\nexport function CoolingOffNoticeBox({ coolingOffEndDate }: CoolingOffNoticeBoxProps) {\n // format the date and replace spaces with non-breaking-spaces ('\\u00A0') to prevent line wrapping\n const formattedDate = formatDate(coolingOffEndDate, 'DD MMM YYYY').replace(/\\s/g, '\\u00A0')\n\n return (\n \n Your increase in deposit limit will be effective on the {formattedDate},\n after the mandatory 7 day cooling off period.\n \n }\n noticeBoxType={NoticeBoxTypes.Warning}\n hasBorder={true}\n testId='cooling-off-period'\n />\n )\n}\n\ninterface CurrentFrequencyNoticeBoxProps {\n frequency: DepositLimitFrequency\n}\n\nexport function CurrentFrequencyNoticeBox({ frequency }: CurrentFrequencyNoticeBoxProps) {\n if (frequency === null) {\n return null\n }\n\n return (\n \n Currently set to {frequency}\n \n }\n noticeBoxType={NoticeBoxTypes.Info}\n hasBorder={true}\n testId='current-frequency'\n />\n )\n}\n\ninterface CurrentAmountNoticeBoxProps {\n amount: number | null\n}\n\nexport function CurrentAmountNoticeBox({ amount }: CurrentAmountNoticeBoxProps) {\n if (amount === null) {\n return null\n }\n\n return (\n \n Currently set to {toMoney(amount, { decimalPlaces: 0 })}\n \n }\n noticeBoxType={NoticeBoxTypes.Info}\n hasBorder={true}\n testId='current-amount'\n />\n )\n}\n\ninterface DepositPopupNoticeBoxProps {\n onClose(): void\n}\n\nexport function ErrorPopupNoticeBox(props: DepositPopupNoticeBoxProps) {\n const subTitle = (\n \n \n We are experiencing technical difficulties that are stopping you from being able to set your\n deposit limits.\n \n \n Please try again or call the Customer Management Centre on{' '}\n or internationally on{' '}\n .\n \n \n )\n\n return (\n \n {subTitle}\n \n )\n}\n\nexport function SuccessPopupNoticeBox(props: DepositPopupNoticeBoxProps) {\n return (\n \n Thank you for reviewing your deposit limit.\n \n )\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { Observable } from 'rx'\nimport { isLoading, isErrored } from 'rwwa-data-access'\nimport { navigateToDepositLimitsEdit } from '@classic/AppUtils/Framework/Intent/navigation'\nimport type { BetAccount, BamAccountHolder } from '@mobi/api-types'\nimport { BetAccountRepo, BetAccountKey } from '@core/Data/Account/betAccount'\nimport {\n updateDepositLimitAnniversary,\n type UpdateDepositLimitAnniversaryRequest,\n} from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\nimport { AnniversaryPopupContent } from '../AnniversaryPopupContent/AnniversaryPopupContent'\nimport {\n ErrorPopupNoticeBox,\n SuccessPopupNoticeBox,\n} from '../DepositLimitsComponents/DepositLimitsComponents'\nimport { PopupContainerStyled, PopupTitleStyled } from '@core/Components/Popup/Popup.styles'\nimport { AnniversaryPopup } from './DepositLimitsAnniversaryPopup.styles'\nimport { TABLocation } from '@core/Settings/constants'\n\nimport { state$ as UserAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as RouteState$ } from '@core/State/Navigation'\n\nconst DAYS_BEFORE_ANNIVERSARY_REMINDER = 14\n\nexport interface DepositLimitsAnniversaryPopupProps {\n isDesktop?: boolean\n}\n\nexport enum DisplayState {\n HideAll,\n Prompt,\n Success,\n Error,\n}\n\nexport interface DepositLimitsAnniversaryPopupState {\n displayState: DisplayState\n betAccountNumber: number | null\n accountHolder: BamAccountHolder | null\n}\n\nexport function DepositLimitsAnniversaryPopup(props: DepositLimitsAnniversaryPopupProps) {\n const { isDesktop } = props\n\n return \n}\n\nexport class DepositLimitsAnniversaryPopupComponent extends React.Component<\n DepositLimitsAnniversaryPopupProps,\n DepositLimitsAnniversaryPopupState\n> {\n private subscription?: Rx.Disposable\n\n constructor(props: DepositLimitsAnniversaryPopupProps) {\n super(props)\n this.state = {\n displayState: DisplayState.HideAll,\n betAccountNumber: null,\n accountHolder: null,\n }\n }\n\n public componentDidMount() {\n const allState = Observable.combineLatest(\n BetAccountRepo.data$,\n UserAccountState$,\n RouteState$,\n (betAccountRepoState, userAccountState, routeState) => ({\n betAccountRepoState,\n userAccountState,\n routeState,\n })\n ).distinctUntilChanged(\n true,\n (x, y) =>\n Object.is(x.betAccountRepoState, y.betAccountRepoState) &&\n Object.is(x.routeState, y.routeState) &&\n Object.is(x.userAccountState, y.userAccountState)\n )\n\n const setHideAll = () =>\n this.setState({\n displayState: DisplayState.HideAll,\n betAccountNumber: null,\n accountHolder: null,\n })\n\n this.subscription = allState.subscribe(s => {\n if (!s.userAccountState.isLoggedIn) {\n BetAccountRepo.hardInvalidate(s.betAccountRepoState, BetAccountKey)\n setHideAll()\n } else {\n const betAccountLoader = BetAccountRepo.getFrom(s.betAccountRepoState, BetAccountKey)\n\n // conscious decision to not display error or loading as we render on the home page.\n if (isLoading(betAccountLoader) || isErrored(betAccountLoader)) {\n setHideAll()\n return\n }\n\n const betAccount = betAccountLoader as BetAccount\n\n if (betAccount.AccountHolderList.length === 0) {\n setHideAll()\n return\n }\n\n this.setState({ betAccountNumber: betAccount.BetAccountNumber })\n\n const getActiveAccountHolder = (accountHolders: BamAccountHolder[]) => {\n const isInDateRange = (anniversary: Date | null) =>\n !!(\n anniversary &&\n dayjs(anniversary).diff(dayjs(), 'days', true) <= DAYS_BEFORE_ANNIVERSARY_REMINDER\n )\n\n const primaryAccountHolder =\n accountHolders.find(ah => ah.IsPrimaryAccountHolder) || accountHolders[0]\n const primaryAccountHolderIsInDateRange = isInDateRange(\n primaryAccountHolder.PreCommitmentAnniversaryDate\n )\n const secondaryAccountHolder =\n accountHolders.find(ah => !ah.IsPrimaryAccountHolder) || accountHolders.length === 2\n ? accountHolders[1]\n : null\n const secondaryAccountHolderIsInDateRange =\n secondaryAccountHolder &&\n isInDateRange(secondaryAccountHolder.PreCommitmentAnniversaryDate)\n\n if (primaryAccountHolderIsInDateRange && !secondaryAccountHolderIsInDateRange) {\n return primaryAccountHolder\n }\n\n if (!primaryAccountHolderIsInDateRange && secondaryAccountHolderIsInDateRange) {\n return secondaryAccountHolder\n }\n\n if (primaryAccountHolderIsInDateRange && secondaryAccountHolderIsInDateRange) {\n return primaryAccountHolder.PreCommitmentAnniversaryDate &&\n secondaryAccountHolder &&\n secondaryAccountHolder.PreCommitmentAnniversaryDate &&\n primaryAccountHolder.PreCommitmentAnniversaryDate <=\n secondaryAccountHolder.PreCommitmentAnniversaryDate\n ? primaryAccountHolder\n : secondaryAccountHolder\n }\n\n return null\n }\n\n const accountHolder = getActiveAccountHolder(betAccount.AccountHolderList)\n this.setState({ accountHolder })\n\n const isLoggedIn = s.userAccountState.isLoggedIn\n const isOnHomePage = s.routeState.get('currentUrl') === '#'\n const displayState: DisplayState =\n isLoggedIn && isOnHomePage && accountHolder !== null\n ? DisplayState.Prompt\n : DisplayState.HideAll\n\n this.setState({ displayState })\n }\n })\n }\n\n public componentWillUnmount() {\n this.subscription?.dispose()\n }\n\n public render() {\n if (this.state.displayState === DisplayState.HideAll) {\n return null\n }\n\n if (this.state.displayState === DisplayState.Error) {\n return this.closeAll(false)} />\n }\n\n if (this.state.displayState === DisplayState.Success) {\n return this.closeAll(true)} />\n }\n\n if (this.state.displayState !== DisplayState.Prompt || !this.state.accountHolder) {\n return null\n }\n\n return (\n \n \n \n Deposit Limit\n \n \n \n \n )\n }\n\n private closeAll = (invalidate: boolean) => {\n if (invalidate) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n BetAccountRepo.hardInvalidate(null as any, BetAccountKey)\n }\n\n this.setState({ displayState: DisplayState.HideAll })\n }\n\n private respondToDepositLimitAnniversary = (keep: boolean) => {\n // deal with being invoked before all relevant state is available.\n if (!this.state.betAccountNumber) {\n return Promise.resolve({})\n }\n\n const request: UpdateDepositLimitAnniversaryRequest = {\n AccountHolderId: (this.state.accountHolder as BamAccountHolder).AccountHolderId,\n BetAccountNumber: this.state.betAccountNumber,\n Keep: keep,\n Location: !this.props.isDesktop ? TABLocation.Mobi : TABLocation.Desktop,\n }\n\n return updateDepositLimitAnniversary(request)\n }\n\n private keepLimit = () => {\n this.respondToDepositLimitAnniversary(true)\n .then(() => {\n this.setState({ displayState: DisplayState.Success, betAccountNumber: null })\n })\n .catch(() => {\n this.setState({ displayState: DisplayState.Error })\n })\n }\n\n private changeLimit = () => {\n this.respondToDepositLimitAnniversary(false)\n .then(() => {\n const accountHolderNumber = this.state.accountHolder\n ? (this.state.accountHolder as BamAccountHolder).AccountHolderId\n : undefined\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n BetAccountRepo.hardInvalidate(null as any, BetAccountKey)\n navigateToDepositLimitsEdit({ isDesktop: this.props.isDesktop, accountHolderNumber })\n })\n .catch(() => {\n this.setState({ displayState: DisplayState.Error })\n })\n }\n}\n","import {\n LDContext,\n LDClient,\n initialize as initializeLaunchDarkly,\n LDFlagChangeset,\n} from 'launchdarkly-js-client-sdk'\nimport { OnFeatureChange } from './signals'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { FeatureFlags } from './driver'\nimport { FeatureFlags as FeatureFlagKeys, getFlagDefaults } from '@mobi/settings'\nimport { AppVersion, OS, MajorVersion } from '@mobi/web-native-comms/web'\nimport type { ServerConfiguration } from '@mobi/api-types'\n\nlet ldClient: LDClient\n\nconst ANONYMOUS_CONTEXT: LDContext = {\n kind: 'user',\n key: 'Guest',\n anonymous: true,\n custom: getCustomUserAttributes(),\n}\n\ninterface LaunchDarklyInitializeProps {\n clientId: string\n bootstrapAccountNumber: string | undefined\n bootstrapClientFlags: FeatureFlags\n bootstrapServerFlags: FeatureFlags\n}\n\nconst initialize = ({\n clientId,\n bootstrapAccountNumber,\n bootstrapClientFlags,\n bootstrapServerFlags,\n}: LaunchDarklyInitializeProps): Promise => {\n return new Promise(resolve => {\n if (ldClient) {\n return\n }\n\n if (!bootstrapClientFlags) {\n bootstrapClientFlags = {}\n }\n\n // Optionally initialize state, pending retrieval of flags from the Launch Darkly API)\n if (bootstrapServerFlags) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { $valid, $flagsState, ...initialFlags } = bootstrapServerFlags\n // remove null/undefined value from server bootstrap object\n for (const propName in initialFlags) {\n if (initialFlags[propName] === null || initialFlags[propName] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete initialFlags[propName]\n }\n }\n\n OnFeatureChange({\n features: { ...bootstrapClientFlags, ...initialFlags },\n isUserAnonymous: !bootstrapAccountNumber,\n isLdInitialized: false,\n })\n }\n\n let context: LDContext = ANONYMOUS_CONTEXT\n\n if (bootstrapAccountNumber) {\n context = {\n key: bootstrapAccountNumber,\n custom: getSimpleCustomUserAttributes(),\n }\n }\n\n ldClient = initializeLaunchDarkly(clientId, context, {\n streaming: true,\n sendEventsOnlyForVariation: false,\n })\n\n ldClient.on('ready', async () => {\n const flags = Object.keys(bootstrapClientFlags).reduce(\n (accumulator, flag) => {\n accumulator[flag] = ldClient.variation(flag, bootstrapClientFlags[flag])\n return accumulator\n },\n {} as Record\n )\n\n const accountNumber = (await userAccountState$.take(1).toPromise()).accountNumber\n\n OnFeatureChange({ features: flags, isUserAnonymous: !accountNumber, isLdInitialized: true })\n subscribeToLaunchDarklyChanges()\n subscribeToUserStateChanges()\n resolve(flags)\n })\n })\n}\n\nconst subscribeToLaunchDarklyChanges = () => {\n ldClient.on('change', async (changeset: LDFlagChangeset) => {\n const features = Object.keys(changeset).reduce(\n (accumulator, key) => {\n accumulator[key] = changeset[key].current\n return accumulator\n },\n {} as Record\n )\n\n const accountNumber = (await userAccountState$.take(1).toPromise()).accountNumber\n\n OnFeatureChange({ features, isUserAnonymous: !accountNumber, isLdInitialized: true })\n })\n}\n\nconst subscribeToUserStateChanges = () => {\n userAccountState$\n .map(record => ({\n accountNumber: record.accountNumber,\n isLoggedIn: record.isLoggedIn,\n }))\n .distinctUntilChanged()\n .subscribe(async ({ accountNumber, isLoggedIn }) => {\n if (isLoggedIn === null) {\n return\n }\n\n const ldContext: LDContext = accountNumber\n ? { kind: 'user', key: accountNumber.toString(), custom: getCustomUserAttributes() }\n : ANONYMOUS_CONTEXT\n\n const updatedFlags = await ldClient.identify(ldContext)\n\n OnFeatureChange({\n features: updatedFlags,\n isUserAnonymous: !accountNumber,\n isLdInitialized: true,\n })\n })\n}\n\nexport const initializeLaunchDarklyServiceWithConfig = (\n config: ServerConfiguration\n): Promise => {\n const serverFlags = window.LDFlags\n let accountNumber = ''\n\n const serverProvidedAccountNumber = (document.getElementById('AccountNumber') as HTMLInputElement)\n ?.value\n if (serverProvidedAccountNumber) {\n accountNumber = serverProvidedAccountNumber\n }\n return initialize({\n clientId: config.launchDarklyClientID,\n bootstrapAccountNumber: accountNumber,\n bootstrapClientFlags: getFlagDefaults(),\n bootstrapServerFlags: serverFlags,\n })\n}\n\nexport type FeatureFlagKey = (typeof FeatureFlagKeys)[keyof typeof FeatureFlagKeys]['key']\n\nfunction getSimpleCustomUserAttributes() {\n return {\n clientVersion: Number.parseFloat(`${VERSION_MAJOR}.${VERSION_MINOR}`),\n nativeAppVersion: AppVersion || 0,\n }\n}\n\nfunction getCustomUserAttributes() {\n return {\n ...getSimpleCustomUserAttributes(),\n os: OS,\n systemMajorVersion: MajorVersion,\n }\n}\n","import { type ThemeName as BannerThemeName } from '@mobi/component-library/Common/V2/Banner/Banner.styles'\n\nexport enum TargetChannel {\n MobileOnly = 'Mobile Only',\n DesktopOnly = 'Desktop Only',\n AllChannels = 'All Channels',\n}\n\nexport const AlwaysShow = 'Always Show'\nexport const Inducement = 'Inducement Only'\nexport const NonInducement = 'Non-Inducement Only'\n\nexport interface NotificationWireResource {\n TitleMessage: string\n NavigationLink: string | null\n NavigationLinkText: string | null\n TargetChannel: TargetChannel\n InternalTrackingCode: string | null\n Visibility: string\n Sys: { Id: string }\n Dismissible: boolean\n HideIcon: boolean\n Type: BannerThemeName | null\n}\n\nexport function mapVisibility(visibility: string): boolean | null {\n return visibility === AlwaysShow ? null : visibility === Inducement\n}\n","import React from 'react'\nimport { NotificationWireResource } from '@core/Data/Contentful/notification'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { useHistory } from 'react-router-dom'\n\ntype Props = {\n notification: NotificationWireResource\n}\n\nconst NotificationLink = ({ notification }: Props) => {\n const history = useHistory()\n\n if (!notification.NavigationLink || !notification.NavigationLinkText) return null\n\n return (\n {\n if (!notification.NavigationLink) return\n\n const isHashLink = notification.NavigationLink.startsWith('/#')\n if (isHashLink) {\n history.push(notification.NavigationLink)\n } else {\n window.open(notification.NavigationLink, '_blank')\n }\n }}\n color='secondary_outline'\n size='sm'\n role='link'\n data-internaltrackingcode={notification.InternalTrackingCode || ''}\n >\n {notification.NavigationLinkText}\n \n )\n}\n\nexport default NotificationLink\n","import React from 'react'\nimport { useQuery } from 'react-query'\n\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport {\n AlwaysShow,\n Inducement,\n NonInducement,\n NotificationWireResource,\n TargetChannel,\n} from '@core/Data/Contentful/notification'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { Banner } from '@mobi/component-library/Common/V2'\nimport NotificationLink from './NotificationLink'\nimport { useLogon } from '@core/Utils/hooks'\nimport { HasLoggedOut } from '@core/State/UserAccount/userAccountDriver'\n\n/**\n * Dismissed notifications re-appear after a page refresh or when logging out,\n * but stay dismissed if the user navigates to another page\n * A local variable is enough for this storage lifespan\n */\nlet dismissedNotificationsStore: string[] = []\n\nconst refetchInMs = 60_000\nexport const Notification: React.FC<{ isDesktop: boolean }> = ({ isDesktop }) => {\n const [dismissedNotifications, setDismissedNotifications] = React.useState(\n dismissedNotificationsStore\n )\n const { isLoggedIn } = useLogon()\n\n React.useEffect(() => {\n const hasLoggedOutSubscription = HasLoggedOut.signal$.subscribe(() => {\n resetDismissedNotifications()\n })\n\n return () => hasLoggedOutSubscription.dispose()\n }, [])\n\n const resetDismissedNotifications = () => {\n dismissedNotificationsStore = []\n setDismissedNotifications(dismissedNotificationsStore)\n }\n\n const onClickDismiss = (id: string) => {\n setDismissedNotifications(prevValue => {\n const newValue = prevValue.concat(id)\n dismissedNotificationsStore = newValue\n return newValue\n })\n }\n\n const {\n isLoading: isLoadingNotifications,\n error: isErrorNotifications,\n data: notifications,\n } = useQuery(\n queryKeys.notifications,\n () =>\n get({\n url: '/api/contentful/notifications',\n }),\n {\n refetchInterval: refetchInMs,\n refetchIntervalInBackground: true,\n }\n )\n\n if (\n isLoadingNotifications ||\n isErrorNotifications ||\n !notifications ||\n notifications?.length === 0\n )\n return null\n\n const filterData = notifications.filter(notification => {\n const wasNotificationDismissed = dismissedNotifications.includes(notification.Sys?.Id)\n if (wasNotificationDismissed) return false\n\n const shouldAppearToCurrentUser =\n notification.Visibility === AlwaysShow ||\n (isLoggedIn && notification.Visibility === Inducement) ||\n (!isLoggedIn && notification.Visibility === NonInducement)\n if (!shouldAppearToCurrentUser) return false\n\n const shouldAppearOnCurrentChannel =\n notification.TargetChannel === TargetChannel.AllChannels ||\n (isDesktop && notification.TargetChannel === TargetChannel.DesktopOnly) ||\n (!isDesktop && notification.TargetChannel === TargetChannel.MobileOnly)\n if (!shouldAppearOnCurrentChannel) return false\n\n return true\n })\n\n return (\n <>\n {filterData.map(notification => (\n }\n onClickDismiss={\n notification.Dismissible ? () => onClickDismiss(notification.Sys?.Id) : undefined\n }\n hideIcon={notification.HideIcon}\n key={notification.Sys?.Id}\n />\n ))}\n \n )\n}\n","import React from 'react'\nimport { Banner, BannerArea } from '../types'\n\nexport const BannerPicture: React.FC<\n Pick & { areaName: BannerArea }\n> = ({ image, imageWide, areaName }) => {\n const isDesktop = areaName === 'Desktop'\n const sharedParams = `?fm=jpg&fl=progressive&q=90`\n\n return (\n \n {!isDesktop && (\n \n )}\n\n \n\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const PaginationStyled = styled('div')({\n margin: 0,\n textAlign: 'center',\n})\n\ninterface PaginationDotProps {\n active: boolean\n}\n\nconst dotSize = '0.8rem'\n\nexport const PaginationDotStyled = styled('span')(\n {\n border: `0.1rem solid ${hexColors.veryLightGrey}`,\n borderRadius: '100%',\n display: 'inline-block',\n height: dotSize,\n margin: '0.5rem 0.2rem',\n width: dotSize,\n },\n\n ({ active }) => ({\n backgroundColor: active ? hexColors.veryLightGrey : 'transparent',\n })\n)\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\n// All new messages should extend this\nconst Message = styled('div')({\n padding: '1rem',\n fontSize: '1.2rem',\n border: '1px solid',\n margin: '1rem',\n width: 'calc(100% - 2rem)',\n boxSizing: 'border-box',\n})\n\nexport const MessageStyled = styled(Message)({\n color: colors.messages.info.text,\n borderColor: colors.messages.info.border,\n backgroundColor: colors.messages.info.background,\n})\n\nexport const ErrorMessageStyled = styled(Message)({\n color: colors.messages.error.text,\n borderColor: colors.messages.error.border,\n backgroundColor: colors.messages.error.background,\n})\n\nexport const WarningMessageStyled = styled(Message)({\n color: colors.messages.warning.text,\n borderColor: colors.messages.warning.border,\n backgroundColor: colors.messages.warning.background,\n})\n\nexport const SuccessMessageStyled = styled(Message)({\n color: colors.messages.success.text,\n borderColor: colors.messages.success.border,\n backgroundColor: colors.messages.success.background,\n})\n","import React from 'react'\nimport { range } from '@mobi/utils'\nimport { PaginationStyled, PaginationDotStyled } from './Pagination.styles'\nimport { ErrorMessage } from '../Messages'\n\ninterface PaginationProps {\n dotCount: number\n index?: number\n}\n\nexport function Pagination({ dotCount, index = 0 }: PaginationProps) {\n if (dotCount < 0) {\n return PRODUCTION ? null : dotCount must not be negative.\n }\n if (dotCount <= 1) {\n return null\n }\n if (index < 0 || index >= dotCount) {\n return PRODUCTION ? null : (\n \n Index must be in range for [0..{dotCount - 1}] for {dotCount} dots.\n \n )\n }\n\n return (\n \n {range(0, dotCount).map(i => (\n \n ))}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@mobi/settings'\n\nexport const BannerContainerStyled = styled('div')<{ isDesktop?: boolean }>(\n {\n backgroundColor: colors.brand.primary,\n overflow: 'hidden',\n position: 'relative',\n\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: '100%',\n // 5:2 aspect ratio\n paddingTop: '40%',\n },\n },\n ({ isDesktop }) => {\n return !isDesktop\n ? {\n '&::before': {\n // 8: aspect ratio\n '@media (min-width: 768px)': {\n paddingTop: '25%',\n },\n },\n }\n : {}\n }\n)\n\nexport const BannerContainerInnerStyled = styled('div')({\n color: 'inherit',\n position: 'absolute',\n width: '100%',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n\n img: {\n display: 'block',\n width: '100%',\n },\n})\n\nexport const BannerPaginationStyled = styled('div')({\n position: 'absolute',\n bottom: 0,\n display: 'flex',\n height: '2rem',\n width: '100%',\n justifyContent: 'center',\n pointerEvents: 'none',\n})\n","import React from 'react'\nimport SwipeableViews from 'react-swipeable-views'\nimport { Pagination } from '@core/Components/Pagination'\nimport { BannerPaginationStyled as PaginationWrap } from '../Banner.styles'\n\nconst AUTO_ADVANCE_TIME_MS = 5_000\n\nexport const CarouselWrapper: React.FC<{\n onViewChange?(index: number): void\n children?: React.ReactNode\n}> = ({ children, onViewChange }) => {\n const bannerCount = React.Children.count(children)\n const timerTrackMsRef = React.useRef(0)\n const [currentBanner, setCurrentBanner] = React.useState(0)\n const [isAutoAdvanceOn, setIsAutoAdvanceOn] = React.useState(true)\n\n React.useEffect(() => {\n if (bannerCount === 1 || !isAutoAdvanceOn) return undefined\n\n // Check if user has interrupted before next advance\n if (timerTrackMsRef.current >= 500) {\n setIsAutoAdvanceOn(false)\n return undefined\n }\n\n timerTrackMsRef.current = AUTO_ADVANCE_TIME_MS\n\n const timerId = setInterval(() => {\n timerTrackMsRef.current -= 250\n\n // Auto advance when interval is reached\n if (timerTrackMsRef.current === 0) {\n setCurrentBanner(currentBanner =>\n currentBanner === bannerCount - 1 ? 0 : currentBanner + 1\n )\n }\n }, 250)\n\n return () => {\n clearInterval(timerId)\n }\n }, [isAutoAdvanceOn, currentBanner, bannerCount])\n\n React.useEffect(() => {\n onViewChange?.(currentBanner)\n }, [currentBanner])\n\n return bannerCount > 1 ? (\n <>\n \n {children}\n \n \n \n \n \n ) : (\n <>{children}\n )\n}\n","import React, { forwardRef, ReactNode } from 'react'\nimport { BannerContainerStyled, BannerContainerInnerStyled } from '../Banner.styles'\nimport { BannerArea } from '../types'\n\nexport const BannerContainer = forwardRef<\n HTMLDivElement,\n { areaName: BannerArea; children?: ReactNode }\n>(({ areaName, children }, ref) => (\n \n {children}\n \n))\n\nBannerContainer.displayName = 'BannerContainer'\n","import React from 'react'\nimport { BannerArea } from '../types'\nimport { BannerPicture } from './BannerPicture'\n\nimport fallbackImage from './images/normal.v1.jpg'\nimport fallbackWideImage from './images/wide.v1.jpg'\n\nexport const FallBackBanner = ({ areaName }: { areaName: BannerArea }) => (\n \n)\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\nexport interface BannerAnalyticsData {\n bannerName: string\n internalTrackingCode?: string\n accountNumber: number | null\n bannerLocation: string\n bannerPosition: number\n clickUrl: string\n}\n\nconst mapBannerDataToEcommerceItems = (data: BannerAnalyticsData) => {\n const itemBrand = data.clickUrl.includes('tabtouch-sports')\n ? 'pre'\n : data.clickUrl.includes('races')\n ? 'Racing'\n : undefined\n const itemIdMatch = data.clickUrl.match(/\\/event\\/(\\d+)$/)\n const itemId = itemIdMatch ? itemIdMatch[1] : undefined\n\n return {\n promotion_name: data.bannerName,\n internalTrackingCode: data.internalTrackingCode,\n item_id: itemId,\n index: data.bannerPosition,\n creative_slot: data.bannerLocation,\n item_brand: itemBrand,\n item_variant: 'Feature Banner',\n }\n}\n\nexport const trackBannerClicked = (data?: BannerAnalyticsData) => {\n if (!data) return\n const newData = mapBannerDataToEcommerceItems(data)\n trackEvent(analyticsKeys.featureBannerClicked, {\n ecommerce: {\n items: [newData],\n },\n })\n}\n\nexport const trackBannerViewed = (data?: BannerAnalyticsData) => {\n if (!data) return\n const newData = mapBannerDataToEcommerceItems(data)\n trackEvent(analyticsKeys.featureBannerViewed, {\n ecommerce: {\n items: [newData],\n },\n })\n}\n","import React from 'react'\nimport { BannerAnalyticsData, trackBannerClicked } from '../analytics'\n\ninterface LinkWrapperProps {\n url?: string\n internalTrackingCode?: string\n abGroupingTokenPresent?: boolean\n analyticsData?: BannerAnalyticsData\n children?: React.ReactNode\n}\n\nexport const LinkWrapper: React.FC = ({\n url,\n internalTrackingCode,\n abGroupingTokenPresent,\n analyticsData,\n children,\n}) => {\n const anchorRef = React.useRef(null)\n const mouseMoveRef = React.useRef(0)\n\n const handleMouseMove = React.useCallback(({ movementX }: MouseEvent) => {\n mouseMoveRef.current = Math.max(mouseMoveRef.current, Math.abs(movementX))\n }, [])\n\n const removeMouseMoveEventListener = React.useCallback(() => {\n const anchorEl = anchorRef.current\n anchorEl?.removeEventListener('mousemove', handleMouseMove)\n }, [handleMouseMove])\n\n React.useEffect(() => {\n return removeMouseMoveEventListener\n }, [removeMouseMoveEventListener])\n\n return url ? (\n {\n anchorRef.current?.addEventListener('mousemove', handleMouseMove)\n }}\n onMouseUp={removeMouseMoveEventListener}\n onMouseLeave={() => {\n removeMouseMoveEventListener()\n mouseMoveRef.current = 0\n }}\n onClick={ev => {\n if (mouseMoveRef.current > 5) ev.preventDefault()\n else trackBannerClicked(analyticsData)\n mouseMoveRef.current = 0\n }}\n style={{ display: 'block' }}\n draggable='false'\n href={url}\n data-internaltrackingcode={internalTrackingCode}\n data-abtestbanner={abGroupingTokenPresent}\n >\n {children}\n \n ) : (\n <>{children}\n )\n}\n","import { Banner, BannerApiResource } from '../types'\n\nexport function mapApiBanner(resource: BannerApiResource): Banner {\n return {\n name: resource.Name,\n image: resource.Image.File.Url,\n imageWide: resource.ImageWide.File.Url,\n imageText: resource.Image.Title,\n url: resource.Link,\n desktopUrl: resource.DesktopLink,\n internalTrackingCode: resource.InternalTrackingCode || undefined,\n abGroupingTokenPresent: !!resource.AbGroupingToken,\n }\n}\n","import React, { useRef } from 'react'\nimport { useQuery } from 'react-query'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport {\n FallBackBanner,\n LinkWrapper,\n BannerContainer as Container,\n CarouselWrapper,\n BannerPicture,\n} from './Components'\nimport { trackBannerViewed } from './analytics'\nimport { filterBannersForArea, mapApiBanner } from './helpers'\nimport { BannerArea } from './types'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport const Banner = React.memo(({ areaName }: { areaName: BannerArea }) => {\n const { accountNumber } = useObservableImmutable(userAccountState$, ['accountNumber'])\n\n const { isLoading, error, data } = useQuery(\n [queryKeys.banner],\n () => fetch('/api/contentful/banners', { credentials: 'same-origin' }).then(res => res.json()),\n {\n refetchInterval: 1000 * 60 * 2, // 2min\n refetchOnMount: false,\n refetchOnWindowFocus: true,\n }\n )\n\n const viewedBannersRef = useRef>(new Set())\n const containerRef = useRef(null)\n\n const handleViewChange = (index: number) => {\n const bannerElement = containerRef.current\n const isInViewPort =\n bannerElement &&\n bannerElement.getBoundingClientRect().top > 0 &&\n bannerElement.getBoundingClientRect().top < window.innerHeight\n\n if (isInViewPort && !viewedBannersRef.current.has(index) && banners[index].name) {\n const bannerData = {\n bannerName: banners[index].name || '',\n internalTrackingCode: banners[index].internalTrackingCode,\n accountNumber: accountNumber,\n bannerLocation: areaName,\n bannerPosition: index,\n clickUrl: (areaName === 'Desktop' ? banners[index].desktopUrl : banners[index].url) || '',\n }\n\n trackBannerViewed(bannerData)\n viewedBannersRef.current.add(index)\n }\n }\n\n if (isLoading || accountNumber === undefined) {\n return \n }\n\n const hasData = data && data.length > 0\n const banners = hasData\n ? filterBannersForArea({ areaName, accountNumber, data }).map(mapApiBanner)\n : []\n\n if (error || banners.length === 0)\n return (\n \n \n \n )\n\n return (\n \n \n {banners.map((banner, index) => (\n \n \n \n ))}\n \n \n )\n})\n\nBanner.displayName = 'Banner'\n","import { SIGNUP_ROOT_ROUTE } from '@mobi/account/Areas/SignUp/Utils'\nimport { BannerApiResource, BannerArea } from '../types'\n\ninterface FilterBannersForArea {\n areaName: BannerArea\n accountNumber: number | null\n data: BannerApiResource[]\n}\n\nexport function filterBannersForArea({\n areaName,\n accountNumber,\n data,\n}: FilterBannersForArea): BannerApiResource[] {\n const filteredBanners = data.filter(\n item =>\n // Ensure Images are Available\n !!item.Image &&\n !!item.Image.File &&\n (areaName === 'Desktop' || (!!item.ImageWide && !!item.ImageWide.File)) &&\n //\n // When Location Includes Area, Keep in Array\n item.Location.some(location => location.includes(areaName)) &&\n //\n // When Item is Flagged as Inducement, Keep if Account Number is Present\n (item.IsInducement ? accountNumber !== null : true) &&\n //\n // Remove Sign Up if Logged In\n (item.Link?.toLowerCase().includes(`/#${SIGNUP_ROOT_ROUTE.toLowerCase()}`) ||\n item.DesktopLink?.toLowerCase().includes(`/${SIGNUP_ROOT_ROUTE.toLowerCase()}`)\n ? accountNumber === null\n : true) &&\n //\n // When A/B Targeting, Keep Correct Segment Based on Account Number\n filterABSegments(item, accountNumber)\n )\n return filteredBanners.some(item => item.IsInducement)\n ? filteredBanners.filter(item => item.IsInducement)\n : filteredBanners\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction filterABSegments(\n item: BannerApiResource,\n accountNumber: FilterBannersForArea['accountNumber']\n): boolean {\n // Don't Filter if No ABGrouping is Present\n if (!item.AbGroupingSegment) return true\n\n // Only use A/B Testing when Logged In\n if (accountNumber === null) return false\n\n const targetSegment = accountNumber % 2 === 0 ? 'a' : 'b'\n\n return item.AbGroupingSegment.toLowerCase() === targetSegment\n}\n","import styled, { type StyledComponent } from '@emotion/styled'\nimport { Link, type LinkProps } from 'react-router-dom'\nimport { MainContainerStyled } from '@core/Components/Containers/MainContainer.styles'\nimport { fontFamilies, fontFamiliesBold } from '@core/Settings'\nimport { colors, hexColors } from '@mobi/settings'\n\nexport const HOME_CSS_SHARED_VALUES = {\n spacingY: '1rem',\n spacingX: '0.5rem',\n borderRadius: '0.5rem',\n boxShadow: '0 0.1rem 0.1rem rgba(0,0,0,0.1)',\n}\n\nexport const HomeMainContainerStyled = styled(MainContainerStyled)({\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const BannerCardStyled = styled('div')({\n overflow: 'hidden',\n boxSizing: 'border-box',\n margin: `${HOME_CSS_SHARED_VALUES.spacingY} ${HOME_CSS_SHARED_VALUES.spacingX}`,\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n border: `0.2rem solid ${hexColors.blueDiamond}`,\n boxShadow: 'rgb(0 0 0 / 20%) 0 0.1rem 0.3rem 0, rgb(0 0 0 / 40%) 0 0.1rem 0.2rem 0',\n background: hexColors.blueDiamond,\n})\n\n// Horizontal Scroll\n\nexport const HomeScrollWrapperStyled = styled('div')({\n background: hexColors.gainsboro,\n paddingBottom: HOME_CSS_SHARED_VALUES.spacingY,\n\n h3: {\n color: colors.brand.primary,\n },\n})\n\nexport const HomeScrollHeaderStyled = styled('h3')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '3rem',\n margin: 0,\n padding: 0,\n paddingLeft: HOME_CSS_SHARED_VALUES.spacingX,\n fontFamily: fontFamiliesBold.brand,\n fontSize: '1.4rem',\n textTransform: 'none',\n lineHeight: 1,\n color: 'inherit',\n background: 'none',\n})\n\nexport const HomeScrollableContainerStyled = styled('div')({\n boxSizing: 'border-box',\n overflowX: 'auto',\n width: '100%',\n paddingLeft: HOME_CSS_SHARED_VALUES.spacingX,\n paddingBottom: HOME_CSS_SHARED_VALUES.spacingY,\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n WebkitTapHighlightColor: 'transparent',\n})\n\nexport const HomeScrollListItemsStyled = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n\n '& > *:last-child': {\n marginRight: 0,\n },\n\n '&::after': {\n content: '\"\"',\n display: 'block',\n minWidth: HOME_CSS_SHARED_VALUES.spacingX,\n },\n})\n\nexport const HomeScrollHeaderLinkStyled: StyledComponent = styled(Link)({\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: HOME_CSS_SHARED_VALUES.spacingX,\n paddingRight: HOME_CSS_SHARED_VALUES.spacingX,\n fontFamily: fontFamilies.brand,\n fontSize: '1.4rem',\n color: 'inherit',\n})\n","import styled from '@emotion/styled'\nimport { hexColors, colors } from '@mobi/settings'\nimport { HOME_CSS_SHARED_VALUES } from '@core/Areas/Home/Home.styles'\nimport { fontFamiliesBold } from '@core/Settings'\n\nexport const HomeNavigationContainerStyled = styled('div')({\n padding: `0 ${HOME_CSS_SHARED_VALUES.spacingX}`,\n marginBottom: '1.5rem',\n\n a: {\n display: 'flex',\n flexDirection: 'column',\n fontFamily: fontFamiliesBold.brand,\n textTransform: 'uppercase',\n textDecoration: 'none',\n textAlign: 'center',\n },\n\n '& > div': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n\n // Primary Nav\n '& > div:first-of-type': {\n paddingBottom: HOME_CSS_SHARED_VALUES.spacingY,\n\n a: {\n width: '24%',\n fontSize: '1.4rem',\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n color: hexColors.white,\n background: colors.brand.primary,\n\n span: {\n display: 'block',\n transform: 'translateY(-0.5rem)',\n },\n },\n },\n\n // Secondary Nav\n '& > div:last-of-type': {\n a: {\n alignSelf: 'stretch',\n width: '15.5%',\n lineHeight: 1.1,\n color: colors.brand.primary,\n\n div: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '5rem',\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n boxShadow: HOME_CSS_SHARED_VALUES.boxShadow,\n background: hexColors.white,\n },\n\n span: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: '0.4rem',\n fontSize: '1.1rem',\n letterSpacing: '-0.1rem',\n },\n },\n },\n})\n","import React, { MouseEvent, ReactChild, TouchEvent } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Icon, type IconProps } from '@mobi/component-library/Common/Icon'\nimport { KAMBI_HOME_HASH_ROUTE } from '@core/Areas/Kambi/constants'\nimport { StructuredSearchRoute } from '@core/Areas/StructuredSearch/constants'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { HomeNavigationContainerStyled } from './HomeNavigation.styles'\nimport { trackTopNavigationClicked } from '../../analytics'\nimport { useIsFobSportsFeatureActive } from '@core/Areas/Sports/hooks/useIsFobSportsFeatureActive'\n\ntype NavigationLinkProps = {\n to: string\n icon: IconProps['type']\n iconSize: IconProps['size']\n children: ReactChild\n testId: string\n onClick?: (event: MouseEvent | TouchEvent) => void\n}\n\nconst NavigationLink: React.FC = ({\n icon,\n iconSize,\n testId,\n children,\n to,\n onClick,\n}) => {\n const testAttributes = {\n [`data-tid-${testId}`]: true,\n }\n\n return (\n \n
      \n \n
      \n {children}\n \n )\n}\n\nexport const HomeNavigation: React.FC = () => {\n const isNewSportsFeatureActive = useIsFobSportsFeatureActive()\n\n return (\n \n
      \n \n Races\n \n\n \n Trots\n \n\n \n Dogs\n \n\n \n Sports\n \n
      \n\n
      \n \n
      \n \n
      \n \n Next
      \n Races\n
      \n \n\n \n
      \n \n
      \n Jackpots\n \n\n \n
      \n \n
      \n \n Mystery
      \n Bet\n
      \n \n\n \n
      \n \n
      \n \n Good
      \n Things\n
      \n \n\n \n
      \n \n
      \n \n Smart
      \n Form\n
      \n \n\n \n
      \n \n
      \n \n Favourite
      \n Numbers\n
      \n \n
      \n
      \n )\n}\n\n// Helpers\nfunction onNavButtonClick(e: MouseEvent | TouchEvent) {\n const text = (e.currentTarget.textContent ?? '').trim()\n\n if (text) {\n trackTopNavigationClicked(text)\n }\n}\n","import { useQuery, UseQueryResult } from 'react-query'\n\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport type { RaceCodes } from '../Racing/Types/MeetingInformation'\n\nconst MaxRefetchInterval = 120_000\n\nexport const MaxNumberOfRaces = 20\nexport const MaxNumberOfRacesForHome = 7\n\nexport type NextEventsFilter = Record\n\nexport function isToteRaceChangePushEvent(status: string): boolean {\n return ['raceopened', 'raceclosed', 'raceabandon', 'raceunabandon'].includes(status)\n}\n\nexport const useNextRaces = (refetchInterval?: number): UseQueryResult => {\n return useQuery(\n queryKeys.nextRaces,\n () =>\n get<{\n nextRaces: NextRace[]\n }>({ url: '/webapi/race/GetNextRaces' }).then(response => response.nextRaces),\n {\n enabled: true,\n refetchOnWindowFocus: true,\n refetchOnMount: true,\n refetchIntervalInBackground: false,\n refetchInterval: refetchInterval || MaxRefetchInterval,\n }\n )\n}\n\nexport let nextEventsfilters: NextEventsFilter = { Races: true, Trots: true, Dogs: true }\n\nexport function setNextEventFilters(filters: NextEventsFilter) {\n if (!Object.values(filters).every(x => x === false)) {\n nextEventsfilters = filters\n }\n}\n","import styled from '@emotion/styled'\nimport { newTheme } from '@mobi/component-library/Theme'\nimport React from 'react'\n\ninterface LoadingPlaceholderProps {\n width?: string\n height?: string\n borderRadius?: string\n margin?: string\n testId?: string\n}\n\nexport const LoadingPlaceholder = ({\n width,\n height,\n borderRadius,\n margin,\n testId,\n}: LoadingPlaceholderProps) => {\n return (\n \n )\n}\n\nconst LoadingPlaceholderStyled = styled.div({\n background: newTheme.colors.neutral[300],\n position: 'relative',\n overflow: 'hidden',\n\n animation: 'pulse 2s infinite ease-in',\n\n '@keyframes pulse': {\n '0%': {\n opacity: 0.35,\n },\n '50%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0.35,\n },\n },\n})\n","import styled from '@emotion/styled'\nimport { fontFamilies } from '@core/Settings'\nimport { HOME_CSS_SHARED_VALUES } from '../../Home.styles'\nimport { hexColors } from '@mobi/settings'\n\nexport const HomeNextRacesListItemStyled = styled.a({\n background: hexColors.white,\n boxShadow: HOME_CSS_SHARED_VALUES.boxShadow,\n color: hexColors.black,\n display: 'inline-block',\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n alignItems: 'center',\n fontFamily: fontFamilies.default,\n height: '5.5rem',\n fontSize: '1.1rem',\n margin: '0',\n marginRight: '0.75rem',\n padding: '0.5rem',\n position: 'relative',\n textAlign: 'left',\n textDecoration: 'none',\n verticalAlign: 'middle',\n width: '10rem',\n minWidth: '10rem',\n\n '&:hover': {\n backgroundColor: 'none',\n },\n})\n","import React from 'react'\n\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nimport { HomeNextRacesListItemStyled } from './HomeNextRaces.styles'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const HomeNextRacesLoading: React.FC = () => {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\n\nexport const SkyTvSvg: React.FC<{\n width: string\n channel: ChannelType\n colorOverride?: string\n}> = ({ channel, width, colorOverride }) => {\n const skyColor = channelConfig[channel].color\n const viewBox = channel == 'Replay' ? '0 0 44 14' : '0 0 233 78'\n const svgWidth = channel == 'Replay' ? '4.1rem' : width\n return (\n \n {channelConfig[channel].name}\n \n \n )\n}\n\nexport const channelConfig: Record = {\n Sky1: {\n name: 'Sky TV 1',\n color: hexColors.skyTvRed,\n path: 'M25.07 24.54c-.57-5.35 2.86-5.91 6.14-6.26 7.5-.77 19.07 6.19 21.64 8.16-.14-5.07 0-13.65 0-15.13 0 0-6.21-6.69-23.14-6.69-16.07.07-22 8.73-23.07 11.96-1.07 3.17-4.43 13.72 7.07 23.01 7.57 6.12 21.78 7.95 20.93 14.5-.71 5.07-8.36 4.57-12.71 3.94C18.36 57.4 11.07 54.37 7 51.2c0 3.73-.07 15.55-.07 15.55s11.36 7.46 28.42 5.77c15.14-1.48 20.57-12.46 20.57-16.68 0-6.54-1.21-10.84-6.36-16.4-6-6.4-23.93-9.64-24.5-14.92ZM142.84 27 127.91 6h-24.8S86.25 27.18 80 35.13V6H59v66h21V42.2L105.34 73h26L101.2 36.43l14.85-19 15.94 23.43v32.13h21V41.56l27.33-36.57h-22.28l-15.21 22Zm51.82-22-11.35 14.91 11.05 13.27 6.63-7.17V73h21V5h-27.34Z',\n },\n Sky2: {\n name: 'Sky TV 2',\n color: hexColors.skyTvBlue,\n path: 'M25.08 24.59c-.57-5.35 2.86-5.91 6.14-6.26 7.5-.77 19.08 6.19 21.65 8.16-.14-5.07 0-13.65 0-15.13 0 0-6.22-6.69-23.15-6.69-16.08.07-22.01 8.73-23.08 11.96-1.07 3.17-4.43 13.72 7.07 23.01 7.57 6.12 21.79 7.95 20.94 14.5-.71 5.07-8.36 4.57-12.72 3.94-3.57-.63-10.86-3.66-14.93-6.83 0 3.73-.07 15.55-.07 15.55s11.36 7.46 28.44 5.77c15.15-1.48 20.58-12.46 20.58-16.68 0-6.54-1.21-10.84-6.36-16.4-6-6.4-23.94-9.64-24.51-14.92Zm117.61 2.46L127.76 6h-24.65S86.25 27.18 80 35.13V6H59v66h21V42.25L105.18 73h26.01l-30.15-36.52 14.86-19L132 40.91V73h21V41.61L180.2 5h-22.29l-15.22 22.05Zm75.74 15.51S228 30.68 228 22.36c0-12.94-9.85-21.4-22.8-21.4-10.5 0-19.2 11.73-19.2 11.73l10.79 13.23 5.54-6.33s3.24-3.91 6.83-.36c3.38 3.34 1.08 5.9 1.08 5.9L186 57.06v15.93h42v-16h-21l11.44-14.44Z',\n },\n RacingWA: {\n name: 'Racing WA Vision',\n color: hexColors.racingWa,\n path: 'M176.37,2.4h-23.67l-24.82,74.6h19.11l4.84-15.66h25.41l4.85,15.66h19.11L176.37,2.4ZM156.03,49.32l8.75-26.45,8.19,26.45h-16.94ZM131.73,2.4l-21.38,74.6h-17.14l-13.26-45.24h-.57l-13.26,45.24h-17.1L27.62,2.4h19.65l11.1,48.88h.61L71.66,2.4h16.02l12.68,48.99h.61L112.11,2.4h19.61Z',\n },\n Replay: {\n name: 'Race Replay',\n color: hexColors.black,\n path: 'M.619 11V.818h3.629c.789 0 1.443.136 1.964.408.523.272.914.648 1.173 1.128.258.478.388 1.03.388 1.656 0 .623-.131 1.172-.393 1.646-.259.47-.65.836-1.173 1.098-.52.262-1.175.393-1.964.393h-2.75V5.825h2.61c.498 0 .902-.072 1.214-.214a1.41 1.41 0 0 0 .69-.622c.147-.271.22-.598.22-.98 0-.384-.075-.717-.224-.998a1.445 1.445 0 0 0-.691-.647C5 2.212 4.59 2.136 4.084 2.136h-1.93V11H.62Zm5.026-4.594L8.16 11H6.41L3.945 6.406h1.7Zm7.073 4.748c-.752 0-1.4-.16-1.944-.482a3.271 3.271 0 0 1-1.253-1.367c-.291-.59-.437-1.281-.437-2.073 0-.783.146-1.472.437-2.069a3.398 3.398 0 0 1 1.233-1.397c.53-.334 1.15-.502 1.86-.502.43 0 .848.071 1.253.214.404.142.767.366 1.088.671.322.305.575.701.761 1.188.186.484.279 1.073.279 1.765v.527h-6.07V6.516h4.613a2.2 2.2 0 0 0-.239-1.04 1.804 1.804 0 0 0-.671-.72 1.875 1.875 0 0 0-1.004-.264 1.94 1.94 0 0 0-1.094.308 2.069 2.069 0 0 0-.716.796 2.296 2.296 0 0 0-.248 1.059v.87c0 .51.089.944.268 1.302.182.358.436.632.76.82.325.186.705.28 1.14.28.28 0 .538-.04.77-.12a1.599 1.599 0 0 0 .99-.97l1.406.254a2.548 2.548 0 0 1-.607 1.089 2.941 2.941 0 0 1-1.088.72c-.434.17-.93.254-1.487.254Zm4.926 2.71v-10.5h1.452v1.238h.124c.086-.16.21-.343.373-.552a2.11 2.11 0 0 1 .676-.547c.288-.16.67-.239 1.143-.239.617 0 1.167.156 1.65.468.485.311.864.76 1.14 1.347.278.586.417 1.292.417 2.118 0 .825-.138 1.533-.413 2.123-.275.586-.653 1.039-1.133 1.357-.48.315-1.03.472-1.646.472-.464 0-.843-.078-1.138-.233a2.155 2.155 0 0 1-.686-.547 4.141 4.141 0 0 1-.383-.557h-.09v4.052h-1.486ZM19.1 7.182c0 .537.077 1.007.233 1.412.156.404.381.72.676.95.295.225.656.337 1.084.337.444 0 .815-.117 1.114-.353.298-.238.523-.561.676-.97.156-.407.233-.866.233-1.376 0-.504-.076-.956-.228-1.357a2.077 2.077 0 0 0-.676-.95c-.299-.232-.672-.348-1.119-.348-.43 0-.795.111-1.094.333-.295.222-.518.532-.67.93-.153.397-.23.862-.23 1.392ZM27.77.818V11h-1.487V.818h1.487Zm4.222 10.351a3.12 3.12 0 0 1-1.312-.268 2.211 2.211 0 0 1-.93-.79c-.226-.346-.338-.768-.338-1.269 0-.43.083-.785.248-1.064.166-.278.39-.498.672-.66.281-.163.596-.286.944-.369a9.39 9.39 0 0 1 1.064-.189l1.114-.129c.285-.036.492-.094.621-.174.13-.08.194-.209.194-.388v-.034c0-.435-.123-.771-.368-1.01-.242-.238-.603-.358-1.084-.358-.5 0-.894.111-1.183.333-.285.22-.482.463-.591.731l-1.398-.318c.166-.464.408-.838.726-1.124a2.944 2.944 0 0 1 1.109-.626 4.328 4.328 0 0 1 1.317-.199c.305 0 .629.037.97.11.345.07.666.198.964.387.302.19.549.46.741.81.192.349.288.801.288 1.358V11h-1.45V9.956h-.06c-.096.192-.24.381-.432.567-.193.185-.44.34-.741.462-.302.123-.663.184-1.084.184Zm.323-1.193c.411 0 .762-.081 1.054-.244.295-.162.519-.374.671-.636a1.65 1.65 0 0 0 .234-.85V7.26c-.053.053-.156.103-.308.15-.15.043-.32.08-.512.114-.192.03-.38.058-.562.084a62.01 62.01 0 0 0-.458.06 3.685 3.685 0 0 0-.79.184c-.235.086-.424.21-.567.373-.139.159-.209.371-.209.636 0 .368.136.647.408.835.272.186.618.279 1.04.279Zm6.092 3.888c-.222 0-.425-.019-.607-.055a1.91 1.91 0 0 1-.407-.11l.357-1.217a2.4 2.4 0 0 0 .726.094.87.87 0 0 0 .562-.239c.166-.149.312-.392.438-.73l.184-.508-2.794-7.735h1.59L40.39 9.29h.08l1.934-5.926H44l-3.147 8.655a3.452 3.452 0 0 1-.557 1.01 2.163 2.163 0 0 1-.805.626 2.64 2.64 0 0 1-1.084.209Z',\n },\n}\n\n// =====\n// Types\n// =====\n\nexport type ChannelType = 'Sky1' | 'Sky2' | 'RacingWA' | 'Replay'\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { colors, font, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { SkyTvSvg } from '@mobi/component-library/Common/Svg'\nimport { ChannelType } from '@mobi/component-library/Common/Svg/SkyTv/SkyTvSvg'\n\nexport const SkyTvButton: React.FC<{\n channel: ChannelType\n isLive: boolean\n isPlaying: boolean\n onClick: () => void\n isLoading?: boolean\n}> = ({ channel, isLive, isPlaying, onClick, isLoading = false }) => {\n const displayType = isLive ? 'live' : channel\n\n return (\n \n \n {isLive ? (\n 'Live'\n ) : (\n \n )}\n \n\n {isLoading ? (\n \n ) : (\n \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst SkyButtonStyled = styled.button<{ display: ChannelType | 'live'; isPlaying: boolean }>(\n {\n '@keyframes pulseAnimation': {\n '0%': { opacity: 1, transform: 'scale(1)' },\n to: { opacity: 0, transform: 'scale(1.7)', transformOrigin: 'center' },\n },\n\n boxSizing: 'border-box',\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: spacing.smx2,\n margin: 0,\n minWidth: '6.4rem',\n padding: `0 ${spacing.smx1}`,\n height: '3.2rem',\n border: 0,\n borderRadius: radius.sm,\n cursor: 'pointer',\n\n '> span': {\n display: 'inline-flex',\n alignItems: 'center',\n },\n\n '*': { flexShrink: 0 },\n },\n ({ display, isPlaying }) => {\n if (display === 'live') {\n return {\n backgroundColor: colors.error[600],\n color: colors.white,\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n letterSpacing: font.size.lg.letterSpacing,\n fontWeight: font.weight.bold,\n\n '> span:nth-of-type(2)': {\n svg: { color: colors.white },\n\n '&::before': !isPlaying\n ? {\n content: '\"\"',\n display: 'block',\n boxSizing: 'border-box',\n border: '0.2rem solid white',\n borderRadius: '100%',\n animation: 'pulseAnimation 1.5s infinite',\n height: '1.2rem',\n width: '1.2rem',\n position: 'absolute',\n }\n : {},\n },\n }\n }\n\n const channelColor =\n display === 'Sky1'\n ? hexColors.skyTvRed\n : display === 'Sky2'\n ? hexColors.skyTvBlue\n : display === 'Replay'\n ? hexColors.bondiBlue\n : hexColors.racingWa\n const colorInvert = isPlaying ? channelColor : colors.white\n\n return {\n backgroundColor: colorInvert,\n border: isPlaying ? 0 : `0.05rem solid ${colors.neutral[200]}`,\n boxShadow: isPlaying ? undefined : shadow.sm,\n\n '> span > svg': {\n color: isPlaying ? colors.white : channelColor,\n },\n }\n }\n)\n","import React, { ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { font, radius, spacing, colors } from '../../Theme/Common'\n\ntype StatusBadgeColor = 'gray' | 'green' | 'yellow' | 'red' | 'blue' | 'success' | 'neutral'\ntype StatusBadgeSize = 'S' | 'L'\n\n/** A status badge that displays some text, and has a color to indicate status */\nexport const StatusBadge: React.FC<{\n children: ReactNode\n color?: StatusBadgeColor\n badgeSize?: StatusBadgeSize\n}> = ({ color = 'gray', badgeSize = 'S', children }) => (\n \n {children}\n \n)\n\n// ======\n// Styles\n// ======\n\nconst badgeColors: Record = {\n gray: {\n color: colors.neutral[900],\n backgroundColor: colors.neutral[100],\n },\n green: {\n color: colors.success[600],\n backgroundColor: colors.success[50],\n },\n yellow: {\n color: colors.warning[700],\n backgroundColor: colors.warning[50],\n },\n red: {\n color: colors.error[600],\n backgroundColor: colors.error[50],\n },\n blue: {\n color: colors.mariner[600],\n backgroundColor: colors.mariner[50],\n },\n success: {\n color: colors.white,\n backgroundColor: colors.success[500],\n },\n neutral: {\n color: colors.white,\n backgroundColor: colors.neutral[700],\n },\n}\n\nconst StatusBadgeStyled = styled.span({\n boxSizing: 'border-box',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: spacing.smx2,\n\n fontFamily: font.family.primary,\n fontSize: font.size.sm.fontSize,\n lineHeight: font.size.sm.lineHeight,\n letterSpacing: font.size.sm.letterSpacing,\n fontWeight: font.weight.regular,\n})\n","import React from 'react'\nimport { SkyTvSvg } from '../../Common/Svg'\nimport { StatusBadge } from '../../Common/StatusBadge'\nimport { ChannelType } from '@mobi/component-library/Common/Svg/SkyTv/SkyTvSvg'\n\nexport const SkyTvBadge: React.FC<{\n channel: ChannelType\n size?: 'S' | 'M'\n}> = ({ channel, size = 'S' }) => (\n \n \n \n)\n","import { ChannelType } from '@mobi/component-library/Common/Svg/SkyTv/SkyTvSvg'\nimport { SkyVideoPlayerState } from '../Store'\n\n/** Defaults to Sky2 */\nexport function getVisionChannelForDisplay(\n channelId: string,\n isRacingWA: boolean,\n hasRaceReplayUrl = false\n): SkyVideoPlayerState['selectedChannel'] {\n if (hasRaceReplayUrl) return 'Replay'\n else if (isRacingWA) return 'RacingWA'\n else if (channelId == 'SR1') return 'Sky1'\n else return 'Sky2'\n}\n\nexport function isMatchingVideoPlaying(\n isPlaying: boolean,\n activeChannel: ChannelType,\n desiredChannel: ChannelType,\n isSameRace: boolean\n) {\n return isPlaying && activeChannel == desiredChannel && (activeChannel != 'Replay' || isSameRace)\n}\n","import { NextRace } from '@core/Data/Racing/nextRaces'\nimport type { RacePageDTO } from '@mobi/api-types'\n\nconst enum LocalConstants {\n WAGeoLocationCode = 'WA',\n RaceCode = 'Races',\n}\n\nexport const isThoroughbredRaceInWA = (state?: string, code?: string): boolean =>\n Boolean(state === LocalConstants.WAGeoLocationCode && code === LocalConstants.RaceCode)\n\nexport const isThoroughbredRacePageInWA = (race?: RacePageDTO) =>\n !race\n ? null\n : isThoroughbredRaceInWA(\n race.MeetingInformation.GeoLocationCode,\n race.MeetingInformation.MeetingCodeText\n )\n\nexport const isThoroughbredNextRaceInWA = (race: NextRace) =>\n isThoroughbredRaceInWA(race.GeoLocationCode, race.RaceType)\n","import styled from '@emotion/styled'\n\ninterface TimetoJumpProps {\n size: string\n}\n\nexport const TimeToJumpAbsoluteTimeStyled = styled.span(\n {\n display: 'block',\n fontWeight: 'bold',\n width: 'auto',\n paddingLeft: '1.3rem',\n },\n ({ size }) => {\n return {\n fontSize: `${size}` || '1.4rem',\n }\n }\n)\n\nexport const TimeToJumpDayFlagStyled = styled.div<{ size?: string }>(({ size }) => ({\n textAlign: 'center',\n fontSize: size || '1.0rem',\n}))\n","import * as cookies from 'js-cookie'\nimport moment from 'moment'\n\nconst timezoneOffsetCookieName = 'TimezoneOffset'\n\nexport function today(): Date {\n const date = adjustDateTimeByTimezoneOffsetIfRequired(new Date(), getExplicitTimezoneOffset())\n date.setHours(0, 0, 0, 0)\n return date\n}\n\nexport function todayAsAwst(): Date {\n const date = moment.utc(new Date()).utcOffset(8).toDate()\n date.setHours(0, 0, 0, 0)\n return date\n}\n\nexport function now(): number {\n return adjustDateTimeByTimezoneOffsetIfRequired(new Date(), getExplicitTimezoneOffset()).getTime()\n}\n\n//get the timezone offset - use the cookie set by the android app if present. If not, use javascript Date.\nexport function getTimezoneOffset(): number {\n let timezoneOffset = getExplicitTimezoneOffset()\n if (timezoneOffset == null) {\n timezoneOffset = new Date().getTimezoneOffset()\n }\n return timezoneOffset\n}\n\nexport function parseIso8601Date(value: string): Date {\n return moment(value, moment.ISO_8601).toDate()\n}\n\nexport function parseIso8601DateTime(value: string): Date {\n const result = moment.utc(value, moment.ISO_8601).toDate()\n return adjustDateTimeByTimezoneOffsetIfRequired(result, getExplicitTimezoneOffset())\n}\n\nfunction adjustDateTimeByTimezoneOffsetIfRequired(\n value: Date,\n timezoneOffset: number | null\n): Date {\n if (timezoneOffset != null && timezoneOffset !== new Date().getTimezoneOffset()) {\n return moment(value).utc().add(negate(timezoneOffset), 'm').toDate()\n }\n return value\n}\n\nfunction negate(value: number): number {\n return value * -1\n}\n\nfunction getExplicitTimezoneOffset(): number | null {\n if (hasExplicitTimezoneOffset() === false) {\n return null\n }\n return Number(cookieValue(timezoneOffsetCookieName))\n}\n\nfunction hasExplicitTimezoneOffset(): boolean {\n return isCookieSet(timezoneOffsetCookieName)\n}\n\nfunction isCookieSet(cookieName: string): boolean {\n return cookieValue(cookieName) != undefined\n}\n\nfunction cookieValue(cookieName: string): string | undefined {\n return cookies.get(cookieName)\n}\n\nexport function getTimezoneOffsetHours(): number {\n return new Date().getTimezoneOffset() / -60\n}\n","export type CountdownColor = 'green' | 'orange' | 'red'\n\nclass TimeSpanColorFormat {\n constructor(\n public text: string,\n public color: CountdownColor\n ) {}\n}\n\nexport const TimeSpanCalculator = {\n process(ts: countdown.Timespan): TimeSpanColorFormat {\n const passedStartTime = (ts.value || 0) > 0\n const prefix = passedStartTime ? '-' : ''\n\n if ((ts.days || 0) > 0 && ts.hours === 0) {\n return new TimeSpanColorFormat(`${prefix}${ts.days}d`, passedStartTime ? 'red' : 'green')\n }\n\n if ((ts.days || 0) > 0 && ts.hours !== 0) {\n return new TimeSpanColorFormat(\n `${prefix}${ts.days}d ${ts.hours}h`,\n passedStartTime ? 'red' : 'green'\n )\n }\n\n if ((ts.hours || 0) >= 1 && ts.minutes !== 0) {\n return new TimeSpanColorFormat(\n `${prefix}${ts.hours}h ${ts.minutes}m`,\n passedStartTime ? 'red' : 'green'\n )\n }\n\n if ((ts.hours || 0) >= 1 && ts.minutes === 0) {\n return new TimeSpanColorFormat(`${prefix}${ts.hours}h`, passedStartTime ? 'red' : 'green')\n }\n\n if ((ts.minutes || 0) >= 10) {\n return new TimeSpanColorFormat(`${prefix}${ts.minutes}m`, passedStartTime ? 'red' : 'green')\n }\n\n if ((ts.minutes || 0) >= 3 && ts.seconds !== 0) {\n return new TimeSpanColorFormat(\n `${prefix}${ts.minutes}m ${ts.seconds}s`,\n passedStartTime ? 'red' : 'orange'\n )\n }\n\n if ((ts.minutes || 0) >= 3 && ts.seconds === 0) {\n return new TimeSpanColorFormat(\n `${prefix}${ts.minutes}m ${ts.seconds}s`,\n passedStartTime ? 'red' : 'orange'\n )\n }\n\n if (ts.minutes !== 0 && ts.seconds !== 0) {\n return new TimeSpanColorFormat(`${prefix}${ts.minutes}m ${ts.seconds}s`, 'red')\n }\n\n if (ts.minutes !== 0 && ts.seconds === 0) {\n return new TimeSpanColorFormat(`${prefix}${ts.minutes}m`, 'red')\n }\n\n if (ts.minutes === 0 && ts.seconds !== 0) {\n return new TimeSpanColorFormat(`${prefix}${ts.seconds}s`, 'red')\n }\n\n return new TimeSpanColorFormat(`0s`, 'red')\n },\n} as const\n","import React from 'react'\nimport countdown from 'countdown'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { now as getNow } from '@classic/Foundation/DateTimeProvider'\nimport {\n type CountdownColor,\n TimeSpanCalculator,\n} from '@classic/Betting-v2/Utils/TimeSpanCalculator'\n\nconst bulbHexColors: Record = {\n green: hexColors.yellowGreen,\n orange: hexColors.tangerine,\n red: hexColors.cinnabar,\n}\n\nexport const RaceCountdown: React.FC<{\n raceStartTime: Date\n displaySize?: string\n}> = ({ raceStartTime, displaySize }) => {\n const timeRemainingRef = React.useRef()\n const [timeRemaining, setTimeRemaining] = React.useState()\n const [bulbColor, setBulbColor] = React.useState('green')\n\n timeRemainingRef.current = timeRemaining\n\n React.useEffect(() => {\n const updateTimer = () => {\n const timeSpan = TimeSpanCalculator.process(\n countdown(\n raceStartTime,\n getNow(),\n countdown.DAYS | countdown.HOURS | countdown.MINUTES | countdown.SECONDS\n ) as countdown.Timespan\n )\n\n if (timeSpan.text !== timeRemainingRef.current) {\n setTimeRemaining(timeSpan.text)\n setBulbColor(timeSpan.color)\n }\n }\n\n const timerId = window.setInterval(updateTimer, 1000)\n updateTimer()\n\n return () => window.clearInterval(timerId)\n }, [raceStartTime])\n\n const bulbHexColor = bulbHexColors[bulbColor]\n\n return (\n \n \n \n \n\n {timeRemaining}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst RaceCountdownContainerStyled = styled.div({\n display: 'inline-flex',\n alignItems: 'center',\n whiteSpace: 'nowrap',\n lineHeight: 1,\n\n svg: {\n marginRight: '0.5rem',\n height: '1em',\n width: '1em',\n },\n\n strong: {\n marginTop: '.1rem',\n },\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { TimeToJumpAbsoluteTimeStyled, TimeToJumpDayFlagStyled } from './TimeToJump.style'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\n\ninterface AstTimeComponentProps {\n size?: string\n advertisedStartTime: Date\n showDay: boolean\n}\n\ninterface TimeToJumpComponentProps {\n size?: string\n displaySize?: string\n showDay: boolean\n showCountDown: boolean\n advertisedStartTime: Date\n showDayBeforeTime?: boolean\n}\n\nexport function TimeToJumpComponent({\n showDay,\n showCountDown,\n advertisedStartTime,\n size,\n showDayBeforeTime = false,\n}: TimeToJumpComponentProps): JSX.Element {\n if (showCountDown) return \n\n if (showDayBeforeTime)\n return (\n \n )\n\n return (\n \n )\n}\n\nexport function AstTimeComponent({\n advertisedStartTime,\n showDay,\n size,\n}: AstTimeComponentProps): JSX.Element {\n return (\n \n
      {dayjs(advertisedStartTime).format('HH:mm')}
      \n {showDay && (\n \n {dayjs(advertisedStartTime).format('ddd')}\n \n )}\n
      \n )\n}\n\nfunction AstDayThenTimeComponent({\n advertisedStartTime,\n showDay,\n size,\n}: AstTimeComponentProps): JSX.Element {\n size ||= '1.2rem'\n return (\n \n {showDay && (\n \n {dayjs(advertisedStartTime).format('ddd')}\n \n )}\n
      {dayjs(advertisedStartTime).format('HH:mm')}
      \n
      \n )\n}\n","import * as DateTimeProvider from '@classic/Foundation/DateTimeProvider'\n\nconst enum LocalConstants {\n OneHour = 3_598_000, // Fudge it less than an hour so it only shows 59m, not 1hr\n OneDay = 86_400_000,\n}\n\nexport const getNextRaceTimeDisplayOptions: GetNextRaceTimeDisplayOptions = dateString => {\n const advertisedStartTime = new Date(dateString)\n const milliToAst = advertisedStartTime.getTime() - DateTimeProvider.now()\n const showCountDown = milliToAst < LocalConstants.OneHour\n const showDay = milliToAst > LocalConstants.OneDay\n\n return {\n advertisedStartTime,\n showCountDown,\n showDay,\n }\n}\n\ntype GetNextRaceTimeDisplayOptions = (dateString: string) => {\n advertisedStartTime: Date\n showCountDown: boolean\n showDay: boolean\n}\n","export enum BetType {\n WinPlace,\n Quinella,\n Exacta,\n Trifecta,\n First4,\n SameRaceMulti,\n Double,\n Quaddie,\n Mystery,\n AllUp,\n}\n","export default class InvariantFailureException {\n message: string\n constructor(message: string) {\n this.message = message\n }\n}\n","import InvariantFailureException from './Exceptions/InvariantFailureException'\n\nexport default {\n stringNotNullOrEmpty(value: string) {\n if (value == null || value.length === 0)\n throw new InvariantFailureException('Invariant: String not empty not satisfied.')\n },\n\n notNull(value: T) {\n if (value == null)\n throw new InvariantFailureException('Invariant: Value not null not satisfied.')\n },\n\n arrayNotNullOrEmpty(value: T[]) {\n if (value == null || value.length == 0)\n throw new InvariantFailureException('Invariant: Array not null or empty not satisfied.')\n },\n\n greaterThanZero(value: number) {\n if (value <= 0) throw new InvariantFailureException('Invariant: Value > 0 not satisfied.')\n },\n\n greaterThanOrEqualZero(value: number) {\n if (value < 0) throw new InvariantFailureException('Invariant: Value >= 0 not satisfied.')\n },\n\n greaterOrEqual(min: number, value: number): void {\n if (value < min) throw new InvariantFailureException('Invariant: Value < Min not satisfied.')\n },\n}\n","import * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport { IEventAggregator } from './IEventAggregator'\nimport Guard from '../Guard'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport default class EventAggregator implements IEventAggregator {\n subscribe(topic: string, func: () => void, context?: unknown): void {\n Guard.stringNotNullOrEmpty(topic)\n Guard.notNull(func)\n\n if (context) amplify.subscribe(topic, context, func)\n else amplify.subscribe(topic, func)\n }\n\n publish(topic: string, ...args: unknown[]): void {\n Guard.stringNotNullOrEmpty(topic)\n\n amplify.publish(topic, ...args)\n }\n\n unsubscribe(topic: string, func: () => void): void {\n amplify.unsubscribe(topic, func)\n }\n}\n","import jQuery from 'jquery'\nimport { IAppWindow } from './IAppWindow'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport default class AppWindow implements IAppWindow {\n public addEventListener(evt: string, func: (e: Event) => void, capture: boolean) {\n window.addEventListener(evt, func, capture)\n }\n\n public removeEventListener(evt: string, func: (e: Event) => void) {\n window.removeEventListener(evt, func)\n }\n\n public scrollTo(selector: string, offset: number, delay: number) {\n jQuery('html, body').animate(\n {\n scrollTop: (jQuery(selector).offset() as JQueryCoordinates).top + offset,\n },\n delay\n )\n }\n\n public domElementExists(selector: string) {\n return !!jQuery(selector).length\n }\n\n public changeHashTo(suffix: string) {\n window.location.hash = suffix\n }\n\n public redirectTo(href: string) {\n window.location.href = href\n }\n\n public requestAnimationFrame(fn: FrameRequestCallback) {\n window.requestAnimationFrame(fn)\n }\n\n public setInterval(handler: () => void, timeout: number): number {\n return window.setInterval(handler, timeout)\n }\n\n public clearInterval(timerId: number) {\n window.clearInterval(timerId)\n }\n\n public innerWidth(): number {\n return window.innerWidth\n }\n}\n","import { injectable } from 'inversify'\nimport { get, post } from './ApiService'\n\nexport interface IApiService {\n get({ url, opts }: { url: string; opts?: RequestInit }): Promise\n post({ url, body }: { url: string; body: unknown }): Promise\n}\n\n@injectable()\nexport class ApiService implements IApiService {\n public get({ url, opts }: { url: string; opts?: RequestInit }): Promise {\n return get({ url, opts })\n }\n\n public post({ url, body }: { url: string; body: unknown }): Promise {\n return post({ url, body })\n }\n}\n","import { injectable } from 'inversify'\nimport { ILoginHelper } from './ILoginHelper'\nimport { HasLoggedIn, HasLoggedOut, state$ } from '@core/State/UserAccount/userAccountDriver'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\n\n@injectable()\nexport class LogInHelper implements ILoginHelper {\n public isUserLoggedIn(): boolean {\n let loggedOn = false\n state$.take(1).subscribe(userAccountState => {\n loggedOn = !!userAccountState.isLoggedIn\n })\n return loggedOn\n }\n\n public presentLogIn(): void {\n showLogin()\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n }\n\n public setupHasLoggedInSubscription(callback: () => void): Rx.IDisposable {\n return HasLoggedIn.signal$.subscribe(callback)\n }\n\n public setupHasLoggedOutSubscription(callback: () => void): Rx.IDisposable {\n return HasLoggedOut.signal$.subscribe(callback)\n }\n}\n","import { ContainerModule, type interfaces } from 'inversify'\n\nimport { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport EventAggregator from '../Messaging/EventAggregator'\nimport { IAppWindow } from '../WindowManagement/IAppWindow'\nimport AppWindow from '../WindowManagement/AppWindow'\nimport { IApiService, ApiService } from '../../../Foundation/Services/ApiServiceInjectable'\nimport { ILoginHelper } from '../Utils/ILoginHelper'\nimport { LogInHelper } from '../Utils/LogInHelper'\n\nconst services = new ContainerModule((bind: interfaces.Bind) => {\n bind('IEventAggregator').to(EventAggregator).inSingletonScope()\n bind('IAppWindow').to(AppWindow).inSingletonScope()\n bind('IApiService').to(ApiService).inSingletonScope()\n bind('ILoginHelper').to(LogInHelper)\n})\n\nexport default services\n","import { Container } from 'inversify'\nimport services from './services.config'\nimport { tap } from '@mobi/utils'\n\nconst rootContainer = tap(new Container(), container => {\n container.load(services)\n})\n\nexport default rootContainer\n","import { injectable, inject } from 'inversify'\nimport type { ISpecialsUrlProvider } from '../Utils/ISpecialsUrlProvider'\nimport { IPyosService } from './IPyosService'\nimport type { IApiService } from '../../Foundation/Services/ApiServiceInjectable'\nimport { ServiceResponseDto } from '../Dtos/ServiceResponseDto'\nimport {\n RetrieveFobSpecialTokensResponseDto,\n PreEnquireSingleResultDto,\n SpecialUrlResponseDto,\n} from '../Dtos/PyosServiceResponseDto'\nimport { FobBetPreEnquiryRequestDto } from '../Dtos/PyosServiceRequestDto'\n\n@injectable()\nexport class PyosService implements IPyosService {\n private urlProvider: ISpecialsUrlProvider\n private apiService: IApiService\n\n constructor(\n @inject('ISpecialsUrlProvider') urlProvider: ISpecialsUrlProvider,\n @inject('IApiService') apiService: IApiService\n ) {\n this.urlProvider = urlProvider\n this.apiService = apiService\n }\n\n private request(url: string): Promise {\n return this.apiService.get({ url })\n }\n\n public retrieveFobSpecialTokens(): Promise {\n const url: string = this.urlProvider.retrieveFobSpecialTokensUrl\n const promise = this.request(url)\n return promise.then()\n }\n\n public getSpecialUrl(tokenId: number): Promise {\n const url: string = this.urlProvider.getSpecialUrl(tokenId)\n const promise = this.request(url)\n return promise.then()\n }\n\n public fobBetPreEnquiry(request: FobBetPreEnquiryRequestDto): Promise {\n const url = this.urlProvider.fobBetPreEnquiryUrl\n return this.apiService.post({ url, body: request }).then()\n }\n}\n","import { injectable } from 'inversify'\nimport { ISpecialsUrlProvider } from './ISpecialsUrlProvider'\n\n@injectable()\nexport class SpecialsUrlProvider implements ISpecialsUrlProvider {\n constructor() {\n this.initialise()\n }\n\n public retrieveFobSpecialTokensUrl!: string\n public fobBetPreEnquiryUrl!: string\n public specialUrl!: string\n public canShowInducementsUrl!: string\n\n private initialise(): void {\n this.retrieveFobSpecialTokensUrl = '/api/pyos/RetrieveFobSpecialTokens'\n this.fobBetPreEnquiryUrl = '/api/pyos/fobbetpreenquiry'\n this.specialUrl = '/api/pyos/SpecialUrl'\n this.canShowInducementsUrl = '/api/pyos/canShowInducements'\n }\n\n public getSpecialUrl(tokenId: number): string {\n const url: string = this.specialUrl + '/' + tokenId\n return url\n }\n}\n","import Decimal from 'decimal.js'\n\nexport class Stake {\n public Win!: decimal.Decimal\n public Place!: decimal.Decimal\n\n private static _toDecimal(value: string | number | decimal.Decimal): decimal.Decimal {\n return value ? new Decimal(value) : new Decimal(0)\n }\n\n static normalise(stake: Stake): Stake {\n return stake\n ? {\n Win: Stake._toDecimal(stake.Win),\n Place: Stake._toDecimal(stake.Place),\n }\n : {\n Win: Stake._toDecimal(0),\n Place: Stake._toDecimal(0),\n }\n }\n}\n","import Decimal from 'decimal.js'\n\nexport class PriceDetails {\n public Win!: {\n DollarReturn: decimal.Decimal\n }\n public Place!: {\n DollarReturn: decimal.Decimal\n }\n\n private static _toDecimal(value: string | number | decimal.Decimal): decimal.Decimal {\n return value ? new Decimal(value) : new Decimal(0)\n }\n\n static normalise(priceDetails: PriceDetails): PriceDetails {\n return priceDetails\n ? {\n Win: { DollarReturn: PriceDetails._toDecimal(priceDetails.Win.DollarReturn) },\n Place: { DollarReturn: PriceDetails._toDecimal(priceDetails.Place.DollarReturn) },\n }\n : {\n Win: { DollarReturn: new Decimal(0) },\n Place: { DollarReturn: new Decimal(0) },\n }\n }\n}\n","export const LegTypeCode = {\n Win: 'W',\n Place: 'P',\n WinPlace: 'WP',\n}\n","import Decimal from 'decimal.js'\nimport { injectable } from 'inversify'\nimport {\n BetSpecialOffer,\n IBetSpecialOffer,\n IBetSpecialOfferElement,\n} from '../Model/BetSpecialOffer'\nimport { Stake } from '../Model/Stake'\nimport { PriceDetails } from '../Model/PriceDetails'\nimport { LegTypeCode } from '../Model/LegTypeCode'\n\nexport interface IPyosRewardCalculator {\n checkEligible(specialOffer: BetSpecialOffer, stake: Stake): boolean\n calculateProjectedReward(\n specialOffer: BetSpecialOffer,\n stake: Stake,\n priceDetails: PriceDetails\n ): decimal.Decimal\n calculateProjectedBoostReward(specialOffer: BetSpecialOffer, stake: Stake): decimal.Decimal\n}\n\n@injectable()\nexport class PyosRewardCalculator {\n legTypeIsEligible(offerlegTypeCode: string, legTypeCode: string): boolean {\n return legTypeIsEligible(offerlegTypeCode, legTypeCode)\n }\n\n validateStake(\n specialOfferElement: IBetSpecialOfferElement,\n individualStake: decimal.Decimal\n ): decimal.Decimal {\n return validateStake(specialOfferElement, individualStake)\n }\n\n calculateLegReward(\n specialOfferElement: IBetSpecialOfferElement,\n individualStake: decimal.Decimal,\n dollarReturn: decimal.Decimal,\n offerLegTypeCode: string,\n calculationLegTypeCode: string\n ): decimal.Decimal {\n return calculateLegReward(\n specialOfferElement,\n individualStake,\n dollarReturn,\n offerLegTypeCode,\n calculationLegTypeCode\n )\n }\n\n calculateLegBoostReward(\n specialOfferElement: IBetSpecialOfferElement,\n individualStake: decimal.Decimal,\n offerLegTypeCode: string,\n calculationLegTypeCode: string\n ): decimal.Decimal {\n if (legTypeIsEligible(offerLegTypeCode, calculationLegTypeCode)) {\n const stake = validateStake(specialOfferElement, individualStake)\n\n const priceIncreased = specialOfferElement.priceIncrease\n ? calculationLegTypeCode === LegTypeCode.Place\n ? new Decimal(specialOfferElement.priceIncrease.place || 0)\n : new Decimal(specialOfferElement.priceIncrease.win || 0)\n : new Decimal(0)\n\n return stake.times(priceIncreased)\n }\n\n return new Decimal(0)\n }\n\n checkEligible(specialOffer: IBetSpecialOffer, stake: Stake) {\n return checkSuperPickEligible(specialOffer, stake)\n }\n\n calculateProjectedReward(\n specialOffer: IBetSpecialOffer,\n stake: Stake,\n priceDetails: PriceDetails\n ): decimal.Decimal {\n return calculateProjectedReward(specialOffer, stake, priceDetails)\n }\n\n calculateProjectedBoostReward(specialOffer: IBetSpecialOffer, stake: Stake): decimal.Decimal {\n stake = Stake.normalise(stake)\n\n if (this.checkEligible(specialOffer, stake) && specialOffer.elements) {\n const boostElement = specialOffer.elements?.find(element => element.isBoost)\n if (boostElement) {\n const winReward = this.calculateLegBoostReward(\n boostElement,\n stake.Win,\n specialOffer.legTypeCode as string,\n LegTypeCode.Win\n )\n const placeReward = this.calculateLegBoostReward(\n boostElement,\n stake.Place,\n specialOffer.legTypeCode as string,\n LegTypeCode.Place\n )\n let totalReward = Decimal(winReward).plus(placeReward)\n\n if (boostElement.maxReward && new Decimal(boostElement.maxReward).greaterThan(0)) {\n totalReward = Decimal.min(boostElement.maxReward, totalReward)\n }\n\n return new Decimal(totalReward.toFixed(2, Decimal.ROUND_FLOOR))\n }\n }\n\n return Decimal(0)\n }\n}\n\n// ====================\n// Composable Functions\n// ====================\n\nfunction validateStake(\n specialOfferElement: IBetSpecialOfferElement,\n individualStake: decimal.Decimal\n): decimal.Decimal {\n let stake = new Decimal(individualStake)\n const maxStake = new Decimal(specialOfferElement.maxStake || 0)\n if (maxStake.greaterThan(0)) {\n stake = Decimal.min(maxStake, stake)\n }\n return stake\n}\n\nfunction legTypeIsEligible(offerlegTypeCode: string, legTypeCode: string): boolean {\n return offerlegTypeCode === LegTypeCode.WinPlace || offerlegTypeCode === legTypeCode\n}\n\nexport function checkSuperPickEligible(specialOffer: IBetSpecialOffer, stake: Stake): boolean {\n stake = Stake.normalise(stake)\n if (specialOffer.isExclusiveLegType) {\n return (\n (specialOffer.legTypeCode === LegTypeCode.Win && stake.Place.isZero()) ||\n (specialOffer.legTypeCode === LegTypeCode.Place && stake.Win.isZero()) ||\n (specialOffer.legTypeCode === LegTypeCode.WinPlace &&\n (stake.Win.isZero() || stake.Place.isZero()))\n )\n } else {\n return (\n (specialOffer.legTypeCode === LegTypeCode.Win &&\n (!stake.Win.isZero() || stake.Place.isZero())) ||\n (specialOffer.legTypeCode === LegTypeCode.Place &&\n (stake.Win.isZero() || !stake.Place.isZero())) ||\n specialOffer.legTypeCode === LegTypeCode.WinPlace\n )\n }\n}\n\nfunction calculateLegReward(\n specialOfferElement: IBetSpecialOfferElement,\n individualStake: decimal.Decimal,\n dollarReturn: decimal.Decimal,\n offerLegTypeCode: string,\n calculationLegTypeCode: string\n): decimal.Decimal {\n if (legTypeIsEligible(offerLegTypeCode, calculationLegTypeCode)) {\n const stake = validateStake(specialOfferElement, individualStake)\n\n const profit = new Decimal(dollarReturn).plus(-1.0)\n const actualProfitMultiplier = new Decimal(profit).times(\n specialOfferElement.profitMultiplier || 0\n )\n const combinedMultiplier = new Decimal(actualProfitMultiplier).plus(\n specialOfferElement.stakeMultiplier || 0\n )\n\n return stake.times(combinedMultiplier)\n }\n\n return new Decimal(0)\n}\n\nexport function calculateProjectedReward(\n specialOffer: IBetSpecialOffer,\n stake: Stake,\n priceDetails: PriceDetails\n): decimal.Decimal {\n stake = Stake.normalise(stake)\n priceDetails = PriceDetails.normalise(priceDetails)\n\n if (checkSuperPickEligible(specialOffer, stake) && specialOffer.elements) {\n const nonBoostElement = specialOffer.elements?.find(element => !element.isBoost)\n if (nonBoostElement) {\n const winReward = calculateLegReward(\n nonBoostElement,\n stake.Win,\n priceDetails.Win.DollarReturn,\n specialOffer.legTypeCode as string,\n LegTypeCode.Win\n )\n const placeReward = calculateLegReward(\n nonBoostElement,\n stake.Place,\n priceDetails.Place.DollarReturn,\n specialOffer.legTypeCode as string,\n LegTypeCode.Place\n )\n let totalReward = Decimal(winReward).plus(placeReward)\n\n if (nonBoostElement.maxReward && new Decimal(nonBoostElement.maxReward).greaterThan(0)) {\n totalReward = Decimal.min(nonBoostElement.maxReward, totalReward)\n }\n\n return new Decimal(totalReward.toFixed(2, Decimal.ROUND_FLOOR))\n }\n }\n\n return Decimal(0)\n}\n","import { injectable } from 'inversify'\nimport { BetSpecialOffer } from '../Model/BetSpecialOffer'\nimport { LegTypeCode } from '../Model/LegTypeCode'\n\n@injectable()\nexport class PyosExtensions {\n getLegTypeForDisplay(specialOffer: BetSpecialOffer): string | null {\n if (specialOffer) {\n if (specialOffer.isExclusiveLegType) {\n switch (specialOffer.legTypeCode) {\n case LegTypeCode.Win:\n return 'win only'\n case LegTypeCode.Place:\n return 'place only'\n case LegTypeCode.WinPlace:\n return 'win or place only'\n }\n } else {\n switch (specialOffer.legTypeCode) {\n case LegTypeCode.Win:\n return 'win'\n case LegTypeCode.Place:\n return 'place'\n case LegTypeCode.WinPlace:\n return 'win + place'\n }\n }\n }\n return null\n }\n\n getLegTypeIneligibilityDisplay(specialOffer: BetSpecialOffer): string | null {\n if (specialOffer) {\n if (specialOffer.isExclusiveLegType) {\n switch (specialOffer.legTypeCode) {\n case LegTypeCode.Win:\n return 'Only a Win amount can be entered for the selected SuperPick. Please amend your bet'\n case LegTypeCode.Place:\n return 'Only a Place amount can be entered for the selected SuperPick. Please amend your bet'\n case LegTypeCode.WinPlace:\n return null /* invalid option */\n }\n } else {\n switch (specialOffer.legTypeCode) {\n case LegTypeCode.Win:\n return 'A Win amount must be entered for the selected SuperPick. Please amend your bet'\n case LegTypeCode.Place:\n return 'A Place amount must be entered for the selected SuperPick. Please amend your bet'\n case LegTypeCode.WinPlace:\n return null\n }\n }\n }\n return null\n }\n}\n","export class Lock {\n _value = 0\n\n trylock(): boolean {\n if (this._value) {\n return false\n }\n this._value = 1\n return true\n }\n\n unlock(): void {\n this._value = 0\n }\n\n count(): number {\n return this._value\n }\n}\n","import Decimal from 'decimal.js'\n\nexport class FobAmount {\n public win: decimal.Decimal\n public place: decimal.Decimal\n\n constructor(win: decimal.Decimal, place: decimal.Decimal) {\n this.win = win ? new Decimal(win) : new Decimal(0)\n this.place = place ? new Decimal(place) : new Decimal(0)\n }\n}\n\nexport interface IBetSpecialOfferElement {\n maxReward: decimal.Decimal | null\n profitMultiplier: decimal.Decimal | null\n stakeMultiplier: decimal.Decimal | null\n maxStake: decimal.Decimal | null\n priceIncrease: FobAmount | null\n isBoost: boolean\n}\n\nexport class BetSpecialOfferElement implements IBetSpecialOfferElement {\n public specialProductCode: string | null = null\n public specialProductName: string | null = null\n public maxReward: decimal.Decimal | null = null\n public maxStake: decimal.Decimal | null = null\n public profitMultiplier: decimal.Decimal | null = null\n public stakeMultiplier: decimal.Decimal | null = null\n public priceIncrease!: FobAmount | null\n public rewardReturn: FobAmount | null = null\n public isBoost!: boolean\n\n private static _toDecimal(value: string | number | decimal.Decimal): decimal.Decimal {\n return value ? new Decimal(value) : new Decimal(0)\n }\n\n static normalise(offerElement: BetSpecialOfferElement): BetSpecialOfferElement {\n return {\n specialProductCode: offerElement.specialProductCode,\n specialProductName: offerElement.specialProductName,\n maxReward: BetSpecialOfferElement._toDecimal(offerElement.maxReward as decimal.Decimal),\n profitMultiplier: BetSpecialOfferElement._toDecimal(\n offerElement.profitMultiplier as decimal.Decimal\n ),\n stakeMultiplier: BetSpecialOfferElement._toDecimal(\n offerElement.stakeMultiplier as decimal.Decimal\n ),\n maxStake: BetSpecialOfferElement._toDecimal(offerElement.maxStake as decimal.Decimal),\n priceIncrease: offerElement.priceIncrease\n ? new FobAmount(offerElement.priceIncrease.win, offerElement.priceIncrease.place)\n : null,\n rewardReturn: offerElement.rewardReturn\n ? new FobAmount(offerElement.rewardReturn.win, offerElement.rewardReturn.place)\n : null,\n isBoost: offerElement.isBoost,\n }\n }\n}\n\nexport interface IBetSpecialOffer {\n isExclusiveLegType: boolean | null\n legTypeCode: string | null\n elements: IBetSpecialOfferElement[] | null\n}\n\nexport class BetSpecialOffer implements IBetSpecialOffer {\n public specialSeq: number | null = null\n public description: string | null = null\n public title: string | null = null\n public legTypeCode: string | null = null\n public shortDescription: string | null = null\n public specialType: string | null = null\n public isExclusiveLegType: boolean | null = null\n public isTemplatedSpecial: boolean | null = null\n public tokenId: number | null = null\n public specialTypeCode: string | null = null\n public isBoostOffer: boolean | null = null\n public isInsuranceOffer: boolean | null = null\n public nonBoostReward: number | null = null\n public elements: BetSpecialOfferElement[] | null = null\n public isSuperBoost: boolean | null = null\n\n static normalise(bso: BetSpecialOffer): BetSpecialOffer {\n const superBoostTitles: string[] = ['boost plus+', 'boostplus+']\n\n return {\n specialSeq: bso.specialSeq,\n description: bso.description,\n title: bso.title,\n legTypeCode: bso.legTypeCode,\n shortDescription: bso.shortDescription,\n specialType: bso.specialType,\n isExclusiveLegType: bso.isExclusiveLegType,\n isTemplatedSpecial: bso.isTemplatedSpecial,\n tokenId: bso.tokenId,\n specialTypeCode: bso.specialTypeCode,\n isBoostOffer: bso.isBoostOffer,\n isInsuranceOffer: bso.isInsuranceOffer,\n nonBoostReward: bso.nonBoostReward,\n elements: bso.elements\n ? bso.elements.map(offerElement => BetSpecialOfferElement.normalise(offerElement))\n : null,\n isSuperBoost: superBoostTitles.some(\n title => title.toLowerCase() === bso.title?.trim().toLowerCase()\n ),\n }\n }\n}\n","import { BetSpecialOffer } from '../Model/BetSpecialOffer'\n\nexport type EnquirySelectionDto = object\n\ninterface RacingEnquirySelectionDto extends EnquirySelectionDto {\n PropositionCode: string\n FixtureDateTime: string\n FixtureId: string\n RaceNumber: number\n StarterNumber: number\n}\n\ninterface SportsEnquirySelectionExDto extends EnquirySelectionDto {\n PropositionSeq: number\n VariantSeq: number\n}\n\nexport interface FobBetPreEnquiryRequestDto {\n SelectedSpecial: BetSpecialOffer\n Racing: RacingEnquirySelectionDto\n SportsEx: SportsEnquirySelectionExDto\n}\n\n/* type guards */\nexport function isRacingEnquirySelectionDto(\n sel: EnquirySelectionDto\n): sel is RacingEnquirySelectionDto {\n const r = sel as RacingEnquirySelectionDto\n return r.FixtureId !== undefined && r.FixtureDateTime !== undefined && r.RaceNumber !== undefined\n}\n\nexport function isSportsEnquirySelectionExDto(\n sel: EnquirySelectionDto\n): sel is SportsEnquirySelectionExDto {\n const s = sel as SportsEnquirySelectionExDto\n return s.PropositionSeq !== undefined\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { Lock } from '../../AppUtils/Framework/Lock'\nimport type { IAppWindow } from '../../AppUtils/Framework/WindowManagement/IAppWindow'\nimport type { IEventAggregator } from '../../AppUtils/Framework/Messaging/IEventAggregator'\nimport { BetSpecialOffer } from '../Model/BetSpecialOffer'\nimport { Stake } from '../Model/Stake'\nimport { PriceDetails } from '../Model/PriceDetails'\nimport type { IPyosRewardCalculator } from './PyosRewardCalculator'\nimport { PyosExtensions } from './PyosExtensions'\nimport type { IPyosService } from '../Services/IPyosService'\nimport {\n FobBetPreEnquiryRequestDto,\n EnquirySelectionDto,\n isRacingEnquirySelectionDto,\n isSportsEnquirySelectionExDto,\n} from '../Dtos/PyosServiceRequestDto'\nimport { PreEnquireSingleResultDto } from '../Dtos/PyosServiceResponseDto'\nimport type { ILoginHelper } from '@classic/AppUtils/Framework/Utils/ILoginHelper'\n\nenum PyosStoreState {\n Ok,\n Loading,\n LoadFailed,\n}\n\n@injectable()\nexport class PyosStore {\n /* dependencies */\n private _appWindow: IAppWindow\n private _eventAggregator: IEventAggregator\n private _pyosService: IPyosService\n private _rewardCalculator: IPyosRewardCalculator\n private _extensions: PyosExtensions\n private _loginHelper: ILoginHelper\n\n /* state */\n private _lock = new Lock()\n private _status = ko.observable(PyosStoreState.Ok)\n private _specialOffers = ko.observable([])\n private _selectedSpecialSeq = ko.observable(null)\n private _betSelection = ko.observable(null)\n private _isExpanded = ko.observable(false)\n private _specialsErrorMessage = ko.observable()\n private _disposables: ko.Subscription[]\n private _canShowInducements = ko.observable(false)\n\n public priceDetails = ko.observable(null)\n public stake = ko.observable(null)\n\n private loginSubscription: Rx.IDisposable\n\n constructor(\n @inject('IAppWindow') appWindow: IAppWindow,\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('IPyosService') pyosService: IPyosService,\n @inject('IPyosRewardCalculator') rewardCalculator: IPyosRewardCalculator,\n @inject('PyosExtensions') extensions: PyosExtensions,\n @inject('ILoginHelper') loginHelper: ILoginHelper\n ) {\n this._appWindow = appWindow\n this._eventAggregator = eventAggregator\n this._pyosService = pyosService\n this._rewardCalculator = rewardCalculator\n this._extensions = extensions\n this._disposables = []\n this._loginHelper = loginHelper\n\n this.loginSubscription = this._loginHelper.setupHasLoggedInSubscription(() => {\n if (this._appWindow.domElementExists('pyos-select')) {\n this.enquireSpecialOffers()\n }\n })\n }\n\n /* clean up */\n dispose() {\n this.loginSubscription?.dispose()\n this._disposables.forEach(obj => obj.dispose())\n this._disposables = []\n }\n\n /* computed state */\n loading() {\n return this._status() === PyosStoreState.Loading\n }\n\n specialOffers() {\n return this._specialOffers()\n }\n\n selectedSpecialSeq() {\n return this._selectedSpecialSeq()\n }\n\n isExpanded(): boolean {\n return this._isExpanded()\n }\n\n hasOffers(): boolean {\n return !!(this._specialOffers() && this._specialOffers().length)\n }\n\n selectedSpecial() {\n const specialSeq = this._selectedSpecialSeq()\n if (this._specialOffers()) {\n for (const so of this._specialOffers()) {\n if (so.specialSeq === specialSeq) {\n return so\n }\n }\n }\n return null\n }\n\n hasWinStake(): boolean {\n const stake = this.stake()\n return !!(stake && !!Number(stake.Win))\n }\n\n hasPlaceStake(): boolean {\n const stake = this.stake()\n return !!(stake && !!Number(stake.Place))\n }\n\n projectedReward(specialOffer: BetSpecialOffer): decimal.Decimal | null {\n if (specialOffer && this.stake() && this.priceDetails()) {\n return this._rewardCalculator.calculateProjectedReward(\n specialOffer,\n this.stake() as Stake,\n this.priceDetails() as PriceDetails\n )\n }\n return null\n }\n\n projectedBoostReward(specialOffer: BetSpecialOffer): decimal.Decimal | null {\n if (specialOffer && this.stake()) {\n return this._rewardCalculator.calculateProjectedBoostReward(\n specialOffer,\n this.stake() as Stake\n )\n }\n return null\n }\n\n isOfferEligible(specialOffer: BetSpecialOffer) {\n return specialOffer\n ? this._rewardCalculator.checkEligible(specialOffer, this.stake() as Stake)\n : false\n }\n\n selectedOfferIsEligible(): boolean {\n const specialOffer = this.selectedSpecial()\n return specialOffer ? this.isOfferEligible(specialOffer) : false\n }\n\n errorMessage(): string {\n switch (this._status()) {\n case PyosStoreState.Ok:\n return this._specialsErrorMessage() || ''\n case PyosStoreState.Loading:\n return ''\n case PyosStoreState.LoadFailed:\n return 'Sorry, there was a problem loading the SuperPick details for this bet.'\n default:\n return ''\n }\n }\n\n /* actions */\n primaryAction() {\n if (this._selectedSpecialSeq()) {\n this.clearSelectedSpecial()\n } else {\n this._isExpanded(!this._isExpanded())\n }\n }\n\n setSelectedSpecial(specialOffer: BetSpecialOffer) {\n if (this.selectedSpecialSeq() === specialOffer.specialSeq) {\n this.clearSelectedSpecial()\n } else {\n this.clearSelectedSpecial()\n this._selectedSpecialSeq(specialOffer.specialSeq)\n this._eventAggregator.publish('specialoffer.selected', specialOffer)\n }\n }\n\n setStake(stake: Stake) {\n this.stake(Stake.normalise(stake))\n }\n\n setPriceDetails(priceDetails: PriceDetails) {\n this.priceDetails(PriceDetails.normalise(priceDetails))\n }\n\n setSpecialOffers(specialOffers: BetSpecialOffer[] | null) {\n if (specialOffers) {\n this._specialOffers(specialOffers.map(so => BetSpecialOffer.normalise(so)))\n } else {\n this._specialOffers([])\n }\n\n /* if the current selection is no longer valid */\n if (this._selectedSpecialSeq() && !this.selectedSpecial()) {\n this.clearSelectedSpecial()\n }\n }\n\n clearSelectedSpecial() {\n this._selectedSpecialSeq(null)\n this._isExpanded(false)\n this._eventAggregator.publish('specialoffer.cleared')\n }\n\n clear() {\n this.setSpecialOffers(null)\n this.clearSelectedSpecial()\n this._betSelection(null)\n this.priceDetails(null)\n this._specialsErrorMessage('')\n this._status(PyosStoreState.Ok)\n }\n\n clearErrorMessage() {\n this._selectedSpecialSeq(null)\n this._isExpanded(false)\n this._specialsErrorMessage('')\n }\n\n validate() {\n const specialOffer = this.selectedSpecial()\n if (specialOffer) {\n if (this.isOfferEligible(specialOffer) === false) {\n this._specialsErrorMessage(\n this._extensions.getLegTypeIneligibilityDisplay(specialOffer) || ''\n )\n return false\n }\n }\n\n this._specialsErrorMessage('')\n return true\n }\n\n setBetSelection(betSelection: EnquirySelectionDto) {\n this._betSelection(betSelection)\n }\n\n enquireSpecialOffers(): Promise {\n if (this._betSelection() && this.priceDetails()) {\n if (this._lock.trylock()) {\n this._status(PyosStoreState.Loading)\n\n const betSelection = this._betSelection()\n const request = {\n SelectedSpecial: this.selectedSpecial() as BetSpecialOffer,\n Racing: isRacingEnquirySelectionDto(betSelection as EnquirySelectionDto)\n ? betSelection\n : null,\n SportsEx: isSportsEnquirySelectionExDto(betSelection as EnquirySelectionDto)\n ? betSelection\n : null,\n } as FobBetPreEnquiryRequestDto\n\n this._pyosService\n .fobBetPreEnquiry(request)\n .then((response: PreEnquireSingleResultDto) => {\n if (response) {\n this._canShowInducements(response.CanShowInducements)\n if (response.CanShowInducements && response.SpecialTokenOffers) {\n this.setSpecialOffers(response.SpecialTokenOffers.SpecialOffers)\n } else {\n this.setSpecialOffers(null)\n }\n if (response.SpecialOffersFault) {\n this._specialsErrorMessage(response.SpecialOffersFault.Message)\n } else {\n this._specialsErrorMessage('')\n }\n } else {\n this.setSpecialOffers(null)\n this._specialsErrorMessage('')\n this._canShowInducements(false)\n }\n\n this._status(PyosStoreState.Ok)\n this._lock.unlock()\n })\n .catch(() => {\n this.setSpecialOffers(null)\n this._canShowInducements(false)\n this._status(PyosStoreState.LoadFailed)\n this._lock.unlock()\n })\n }\n }\n return Promise.reject('No bet selection, or price details')\n }\n\n canShowInducements(): boolean {\n return this._canShowInducements()\n }\n}\n","import { ContainerModule, type interfaces } from 'inversify'\nimport { IPyosService } from '../Services/IPyosService'\nimport { PyosService } from '../Services/PyosService'\nimport { ISpecialsUrlProvider } from '../Utils/ISpecialsUrlProvider'\nimport { SpecialsUrlProvider } from '../Utils/SpecialsUrlProvider'\nimport { IPyosRewardCalculator, PyosRewardCalculator } from '../Store/PyosRewardCalculator'\nimport { PyosExtensions } from '../Store/PyosExtensions'\nimport { PyosStore } from '../Store/PyosStore'\n\nconst services = new ContainerModule((bind: interfaces.Bind) => {\n bind('IPyosService').to(PyosService).inSingletonScope()\n bind('ISpecialsUrlProvider').to(SpecialsUrlProvider)\n bind('IPyosRewardCalculator').to(PyosRewardCalculator).inSingletonScope()\n bind('PyosExtensions').to(PyosExtensions).inSingletonScope()\n bind('PyosStore').to(PyosStore).inSingletonScope()\n})\n\nexport default services\n","import { PyosStore } from '../../Store/PyosStore'\nimport { injectable, inject } from 'inversify'\n\n@injectable()\nexport class PyosMessageViewModel {\n /* properties */\n private _store: PyosStore\n\n constructor(@inject('PyosStore') store: PyosStore) {\n this._store = store\n }\n\n /* computed state */\n isVisible() {\n return !!this._store.errorMessage()\n }\n\n messageText(): string {\n return this._store.errorMessage()\n }\n}\n","import * as ko from 'knockout'\nimport jQuery from 'jquery'\n\nko.bindingHandlers['slideVisible'] = {\n init(element, valueAccessor) {\n const value = valueAccessor()\n jQuery(element).toggle(ko.unwrap(value))\n },\n update(element, valueAccessor) {\n const value = valueAccessor()\n if (ko.unwrap(value)) jQuery(element).slideDown('fast')\n else jQuery(element).slideUp('fast')\n },\n}\n","export class CurrencyConverter {\n public toMoney(\n value: number,\n decimalNumbers: number,\n currencySymbol?: string,\n decimalSymbol?: string,\n thousandsSymbol?: string\n ) {\n // eslint-disable-next-line no-var\n var n = value,\n c = isNaN((decimalNumbers = Math.abs(decimalNumbers))) ? 2 : decimalNumbers,\n d = decimalSymbol == undefined ? '.' : decimalSymbol,\n t = thousandsSymbol == undefined ? ',' : thousandsSymbol,\n m = currencySymbol == undefined ? '$' : currencySymbol,\n s = n < 0 ? '-' : '',\n nubmerValue = Number(Math.abs(+n || 0).toFixed(c)),\n integerValue = parseInt(nubmerValue.toString()),\n integerString = integerValue.toString(),\n j: number = (j = integerString.length) > 3 ? j % 3 : 0\n const str =\n s +\n m +\n (j ? integerString.substr(0, j) + t : '') +\n integerString.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + t) +\n (c\n ? d +\n Math.abs(nubmerValue - integerValue)\n .toFixed(c)\n .slice(2)\n : '')\n //console.log('toMoney => str(' + str + ')');\n return str\n //return s + m + (j ? i.substr(0, j) + t : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : \"\");\n }\n}\n","import { BetSpecialOffer } from '../../Model/BetSpecialOffer'\nimport { PyosStore } from '../../Store/PyosStore'\nimport '../../../AppUtils/Framework/CustomBindings/slideVisible'\nimport { injectable, inject } from 'inversify'\nimport { CurrencyConverter } from '../../../AppUtils/Utils/CurrencyConverter'\n\nexport interface PyosSelectViewModelParams {\n formFieldId: string\n}\n\n@injectable()\nexport class PyosSelectViewModel {\n /* dependencies */\n private _store: PyosStore\n\n /* properties */\n private _formFieldId: string\n private _currencyConverter: CurrencyConverter\n\n constructor(\n @inject('$params') params: PyosSelectViewModelParams,\n @inject('PyosStore') store: PyosStore\n ) {\n this._formFieldId = params.formFieldId\n this._store = store\n this._currencyConverter = new CurrencyConverter()\n }\n\n /* computed state */\n formFieldId() {\n return this._formFieldId\n }\n\n loading() {\n return this._store.loading()\n }\n\n specialOffers() {\n const offers = this._store.specialOffers()\n const numberOfRows = Math.ceil(offers.length / 3)\n const numberOfColoumns = numberOfRows * 3\n const tableRows: BetSpecialOffer[][] = []\n for (let i = 0; i < numberOfRows; i++) {\n tableRows.push([])\n }\n let row = 0\n for (let cell = 0; cell < numberOfColoumns; cell++) {\n if (offers.length <= 3 && cell < offers.length) {\n tableRows[row].push(offers[cell])\n } else if (offers.length === 4 && cell < offers.length) {\n tableRows[row].push(offers[cell])\n if (cell === 1) {\n row++\n }\n } else if (offers.length >= 5) {\n tableRows[row].push(cell >= offers.length ? ({} as BetSpecialOffer) : offers[cell])\n if ((cell + 1) % 3 === 0) {\n row++\n }\n }\n }\n return tableRows\n }\n\n selectedSpecialSeq() {\n return this._store.selectedSpecialSeq()\n }\n\n isSelectedSpecialSeq = (specialOffer: BetSpecialOffer) => {\n const selectedSpecialSeq = this._store.selectedSpecialSeq()\n return selectedSpecialSeq === specialOffer.specialSeq\n }\n\n isExpanded() {\n return this._store.isExpanded()\n }\n\n isVisible() {\n return this._store.hasOffers() && this._store.canShowInducements()\n }\n\n selectedSpecial() {\n return this._store.selectedSpecial()\n }\n\n maxReward = (specialOffer: BetSpecialOffer) => {\n if (!specialOffer || !specialOffer.elements) {\n return ''\n }\n const nonBoostElement = specialOffer.elements?.find(element => !element.isBoost)\n\n return nonBoostElement?.maxReward ? ` up to $${nonBoostElement.maxReward}` : ''\n }\n\n projectedReward = (specialOffer: BetSpecialOffer, isHeader = false) => {\n if (specialOffer) {\n const reward = this._store.projectedReward(specialOffer)\n if (reward && reward.greaterThan(0)) {\n if (reward.isInt()) {\n return this._currencyConverter.toMoney(Number(reward), 0)\n }\n return this._currencyConverter.toMoney(Number(reward), 2)\n } else {\n return isHeader ? '$0' : ''\n }\n }\n return null\n }\n\n /* actions */\n primaryAction() {\n this._store.primaryAction()\n }\n\n setSelectedSpecial = (specialOffer: BetSpecialOffer) => {\n this._store.setSelectedSpecial(specialOffer)\n }\n\n clearSelectedSpecial() {\n this._store.clearSelectedSpecial()\n }\n\n isObjectEmptyObject = (specialOffer: BetSpecialOffer) => {\n return Object.getOwnPropertyNames(specialOffer).length === 0\n }\n\n shouldDisplayReward(specialOffer: BetSpecialOffer) {\n if (specialOffer.isBoostOffer) {\n return false\n }\n const selectedOffer = this._store.selectedSpecial()\n if (!selectedOffer) {\n return true\n }\n return selectedOffer.specialSeq === specialOffer.specialSeq\n }\n}\n","import { ContainerModule, type interfaces } from 'inversify'\n\nimport { PyosMessageViewModel } from '../Components/PyosMessage/PyosMessageViewModel'\nimport { PyosSelectViewModel } from '../Components/PyosSelect/PyosSelectViewModel'\n\nconst viewModels = new ContainerModule((bind: interfaces.Bind) => {\n bind('PyosMessageViewModel').to(PyosMessageViewModel)\n bind('PyosSelectViewModel').to(PyosSelectViewModel)\n})\n\nexport default viewModels\n","import { Container } from 'inversify'\nimport parentContainer from '../../AppUtils/Framework/IOC/inversify.config'\nimport services from './services.config'\nimport viewModels from './viewmodels.config'\nimport { tap } from '@mobi/utils'\n\nconst container = tap(new Container(), container => {\n container.parent = parentContainer\n container.load(services)\n container.load(viewModels)\n})\n\nexport default container\n","import { BetEnquiryResponseDataTransferObject } from '../DataTransferObjects/DataTransferObjects'\nimport { IBetEnquiryService } from './IBetEnquiryService'\nimport { ILegacyBetModel } from '../Model/ILegacyBetModel'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class BetEnquiryService implements IBetEnquiryService {\n private fromJson(response: Response): Promise {\n return response.json()\n }\n\n private request(url: string, betViewModel: ILegacyBetModel): Promise {\n const requestDataJson = JSON.stringify(betViewModel)\n const headers = new Headers()\n headers.append('Content-Type', 'application/json')\n headers.append('Accept', 'application/json')\n const requestInit = {\n method: 'post',\n headers: headers,\n body: requestDataJson,\n credentials: 'same-origin' as RequestCredentials,\n }\n const request = new Request(url, requestInit)\n\n return window.fetch(request)\n }\n\n public enquireBet(betViewModel: ILegacyBetModel): Promise {\n const promise = this.request(`/api/totebet/betcost`, betViewModel)\n return promise.then(response => this.fromJson(response)).then()\n }\n\n public enquireAllUpBet(\n betViewModelDto: ILegacyBetModel\n ): Promise {\n const promise = this.request(`/api/totebet/betcostallup`, betViewModelDto)\n return promise.then(response => this.fromJson(response)).then()\n }\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableFixedOddsRaceInformation {\n constructor() {\n // @ts-expect-error Type issue\n this.bettingConditions = ko.observable()\n // @ts-expect-error Type issue\n this.bettingRules = ko.observable()\n // @ts-expect-error Type issue\n this.bettingTerms = ko.observable()\n // @ts-expect-error Type issue\n this.bettingConditions = ko.observable()\n // @ts-expect-error Type issue\n this.isSuspended = ko.observable()\n // @ts-expect-error Type issue\n this.isClosed = ko.observable()\n // @ts-expect-error Type issue\n this.isResulted = ko.observable()\n // @ts-expect-error Type issue\n this.isPlaceAvailable = ko.observable()\n // @ts-expect-error Type issue\n this.isFixedOddsOnly = ko.observable()\n // @ts-expect-error Type issue\n this.isRaceAvailable = ko.observable()\n // @ts-expect-error Type issue\n this.payoutInformation = ko.observable()\n // @ts-expect-error Type issue\n this.marketSequence = ko.observable()\n }\n\n public merge(other: ObservableFixedOddsRaceInformation) {\n Guard.notNull(other)\n\n this.bettingConditions(other.bettingConditions())\n this.bettingRules(other.bettingRules())\n this.bettingTerms(other.bettingTerms())\n this.isSuspended(other.isSuspended())\n this.isClosed(other.isClosed())\n this.isResulted(other.isResulted())\n this.isPlaceAvailable(other.isPlaceAvailable())\n this.isFixedOddsOnly(other.isFixedOddsOnly())\n this.isRaceAvailable(other.isRaceAvailable())\n this.payoutInformation(other.payoutInformation())\n this.marketSequence(other.marketSequence())\n }\n\n public bettingConditions: ko.Observable\n public bettingRules: ko.Observable\n public bettingTerms: ko.Observable\n public isSuspended: ko.Observable\n public isClosed: ko.Observable\n public isResulted: ko.Observable\n public isPlaceAvailable: ko.Observable\n public isFixedOddsOnly: ko.Observable\n public isRaceAvailable: ko.Observable\n public payoutInformation: ko.Observable\n public marketSequence: ko.Observable\n}\n","import ObservableFixedOddsRaceInformation from './ObservableFixedOddsRaceInformation'\nimport * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableRace {\n constructor() {\n this.key = ko.observable('')\n // @ts-expect-error Type issue\n this.meetingId = ko.observable()\n // @ts-expect-error Type issue\n this.distance = ko.observable()\n // @ts-expect-error Type issue\n this.tips = ko.observable()\n // @ts-expect-error Type issue\n this.tipster = ko.observable()\n // @ts-expect-error Type issue\n this.raceNumber = ko.observable()\n // @ts-expect-error Type issue\n this.raceName = ko.observable()\n // @ts-expect-error Type issue\n this.raceTime = ko.observable()\n // @ts-expect-error Type issue\n this.raceType = ko.observable()\n // @ts-expect-error Type issue\n this.payoutInfomation = ko.observable()\n // @ts-expect-error Type issue\n this.provDivUpdateTime = ko.observable()\n // @ts-expect-error Type issue\n this.fixedPlacesPaying = ko.observable()\n this.isFixedOddsRace = ko.observable(false)\n this.raceCode = ko.pureComputed(() => (this.meetingId() as string) + this.raceNumber())\n this.fixedOddsInfo = new ObservableFixedOddsRaceInformation()\n this.hasSpecials = ko.observable(false)\n this.hasJackpots = ko.observable(false)\n this.jackpotPoolNames = ko.observable('')\n this.hasPlacePool = ko.observable(false)\n this.raceStatus = ko.observable('')\n }\n\n public merge(other: ObservableRace): void {\n Guard.notNull(other)\n\n this.key(other.key())\n this.meetingId(other.meetingId())\n this.distance(other.distance())\n this.tips(other.tips())\n this.tipster(other.tipster())\n this.raceNumber(other.raceNumber())\n this.raceName(other.raceName())\n this.raceTime(other.raceTime())\n this.raceType(other.raceType())\n this.isFixedOddsRace(other.isFixedOddsRace())\n this.payoutInfomation(other.payoutInfomation())\n this.provDivUpdateTime(other.provDivUpdateTime())\n this.fixedPlacesPaying(other.fixedPlacesPaying())\n this.fixedOddsInfo.merge(other.fixedOddsInfo)\n this.hasSpecials(other.hasSpecials())\n this.hasJackpots(other.hasJackpots())\n this.jackpotPoolNames(other.jackpotPoolNames())\n this.hasPlacePool(other.hasPlacePool())\n this.raceStatus(other.raceStatus())\n }\n\n public key: ko.Observable\n public meetingId: ko.Observable\n public distance: ko.Observable\n public tips: ko.Observable\n public tipster: ko.Observable\n public raceNumber: ko.Observable\n public raceName: ko.Observable\n public raceTime: ko.Observable\n public raceType: ko.Observable\n public raceCode: ko.PureComputed\n public isFixedOddsRace: ko.Observable\n public payoutInfomation: ko.Observable\n public provDivUpdateTime: ko.Observable\n public fixedPlacesPaying: ko.Observable\n public fixedOddsInfo: ObservableFixedOddsRaceInformation\n public hasSpecials: ko.Observable\n public hasJackpots: ko.Observable\n public jackpotPoolNames: ko.Observable\n public hasPlacePool: ko.Observable\n public raceStatus: ko.Observable\n}\n","export default class MissingMeetingInformationException {\n public message: string\n constructor(message: string) {\n this.message = message\n }\n}\n","type KnownWeatherClasses =\n | 'weathersunny'\n | 'weathercloudy'\n | 'weathercloudypartly'\n | 'weatherraining'\ntype UnknownWeatherClass = 'weatherunknown'\n\nexport type WeatherClass = KnownWeatherClasses | UnknownWeatherClass\n\ntype WeatherClassMap = Record\n\nexport const WeatherClassUtil: {\n classes: WeatherClassMap\n defaultClass: UnknownWeatherClass\n getClassForWeather(Weather: string): string\n} = {\n classes: {\n weathersunny: ['sunny', 'clear', 'good', 'fine'],\n\n weathercloudy: ['cloudy', 'cloud'],\n\n weathercloudypartly: ['overcast', 'average'],\n\n weatherraining: [\n 'rain',\n 'rainy',\n 'raining',\n 'drizzle',\n 'storm',\n 'stormy',\n 'awful',\n 'bad',\n 'showery',\n 'showers',\n ],\n },\n\n defaultClass: 'weatherunknown',\n\n getClassForWeather(Weather) {\n Weather = Weather.toLowerCase()\n\n for (const weatherClass in WeatherClassUtil.classes) {\n if (WeatherClassUtil.classes[weatherClass as KnownWeatherClasses].indexOf(Weather) !== -1) {\n return weatherClass\n }\n }\n\n return WeatherClassUtil.defaultClass\n },\n} as const\n","import ObservableRace from './ObservableRace'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport * as ko from 'knockout'\nimport { WeatherClassUtil } from '../../Utils/WeatherClassUtil'\nimport ObservablePool from './ObservablePool'\n\nexport default class ObservableMeetingInformation {\n constructor() {\n // @ts-expect-error Type issue\n this.meetingId = ko.observable()\n // @ts-expect-error Type issue\n this.meetingCode = ko.observable()\n // @ts-expect-error Type issue\n this.meetingName = ko.observable()\n // @ts-expect-error Type issue\n this.meetingDate = ko.observable()\n // @ts-expect-error Type issue\n this.nextRaceNumber = ko.observable()\n // @ts-expect-error Type issue\n this.previousRaceNumber = ko.observable()\n // @ts-expect-error Type issue\n this.hasNextRace = ko.observable()\n // @ts-expect-error Type issue\n this.hasPreviousRace = ko.observable()\n // @ts-expect-error Type issue\n this.trackCondition = ko.observable()\n // @ts-expect-error Type issue\n this.weatherAtLocation = ko.observable()\n this.selectedRace = new ObservableRace()\n this.races = ko.observableArray(new Array())\n this.mergeDone = ko.observable(false).extend({ notify: 'always' })\n this.availablePools = ko.observableArray(new Array())\n }\n\n public merge(other: ObservableMeetingInformation) {\n Guard.notNull(other)\n\n this.mergeDone(false)\n\n this.meetingId(other.meetingId())\n this.meetingCode(other.meetingCode())\n this.meetingName(other.meetingName())\n this.meetingDate(other.meetingDate())\n this.nextRaceNumber(other.nextRaceNumber())\n this.previousRaceNumber(other.previousRaceNumber())\n this.hasNextRace(other.hasNextRace())\n this.hasPreviousRace(other.hasPreviousRace())\n this.trackCondition(other.trackCondition())\n this.weatherAtLocation(other.weatherAtLocation())\n this.selectedRace.merge(other.selectedRace)\n this.races(other.races())\n this.availablePools(other.availablePools())\n this.mergeDone(true)\n }\n\n public meetingId: ko.Observable\n public meetingCode: ko.Observable\n public meetingName: ko.Observable\n public meetingDate: ko.Observable\n public nextRaceNumber: ko.Observable\n public previousRaceNumber: ko.Observable\n public hasNextRace: ko.Observable\n public hasPreviousRace: ko.Observable\n public trackCondition: ko.Observable\n public weatherAtLocation: ko.Observable\n public selectedRace: ObservableRace\n public races: ko.ObservableArray\n public mergeDone: ko.Observable\n public availablePools: ko.ObservableArray\n\n public getRaceForGiddyUp(raceNumber: number) {\n const race = this.races().filter(r => r.raceNumber() === raceNumber)[0]\n\n if (!race) {\n return null\n }\n\n const weatherClass = 'tticon-' + WeatherClassUtil.getClassForWeather(this.weatherAtLocation())\n\n return {\n raceCourse: this.meetingName(),\n raceNumber: race.raceNumber(),\n distance: race.distance(),\n trackCondition: this.trackCondition(),\n weatherClass: weatherClass,\n raceStatus: race.raceStatus(),\n raceTimeLocal: race.raceTime(),\n }\n }\n}\n","import { PoolDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/DataTransferObjects'\nimport { tap } from '@mobi/utils'\nimport * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservablePool {\n constructor() {\n this.name = ko.observable('')\n this.total = ko.observable('')\n this.hasJackpot = ko.observable(false)\n this.jackpotTotal = ko.observable('')\n this.isAbandoned = ko.observable(false)\n this.poolingIcon = ko.observable('')\n this.raceNumbers = ko.observableArray([])\n\n this.hasPoolingIcon = ko.observable(false)\n this.isInternationalPool = ko.observable(false)\n this.jurisdictionDescription = ko.observable('')\n }\n\n public static fromDto(dto: PoolDataTransferObject): ObservablePool {\n return tap(new ObservablePool(), pool => {\n pool.name(dto.Name)\n pool.total(dto.Total)\n pool.hasJackpot(dto.HasJackpot)\n pool.jackpotTotal(dto.JackpotTotal)\n pool.isAbandoned(dto.IsAbandoned)\n pool.poolingIcon(dto.PoolingIcon)\n pool.raceNumbers(dto.RaceNumbers)\n pool.jurisdictionDescription(dto.JurisdictionDescription)\n })\n }\n\n hasRaceNumbers(): boolean {\n return this.raceNumbers && this.raceNumbers() && this.raceNumbers().length > 0\n }\n\n public merge(other: ObservablePool) {\n Guard.notNull(other)\n\n this.name(other.name())\n this.total(other.total())\n this.hasJackpot(other.hasJackpot())\n this.jackpotTotal(other.jackpotTotal())\n this.isAbandoned(other.isAbandoned())\n this.poolingIcon(other.poolingIcon())\n this.raceNumbers(other.raceNumbers())\n this.hasPoolingIcon(other.hasPoolingIcon())\n this.isInternationalPool(other.isInternationalPool())\n this.jurisdictionDescription(other.jurisdictionDescription())\n }\n\n public jurisdictionDescription: ko.Observable\n public name: ko.Observable\n public total: ko.Observable\n public hasJackpot: ko.Observable\n public jackpotTotal: ko.Observable\n public isAbandoned: ko.Observable\n public poolingIcon: ko.Observable\n public raceNumbers: ko.ObservableArray\n public hasPoolingIcon: ko.Observable\n public isInternationalPool: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport ObservableRace from '../Model/Observables/ObservableRace'\nimport MissingMeetingInformationException from '../Exceptions/MissingMeetingInformationException'\nimport ObservableFixedOddsRaceInformation from '../Model/Observables/ObservableFixedOddsRaceInformation'\nimport ObservableMeetingInformation from '../Model/Observables/ObservableMeetingInformation'\nimport * as DateTimeProvider from '../../Foundation/DateTimeProvider'\nimport ObservablePool from '../Model/Observables/ObservablePool'\n\nexport default {\n map(dto: dtos.PageDataTransferObject): ObservableMeetingInformation {\n const { MeetingInformation: meetingInformation, AvailablePools: availablePools } = dto\n\n if (!meetingInformation)\n throw new MissingMeetingInformationException('There is no meeting information provided')\n\n const model: ObservableMeetingInformation = new ObservableMeetingInformation()\n\n model.meetingId(meetingInformation.MeetingId)\n model.meetingCode(meetingInformation.MeetingCode)\n model.meetingName(meetingInformation.MeetingName)\n model.meetingDate(DateTimeProvider.parseIso8601Date(meetingInformation.MeetingDate))\n model.hasNextRace(meetingInformation.HasNextRace)\n model.hasPreviousRace(meetingInformation.HasPreviousRace)\n model.nextRaceNumber(meetingInformation.NextRaceNumber)\n model.previousRaceNumber(meetingInformation.PreviousRaceNumber)\n model.trackCondition(meetingInformation.TrackCondition)\n model.weatherAtLocation(meetingInformation.WeatherAtLocation)\n\n if (availablePools) {\n model.availablePools(availablePools.map(pool => ObservablePool.fromDto(pool)))\n }\n\n return model\n },\n\n mapRace(\n meetingId: string,\n dto: dtos.RaceDataTransferObject,\n availablePools?: dtos.PoolDataTransferObject[]\n ): ObservableRace {\n const observableRace = new ObservableRace()\n observableRace.meetingId(meetingId)\n observableRace.distance(dto.Distance)\n observableRace.raceName(dto.RaceName)\n observableRace.raceNumber(dto.RaceNumber)\n observableRace.raceTime(DateTimeProvider.parseIso8601DateTime(dto.RaceTime))\n observableRace.raceType(dto.RaceType)\n observableRace.tips(dto.Tips)\n observableRace.tipster(dto.Tipster)\n observableRace.isFixedOddsRace(dto.IsFixedOddsRace)\n observableRace.payoutInfomation(dto.PayoutInfomation || '')\n observableRace.fixedPlacesPaying(dto.FixedPlacesPaying)\n observableRace.hasSpecials(dto.HasSpecials)\n observableRace.hasJackpots(dto.HasJackpots)\n observableRace.hasPlacePool(dto.HasPlacePool)\n observableRace.raceStatus(dto.RaceStatus)\n observableRace.key(dto.Key)\n\n if (dto.ProvDivUpdateTime) {\n observableRace.provDivUpdateTime(DateTimeProvider.parseIso8601DateTime(dto.ProvDivUpdateTime))\n }\n\n if (dto.HasJackpots && availablePools != null) {\n for (const pool of availablePools) {\n if (pool.HasJackpot) {\n const jackpotPoolNamesString = observableRace.jackpotPoolNames()\n if (jackpotPoolNamesString.length <= 0) {\n observableRace.jackpotPoolNames(pool.Name)\n } else {\n observableRace.jackpotPoolNames(jackpotPoolNamesString + ', ' + pool.Name)\n }\n }\n }\n }\n\n if (dto.FixedOddsInfo) observableRace.fixedOddsInfo = mapFixedOdds(dto.FixedOddsInfo)\n\n return observableRace\n },\n}\n\nfunction mapFixedOdds(\n dto: dtos.FixedOddsRaceInformationDataTransferObject\n): ObservableFixedOddsRaceInformation {\n const result = new ObservableFixedOddsRaceInformation()\n result.bettingConditions(dto.BettingConditions)\n result.bettingRules(dto.BettingRules)\n result.bettingTerms(dto.BettingTerms)\n result.isClosed(dto.IsClosed)\n result.isFixedOddsOnly(dto.IsFixedOddsOnly)\n result.isPlaceAvailable(dto.IsPlaceAvailable)\n result.isRaceAvailable(dto.IsRaceAvailable)\n result.isResulted(dto.IsResulted)\n result.isSuspended(dto.IsSuspended)\n result.payoutInformation(dto.PayoutInformation)\n result.marketSequence(dto.MarketSequence)\n return result\n}\n","export default class MissingStarterException {\n public message: string\n constructor(message: string) {\n this.message = message\n }\n}\n","export default class ObservableProvDiv {\n public div!: string\n public outcome!: number[]\n\n public outcomeDisplay() {\n return `(${this.outcome.join(', ')})`\n }\n}\n","import ObservableProvDiv from './ObservableProvDiv'\n\nexport default class ObservableProvDivPool {\n public name: string\n public provDivs: ObservableProvDiv[]\n public quaddieProvDivLegNums: number[]\n\n constructor() {\n this.name = ''\n this.provDivs = []\n this.quaddieProvDivLegNums = []\n }\n\n public label(): string {\n switch (this.name) {\n case 'Double':\n return 'Double Prov Div'\n case 'Quaddie':\n return 'Quaddie (' + this.quaddieProvDivLegNums.join(',') + ') Prov Div'\n default:\n return 'Prov Div'\n }\n }\n\n public showOutcomes(): boolean {\n return this.provDivs.length > 1\n }\n\n public addProvDiv(div: string, outcome: number[]) {\n const provDiv = new ObservableProvDiv()\n provDiv.div = div\n provDiv.outcome = outcome\n\n this.provDivs.push(provDiv)\n }\n}\n","import { ProvDivPoolDataTransferObject } from '@mobi/api-types'\nimport { ObservableStarter } from '../Model/Observables/ObservableStarter'\nimport ObservableProvDivPool from '../Model/Observables/ObservableProvDivPool'\n\nexport default {\n map(dtos: ProvDivPoolDataTransferObject[], model: ObservableStarter) {\n const pools: ObservableProvDivPool[] = []\n\n dtos.forEach(poolDto => {\n const pool = new ObservableProvDivPool()\n pool.name = poolDto.Name\n pool.quaddieProvDivLegNums = poolDto.QuaddieProvDivLegNums\n\n poolDto.ProvDivs.forEach(provDiv => {\n //Add prov div (trust server to send correct dividend or string value - eg. C/O)\n pool.addProvDiv(provDiv.Div, provDiv.Outcome)\n })\n\n pools.push(pool)\n })\n\n //Add all at end to avoid updating UI constantly\n model.provDivPools(pools)\n },\n}\n","export const checkIfIsInIPad = () => {\n const ua = navigator.userAgent || navigator.vendor\n\n // Check explicitly for \"iPad\" in the user agent for older iPads\n if (/iPad/.test(ua)) {\n return true\n }\n\n // Handle newer iPads running iOS 13+ (identifies as \"Macintosh\")\n if (\n /Macintosh/.test(ua) && // Looks like a Mac\n 'ontouchend' in document // Has touch support\n ) {\n return true // Likely an iPad running iOS 13+\n }\n\n return false\n}\n","import { checkIfIsInIPad } from '@core/Settings/Components/GlobalCss/helpers'\n\nexport class SilkImages {\n public small: SilkImage = new SilkImage()\n public large: SilkImage = new SilkImage()\n public larger: SilkImage = new SilkImage()\n public largest: SilkImage = new SilkImage()\n\n public getSilkImageFor(windowInnerWidth: number): SilkImage {\n const iPadWidth = 768\n if (checkIfIsInIPad() && windowInnerWidth < iPadWidth) {\n return this.large\n }\n return this.large\n }\n}\n\nexport class SilkImage {\n public url = ''\n public size: SilkImageSize = new SilkImageSize()\n\n // This is to ensure existing calls, like giddyup, that may not be part of the new method to downloads silks from core work\n // This is fine while giddyup is only available for australian/nz greyhounds and not uk greyhounds\n public getCssBackgroundFor(starterNumber: number, starterType: string): string {\n if (starterType === 'Dogs') return ''\n const isTrot = starterType === 'Trots'\n const leftPosition = this.size.width * (starterNumber - 1)\n const topOffset = isTrot ? -1 : 0\n return `url(${this.url}) no-repeat -${leftPosition}px ${topOffset}px`\n }\n\n public getCssBackgroundForFinisher(\n finisherNumber: number,\n finisherType: string,\n numberOfFinisherInRace: number\n ): string {\n return this.getCssBackgroundForStarter(finisherNumber, finisherType, numberOfFinisherInRace)\n }\n\n public getCssBackgroundForStarter(\n starterNumber: number,\n starterType: string,\n numberOfStartersInRace: number\n ): string {\n const imageSizingResult = this.getImageSizingForStarterType(\n starterNumber,\n starterType,\n numberOfStartersInRace\n )\n return `url(${this.url}) ${imageSizingResult} no-repeat`\n }\n\n private getImageSizingForStarterType(\n starterNumber: number,\n starterType: string,\n numberOfStartersInRace: number\n ): string {\n switch (starterType) {\n case 'Dogs':\n return this.getImageSizingForDogs(starterNumber, numberOfStartersInRace)\n case 'Trots':\n return this.getImageSizingForTrots(starterNumber)\n case 'Races':\n return this.getImageSizingForRaces(starterNumber)\n }\n return ''\n }\n\n private getImageSizingForDogs(starterNumber: number, numberOfStartersInRace: number): string {\n // Starter numbers start at 1, but the offset has to begin at 0\n const leftOffsetIntoOriginalImage = `${\n ((starterNumber - 1) * 100) / (numberOfStartersInRace - 1)\n }%`\n\n // Push down from top because there is a gap along the top of the dog sprite\n const topOffsetIntoOriginalImage = '43%'\n\n // 106% is the percentage amount we cut into the left of the greyhound colour because the border between the greyhound colours are blurry\n // 130% expand the boxes so we can cut off the blurrines between the each greyhound colour\n const horizontalAndVerticalBackgroundSize = `${numberOfStartersInRace * 106}% 130%`\n\n return `${leftOffsetIntoOriginalImage} ${topOffsetIntoOriginalImage} / ${horizontalAndVerticalBackgroundSize}`\n }\n\n private getImageSizingForTrots(starterNumber: number): string {\n const leftOffset = this.size.width * (starterNumber - 1)\n const leftOffsetIntoOriginalImage = leftOffset === 0 ? '0' : `-${leftOffset}px`\n const topOffsetIntoOriginalImage = '-1px'\n return `${leftOffsetIntoOriginalImage} ${topOffsetIntoOriginalImage}`\n }\n\n private getImageSizingForRaces(starterNumber: number): string {\n const leftOffset = this.size.width * (starterNumber - 1)\n const leftOffsetIntoOriginalImage = leftOffset === 0 ? '0' : `-${leftOffset}px`\n const topOffsetIntoOriginalImage = '0'\n return `${leftOffsetIntoOriginalImage} ${topOffsetIntoOriginalImage}`\n }\n}\n\nexport class SilkImageSize {\n public width = 0\n public height = 0\n public y = 0\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { ObservableStarter } from '../Model/Observables/ObservableStarter'\nimport { ObservableFinisher } from '../Model/Observables/ObservableFinisher'\nimport { SilkImages, SilkImage, SilkImageSize } from '../Model/SilkImages'\n\nexport default {\n map(dto: dtos.SilkImagesDataTransferObject, model: ObservableStarter | ObservableFinisher) {\n const silks = new SilkImages()\n silks.small = mapSilkImage(dto.small)\n silks.large = mapSilkImage(dto.large)\n model.silkImages(silks)\n },\n}\n\nfunction mapSilkImage(dto: dtos.SilkImageDataTransferObject): SilkImage {\n const silkImage = new SilkImage()\n silkImage.url = dto.url\n silkImage.size = new SilkImageSize()\n silkImage.size.width = dto.size.width\n silkImage.size.height = dto.size.height\n silkImage.size.y = dto.size.y\n return silkImage\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableFixedFlucs {\n constructor() {\n // @ts-expect-error Type issue\n this.winOpeningDividend = ko.observable()\n // @ts-expect-error Type issue\n this.winHighDividend = ko.observable()\n // @ts-expect-error Type issue\n this.winLowDividend = ko.observable()\n // @ts-expect-error Type issue\n this.winDividends = ko.observable()\n }\n\n public merge(other: ObservableFixedFlucs) {\n Guard.notNull(other)\n\n this.winOpeningDividend(other.winOpeningDividend())\n this.winHighDividend(other.winHighDividend())\n this.winLowDividend(other.winLowDividend())\n this.winDividends(other.winDividends())\n }\n\n public winOpeningDividend: ko.Observable\n public winHighDividend: ko.Observable\n public winLowDividend: ko.Observable\n public winDividends: ko.Observable\n}\n","import * as ko from 'knockout'\n\nexport default class ObservableSameRaceMultiPrices {\n constructor() {\n this.win = ko.observable()\n this.top2 = ko.observable()\n this.top3 = ko.observable()\n this.top4 = ko.observable()\n this.isFavourite = ko.observable()\n this.srmTopLimit = ko.observable()\n\n // for consistency with FixedOddsStarterInfo.isSuspended, SRM.isSuspended is deliberately undefined until a valid SRM price object is processed (refer BaseRaceCodeBuilder)\n this.isSuspended = ko.observable()\n }\n\n public merge(other: ObservableSameRaceMultiPrices) {\n this.win(other.win())\n this.top2(other.top2())\n this.top3(other.top3())\n this.top4(other.top4())\n this.isFavourite(other.isFavourite())\n this.isSuspended(other.isSuspended())\n this.srmTopLimit(other.srmTopLimit())\n }\n\n public win: ko.Observable\n public top2: ko.Observable\n public top3: ko.Observable\n public top4: ko.Observable\n public isFavourite: ko.Observable\n public isSuspended: ko.Observable\n public srmTopLimit: ko.Observable\n}\n","import { ObservableStarter } from '../Model/Observables/ObservableStarter'\nimport { IRaceCodeBuilder } from './IRaceCodeBuilder'\nimport MissingStarterException from '../Exceptions/MissingStarterException'\nimport ProvDivPoolMapper from './ProvDivPoolMapper'\nimport SilkImageMapper from '../Mapping/SilkImageMapper'\nimport { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport ObservableFixedFlucs from '../Model/Observables/ObservableFixedFlucs'\nimport { MarketMover } from '../Model/MarketMovers'\nimport ObservableSameRaceMultiPrices from '../Model/Observables/ObservableSameRaceMultiPrices'\nimport {\n FixedFlucsDataTransferObject,\n MarketMoversDataTransferObject,\n SameRaceMultiPrices,\n StarterDataTransferObject,\n} from '@mobi/api-types'\n\nexport abstract class BaseRaceCodeBuilder implements IRaceCodeBuilder {\n addBaseInformation(model: ObservableStarter, dto: StarterDataTransferObject): ObservableStarter {\n if (!dto) throw new MissingStarterException('Missing data for an individual starter')\n\n model.type(dto.Type)\n model.name(dto.Name)\n model.number(dto.Number)\n model.isScratched(dto.IsScratched)\n model.isScratchedToteAndFob(dto.IsScratchedToteAndFob)\n model.isFixedOddsStarter(dto.IsFixedOddsStarter)\n model.isFavourite(dto.IsFavourite)\n model.starterPersonName(dto.StarterPersonName)\n model.trainerName(dto.TrainerName as string)\n model.isEmergency(dto.IsEmergency)\n model.emergencyNum(dto.EmergencyNumber)\n model.displayPlaceDividend(dto.DisplayPlaceDividend)\n model.displayWinDividend(dto.DisplayWinDividend)\n model.hasPlacePool(dto.HasPlacePool)\n model.isToteEnabled(dto.IsToteEnabled)\n model.scratchType(dto.ScratchType)\n model.lastFour(dto.LastFour)\n model.rating(dto.Rating)\n model.isRiderChanged(dto.IsRiderChanged)\n model.computeEmRes()\n model.hasFixedOdds(dto.HasFixedOdds)\n model.isFormAvailable(!dto.IsFormDataEmpty)\n\n if (dto.HasFixedOdds && model.fixedOddsStarterInfo) {\n const starter = model.fixedOddsStarterInfo\n\n // TODO: Remove FixedOddsStarterInfo after it's been removed from the API\n const starterDto = dto.FixedOddsInfo ?? dto.FixedOddsStarterInfo\n starter.hasWinDividend(starterDto.HasWinDividend)\n starter.hasPlaceDividend(starterDto.HasPlaceDividend)\n starter.displayPlaceDividend(starterDto.DisplayPlaceDividend)\n starter.displayWinDividend(starterDto.DisplayWinDividend)\n starter.isFavourite(starterDto.IsFavourite)\n starter.isScratched(starterDto.IsScratched)\n starter.isSuspended(starterDto.IsSuspended)\n starter.scratchedTime(starterDto.ScratchedTime)\n starter.winDividendDeduction(starterDto.WinDividendDeduction)\n starter.placeDividendDeduction(starterDto.PlaceDividendDeduction)\n starter.playerNo(starterDto.PlayerNo)\n starter.hasPlacePool(starterDto.HasPlacePool)\n starter.fixedFlucs = BaseRaceCodeBuilder.mapFixedFlucs(starterDto.FixedFlucs)\n starter.propositionSequence(starterDto.PropositionSequence)\n starter.sameRaceMultiPrices = BaseRaceCodeBuilder.mapSameRaceMultiPrices(\n starterDto.SameRaceMultiPrices\n )\n } else {\n model.hasFixedOdds(false)\n if (dto.IsScratched) {\n model.isScratchedToteAndFob(dto.IsScratched)\n }\n }\n\n ProvDivPoolMapper.map(dto.ProvDivPools, model)\n\n if (dto.SilkImages) {\n SilkImageMapper.map(dto.SilkImages, model)\n }\n\n model.marketMovers(BaseRaceCodeBuilder.mapMarketMovers(dto.MarketMovers))\n model.hasMarketMovers(dto.HasMarketMovers ? dto.HasMarketMovers : false)\n\n return model\n }\n\n abstract build(dto: StarterDataTransferObject): IObservableStarter\n\n private static mapSameRaceMultiPrices(dto?: SameRaceMultiPrices): ObservableSameRaceMultiPrices {\n const result = new ObservableSameRaceMultiPrices()\n if (dto) {\n result.win(dto.Win)\n result.top2(dto.Top2)\n result.top3(dto.Top3)\n result.top4(dto.Top4)\n result.isFavourite(dto.IsFavourite)\n result.isSuspended(!dto.Win)\n result.srmTopLimit(dto.SrmTopLimit)\n }\n return result\n }\n\n private static mapFixedFlucs(dto: FixedFlucsDataTransferObject): ObservableFixedFlucs {\n const result = new ObservableFixedFlucs()\n if (dto) {\n result.winOpeningDividend(dto.WinOpeningDividend)\n result.winHighDividend(dto.WinHighDividend)\n result.winLowDividend(dto.WinLowDividend)\n result.winDividends(dto.WinDividends)\n }\n return result\n }\n\n private static mapMarketMovers(dto: MarketMoversDataTransferObject[]): MarketMover[] {\n const result: MarketMover[] = []\n if (dto) {\n dto.map(record => {\n result.push({\n MinutesToAst: record.MinutesToAst,\n Dividend: record.Dividend,\n })\n })\n }\n return result\n }\n}\n","export enum RaceTypes {\n Races,\n Trots,\n Dogs,\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport ObservableFixedFlucs from './ObservableFixedFlucs'\nimport ObservableSameRaceMultiPrices from './ObservableSameRaceMultiPrices'\n\nexport default class ObservableFixedOddsStarterInfo {\n constructor() {\n // @ts-expect-error Type issue\n this.isScratched = ko.observable()\n // @ts-expect-error Type issue\n this.isSuspended = ko.observable()\n // @ts-expect-error Type issue\n this.isFavourite = ko.observable()\n // @ts-expect-error Type issue\n this.scratchedTime = ko.observable()\n // @ts-expect-error Type issue\n this.hasWinDividend = ko.observable()\n // @ts-expect-error Type issue\n this.hasPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.displayWinDividend = ko.observable()\n // @ts-expect-error Type issue\n this.displayPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.winDividendDeduction = ko.observable()\n // @ts-expect-error Type issue\n this.placeDividendDeduction = ko.observable()\n // @ts-expect-error Type issue\n this.playerNo = ko.observable()\n // @ts-expect-error Type issue\n this.hasPlacePool = ko.observable()\n this.fixedFlucs = new ObservableFixedFlucs()\n // @ts-expect-error Type issue\n this.propositionSequence = ko.observable()\n this.sameRaceMultiPrices = new ObservableSameRaceMultiPrices()\n }\n\n public merge(other: ObservableFixedOddsStarterInfo) {\n Guard.notNull(other)\n\n this.isScratched(other.isScratched())\n this.isSuspended(other.isSuspended())\n this.isFavourite(other.isFavourite())\n this.scratchedTime(other.scratchedTime())\n this.hasWinDividend(other.hasWinDividend())\n this.hasPlaceDividend(other.hasPlaceDividend())\n this.displayWinDividend(other.displayWinDividend())\n this.displayPlaceDividend(other.displayPlaceDividend())\n this.winDividendDeduction(other.winDividendDeduction())\n this.placeDividendDeduction(other.placeDividendDeduction())\n this.playerNo(other.playerNo())\n this.hasPlacePool(other.hasPlacePool())\n\n // is this intentional? re-assigning the KO object won't cause a binding update.. should be a merge instead?\n this.fixedFlucs = other.fixedFlucs\n\n this.sameRaceMultiPrices.merge(other.sameRaceMultiPrices)\n }\n\n public isScratched: ko.Observable\n public isSuspended: ko.Observable\n public isFavourite: ko.Observable\n public scratchedTime: ko.Observable\n public hasWinDividend: ko.Observable\n public hasPlaceDividend: ko.Observable\n public displayWinDividend: ko.Observable\n public displayPlaceDividend: ko.Observable\n public winDividendDeduction: ko.Observable\n public placeDividendDeduction: ko.Observable\n public playerNo: ko.Observable\n public hasPlacePool: ko.Observable\n public fixedFlucs: ObservableFixedFlucs\n public propositionSequence: ko.Observable\n public sameRaceMultiPrices: ObservableSameRaceMultiPrices\n}\n","import * as ko from 'knockout'\nimport { IAppWindow } from '../../../AppUtils/Framework/WindowManagement/IAppWindow'\nimport { ISelection } from '../../Components/Core/UIElements/ISelection'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { RaceTypes } from '../../Model/RaceTypes'\nimport ObservableProvDivPool from '../../Model/Observables/ObservableProvDivPool'\nimport { SilkImages, SilkImage } from '../SilkImages'\nimport ObservableFixedOddsStarterInfo from './ObservableFixedOddsStarterInfo'\nimport { IObservableStarter } from './IObservableStarter'\nimport { MarketMover } from '../MarketMovers'\n\nexport abstract class ObservableStarter implements IObservableStarter {\n constructor() {\n // @ts-expect-error Type issue\n this.tag = ko.observable()\n // @ts-expect-error Type issue\n this.template = ko.observable()\n // @ts-expect-error Type issue\n this.number = ko.observable()\n // @ts-expect-error Type issue\n this.type = ko.observable()\n // @ts-expect-error Type issue\n this.name = ko.observable()\n // @ts-expect-error Type issue\n this.silkImages = ko.observable()\n // @ts-expect-error Type issue\n this.isScratched = ko.observable()\n // @ts-expect-error Type issue\n this.hasFixedOdds = ko.observable()\n // @ts-expect-error Type issue\n this.isScratchedToteAndFob = ko.observable()\n // @ts-expect-error Type issue\n this.isFixedOddsStarter = ko.observable()\n this.isFixedScratchedOrSuspended = ko.pureComputed(\n () =>\n this.fixedOddsStarterInfo &&\n (this.fixedOddsStarterInfo.isScratched() || this.fixedOddsStarterInfo.isSuspended())\n )\n // @ts-expect-error Type issue\n this.isFavourite = ko.observable()\n // @ts-expect-error Type issue\n this.starterPersonName = ko.observable()\n // @ts-expect-error Type issue\n this.trainerName = ko.observable()\n // @ts-expect-error Type issue\n this.isEmergency = ko.observable()\n // @ts-expect-error Type issue\n this.emergencyNum = ko.observable()\n // @ts-expect-error Type issue\n this.emres = ko.observable()\n // @ts-expect-error Type issue\n this.isToteEnabled = ko.observable()\n // @ts-expect-error Type issue\n this.hasPlacePool = ko.observable()\n // @ts-expect-error Type issue\n this.scratchType = ko.observable()\n // @ts-expect-error Type issue\n this.displayWinDividend = ko.observable()\n // @ts-expect-error Type issue\n this.displayPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.lastFour = ko.observable()\n this.fixedOddsStarterInfo = new ObservableFixedOddsStarterInfo()\n this.isSameRaceMultiSuspended = ko.pureComputed(() =>\n this.fixedOddsStarterInfo.sameRaceMultiPrices.isSuspended()\n )\n this.selection = ko.observable() as ko.Observable\n this.provDivPools = ko.observableArray()\n // @ts-expect-error Type issue\n this.rating = ko.observable()\n // @ts-expect-error Type issue\n this.isRiderChanged = ko.observable()\n this.isFormAvailable = ko.observable(false)\n this.marketMovers = ko.observableArray()\n this.hasMarketMovers = ko.observable(false)\n // @ts-expect-error Type issue\n this.propositionSequence = ko.observable()\n }\n\n merge(other: ObservableStarter) {\n Guard.notNull(other)\n\n this.tag(other.tag())\n this.template(other.template())\n this.number(other.number())\n this.type(other.type())\n this.name(other.name())\n this.silkImages(other.silkImages())\n this.isScratched(other.isScratched())\n this.hasFixedOdds(other.hasFixedOdds())\n this.isScratchedToteAndFob(other.isScratchedToteAndFob())\n this.isFixedOddsStarter(other.isFixedOddsStarter())\n this.isFavourite(other.isFavourite())\n this.starterPersonName(other.starterPersonName())\n this.trainerName(other.trainerName())\n this.isEmergency(other.isEmergency())\n this.emergencyNum(other.emergencyNum())\n this.isToteEnabled(other.isToteEnabled())\n this.hasPlacePool(other.hasPlacePool())\n this.scratchType(other.scratchType())\n this.displayWinDividend(other.displayWinDividend())\n this.displayPlaceDividend(other.displayPlaceDividend())\n this.lastFour(other.lastFour())\n this.fixedOddsStarterInfo.merge(other.fixedOddsStarterInfo)\n this.provDivPools(other.provDivPools())\n this.rating(other.rating())\n this.isRiderChanged(other.isRiderChanged())\n this.marketMovers(other.marketMovers())\n this.hasMarketMovers(other.hasMarketMovers())\n this.propositionSequence(other.propositionSequence())\n\n this.computeEmRes()\n }\n\n public untypedMerge(other: IObservableStarter) {\n this.merge(other as ObservableStarter)\n }\n\n public getSilkImage(appWindow: IAppWindow): SilkImage {\n if (this.silkImages()) {\n return (this.silkImages() as SilkImages).getSilkImageFor(appWindow.innerWidth())\n }\n return new SilkImage()\n }\n\n public computeEmRes() {\n let emres = ''\n\n if (this.emergencyNum()) {\n switch (this.type()) {\n case RaceTypes[RaceTypes.Races]:\n case RaceTypes[RaceTypes.Trots]:\n emres = '(EM' + this.emergencyNum() + ')'\n break\n\n case RaceTypes[RaceTypes.Dogs]:\n emres = '(RES' + this.emergencyNum() + ')'\n break\n\n default:\n emres = '(UNKNOWN)'\n }\n }\n\n this.emres(emres)\n }\n\n public disposeSelection(): void {\n if (this.selection != null && this.selection() != null) {\n this.selection().dispose()\n }\n this.selection = null as unknown as ko.Observable\n }\n\n public displayPlaceDividend: ko.Observable\n public displayWinDividend: ko.Observable\n public emergencyNum: ko.Observable\n public emres: ko.Observable\n public fixedOddsStarterInfo: ObservableFixedOddsStarterInfo\n public hasFixedOdds: ko.Observable\n public hasMarketMovers: ko.Observable\n public hasPlacePool: ko.Observable\n public isEmergency: ko.Observable\n public isFavourite: ko.Observable\n public isFixedOddsStarter: ko.Observable\n public isFixedScratchedOrSuspended: ko.PureComputed\n public isFormAvailable: ko.Observable\n public isRiderChanged: ko.Observable\n public isSameRaceMultiSuspended: ko.PureComputed\n public isScratched: ko.Observable\n public isScratchedToteAndFob: ko.Observable\n public isToteEnabled: ko.Observable\n public lastFour: ko.Observable\n public marketMovers: ko.ObservableArray\n public name: ko.Observable\n public number: ko.Observable\n public propositionSequence: ko.Observable\n public provDivPools: ko.ObservableArray\n public rating: ko.Observable\n public scratchType: ko.Observable\n public selection: ko.Observable\n public silkImages: ko.Observable\n public starterPersonName: ko.Observable\n public tag: ko.Observable\n public template: ko.Observable\n public trainerName: ko.Observable\n public type: ko.Observable\n}\n","import * as ko from 'knockout'\nimport { ObservableStarter } from './ObservableStarter'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableStarter } from './IObservableStarter'\n\nexport default class ObservableRaceStarter extends ObservableStarter {\n constructor() {\n super()\n // @ts-expect-error Type issue\n this.jockeyWeight = ko.observable()\n // @ts-expect-error Type issue\n this.barrier = ko.observable()\n }\n\n public merge(other: ObservableRaceStarter) {\n Guard.notNull(other)\n super.merge(other)\n\n this.jockeyWeight(other.jockeyWeight())\n this.barrier(other.barrier())\n }\n\n public untypedMerge(other: IObservableStarter) {\n this.merge(other as ObservableRaceStarter)\n }\n\n public jockeyWeight: ko.Observable\n public barrier: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { BaseRaceCodeBuilder } from './BaseRaceCodeBuilder'\nimport { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport ObservableRaceStarter from '../Model/Observables/ObservableRaceStarter'\n\nexport default class RaceBuilder extends BaseRaceCodeBuilder {\n build(dto: dtos.StarterDataTransferObject): IObservableStarter {\n const model = super.addBaseInformation(\n new ObservableRaceStarter(),\n dto\n ) as ObservableRaceStarter\n model.template('race-starters-template')\n model.barrier(dto.Barrier)\n model.jockeyWeight(dto.JockeyWeight)\n model.tag('Race')\n\n return model\n }\n}\n","import { ObservableStarter } from './ObservableStarter'\nimport * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableStarter } from './IObservableStarter'\n\nexport default class ObservableDogStarter extends ObservableStarter {\n constructor() {\n super()\n // @ts-expect-error Type issue\n this.boxNumber = ko.observable()\n // @ts-expect-error Type issue\n this.stripeCount = ko.observable()\n }\n\n public merge(other: ObservableDogStarter) {\n Guard.notNull(other)\n super.merge(other)\n\n this.boxNumber(other.boxNumber())\n this.stripeCount(other.stripeCount())\n }\n\n public untypedMerge(other: IObservableStarter) {\n this.merge(other as ObservableDogStarter)\n }\n\n public boxNumber: ko.Observable\n public stripeCount: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { BaseRaceCodeBuilder } from './BaseRaceCodeBuilder'\nimport { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport ObservableDogStarter from '../Model/Observables/ObservableDogStarter'\n\nexport default class DogBuilder extends BaseRaceCodeBuilder {\n build(source: dtos.StarterDataTransferObject): IObservableStarter {\n const result = super.addBaseInformation(\n new ObservableDogStarter(),\n source\n ) as ObservableDogStarter\n\n result.template('dog-starters-template')\n result.boxNumber(source.Box)\n result.tag('Dog')\n result.stripeCount(source.StripeCount)\n\n return result\n }\n}\n","import * as ko from 'knockout'\nimport { ObservableStarter } from './ObservableStarter'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableStarter } from './IObservableStarter'\n\nexport default class ObservableTrotStarter extends ObservableStarter {\n constructor() {\n super()\n // @ts-expect-error Type issue\n this.handicap = ko.observable()\n }\n\n merge(other: ObservableTrotStarter) {\n Guard.notNull(other)\n super.merge(other)\n\n this.handicap(other.handicap())\n }\n\n public untypedMerge(other: IObservableStarter) {\n this.merge(other as ObservableTrotStarter)\n }\n\n public handicap: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { BaseRaceCodeBuilder } from './BaseRaceCodeBuilder'\nimport { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport ObservableTrotStarter from '../Model/Observables/ObservableTrotStarter'\n\nexport default class TrotBuilder extends BaseRaceCodeBuilder {\n build(dto: dtos.StarterDataTransferObject): IObservableStarter {\n const model = super.addBaseInformation(\n new ObservableTrotStarter(),\n dto\n ) as ObservableTrotStarter\n model.template('trot-starters-template')\n model.tag('Trot')\n model.handicap(dto.Handicap)\n return model\n }\n}\n","import { IRaceCodeBuilder } from './IRaceCodeBuilder'\nimport RaceBuilder from './RaceBuilder'\nimport DogBuilder from './DogBuilder'\nimport TrotBuilder from './TrotBuilder'\n\nexport default {\n from(starterType: string): IRaceCodeBuilder {\n switch (starterType) {\n case 'Races':\n return new RaceBuilder()\n case 'Dogs':\n return new DogBuilder()\n case 'Trots':\n return new TrotBuilder()\n default:\n throw new Error('invalid source.Type')\n }\n },\n}\n","export default class MissingStartersException {\n public message: string\n constructor(message: string) {\n this.message = message\n }\n}\n","import * as ko from 'knockout'\n\nexport enum PoolType {\n Win,\n Place,\n WinPlace,\n Quinella,\n}\n\nexport class PoolInfo {\n public constructor(raceNumber: number, type: PoolType, description: string, friendly: string) {\n this.id = ko.observable(`${friendly}-${raceNumber}`)\n this.type = ko.observable(type)\n this.description = ko.observable(description)\n this.name = ko.observable(friendly)\n }\n\n public id: ko.Observable\n public type: ko.Observable\n public description: ko.Observable\n public name: ko.Observable\n}\n\nexport default class ObservableRaceKeyPoolInfo {\n public constructor(raceNumber: number) {\n this.raceNumber = raceNumber\n this.hasPlacePool = ko.observable(false)\n this.hasQuinellaPool = ko.observable(false)\n this.hasWinPool = ko.observable(false)\n this.hasWinPlacePool = ko.observable(false)\n this.values = ko.observableArray([] as PoolInfo[])\n // @ts-expect-error Type issue\n this.selectedPool = ko.observable()\n }\n\n public merge(other: ObservableRaceKeyPoolInfo) {\n this.raceNumber = other.raceNumber\n this.hasPlacePool(other.hasPlacePool())\n this.hasQuinellaPool(other.hasQuinellaPool())\n this.hasWinPool(other.hasWinPool())\n this.hasWinPlacePool(other.hasWinPlacePool())\n this.configure()\n }\n\n public configure() {\n if (this.hasWinPool()) {\n this.values.push(new PoolInfo(this.raceNumber, PoolType.Win, 'Win', 'Win'))\n }\n\n if (this.hasPlacePool()) {\n this.values.push(new PoolInfo(this.raceNumber, PoolType.Place, 'Place', 'Place'))\n }\n\n if (this.hasWinPlacePool()) {\n this.values.push(new PoolInfo(this.raceNumber, PoolType.WinPlace, 'E/W', 'Eachway'))\n }\n\n if (this.hasQuinellaPool()) {\n this.values.push(new PoolInfo(this.raceNumber, PoolType.Quinella, 'Quinella', 'Quinella'))\n }\n\n this.selectedPool(this.values()[0])\n }\n\n public raceNumber: number\n public hasPlacePool: ko.Observable\n public hasQuinellaPool: ko.Observable\n public hasWinPool: ko.Observable\n public hasWinPlacePool: ko.Observable\n public values: ko.ObservableArray\n public selectedPool: ko.Observable\n}\n","import * as ko from 'knockout'\nimport ObservableRaceKeyPoolInfo from './ObservableRaceKeyPoolInfo'\nimport ObservablePool from './ObservablePool'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableRaceKey {\n constructor() {\n // @ts-expect-error Type issue\n this.raceNumber = ko.observable()\n // @ts-expect-error Type issue\n this.startTime = ko.observable()\n // @ts-expect-error Type issue\n this.leg = ko.observable()\n // @ts-expect-error Type issue\n this.tips = ko.observable()\n // @ts-expect-error Type issue\n this.tipster = ko.observable()\n // @ts-expect-error Type issue\n this.name = ko.observable()\n // @ts-expect-error Type issue\n this.pay = ko.observable()\n // @ts-expect-error Type issue\n this.distance = ko.observable()\n this.poolInfo = new ObservableRaceKeyPoolInfo(-1)\n this.allUpPools = ko.observableArray([] as ObservablePool[])\n // @ts-expect-error Type issue\n this.isDoubleLeg = ko.observable()\n // @ts-expect-error Type issue\n this.isQuaddieLeg = ko.observable()\n }\n\n public merge(other: ObservableRaceKey) {\n this.raceNumber(other.raceNumber())\n this.startTime(other.startTime())\n this.leg(other.leg())\n this.tips(other.tips())\n this.tipster(other.tipster())\n this.name(other.name())\n this.pay(other.pay())\n this.distance(other.distance())\n this.poolInfo.merge(other.poolInfo)\n this.allUpPools(other.allUpPools())\n this.isDoubleLeg(other.isDoubleLeg())\n this.isQuaddieLeg(other.isQuaddieLeg())\n }\n\n public addAllUpPool(poolTotal: ObservablePool) {\n Guard.notNull(poolTotal)\n this.allUpPools.push(poolTotal)\n }\n\n public raceNumber: ko.Observable\n public leg: ko.Observable\n public startTime: ko.Observable\n public tips: ko.Observable\n public tipster: ko.Observable\n public distance: ko.Observable\n public name: ko.Observable\n public pay: ko.Observable\n public poolInfo: ObservableRaceKeyPoolInfo\n public allUpPools: ko.ObservableArray\n public isDoubleLeg: ko.Observable\n public isQuaddieLeg: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport ObservablePool from '../Model/Observables/ObservablePool'\nimport ObservableRaceKey from '../Model/Observables/ObservableRaceKey'\nimport ObservablePage from '../Model/Observables/ObservablePage'\n\nexport default {\n map(dto: dtos.RacePageDataTransferObject, model: ObservablePage) {\n for (const pool of dto.AvailablePools) {\n const poolTotal = this.createObservablePool(pool)\n model.addPoolTotal(poolTotal)\n }\n },\n\n mapAllUpPools(dto: dtos.RaceKeyDataTransferObject, model: ObservableRaceKey) {\n for (const pool of dto.AllUpPools) {\n const poolTotal = this.createObservablePool(pool)\n model.addAllUpPool(poolTotal)\n }\n },\n\n createObservablePool(poolDto: dtos.PoolDataTransferObject): ObservablePool {\n const poolTotal = new ObservablePool()\n poolTotal.hasJackpot(poolDto.HasJackpot)\n poolTotal.isAbandoned(poolDto.IsAbandoned)\n poolTotal.jackpotTotal(poolDto.JackpotTotal)\n poolTotal.name(poolDto.Name)\n poolTotal.total(poolDto.Total)\n poolTotal.poolingIcon(poolDto.PoolingIcon)\n poolTotal.jurisdictionDescription(poolDto.JurisdictionDescription)\n\n poolDto.RaceNumbers.forEach(raceNumber => {\n poolTotal.raceNumbers.push(raceNumber)\n })\n\n poolTotal.hasPoolingIcon(\n poolTotal.poolingIcon() != undefined && poolTotal.poolingIcon().length > 0\n )\n poolTotal.isInternationalPool(\n poolTotal.poolingIcon() != undefined && poolTotal.poolingIcon() === 'INT'\n )\n\n return poolTotal\n },\n}\n","import StarterBuilder from './StarterBuilder'\nimport MissingStartersException from '../Exceptions/MissingStartersException'\nimport ObservableRacePage from '../Model/Observables/ObservableRacePage'\nimport ObservableRaceKey from '../Model/Observables/ObservableRaceKey'\nimport ObservableRaceKeyPoolInfo from '../Model/Observables/ObservableRaceKeyPoolInfo'\nimport PoolMapper from './PoolMapper'\nimport { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport * as DateTimeProvider from '../../Foundation/DateTimeProvider'\nimport { RacePageDataTransferObject, StarterDataTransferObject } from '@mobi/api-types'\n\nexport default {\n map(dto: RacePageDataTransferObject, model: ObservableRacePage) {\n if (!dto || !dto.RaceStarters) throw new MissingStartersException('No starters available')\n\n for (const leg of dto.RaceStarters) {\n const poolInfo = new ObservableRaceKeyPoolInfo(leg.RaceKey.RaceNumber)\n poolInfo.hasPlacePool(leg.RaceKey.PoolInfo.HasPlacePool)\n poolInfo.hasWinPool(leg.RaceKey.PoolInfo.HasWinPool)\n poolInfo.hasWinPlacePool(leg.RaceKey.PoolInfo.HasWinPlacePool)\n poolInfo.hasQuinellaPool(leg.RaceKey.PoolInfo.HasQuinellaPool)\n\n const key = new ObservableRaceKey()\n key.raceNumber(leg.RaceKey.RaceNumber)\n key.leg(leg.RaceKey.Leg)\n key.startTime(DateTimeProvider.parseIso8601DateTime(leg.RaceKey.StartTime))\n key.tips(leg.RaceKey.Tips)\n key.tipster(leg.RaceKey.Tipster)\n key.name(leg.RaceKey.Name)\n key.pay(leg.RaceKey.Pay)\n key.distance(leg.RaceKey.Distance)\n key.poolInfo.merge(poolInfo)\n\n PoolMapper.mapAllUpPools(leg.RaceKey, key)\n\n key.isDoubleLeg(leg.RaceKey.IsDoubleLeg)\n key.isQuaddieLeg(leg.RaceKey.IsQuaddieLeg)\n\n const starters = []\n for (const starter of leg.Starters) {\n starters.push(StarterBuilder.from(starter.Type).build(starter))\n }\n model.addStartersForRace(key, starters)\n }\n },\n\n mapStarters(starters: StarterDataTransferObject[]): IObservableStarter[] {\n const observableStarters = []\n for (const starter of starters) {\n observableStarters.push(StarterBuilder.from(starter.Type).build(starter))\n }\n return observableStarters\n },\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport ObservableRacePage from '../Model/Observables/ObservableRacePage'\n\nexport default {\n map(dto: dtos.RacePageDataTransferObject, model: ObservableRacePage) {\n for (const element of dto.AvailableBetTypes) {\n model.addBetType(element)\n }\n },\n}\n","import * as ko from 'knockout'\nimport ObservableRaceKey from './ObservableRaceKey'\nimport { IObservableStarter } from './IObservableStarter'\nimport ObservableRaceStarter from './ObservableRaceStarter'\nimport ObservableDogStarter from './ObservableDogStarter'\nimport ObservableTrotStarter from './ObservableTrotStarter'\nimport EventAggregator from '../../../AppUtils/Framework/Messaging/EventAggregator'\nimport { IEventAggregator } from '../../../AppUtils/Framework/Messaging/IEventAggregator'\n\nexport default class ObservableRaceStarters {\n public starters: ko.ObservableArray\n\n private eventAggregator: IEventAggregator\n\n constructor() {\n this.starters = ko.observableArray([])\n this.eventAggregator = new EventAggregator()\n }\n\n public getStartersByPropSeq(propositionSeq: number) {\n for (const starterKv of this.starters()) {\n for (const starter of starterKv.Value()) {\n if (\n starter.fixedOddsStarterInfo &&\n starter.fixedOddsStarterInfo.propositionSequence() === propositionSeq\n ) {\n return starter\n }\n }\n }\n return null\n }\n\n public getStarter(raceNumber: number, starterNumber: number): IObservableStarter | null {\n const raceStarters = this.getStartersForRace(raceNumber)\n\n if (!raceStarters) {\n return null\n }\n\n return raceStarters.Value().filter(starter => starter.number() === starterNumber)[0] ?? null\n }\n\n public getStartersForRace(raceNumber: number): StartersKeyValue | null {\n return this.starters().filter(race => race.Key.raceNumber() === raceNumber)[0] ?? null\n }\n\n public clearOutStarterSelections(): void {\n this.starters()\n .map(starter => starter.Value())\n .flat()\n .forEach(starter => {\n starter.disposeSelection()\n })\n }\n\n public addStartersForRace(key: ObservableRaceKey, starters: IObservableStarter[]) {\n const raceStarters = this.getStartersForRace(key.raceNumber())\n\n if (!raceStarters) {\n this.starters.push({ Key: key, Value: ko.observableArray(starters) })\n return\n }\n\n raceStarters.Value(starters)\n }\n\n public mergeStartersForRace(key: ObservableRaceKey, starters: IObservableStarter[]) {\n const raceStarters = this.getStartersForRace(key.raceNumber())\n\n if (raceStarters == null) {\n this.starters.push({ Key: key, Value: ko.observableArray(starters) })\n return\n }\n\n if (raceStarters.Value().length <= 0) {\n raceStarters.Value(starters)\n return\n }\n\n const otherLookUp = new Map()\n starters.forEach(x => {\n otherLookUp.set(x.number(), x)\n })\n\n for (const starter of raceStarters.Value()) {\n this.mergeStarterForRace(key.raceNumber(), otherLookUp, starter)\n }\n }\n\n public getRaceNumbers(): ObservableRaceKey[] {\n const results = this.starters().map(x => x.Key)\n\n if (results === null) return []\n\n return results\n }\n\n public merge(other: ObservableRaceStarters, forceClear = true) {\n if (forceClear) {\n this.starters(other.starters())\n return\n }\n\n for (const raceStarters of this.starters()) {\n const otherLookUp = this.otherStartersToMap(other, raceStarters.Key.raceNumber())\n if (otherLookUp.size === 0) {\n raceStarters.Value([])\n } else if (raceStarters.Value().length === 0) {\n raceStarters.Value(Array.from(otherLookUp.values()))\n } else {\n for (const starter of raceStarters.Value()) {\n this.mergeStarterForRace(raceStarters.Key.raceNumber(), otherLookUp, starter)\n }\n }\n }\n }\n\n private mergeStarterForRace(\n raceNumber: number,\n otherLookUp: Map,\n starter: IObservableStarter\n ) {\n // merge in the new starter info (e.g. from a data refresh) into the starter that is being rendered (e.g. setup during SelectionViewModel ctor)\n const match = otherLookUp.get(starter.number())\n if (match) StartersMerger.from(starter).merge(starter, match)\n\n // a pseudo/phantom selection is being made in an attempt to clear the starter selection if it is no longer selectable\n if (\n starter.isScratched() ||\n starter.isScratchedToteAndFob() ||\n starter.isFixedScratchedOrSuspended() ||\n starter.isSameRaceMultiSuspended()\n ) {\n this.eventAggregator.publish('selection-made-command', { raceNumber, starter, context: null })\n }\n }\n\n private otherStartersToMap(\n other: ObservableRaceStarters,\n raceNumber: number\n ): Map {\n return other\n .starters()\n .filter(x => x.Key.raceNumber() === raceNumber)\n .map(x => x.Value())\n .flat()\n .reduce((map, starter) => {\n return map.set(starter.number(), starter)\n }, new Map())\n }\n\n public removeAll() {\n this.starters([])\n }\n}\n\ninterface IObservableRaceMerger {\n merge(current: IObservableStarter, other: IObservableStarter): void\n}\n\nclass Merger implements IObservableRaceMerger {\n merge(current: IObservableStarter, other: IObservableStarter) {\n const source = other as T\n const dest = current as T\n\n this._merge(dest, source)\n }\n\n private _merge(current: T, other: T) {\n current.untypedMerge(other)\n }\n}\n\nexport type StartersKeyValue = {\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n}\n\nconst StartersMerger = {\n from(source: IObservableStarter): IObservableRaceMerger {\n switch (source.tag()) {\n case 'Race':\n return new Merger()\n case 'Dog':\n return new Merger()\n case 'Trot':\n return new Merger()\n default:\n throw new Error('invalid source.Type')\n }\n },\n}\n","import * as ko from 'knockout'\nimport { IObservablePage } from './IObservablePage'\nimport { RacePageResponseType } from '../../Types/RacePageResponseType'\nimport ObservableMeetingInformation from './ObservableMeetingInformation'\nimport ObservableRace from './ObservableRace'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport ObservablePool from './ObservablePool'\nimport { SpecialOfferInfo } from '../SpecialOfferInfo'\n\nexport default class ObservablePage implements IObservablePage {\n public meetingInformation: ObservableMeetingInformation\n public availablePools: ko.ObservableArray\n public pageType!: RacePageResponseType\n public mergeDone: ko.Observable\n public isMultiInProgress: boolean\n public numberOfLegsInMulti: number\n public specialOffersInfo: ko.Observable\n public hasDoubleProvDivs: ko.Observable\n public hasQuaddieProvDivs: ko.Observable\n public canShowInducements: ko.Observable\n\n constructor() {\n this.meetingInformation = new ObservableMeetingInformation()\n this.availablePools = ko.observableArray()\n this.mergeDone = ko.observable(false).extend({ notify: 'always' })\n this.isMultiInProgress = false\n this.numberOfLegsInMulti = 0\n this.specialOffersInfo = ko.observable(null)\n this.hasDoubleProvDivs = ko.observable(false)\n this.hasQuaddieProvDivs = ko.observable(false)\n this.canShowInducements = ko.observable(false)\n }\n\n public addPoolTotal(poolTotal: ObservablePool) {\n Guard.notNull(poolTotal)\n this.availablePools.push(poolTotal)\n }\n\n public merge(other: IObservablePage) {\n this.pageType = other.pageType\n this.meetingInformation.merge(other.meetingInformation)\n this.availablePools(other.availablePools())\n this.isMultiInProgress = other.isMultiInProgress\n this.numberOfLegsInMulti = other.numberOfLegsInMulti\n this.specialOffersInfo(other.specialOffersInfo())\n this.hasDoubleProvDivs(other.hasDoubleProvDivs())\n this.hasQuaddieProvDivs(other.hasQuaddieProvDivs())\n this.canShowInducements(other.canShowInducements())\n }\n\n public addRace(race: ObservableRace) {\n Guard.notNull(race)\n this.meetingInformation.races.push(race)\n }\n}\n","import type { SortOption } from './types'\n\nexport const persistedSortOption: SortOption = {\n property: 'Number',\n direction: 'Ascending',\n} as const\n\nexport const setPersistedSortOption = ({ property, direction = 'Ascending' }: SortOption) => {\n persistedSortOption.property = property\n persistedSortOption.direction = direction\n}\n","export function intersection(a: Set, b: Set): Set {\n return new Set([...a.values()].filter(x => b.has(x)))\n}\n\nexport function difference(a: Set, b: Set): Set {\n return new Set([...a.values()].filter(x => !b.has(x)))\n}\n\nexport function equal(a: Set, b: Set): boolean {\n return a.size === b.size && intersection(a, b).size === a.size\n}\n","import * as ko from 'knockout'\nimport ObservableRaceKey from './ObservableRaceKey'\nimport { IObservableStarter } from './IObservableStarter'\nimport ObservableRacePage from './ObservableRacePage'\nimport { CheckBoxSelection } from '../../Components/Core/UIElements/CheckboxSelection'\nimport { PoolType } from './ObservableRaceKeyPoolInfo'\nimport { equal } from '../../../AppUtils/Utils/Algorithms'\nimport { range } from '@mobi/utils'\n\nexport default class ObservableSelectedRaceStarters {\n constructor() {\n this.selections = ko.observableArray([])\n }\n\n public getAllSelectedStarters(): ko.ObservableArray[] {\n return this.selections().map(selection => selection.starters)\n }\n\n public getStartersForRace(race: number): ko.ObservableArray {\n const results = this.getSelectionsByRaceNumber(race)\n\n if (!results) {\n return ko.observableArray([])\n }\n\n return results.starters\n }\n\n public getLegForRaceNumber(raceNumber: number): number {\n const results = this.getSelectionsByRaceNumber(raceNumber)\n\n if (!results) {\n return -1\n }\n\n return results.raceKey().leg()\n }\n\n public getRaceNumberForLeg(leg: number): number {\n const results = this.getSelectionsByLeg(leg)[0]\n\n if (!results) {\n return -1\n }\n\n return results.raceKey().raceNumber()\n }\n\n public assignSelectionForRace(race: number, updatedSelections: IObservableStarter[]) {\n const raceStarters = this.getSelectionsByRaceNumber(race)\n\n if (!raceStarters) {\n const key = new ObservableRaceKey()\n key.raceNumber(race)\n this.selections.push({\n raceKey: ko.observable(key),\n starters: ko.observableArray(updatedSelections),\n })\n return\n }\n\n raceStarters.starters(updatedSelections)\n }\n\n public updateSelectionForRace(race: number, updatedStarters: IObservableStarter[]) {\n const currentSelections = this.getSelectionsByRaceNumber(race)\n\n if (!currentSelections || currentSelections.starters().length <= 0) {\n return\n }\n\n const results = updatedStarters.filter(updatedStarter => {\n return currentSelections\n .starters()\n .some(\n originalStarter =>\n originalStarter.number() === updatedStarter.number() &&\n !updatedStarter.isScratched() &&\n !updatedStarter.isScratchedToteAndFob()\n )\n })\n\n if (results == null || results.length <= 0) {\n return\n }\n\n currentSelections.starters(results)\n }\n\n public getRaceNumbers(): ObservableRaceKey[] {\n const results = this.selections().map(x => x.raceKey())\n if (results === null) return []\n return results\n }\n\n public getTotalNumberOfStartersForRace(raceNumber: number): number {\n return this.getStartersForRace(raceNumber)().length\n }\n\n public anyRaceSelections(): boolean {\n return !!this.selections()[0]\n }\n\n public clearAll() {\n this.selections().forEach(selection => {\n selection.starters([])\n })\n }\n\n public setUpForLegs(data: ObservableRacePage, preserveSelections = false) {\n if (!preserveSelections) {\n this.selections([])\n data\n .getRaceNumbers()\n .map(race => {\n return {\n raceKey: ko.observable(race),\n starters: ko.observableArray([]),\n }\n })\n .forEach(x => {\n this.selections.push(x)\n })\n } else {\n const preserved = this.selections()\n this.selections([])\n data\n .getRaceNumbers()\n .map(race => {\n return {\n raceKey: ko.observable(race),\n starters: ko.observableArray(\n this.matchStartersForRace(race, data, preserved)\n ),\n }\n })\n .forEach(x => {\n this.selections.push(x)\n })\n }\n }\n\n private matchStartersForRace(\n race: ObservableRaceKey,\n data: ObservableRacePage,\n previous: {\n raceKey: ko.Observable\n starters: ko.ObservableArray\n }[]\n ): IObservableStarter[] {\n if (!previous || previous.length === 0) {\n return []\n }\n\n const hasPreviousRace = previous.some(\n observableRace => observableRace.raceKey().raceNumber() === race.raceNumber()\n )\n\n if (!hasPreviousRace) {\n return []\n }\n\n const raceStarters = data.getStartersForRace(race.raceNumber())\n\n if (!raceStarters || !raceStarters() || raceStarters().length === 0) {\n return []\n }\n\n const previousStarters = previous\n .filter(observableRace => observableRace.raceKey().raceNumber() === race.raceNumber())\n .map(observableRace => observableRace.starters())\n .flat()\n\n return raceStarters().filter(starter =>\n previousStarters.some(previousStarter => previousStarter.number() === starter.number())\n )\n }\n\n public legCount(): number {\n return this.selections().length\n }\n\n public allLegsHaveSelections(legs: number): boolean {\n return this.selections().filter(selection => selection.starters().length > 0).length === legs\n }\n\n public betweenTwoAndSixLegsWithSelections(): boolean {\n if (!(this.selections && this.selections())) return false\n\n const count = this.selections().filter(selection => selection.starters().length > 0).length\n\n return count >= 2 && count <= 6\n }\n\n public onlyFirstLegHasSelections(raceNumber: number): boolean {\n return this.getStartersForRace(raceNumber)().every(starter => {\n return (starter.selection() as CheckBoxSelection).onlyFirstSelected()\n })\n }\n\n public isAlwaysBet(raceNumber: number, columnWidth: number): boolean {\n const checkBoxes = this.getStartersForRace(raceNumber)().map(\n x => x.selection() as CheckBoxSelection\n )\n\n const sets = range(1, columnWidth + 1).map(() => new Set())\n\n for (const checkBox of checkBoxes) {\n for (let index = 1; index <= columnWidth; ++index) {\n if (checkBox.selectedAt(index - 1)) {\n sets[index - 1].add(checkBox.starter.number())\n }\n }\n }\n\n for (let index = 0; index < columnWidth - 1; ++index) {\n if (!equal(sets[index], sets[index + 1])) return false\n }\n\n return true\n }\n\n public quinellaLegsHaveNoneOrTwoSelectionsMinimum(): boolean {\n const legs = this.selections().filter(\n observableRace =>\n observableRace.raceKey().poolInfo.selectedPool().type() === PoolType.Quinella\n )\n\n if (legs.length === 0) {\n return true\n }\n\n return legs.every(selection => {\n const startersCount = selection.starters().length\n\n return startersCount === 0 || startersCount >= 2\n })\n }\n\n private getSelectionsByRaceNumber(raceNumber: number) {\n return this.selections().filter(\n observableRace => observableRace.raceKey().raceNumber() === raceNumber\n )[0]\n }\n\n private getSelectionsByLeg(leg: number) {\n return this.selections().filter(observableRace => observableRace.raceKey().leg() === leg)\n }\n\n public selections: ko.ObservableArray\n}\n\ninterface ObservableSelection {\n raceKey: ko.Observable\n starters: ko.ObservableArray\n}\n","export enum ButtonSelectionType {\n None = 0,\n Tote = 1,\n Fob = 2,\n ToteAndFob = 3,\n}\n","import { IWinPlaceProcessor } from './IWinPlaceProcessor'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ButtonSelectionType } from '../UIElements/ButtonSelectionType'\nimport { ButtonsSelection } from '../UIElements/ButtonsSelection'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class WinPlaceToteProcessor implements IWinPlaceProcessor {\n public process(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation\n ): IObservableStarter[] {\n Guard.notNull(starter)\n Guard.notNull(starters)\n Guard.notNull(bettingContext)\n\n bettingContext.turnOffFieldAt(starter.selection().raceNumber.leg() - 1)\n bettingContext.isFixed(false)\n\n const starterSelection = starter.selection() as ButtonsSelection\n\n const results = starters()\n .filter(s => s.number() !== starter.number() && !s.isScratchedToteAndFob())\n .reduce((newStarters, starter) => {\n if (!starter.selection) {\n return newStarters\n }\n\n const selection = starter.selection() as ButtonsSelection\n\n if (!selection) {\n return newStarters\n }\n\n if (selection.value() === ButtonSelectionType.Fob) {\n // remove any fixed selections when a tote selection is made\n selection.value(ButtonSelectionType.None)\n } else if (selection.value() === ButtonSelectionType.Tote) {\n // add the new tote selection\n newStarters.push(starter)\n }\n\n return newStarters\n }, [])\n\n if (starter.isScratchedToteAndFob() || starter.isScratched()) {\n if (starterSelection) {\n starterSelection.value(ButtonSelectionType.None)\n }\n } else {\n if (starterSelection.value() === ButtonSelectionType.Tote) {\n results.push(starter)\n }\n }\n\n // contains non-scratched selected starter, AND any other starters with Tote selection\n return results\n }\n}\n","import { IWinPlaceProcessor } from './IWinPlaceProcessor'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ButtonSelectionType } from '../UIElements/ButtonSelectionType'\nimport { ButtonsSelection } from '../UIElements/ButtonsSelection'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class WinPlaceFobProcessor implements IWinPlaceProcessor {\n public process(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation\n ): IObservableStarter[] {\n Guard.notNull(starter)\n Guard.notNull(starters)\n Guard.notNull(bettingContext)\n\n const results: IObservableStarter[] = []\n bettingContext.turnOffFieldAt(starter.selection().raceNumber.leg() - 1)\n bettingContext.isFixed(true)\n\n const starterSelection = starter.selection() as ButtonsSelection\n\n starters()\n .filter(\n (x: IObservableStarter) => x.number() !== starter.number() && !x.isScratchedToteAndFob()\n )\n .forEach(element => {\n if (!element.selection) return\n\n const current = element.selection() as ButtonsSelection\n\n if (!current) return\n\n current.value(ButtonSelectionType.None)\n })\n\n if (starter.isScratchedToteAndFob() || starter.isFixedScratchedOrSuspended()) {\n if (starterSelection) {\n starterSelection.value(ButtonSelectionType.None)\n }\n } else {\n if (starterSelection.hasAny()) {\n results.push(starter)\n }\n }\n\n // only contains non-scratched selected starter\n return results\n }\n}\n","import { IWinPlaceProcessor } from './IWinPlaceProcessor'\nimport { ButtonSelectionType } from '../UIElements/ButtonSelectionType'\nimport WinPlaceToteProcessor from './WinPlaceToteProcessor'\nimport WinPlaceFobProcessor from './WinPlaceFobProcessor'\n\nexport default class WinPlaceProcessorFactory {\n constructor(private selectionType: ButtonSelectionType) {}\n\n processor(): IWinPlaceProcessor | null {\n if (this.selectionType === ButtonSelectionType.Tote) {\n return new WinPlaceToteProcessor()\n }\n\n if (this.selectionType === ButtonSelectionType.Fob) {\n return new WinPlaceFobProcessor()\n }\n\n return null\n }\n}\n","import { ISelectionProcessor } from './ISelectionProcessor'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport * as buttons from '../UIElements/ButtonsSelection'\nimport { ButtonSelectionType } from '../UIElements/ButtonSelectionType'\nimport { ISelectionContext } from './ISelectionContext'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport WinPlaceProcessorFactory from './WinPlaceProcessorFactory'\nimport ko, { Observable } from 'knockout'\nimport LegSelectionContext from './LegSelectionContext'\n\nexport default class WinPlaceSelectionProcessor implements ISelectionProcessor {\n selectionsErrorMessage: Observable = ko.observable('')\n\n public tag(): string {\n return 'WinPlaceSelectionProcessor'\n }\n\n public generateSelections(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n context: ISelectionContext\n ): IObservableStarter[] {\n const processor = new WinPlaceProcessorFactory(\n // context may be null in certain scenarios, e.g. ObservableRaceStarters.mergeStarterForRace() removing a scratched starter\n (context as LegSelectionContext)?.buttonSelectionType\n ).processor()\n if (processor) {\n return processor.process(starter, starters, bettingContext, context)\n }\n return []\n }\n\n public processFieldSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n index: number,\n selected: boolean\n ) {\n Guard.notNull(bettingContext)\n Guard.greaterThanOrEqualZero(index)\n\n bettingContext.toggleFieldAt(index)\n bettingContext.isFixed(false)\n\n if (selected) this.selectAllStarters(starters, selections, selected)\n else this.clearAllStarterSelections(starters, selections)\n }\n\n public processSameAsSelection() {\n //\n }\n\n private selectAllStarters(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n selected: boolean\n ) {\n selections([])\n\n const newSelections = starters()\n .filter(\n // @ts-expect-error Type or code issue\n (starter: IObservableStarter) => starter.selection && !starter.isScratchedToteAndFob()\n )\n .reduce((starters, starter) => {\n const selection = starter.selection() as buttons.ButtonsSelection\n\n if (selected) {\n selection.value(ButtonSelectionType.Tote)\n } else {\n selection.value(ButtonSelectionType.None)\n }\n\n return starters.concat(starter)\n }, [])\n\n selections(newSelections)\n }\n\n private clearAllStarterSelections(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray\n ) {\n selections([])\n\n starters()\n .filter(\n // @ts-expect-error Type or code issue\n (starter: IObservableStarter) => starter.selection && !starter.isScratchedToteAndFob()\n )\n .forEach(starter => {\n const selection = starter.selection() as buttons.ButtonsSelection\n selection.value(ButtonSelectionType.None)\n })\n }\n\n public clearAllSelections(\n racesWithStarters: ko.ObservableArray[],\n racesWithSelections: ko.ObservableArray[]\n ) {\n racesWithSelections.forEach(raceSelections => raceSelections([]))\n\n for (const raceStarters of racesWithStarters) {\n raceStarters()\n .filter(\n // @ts-expect-error Type or code issue\n (starter: IObservableStarter) => starter.selection && !starter.isScratchedToteAndFob()\n )\n .forEach(starter => {\n const selection = starter.selection() as buttons.ButtonsSelection\n if (selection) {\n selection.value(ButtonSelectionType.None)\n }\n })\n }\n }\n\n getStarterSelections(): boolean[][] {\n return []\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport Guard from '../../AppUtils/Framework/Guard'\nimport { ButtonsSelection } from '../Components/Core/UIElements/ButtonsSelection'\n\nexport default class WinPlaceValidator implements IBetTypeValidator {\n isValid(bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n const selections = bettingContext.selections\n const starterSelections = selections.getStartersForRace(bettingContext.raceNumber)()\n\n // within the fixed/tote betting context confirm no selected starters are scratched, e.g. ignore tote selections in a fixed context\n // - unfortunately this is required because their exists a disconnect between the button's visual state and its view model\n if (bettingContext.isFixed()) {\n const fixedRaceSelections = starterSelections.filter(starter =>\n (starter.selection() as ButtonsSelection).hasFob()\n )\n if (fixedRaceSelections.some(starter => starter.isFixedScratchedOrSuspended())) {\n return false\n }\n } else {\n // field selections are always considered valid\n if (bettingContext.bettingOptionsSelected()) {\n return true\n }\n\n const toteRaceSelections = starterSelections.filter(starter =>\n (starter.selection() as ButtonsSelection).hasTote()\n )\n\n if (toteRaceSelections.some(starter => starter.isScratched())) {\n return false\n }\n }\n\n // no starters for a race\n // - this existing logic shouldn't be possible? perhaps this is trying to cater for a closed race?\n const count = selections.getTotalNumberOfStartersForRace(bettingContext.raceNumber)\n return count > 0\n }\n}\n","import { ISelectionResult } from './ISelectionResult'\n\nexport class ToteSelectionResult implements ISelectionResult {\n constructor(selectionString: string) {\n this.selectionStrings = [selectionString]\n }\n\n public selectionStrings: string[]\n}\n","import { ISelectionResult } from './ISelectionResult'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport class FobSelectionResult implements ISelectionResult {\n constructor(\n public starterNumber: number,\n public propositionNumber: number,\n public propositionSequence: number,\n public winPrice: string,\n public placePrice: string\n ) {\n Guard.greaterThanZero(starterNumber)\n Guard.greaterThanZero(propositionNumber)\n Guard.greaterThanZero(propositionSequence)\n Guard.stringNotNullOrEmpty(winPrice)\n Guard.stringNotNullOrEmpty(placePrice)\n\n this.selectionStrings = [starterNumber.toString()]\n }\n\n public selectionStrings: string[]\n}\n","import { ISelectionResultProcessor } from './ISelectionResultProcessor'\nimport { ISelectionResult } from './ISelectionResult'\nimport * as buttons from '../UIElements/ButtonsSelection'\nimport ObservableSelectedRaceStarters from '../../../Model/Observables/ObservableSelectedRaceStarters'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ToteSelectionResult } from './ToteSelectionResult'\nimport { FobSelectionResult } from './FobSelectionResult'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport { sortNumberAscending } from '@core/Utils'\n\nexport default class WinPlaceSelectionResultProcessor implements ISelectionResultProcessor {\n constructor(private winPlaceStarterOverride?: number) {}\n\n selections(\n bettingContext: BettingInformation,\n raceNumber: number,\n selections: ObservableSelectedRaceStarters\n ): ISelectionResult {\n Guard.notNull(bettingContext)\n Guard.notNull(selections)\n\n const starters = selections.getStartersForRace(raceNumber)()\n const leg = selections.getLegForRaceNumber(raceNumber)\n\n if (bettingContext.fieldSelectedAtIndex(leg - 1)) return new ToteSelectionResult('FD')\n\n if (starters.length === 0 || starters.some(starter => !starter.selection))\n return new ToteSelectionResult('')\n\n // winPlaceStarterOverride might not be provided, for instance when clicking from betting drawer or preparing an enquiry\n // - if that's the case then mimic the existing behavior.. assume fob if we're a single fob selection\n const starter =\n starters.find(item => this.winPlaceStarterOverride === item.number()) || starters[0]\n\n if (\n (bettingContext.isFixed() || starters.length == 1) &&\n (starter.selection() as buttons.ButtonsSelection)?.hasFob() == true\n ) {\n return new FobSelectionResult(\n starter.number(),\n starter.fixedOddsStarterInfo.playerNo(),\n starter.fixedOddsStarterInfo.propositionSequence(),\n starter.fixedOddsStarterInfo.displayWinDividend(),\n starter.fixedOddsStarterInfo.displayPlaceDividend()\n )\n }\n\n // assume tote\n const sortedStarterNumbers = starters\n .filter(starter => (starter.selection() as buttons.ButtonsSelection)?.hasTote() == true)\n .map(starters => starters.number())\n .sort(sortNumberAscending)\n\n return new ToteSelectionResult(sortedStarterNumbers.join('.'))\n }\n\n getSelectionsResult(bettingContext: BettingInformation, raceNumber: number): ISelectionResult {\n return this.selections(bettingContext, raceNumber, bettingContext.selections)\n }\n}\n","import * as ko from 'knockout'\nimport type { ISelectionResultProcessor } from '@classic/Betting-v2/Components/Core/SelectionResults/ISelectionResultProcessor'\nimport type { ISelectionProcessor } from '@classic/Betting-v2/Components/Core/Processors/ISelectionProcessor'\nimport type { IBetTypeValidator } from '@classic/Betting-v2/Validation/IBetTypeValidator'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { BetType } from './BetType'\n\ninterface IBetTypeInformationParams {\n betType: BetType\n name: string\n supportsFlexi: boolean\n sortOptions: SortOption['property'][]\n template: string\n betSelectionTemplate: string\n multiBet: boolean\n multiSelections: boolean\n checkBoxCount: number\n fieldCheckBoxCount: number\n sameAsCheckBoxCount: number\n processor: ISelectionProcessor\n legs: number\n selectionResultProcessor: ISelectionResultProcessor\n validator: IBetTypeValidator\n}\n\nexport default class BetTypeInformation {\n constructor(params: IBetTypeInformationParams) {\n Guard.stringNotNullOrEmpty(params.name)\n Guard.arrayNotNullOrEmpty(params.sortOptions)\n Guard.stringNotNullOrEmpty(params.template)\n Guard.stringNotNullOrEmpty(params.betSelectionTemplate)\n Guard.greaterThanOrEqualZero(params.checkBoxCount)\n Guard.greaterThanOrEqualZero(params.fieldCheckBoxCount)\n Guard.greaterThanOrEqualZero(params.sameAsCheckBoxCount)\n Guard.greaterThanZero(params.legs)\n Guard.notNull(params.processor)\n Guard.notNull(params.selectionResultProcessor)\n\n this.betType = ko.observable(params.betType)\n this.name = ko.observable(params.name)\n this.supportsFlexi = params.supportsFlexi\n this.sortOptions = ko.observableArray(params.sortOptions)\n this.template = ko.observable(params.template)\n this.multiBet = ko.observable(params.multiBet)\n this.legs = ko.observable(params.legs)\n this.multiSelections = ko.observable(params.multiSelections)\n this.checkBoxCount = ko.observable(params.checkBoxCount)\n this.fieldCheckBoxCount = ko.observable(params.fieldCheckBoxCount)\n this.sameAsCheckBoxCount = ko.observable(params.sameAsCheckBoxCount)\n this.betSelectionTemplate = ko.observable(params.betSelectionTemplate)\n this.selectionStringProcessor = params.selectionResultProcessor\n this.processor = params.processor\n this.validator = params.validator\n this.isAbandoned = ko.observable(false)\n this.displayText = ko.observable(params.name)\n }\n\n public isAllUp(): boolean {\n return this.betType() === BetType.AllUp\n }\n\n public isMystery(): boolean {\n return this.betType() === BetType.Mystery\n }\n\n public isQuinella(): boolean {\n return this.betType() === BetType.Quinella\n }\n\n public isWinPlace(): boolean {\n return this.betType() === BetType.WinPlace\n }\n\n public isSameRaceMulti(): boolean {\n return this.betType() === BetType.SameRaceMulti\n }\n\n public isExacta(): boolean {\n return this.betType() === BetType.Exacta\n }\n\n public isTrifecta(): boolean {\n return this.betType() === BetType.Trifecta\n }\n\n public isFirst4(): boolean {\n return this.betType() === BetType.First4\n }\n\n public isDouble(): boolean {\n return this.betType() === BetType.Double\n }\n\n public isQuaddie(): boolean {\n return this.betType() === BetType.Quaddie\n }\n\n /**\n * @returns true if punter can keep selections after placing the bet\n */\n public canKeepSelections(): boolean {\n return [\n BetType.First4,\n BetType.Trifecta,\n BetType.Quinella,\n BetType.Exacta,\n BetType.Quaddie,\n BetType.Double,\n BetType.AllUp,\n ].includes(this.betType())\n }\n\n public hasCheckboxes(): boolean {\n return (\n this.betType() === BetType.Trifecta ||\n this.betType() === BetType.First4 ||\n this.betType() === BetType.Quinella ||\n this.betType() === BetType.Exacta\n )\n }\n\n public isSingleLegType(): boolean {\n return (\n this.betType() === BetType.WinPlace ||\n this.betType() === BetType.Exacta ||\n this.betType() === BetType.Trifecta ||\n this.betType() === BetType.First4 ||\n this.betType() === BetType.Quinella\n )\n }\n\n public isMultiLegType(): boolean {\n return this.betType() === BetType.Double || this.betType() === BetType.Quaddie\n }\n\n public isNoveltyBet(): boolean {\n return (\n this.betType() === BetType.Exacta ||\n this.betType() === BetType.Trifecta ||\n this.betType() === BetType.First4 ||\n this.betType() === BetType.Quinella\n )\n }\n\n public supportsSort(sortOption: SortOption['property']): boolean {\n return this.sortOptions().includes(sortOption)\n }\n\n public betType: ko.Observable\n public name: ko.Observable\n public supportsFlexi: boolean\n public sortOptions: ko.ObservableArray\n public template: ko.Observable\n public multiBet: ko.Observable\n public legs: ko.Observable\n public multiSelections: ko.Observable\n public checkBoxCount: ko.Observable\n public betSelectionTemplate: ko.Observable\n public fieldCheckBoxCount: ko.Observable\n public sameAsCheckBoxCount: ko.Observable\n public processor: ISelectionProcessor\n public selectionStringProcessor: ISelectionResultProcessor\n public validator: IBetTypeValidator\n public isAbandoned: ko.Observable\n public displayText: ko.Observable\n}\n","import WinPlaceSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/WinPlaceSelectionProcessor'\nimport WinPlaceValidator from '@classic/Betting-v2/Validation/WinPlaceValidator'\nimport WinPlaceSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/WinPlaceSelectionResultProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class WinPlaceConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.WinPlace,\n name: 'Win & Place',\n supportsFlexi: false,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'winplace-template',\n betSelectionTemplate: 'buttons-selection-template',\n multiBet: false,\n multiSelections: false,\n fieldCheckBoxCount: 1,\n checkBoxCount: 0,\n sameAsCheckBoxCount: 0,\n processor: new WinPlaceSelectionProcessor(),\n validator: new WinPlaceValidator(),\n selectionResultProcessor: new WinPlaceSelectionResultProcessor(),\n legs: 1,\n })\n }\n}\n","import { ISelectionProcessor } from './ISelectionProcessor'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { ISelectionContext } from './ISelectionContext'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport ko, { Observable } from 'knockout'\n\nexport abstract class BaseCheckBoxSelectionProcessor implements ISelectionProcessor {\n selectionsErrorMessage: Observable = ko.observable('')\n\n public constructor(protected count: number) {\n Guard.greaterThanZero(count)\n }\n\n public tag(): string {\n return 'BaseCheckBoxSelectionProcessor'\n }\n public abstract generateSelections(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n selectionContext: ISelectionContext\n ): IObservableStarter[]\n public abstract processFieldSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n index: number,\n selected: boolean\n ): void\n public abstract processSameAsSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n row: number,\n column: number,\n selected: boolean\n ): void\n public abstract clearAllSelections(\n starters: ko.ObservableArray[],\n selections: ko.ObservableArray[]\n ): void\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getStarterSelections(_starters: IObservableStarter[]): boolean[][] {\n return []\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ICheckBoxSelectionPipeline } from './ICheckBoxSelectionPipeline'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { ISelectionContext } from './ISelectionContext'\n\nexport default class CheckBoxSelectionPipeline implements ICheckBoxSelectionPipeline {\n constructor(private processor: ICheckBoxPipelineProcessor) {}\n\n process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n return this.processor.process(current, all, context, selectionContext, count)\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport { ISelectionContext } from './ISelectionContext'\n\nfunction hasSelectedAt(starter: IObservableStarter) {\n return (\n starter.selection() &&\n typeof (starter.selection() as CheckBoxSelection).selectedAt === 'function'\n )\n}\nexport abstract class CheckBoxPipelineProcessor implements ICheckBoxPipelineProcessor {\n constructor(protected next: ICheckBoxPipelineProcessor | null) {}\n\n protected isStarterRovingBanker(starter: IObservableStarter): boolean {\n if (!hasSelectedAt(starter)) return false\n return (starter.selection() as CheckBoxSelection).selectedAt(0)\n }\n\n protected isBoxed(starter: IObservableStarter): boolean {\n if (!hasSelectedAt(starter)) return false\n return (starter.selection() as CheckBoxSelection).selectedAt(0)\n }\n\n protected isWith(starter: IObservableStarter): boolean {\n if (!hasSelectedAt(starter)) return false\n return (starter.selection() as CheckBoxSelection).selectedAt(1)\n }\n\n protected isLegIn(starter: IObservableStarter): boolean {\n if (!hasSelectedAt(starter)) return false\n return (starter.selection() as CheckBoxSelection).selectedAt(0)\n }\n\n protected legIns(starters: IObservableStarter[]): IObservableStarter[] {\n return starters\n .filter(s => !s.isScratched() && !s.isScratchedToteAndFob())\n .filter(s => this.isLegIn(s))\n }\n\n protected totalLegIns(starters: IObservableStarter[], current: IObservableStarter): number {\n return starters\n .filter(\n s => s.number() !== current.number() && !s.isScratched() && !s.isScratchedToteAndFob()\n )\n .filter(s => this.isLegIn(s)).length\n }\n\n protected rovingBankers(starters: IObservableStarter[]): IObservableStarter[] {\n return starters\n .filter(s => !s.isScratched() && !s.isScratchedToteAndFob())\n .filter(s => this.isStarterRovingBanker(s))\n }\n\n protected totalRovingBankers(\n starters: IObservableStarter[],\n current: IObservableStarter\n ): number {\n return starters\n .filter(\n s => s.number() !== current.number() && !s.isScratched() && !s.isScratchedToteAndFob()\n )\n .filter(s => this.isStarterRovingBanker(s)).length\n }\n\n protected maintainExistingSetOfStarters(\n current: IObservableStarter,\n all: ko.ObservableArray,\n results: IObservableStarter[]\n ) {\n all()\n .filter(\n starter =>\n starter.number() !== current.number() &&\n !starter.isScratched() &&\n !starter.isScratchedToteAndFob()\n )\n .forEach(starter => {\n const selections = starter.selection() as CheckBoxSelection\n if (selections.anySelected()) {\n results.push(starter)\n }\n })\n }\n\n protected maintainExistingSetOfStartersWithCurrent(\n current: IObservableStarter,\n all: ko.ObservableArray,\n results: IObservableStarter[]\n ) {\n all()\n .filter(\n starter =>\n starter.number() !== current.number() &&\n !starter.isScratched() &&\n !starter.isScratchedToteAndFob()\n )\n .forEach(starter => {\n if (!starter || !starter.selection) return\n\n const selections = starter.selection() as CheckBoxSelection\n if (selections && selections.anySelected()) {\n results.push(starter)\n }\n })\n\n if (current.selection) {\n const supplied: CheckBoxSelection = current.selection() as CheckBoxSelection\n\n if (supplied.anySelected()) {\n results.push(current)\n }\n }\n }\n\n abstract process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[]\n}\n","import { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { CheckBoxPipelineProcessor } from './CheckBoxPipelineProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { ISelectionContext } from './ISelectionContext'\n\nexport default class AllwaysCheckBoxPipelineProcessor extends CheckBoxPipelineProcessor {\n process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n if (!context.isBoxed())\n return (this.next as ICheckBoxPipelineProcessor).process(\n current,\n all,\n context,\n selectionContext,\n count\n )\n\n Guard.notNull(current)\n Guard.notNull(all)\n Guard.notNull(context)\n\n const results: IObservableStarter[] = []\n this.maintainExistingSetOfStartersWithCurrent(current, all, results)\n\n if (this.currentStarterUnChecked(current)) {\n context.turnOffAllwaysField()\n }\n\n return results\n }\n\n private currentStarterUnChecked(current: IObservableStarter): boolean {\n const supplied = current.selection() as CheckBoxSelection\n return !supplied.selectedAt(0)\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { CheckBoxPipelineProcessor } from './CheckBoxPipelineProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport { ISelectionContext } from './ISelectionContext'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class RovingBankerCheckBoxPipelineProcessor extends CheckBoxPipelineProcessor {\n process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n if (!context.rovingBanker())\n return (this.next as ICheckBoxPipelineProcessor).process(\n current,\n all,\n context,\n selectionContext,\n count\n )\n\n Guard.notNull(current)\n Guard.notNull(all)\n Guard.notNull(context)\n\n const supplied = current.selection() as CheckBoxSelection\n const results: IObservableStarter[] = []\n\n if (\n this.isStarterRovingBanker(current) &&\n this.totalRovingBankers(all(), current) + 1 >= count\n ) {\n // Trying too add to many roving bankers\n this.maintainExistingSetOfStarters(current, all, results)\n supplied.clearAt(1)\n } else if (\n this.isStarterRovingBanker(current) &&\n !this.isWith(current) &&\n this.totalRovingBankers(all(), current) + 1 < count\n ) {\n // Adding roving banker\n this.maintainExistingSetOfStarters(current, all, results) // Less than max\n context.assignTotalRovingBankers(this.totalRovingBankers(all(), current) + 1)\n context.clearFieldIfNoRovingBanker()\n results.push(current)\n } else if (!this.isStarterRovingBanker(current) && this.isWith(current)) {\n this.maintainExistingSetOfStarters(current, all, results)\n context.assignTotalRovingBankers(this.totalRovingBankers(all(), current))\n results.push(current)\n } else if (!this.isStarterRovingBanker(current) && !this.isWith(current)) {\n this.maintainExistingSetOfStarters(current, all, results)\n context.assignTotalRovingBankers(this.totalRovingBankers(all(), current))\n context.turnOffRovingBankerField()\n supplied.clearAll()\n } else {\n context.assignTotalRovingBankers(this.totalRovingBankers(all(), current))\n }\n\n return results\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { CheckBoxPipelineProcessor } from './CheckBoxPipelineProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport { ISelectionContext } from './ISelectionContext'\nimport CheckBoxSelectionContext from './CheckBoxSelectionContext'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport SameAs from '../../../Model/SameAs'\n\nexport default class RegularCheckBoxPipelineProcessor extends CheckBoxPipelineProcessor {\n process(\n toggledStarter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n if (bettingContext.isBoxed() || bettingContext.isLegIn() || bettingContext.rovingBanker())\n return (this.next as ICheckBoxPipelineProcessor).process(\n toggledStarter,\n starters,\n bettingContext,\n selectionContext,\n count\n )\n\n Guard.notNull(toggledStarter)\n Guard.notNull(starters)\n Guard.notNull(bettingContext)\n\n const results: IObservableStarter[] = []\n RegularCheckBoxPipelineProcessor.clearFieldIndexes(bettingContext, toggledStarter)\n\n if (bettingContext.sameAsSelectedAtAnyIndex()) {\n const dependenciesOnSelectedIndex = this.sameAsColumnsDependendentOnSelectedColumn(\n bettingContext,\n selectionContext as CheckBoxSelectionContext\n )\n\n if (toggledStarter && toggledStarter.selection) {\n this.turnOffSameAsButtonForIndex(\n toggledStarter.selection() as CheckBoxSelection,\n selectionContext as CheckBoxSelectionContext,\n bettingContext\n )\n }\n\n this.updateSameAsColumnsDependentOnSelectedIndex(\n bettingContext,\n selectionContext as CheckBoxSelectionContext,\n toggledStarter,\n dependenciesOnSelectedIndex\n )\n }\n\n this.maintainExistingSetOfStartersWithCurrent(toggledStarter, starters, results)\n return results\n }\n\n private static clearFieldIndexes(\n bettingContext: BettingInformation,\n toggledStarter: IObservableStarter\n ) {\n if (!toggledStarter || !toggledStarter.selection) return\n\n const supplied = toggledStarter.selection() as CheckBoxSelection\n\n for (let index = 0, count = supplied.count(); index < count; index++) {\n const checked = supplied.selectedAt(index)\n if (\n !checked &&\n !bettingContext.selectedBetType().isQuinella() &&\n !bettingContext.selectedBetType().multiBet()\n ) {\n bettingContext.turnOffFieldAt(index)\n } else if (!checked && bettingContext.selectedBetType().multiBet()) {\n bettingContext.turnOffFieldAt(supplied.raceNumber.leg() - 1)\n } else if (!checked && bettingContext.selectedBetType().isQuinella()) {\n bettingContext.turnOffFieldAt(0)\n }\n }\n }\n\n private updateSameAsColumnsDependentOnSelectedIndex(\n bettingContext: BettingInformation,\n selectionContext: CheckBoxSelectionContext,\n toggledStarter: IObservableStarter,\n dependencies: SameAs[]\n ) {\n if (!bettingContext.sameAsSelectedAtAnyIndex()) return\n\n const checkBoxSelection = toggledStarter.selection() as CheckBoxSelection\n const selected = checkBoxSelection.selectedAt(selectionContext.selectedColumn - 1)\n\n if (!selected) {\n this.cascadeDeselectionToOtherColumns(\n bettingContext,\n selectionContext,\n toggledStarter,\n dependencies\n )\n } else {\n this.cascadeSelectionToOtherColumns(\n bettingContext,\n selectionContext,\n toggledStarter,\n dependencies\n )\n }\n }\n\n private cascadeDeselectionToOtherColumns(\n bettingContext: BettingInformation,\n selectionContext: CheckBoxSelectionContext,\n toggledStarter: IObservableStarter,\n dependencies: SameAs[]\n ) {\n const checkBoxSelection = toggledStarter.selection() as CheckBoxSelection\n\n if (dependencies.length === 0) return\n\n for (const dependency of dependencies) {\n const dependenciesAttachedToDependency = this.sameAsColumnsDependendentOn(\n bettingContext,\n dependency\n )\n\n if (dependenciesAttachedToDependency.length !== 0) {\n if (\n this.otherDependencyWithCheckBoxSelectionForAMatchingColumn(\n dependency,\n dependenciesAttachedToDependency,\n checkBoxSelection\n )\n ) {\n continue\n }\n\n checkBoxSelection.clearAt(dependency.column)\n this.cascadeDeselectionToOtherColumns(\n bettingContext,\n selectionContext,\n toggledStarter,\n dependenciesAttachedToDependency\n )\n }\n\n if (\n !this.otherSameAsColumnSelectedWithSelection(bettingContext, dependency, checkBoxSelection)\n ) {\n checkBoxSelection.clearAt(dependency.column)\n }\n }\n }\n\n private cascadeSelectionToOtherColumns(\n bettingContext: BettingInformation,\n selectionContext: CheckBoxSelectionContext,\n toggledStarter: IObservableStarter,\n deps: SameAs[]\n ) {\n const checkBoxSelection = toggledStarter.selection() as CheckBoxSelection\n\n if (deps.length === 0) return\n\n for (const dep of deps) {\n checkBoxSelection.enableAt(dep.column)\n this.cascadeSelectionToOtherColumns(\n bettingContext,\n selectionContext,\n toggledStarter,\n this.sameAsColumnsDependendentOn(bettingContext, dep)\n )\n }\n }\n\n private otherSameAsColumnSelectedWithSelection(\n bettingContext: BettingInformation,\n dep: SameAs,\n checkboxes: CheckBoxSelection\n ): boolean {\n const sameAs = bettingContext.sameAs\n .flat()\n .filter(sameAs => sameAs.column === dep.column)\n .filter(sameAs => sameAs.selected())\n\n for (const value of sameAs) {\n if (checkboxes.selectedAt(value.row - 1)) {\n return true\n }\n }\n\n return false\n }\n\n private otherDependencyWithCheckBoxSelectionForAMatchingColumn(\n dependency: SameAs,\n otherDependencies: SameAs[],\n checkBoxSelection: CheckBoxSelection\n ): boolean {\n for (const otherdep of otherDependencies.filter(x => x.column === dependency.column)) {\n if (checkBoxSelection.selectedAt(otherdep.row - 1)) {\n return true\n }\n }\n return false\n }\n\n private sameAsColumnsDependendentOnSelectedColumn(\n bettingContext: BettingInformation,\n selectionContext: CheckBoxSelectionContext\n ): SameAs[] {\n return bettingContext.sameAs\n .flat()\n .filter(sameAs => sameAs.row === selectionContext.selectedColumn)\n .filter(sameAs => sameAs.selected())\n }\n\n private sameAsColumnsDependendentOn(\n bettingContext: BettingInformation,\n dependency: SameAs\n ): SameAs[] {\n return bettingContext.sameAs\n .flat()\n .filter(sameAs => sameAs.row === dependency.column)\n .filter(sameAs => sameAs.selected())\n }\n\n private turnOffSameAsButtonForIndex(\n currentCheckBoxes: CheckBoxSelection,\n selectionContext: CheckBoxSelectionContext,\n context: BettingInformation\n ) {\n if (currentCheckBoxes.selectedAt(selectionContext.selectedColumn - 1)) {\n return\n }\n\n context.sameAs\n .flat()\n .filter(sameAs => sameAs.column === selectionContext.selectedColumn)\n .filter(sameAs => sameAs.selected())\n .filter(sameAs => currentCheckBoxes.selectedAt(sameAs.row - 1))\n .forEach(sameAs => {\n context.turnOffSameAs(sameAs.row, selectionContext.selectedColumn)\n })\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ICheckBoxPipelineProcessor } from './ICheckBoxPipelineProcessor'\nimport { CheckBoxPipelineProcessor } from './CheckBoxPipelineProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport { ISelectionContext } from './ISelectionContext'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class LegInCheckBoxPipelineProcessor extends CheckBoxPipelineProcessor {\n process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n if (!context.isLegIn())\n return (this.next as ICheckBoxPipelineProcessor).process(\n current,\n all,\n context,\n selectionContext,\n count\n )\n\n Guard.notNull(current)\n Guard.notNull(all)\n Guard.notNull(context)\n\n const supplied = current.selection() as CheckBoxSelection\n const results: IObservableStarter[] = []\n\n if (this.isLegIn(current) && this.totalLegIns(all(), current) + 1 >= 2) {\n // Only one LegIn\n this.turnOffOtherLegIn(all, current)\n this.maintainExistingSetOfStartersWithCurrent(current, all, results)\n context.turnOffLegInField()\n } else if (\n this.isLegIn(current) &&\n !this.isWith(current) &&\n this.totalLegIns(all(), current) + 1 < 2\n ) {\n // Only one LegIn\n this.maintainExistingSetOfStartersWithCurrent(current, all, results)\n } else if (!this.isLegIn(current) && this.isWith(current)) {\n this.maintainExistingSetOfStartersWithCurrent(current, all, results)\n } else if (!this.isLegIn(current) && !this.isWith(current)) {\n supplied.clearAll()\n this.maintainExistingSetOfStartersWithCurrent(current, all, results)\n context.turnOffLegInField()\n }\n\n return results\n }\n\n private turnOffOtherLegIn(\n all: ko.ObservableArray,\n current: IObservableStarter\n ) {\n all()\n .filter(\n starter =>\n starter.number() !== current.number() &&\n !starter.isScratched() &&\n !starter.isScratchedToteAndFob()\n )\n .filter(starter => (starter.selection() as CheckBoxSelection).selectedAt(0))\n .forEach(starter => {\n ;(starter.selection() as CheckBoxSelection).clearAll()\n })\n }\n}\n","import { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport CheckBoxSelectionPipeline from './CheckBoxSelectionPipeline'\nimport AllwaysCheckBoxPipelineProcessor from './AllwaysCheckBoxPipelineProcessor'\nimport RovingBankerCheckBoxPipelineProcessor from './RovingBankerCheckBoxPipelineProcessor'\nimport RegularCheckBoxPipelineProcessor from './RegularCheckBoxPipelineProcessor'\nimport LegInCheckBoxPipelineProcessor from './LegInCheckBoxPipelineProcessor'\nimport { ISelectionContext } from './ISelectionContext'\n\nexport default {\n process(\n current: IObservableStarter,\n all: ko.ObservableArray,\n context: BettingInformation,\n selectionContext: ISelectionContext,\n count: number\n ): IObservableStarter[] {\n return new CheckBoxSelectionPipeline(\n new RegularCheckBoxPipelineProcessor(\n new RovingBankerCheckBoxPipelineProcessor(\n new AllwaysCheckBoxPipelineProcessor(new LegInCheckBoxPipelineProcessor(null))\n )\n )\n ).process(current, all, context, selectionContext, count)\n },\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport SameAs from '../../../Model/SameAs'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\n\nexport function sameAsColumnsDependendentOn(\n bettingContext: BettingInformation,\n dependency: SameAs\n): SameAs[] {\n return bettingContext.sameAs\n .flat()\n .filter(x => x.row === dependency.column)\n .filter(x => x.selected())\n}\n\nfunction otherSameAsColumnsDependendentOn(\n bettingContext: BettingInformation,\n dependency: SameAs\n): SameAs[] {\n return bettingContext.sameAs\n .flat()\n .filter(x => x.column === dependency.column)\n .filter(x => x.row !== dependency.row)\n .filter(x => x.selected())\n}\n\nexport function sameAsColumnsDependendentOnSelectedFieldIndex(\n bettingContext: BettingInformation,\n fieldIndex: number\n): SameAs[] {\n return bettingContext.sameAs\n .flat()\n .filter(x => x.row === fieldIndex + 1)\n .filter(x => x.selected())\n}\n\nexport function cascadeSameAsSelectedThroughColumns(\n bettingContext: BettingInformation,\n starters: IObservableStarter[],\n dependencies: SameAs[]\n) {\n if (dependencies.length === 0) return\n\n for (const dependency of dependencies) {\n notifyDependentColumnOfSelection(starters, dependency.row, dependency.column)\n const dependencies = sameAsColumnsDependendentOn(\n bettingContext,\n bettingContext.sameAsAt(dependency.row, dependency.column) as SameAs\n )\n cascadeSameAsSelectedThroughColumns(bettingContext, starters, dependencies)\n }\n}\n\nexport function cascadeSameAsDeselectedThroughColumns(\n bettingContext: BettingInformation,\n affected: CheckBoxSelection[],\n dependencies: SameAs[]\n) {\n if (dependencies.length === 0) return\n\n for (const dependency of dependencies) {\n notifyDependentColumnOfDeselection(bettingContext, affected, dependency)\n const dependencies = sameAsColumnsDependendentOn(\n bettingContext,\n bettingContext.sameAsAt(dependency.row, dependency.column) as SameAs\n )\n cascadeSameAsDeselectedThroughColumns(bettingContext, affected, dependencies)\n }\n}\n\nexport function notifyDependentColumnOfSelection(\n starters: IObservableStarter[],\n row: number,\n column: number\n) {\n starters\n .filter(starter => !starter.isScratched())\n .map(starter => starter.selection() as CheckBoxSelection)\n .forEach(element => {\n element.enableSiblingIfSelected(row, column)\n })\n}\n\nfunction notifyDependentColumnOfDeselection(\n bettingContext: BettingInformation,\n affected: CheckBoxSelection[],\n dependency: SameAs\n) {\n const columnOtherDependencies = otherSameAsColumnsDependendentOn(bettingContext, dependency)\n\n affected\n .filter(\n selection => !selection.anySelectedAtIndicies(columnOtherDependencies.map(x => x.row - 1))\n )\n .forEach(selection => {\n selection.clearAt(dependency.column)\n })\n}\n\nexport function updateColumnMatchingSameAs(\n bettingContext: BettingInformation,\n starters: IObservableStarter[],\n sameAsNode: SameAs\n): CheckBoxSelection[] {\n const columnOtherDependencies = otherSameAsColumnsDependendentOn(bettingContext, sameAsNode)\n\n const affectStarters = starters\n .filter(x => !x.isScratched())\n .map(x => x.selection() as CheckBoxSelection)\n .filter(selection => selection.selectedAt(sameAsNode.row - 1))\n .filter(\n selection => !selection.anySelectedAtIndicies(columnOtherDependencies.map(x => x.row - 1))\n )\n\n affectStarters.forEach(selection => {\n selection.clearAt(sameAsNode.column)\n })\n\n return affectStarters\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport {\n sameAsColumnsDependendentOn,\n notifyDependentColumnOfSelection,\n cascadeSameAsDeselectedThroughColumns,\n cascadeSameAsSelectedThroughColumns,\n updateColumnMatchingSameAs,\n} from './SameAsAlgorithms'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport SameAs from '@classic/Betting-v2/Model/SameAs'\n\nexport default class CheckBoxSameAsProcessor {\n public process(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n row: number,\n column: number,\n selected: boolean\n ) {\n Guard.notNull(bettingContext)\n Guard.notNull(selections)\n Guard.notNull(starters)\n Guard.greaterThanOrEqualZero(row)\n Guard.greaterThanOrEqualZero(column)\n\n const sameAsNode = bettingContext.sameAsAt(row, column) as SameAs\n\n if (selected) {\n notifyDependentColumnOfSelection(starters(), row, column)\n const dependencies = sameAsColumnsDependendentOn(bettingContext, sameAsNode)\n cascadeSameAsSelectedThroughColumns(bettingContext, starters(), dependencies)\n sameAsNode.enable()\n } else {\n const affected = updateColumnMatchingSameAs(bettingContext, starters(), sameAsNode)\n const dependencies = sameAsColumnsDependendentOn(bettingContext, sameAsNode)\n cascadeSameAsDeselectedThroughColumns(bettingContext, affected, dependencies)\n sameAsNode.disable()\n }\n\n selections(\n starters().filter(starter => (starter.selection() as CheckBoxSelection).anySelected())\n )\n\n bettingContext.turnOffFieldAt(column - 1)\n }\n}\n","import { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport {\n sameAsColumnsDependendentOnSelectedFieldIndex,\n cascadeSameAsSelectedThroughColumns,\n cascadeSameAsDeselectedThroughColumns,\n} from './SameAsAlgorithms'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class CheckBoxFieldProcessor {\n public process(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n index: number,\n selected: boolean\n ) {\n Guard.notNull(bettingContext)\n Guard.notNull(selections)\n Guard.notNull(starters)\n Guard.greaterThanOrEqualZero(index)\n\n this.processFieldSelection(\n starters,\n selections,\n bettingContext,\n bettingContext.checkBoxOptionsSelected() ? 0 : index,\n selected\n )\n }\n\n private processFieldSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n index: number,\n selected: boolean\n ) {\n bettingContext.toggleFieldAt(index)\n\n if (bettingContext.selectedBetType().multiBet()) index = 0\n\n this.toggleStarterSelection(\n bettingContext,\n starters,\n selections,\n bettingContext.rovingBanker() || bettingContext.isLegIn() ? 1 : index,\n selected\n )\n\n if (!bettingContext.sameAsSelectedAtAnyIndex() || bettingContext.isBoxed()) return\n\n bettingContext.turnOffSameAsForColumn(index + 1)\n this.updateSameAsColumns(bettingContext, index, starters)\n }\n\n private toggleStarterSelection(\n bettingContext: BettingInformation,\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n index: number,\n selected: boolean\n ) {\n selections([])\n\n const newStarters = starters()\n .filter(starter => !starter.isScratched())\n .map(starter => starter.selection() as CheckBoxSelection)\n .reduce((newStarters, selection) => {\n if (!selected) {\n selection.clearAt(index + 1)\n } else if (\n selected &&\n (bettingContext.rovingBanker() || bettingContext.isLegIn()) &&\n !selection.selectedAt(0)\n ) {\n selection.enableAt(index + 1)\n } else if (\n selected &&\n (bettingContext.rovingBanker() || bettingContext.isLegIn()) &&\n selection.selectedAt(0)\n ) {\n selection.clearAt(index + 1)\n } else if (selected) {\n selection.enableAt(index + 1)\n }\n\n if (selection.anySelected()) {\n newStarters.push(selection.starter)\n }\n\n return newStarters\n }, [])\n\n selections(newStarters)\n }\n\n private updateSameAsColumns(\n bettingContext: BettingInformation,\n fieldIndex: number,\n starters: ko.ObservableArray\n ) {\n if (!bettingContext.sameAsSelectedAtAnyIndex()) return\n\n const deps = sameAsColumnsDependendentOnSelectedFieldIndex(bettingContext, fieldIndex)\n\n if (bettingContext.fieldSelectedAtIndex(fieldIndex)) {\n cascadeSameAsSelectedThroughColumns(bettingContext, starters(), deps)\n } else {\n cascadeSameAsDeselectedThroughColumns(\n bettingContext,\n starters().map(x => x.selection() as CheckBoxSelection),\n deps\n )\n }\n }\n}\n","import { BaseCheckBoxSelectionProcessor } from './BaseCheckBoxSelectionProcessor'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { ISelectionContext } from './ISelectionContext'\nimport CheckBoxPipelineService from './CheckBoxPipelineService'\nimport CheckBoxSameAsProcessor from './CheckBoxSameAsProcessor'\nimport CheckBoxFieldProcessor from './CheckBoxFieldProcessor'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\n\nexport default class CheckboxSelectionProcessor extends BaseCheckBoxSelectionProcessor {\n public constructor(count: number) {\n super(count)\n }\n\n public tag(): string {\n return 'CheckboxSelectionProcessor'\n }\n\n public generateSelections(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n context: ISelectionContext\n ): IObservableStarter[] {\n return CheckBoxPipelineService.process(starter, starters, bettingContext, context, this.count)\n }\n\n public processFieldSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n index: number,\n selected: boolean\n ) {\n const processor = new CheckBoxFieldProcessor()\n processor.process(starters, selections, bettingContext, index, selected)\n }\n\n public processSameAsSelection(\n starters: ko.ObservableArray,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n row: number,\n column: number,\n selected: boolean\n ) {\n const processor = new CheckBoxSameAsProcessor()\n processor.process(starters, selections, bettingContext, row, column, selected)\n }\n\n public clearAllSelections(\n starters: ko.ObservableArray[],\n selections: ko.ObservableArray[]\n ) {\n selections.forEach(starters => {\n starters().forEach(starter => (starter.selection() as CheckBoxSelection).clearAll())\n })\n }\n}\n","import { ICheckBoxValidatorProcessor } from './ICheckBoxValidatorProcessor'\nimport { BettingInformation } from '../Model/BettingInformation'\n\nexport abstract class ForwardingCheckBoxValidatorProcessor implements ICheckBoxValidatorProcessor {\n constructor(protected next: ICheckBoxValidatorProcessor) {}\n abstract validate(count: number, bettingContext: BettingInformation): boolean\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { intersection } from '../../AppUtils/Utils/Algorithms'\nimport { CheckBoxSelection } from '../Components/Core/UIElements/CheckboxSelection'\nimport { ForwardingCheckBoxValidatorProcessor } from './ForwardingCheckBoxValidatorProcessor'\nimport Guard from '../../AppUtils/Framework/Guard'\n\nexport default class RovingBankerCheckBoxValidatorProcessor extends ForwardingCheckBoxValidatorProcessor {\n public validate(count: number, bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n if (!bettingContext.rovingBanker()) return this.next.validate(count, bettingContext)\n\n const selections = bettingContext.selections\n const starters = selections.getStartersForRace(bettingContext.raceNumber)()\n\n if (!starters || starters.length === 0) return false\n\n const checkboxes = starters.map(starter => starter.selection() as CheckBoxSelection)\n\n const sets = [new Set(), new Set()]\n this.populateSet(checkboxes, sets)\n\n if (!(sets[0].size >= 1 && sets[0].size <= count - 1)) return false\n\n if (sets[1].size === 0) return false\n\n if (sets[0].size + sets[1].size < count) return false\n\n if (intersection(sets[0], sets[1]).size !== 0) return false\n\n return true\n }\n\n private populateSet(checkboxes: CheckBoxSelection[], sets: Set[]) {\n for (const checkbox of checkboxes) {\n for (let i = 0; i < 2; ++i) {\n if (checkbox.selectedAt(i)) sets[i].add(checkbox.starter.number())\n }\n }\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { ForwardingCheckBoxValidatorProcessor } from './ForwardingCheckBoxValidatorProcessor'\nimport { CheckBoxSelection } from '../Components/Core/UIElements/CheckboxSelection'\n\nexport default class AllwaysCheckBoxValidatorProcessor extends ForwardingCheckBoxValidatorProcessor {\n validate(count: number, bettingContext: BettingInformation): boolean {\n if (!bettingContext.isBoxed()) {\n return this.next.validate(count, bettingContext)\n }\n\n const selections = bettingContext.selections\n const starters = selections.getStartersForRace(bettingContext.raceNumber)()\n\n if (!starters || starters.length === 0) {\n return false\n }\n\n const checkboxes = starters\n .filter(starter => typeof starter.selection === 'function')\n .map(starter => starter.selection() as CheckBoxSelection)\n\n if (checkboxes.some(cb => cb.anySelected() && !cb.onlyFirstSelected())) {\n return false\n }\n\n const selectedCount = checkboxes.filter(cb => cb.anySelected()).length\n return (\n selectedCount >= count &&\n selectedCount <=\n bettingContext.selections.getTotalNumberOfStartersForRace(bettingContext.raceNumber)\n )\n }\n}\n","import { intersection } from '../../AppUtils/Utils/Algorithms'\nimport { CheckBoxSelection } from '../Components/Core/UIElements/CheckboxSelection'\n\nexport function isAllwaysBet(count: number, sets: Set[]): boolean {\n if (sets[0].size >= count && otherSetsButFirstEmpty(sets)) return true\n\n for (let i = 0; i < count - 1; ++i) {\n if (sets[i].size < count) return false\n\n if (sets[i].size !== sets[i + 1].size) return false\n if (intersection(sets[i], sets[i + 1]).size !== sets[i].size) return false\n }\n\n return true\n}\n\nfunction otherSetsButFirstEmpty(sets: Set[]): boolean {\n for (const element of sets.slice(1)) {\n if (element.size !== 0) return false\n }\n return true\n}\n\nexport function populateSets(checkboxes: CheckBoxSelection[], count: number): Set[] {\n const sets = new Array>()\n\n for (let i = 0; i < count; ++i) {\n sets[i] = new Set()\n }\n\n for (const checkbox of checkboxes) {\n for (let i = 0; i < count; ++i) {\n if (checkbox.selectedAt(i)) {\n sets[i].add(checkbox.starter.number())\n }\n }\n }\n\n return sets\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { difference } from '../../AppUtils/Utils/Algorithms'\nimport { CheckBoxSelection } from '../Components/Core/UIElements/CheckboxSelection'\nimport { ForwardingCheckBoxValidatorProcessor } from './ForwardingCheckBoxValidatorProcessor'\nimport { isAllwaysBet, populateSets } from '../Utils/CheckBoxUtils'\nimport Guard from '../../AppUtils/Framework/Guard'\n\nexport default class RegularCheckBoxValidatorProcessor extends ForwardingCheckBoxValidatorProcessor {\n validate(count: number, bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n if (bettingContext.rovingBanker() || bettingContext.isBoxed())\n return this.next.validate(count, bettingContext)\n\n const selections = bettingContext.selections\n\n const starters = selections.getStartersForRace(bettingContext.raceNumber)()\n\n if (!starters || starters.length === 0) return false\n\n const checkboxes = starters\n .filter(starter => typeof starter.selection === 'function')\n .map(starter => starter.selection() as CheckBoxSelection)\n\n const sets = populateSets(checkboxes, count)\n const sizes = this.populateSizes(count, sets)\n\n if (isAllwaysBet(count, sets)) return true\n\n if (!this.guardInvalidSizes(count, sizes)) return false\n\n if (this.checkSizeConstraintsMet(count, sizes)) return true\n\n return this.doesValidPathExist(sets)\n }\n\n private populateSizes(count: number, sets: Set[]): number[] {\n const sizes = new Array()\n for (let i = 0; i < count; ++i) {\n sizes.push(sets[i].size)\n }\n return sizes\n }\n\n private guardInvalidSizes(count: number, sizes: number[]): boolean {\n for (let i = 0; i < count; ++i) {\n if (sizes[i] === 0) return false\n }\n return true\n }\n\n private checkSizeConstraintsMet(count: number, sizes: number[]): boolean {\n let pool: number[] = []\n\n for (let i = 1; i <= count; ++i) {\n pool.push(i)\n }\n\n pool = pool.reverse()\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < sizes.length; ++i) {\n let index = -1\n\n for (let j = 0; j < pool.length; ++j) {\n if (pool[j] <= sizes[i]) {\n index = j\n break\n }\n }\n\n if (index === -1) return false\n\n pool.splice(index, 1)\n }\n\n return pool.length === 0\n }\n\n private doesValidPathExist(sets: Set[]): boolean {\n return this.navigateGrid(sets, 0, sets.length, new Set())\n }\n\n private navigateGrid(\n sets: Set[],\n index: number,\n max: number,\n excluded: Set\n ): boolean {\n if (index === max) return true\n\n const startersAtIndex = sets[index]\n const unique = difference(startersAtIndex, excluded)\n\n for (const starter of unique.values()) {\n const _excluded = new Set() // Clone as this is mutable and shared by all recursive subproblems\n\n for (const element of excluded.values()) {\n _excluded.add(element)\n }\n\n _excluded.add(starter)\n\n const result = this.navigateGrid(sets, index + 1, max, _excluded)\n if (result)\n // Others may have a match\n return true\n }\n\n return false // Looked at everything and all failed\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { ICheckBoxValidatorProcessorPipeline } from './ICheckBoxValidatorProcessorPipeline'\nimport { ICheckBoxValidatorProcessor } from './ICheckBoxValidatorProcessor'\nimport RovingBankerCheckBoxValidatorProcessor from './RovingBankerCheckBoxValidatorProcessor'\nimport AllwaysCheckBoxValidatorProcessor from './AllwaysCheckBoxValidatorProcessor'\nimport RegularCheckBoxValidatorProcessor from './RegularCheckBoxValidatorProcessor'\n\nexport default class CheckBoxValidatorProcessorPipeline\n implements ICheckBoxValidatorProcessorPipeline\n{\n constructor() {\n this.head = new RegularCheckBoxValidatorProcessor(\n new RovingBankerCheckBoxValidatorProcessor(\n new AllwaysCheckBoxValidatorProcessor(null as unknown as ICheckBoxValidatorProcessor)\n )\n )\n }\n\n validate(count: number, bettingContext: BettingInformation): boolean {\n return this.head.validate(count, bettingContext)\n }\n\n private head: ICheckBoxValidatorProcessor\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport { ICheckBoxValidatorProcessorPipeline } from './ICheckBoxValidatorProcessorPipeline'\nimport CheckBoxValidatorProcessorPipeline from './CheckBoxValidatorProcessorPipeline'\n\nexport default class TrifectaValidator implements IBetTypeValidator {\n constructor() {\n this.pipeline = new CheckBoxValidatorProcessorPipeline()\n }\n\n isValid(bettingContext: BettingInformation): boolean {\n return this.pipeline.validate(3, bettingContext)\n }\n\n private pipeline: ICheckBoxValidatorProcessorPipeline\n}\n","import { ISelectionResult } from './ISelectionResult'\n\nexport default class CheckBoxSelectionResult implements ISelectionResult {\n constructor(selectionStrings: string[]) {\n this.selectionStrings = selectionStrings\n }\n\n public selectionStrings: string[]\n}\n","import { ISelectionResultProcessor } from './ISelectionResultProcessor'\nimport { ISelectionResult } from './ISelectionResult'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { difference } from '../../../../AppUtils/Utils/Algorithms'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport CheckBoxSelectionResult from './CheckBoxSelectionResult'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport ObservableSelectedRaceStarters from '../../../Model/Observables/ObservableSelectedRaceStarters'\nimport { sortNumberAscending } from '@core/Utils'\nimport { range } from '@mobi/utils'\n\nclass CheckBoxProjection {\n constructor(\n public starter: number,\n public selection: CheckBoxSelection\n ) {}\n}\n\nclass CheckBoxValuesProjection {\n constructor(\n public starter: number,\n public selections: { checked: boolean; value: number }[]\n ) {}\n}\n\nexport default class CheckBoxSelectionResultProcessor implements ISelectionResultProcessor {\n public constructor(private count: number) {\n Guard.greaterThanZero(count)\n }\n\n public getSelectionsResult(\n bettingContext: BettingInformation,\n raceNumber: number\n ): ISelectionResult {\n return this.selections(bettingContext, raceNumber, bettingContext.selections)\n }\n\n public selections(\n bettingContext: BettingInformation,\n raceNumber: number,\n selections: ObservableSelectedRaceStarters\n ): ISelectionResult {\n Guard.notNull(bettingContext)\n\n const starters = selections.getStartersForRace(raceNumber)\n\n if (!starters || starters().length === 0) return new CheckBoxSelectionResult([''])\n\n if (starters().length === 0 || starters().some(starter => !starter.selection))\n return new CheckBoxSelectionResult([''])\n\n const results = range(this.count).map(() => '')\n\n for (let column = 0; column < results.length; ++column) {\n const legNumber = column + 1\n const legHasSameAsSelections = bettingContext.sameAsSelectedAtIndex(legNumber)\n\n if (column !== 0 && legHasSameAsSelections) {\n const checkBoxes = starters().map(starter => starter.selection() as CheckBoxSelection)\n const sameAsCols = bettingContext.sameAsSelectedAtIndexString(legNumber)\n\n const nonSameAsSelections = this.additionalSelectedStarters(checkBoxes, sameAsCols, column)\n\n results[column] = this.calculateSameAsString(sameAsCols, nonSameAsSelections)\n } else if (\n bettingContext.fieldSelectedAtIndex(column) &&\n (bettingContext.rovingBanker() || bettingContext.isLegIn()) &&\n column === 0\n ) {\n results[column] = this.dotSeperate(starters, column)\n } else if (\n bettingContext.fieldSelectedAtIndex(column - 1) &&\n (bettingContext.rovingBanker() || bettingContext.isLegIn()) &&\n column === 1\n ) {\n results[column] = 'FD'\n } else if (bettingContext.fieldSelectedAtIndex(column)) {\n results[column] = 'FD'\n } else {\n results[column] = this.dotSeperate(starters, column)\n }\n }\n\n return new CheckBoxSelectionResult(results)\n }\n\n private dotSeperate(stream: ko.ObservableArray, i: number): string {\n return stream()\n .map(\n starter =>\n new CheckBoxProjection(starter.number(), starter.selection() as CheckBoxSelection)\n )\n .map(\n checkbox =>\n new CheckBoxValuesProjection(\n checkbox.starter,\n range(checkbox.selection.count()).map(i => ({\n value: i,\n checked: checkbox.selection.selectedAt(i),\n }))\n )\n )\n .filter(checkbox =>\n checkbox.selections.some(selection => selection.checked && selection.value === i)\n )\n .map(checkbox => checkbox.starter)\n .sort(sortNumberAscending)\n .join('.')\n }\n\n /// Determine non-same-as selections\n private additionalSelectedStarters(\n checkboxes: CheckBoxSelection[],\n sameAsColumns: number[],\n column: number\n ): Set {\n const columnSet = new Set()\n\n // Non-Same-as selections from previous legs\n const sameAsSet = new Set(\n sameAsColumns\n .map(sameAsColumn => this.getSelectedCheckboxesForLeg(checkboxes, sameAsColumn - 1))\n .flat()\n )\n\n // Selections for this leg\n for (const checkbox of checkboxes) {\n if (checkbox.selectedAt(column)) {\n columnSet.add(checkbox.starter.number())\n }\n }\n\n return difference(columnSet, sameAsSet)\n }\n\n private getSelectedCheckboxesForLeg(checkboxes: CheckBoxSelection[], column: number): number[] {\n const columnSet = new Array()\n for (const checkbox of checkboxes) {\n if (checkbox.selectedAt(column)) {\n columnSet.push(checkbox.starter.number())\n }\n }\n return columnSet\n }\n\n private calculateSameAsString(sameAsCols: number[], additionals: Set): string {\n if (sameAsCols.length === 0) {\n return ''\n }\n\n const f =\n (prefix: string): ((str: string, num: number) => string) =>\n (str: string, num: number) => {\n if (str === '') {\n return `${prefix}${num}`\n } else {\n return `${str}.${prefix}${num}`\n }\n }\n\n const result = sameAsCols.sort().reduce(f('S'), '')\n\n if (additionals.size === 0) {\n return result\n }\n\n return (\n result + '.' + Array.from(additionals.values()).sort(sortNumberAscending).reduce(f(''), '')\n )\n }\n}\n","import CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport TrifectaValidator from '@classic/Betting-v2/Validation/TrifectaValidator'\nimport CheckBoxSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResultProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class TrifectaConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Trifecta,\n name: 'Trifecta',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'trifecta-template',\n betSelectionTemplate: 'tri-checkbox-selection-template',\n multiBet: false,\n multiSelections: true,\n checkBoxCount: 3,\n fieldCheckBoxCount: 3,\n sameAsCheckBoxCount: 2,\n processor: new CheckboxSelectionProcessor(3),\n validator: new TrifectaValidator(),\n selectionResultProcessor: new CheckBoxSelectionResultProcessor(3),\n legs: 1,\n })\n }\n}\n","import { ISelectionResult } from './ISelectionResult'\n\nexport default class MultiLegSelectionResult implements ISelectionResult {\n constructor(\n public leg: number,\n public selectionStrings: string[]\n ) {}\n}\n","import { ISelectionResultProcessor } from './ISelectionResultProcessor'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport ObservableSelectedRaceStarters from '../../../Model/Observables/ObservableSelectedRaceStarters'\nimport { ISelectionResult } from './ISelectionResult'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport MultiLegSelectionResult from './MultiLegSelectionResult'\nimport { CheckBoxSelection } from '../UIElements/CheckboxSelection'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { sortNumberAscending } from '@core/Utils'\nimport { range } from '@mobi/utils'\n\nclass CheckBoxProjection {\n constructor(\n public starter: number,\n public selection: CheckBoxSelection\n ) {}\n}\n\nclass CheckBoxValuesProjection {\n constructor(\n public starter: number,\n public selections: { checked: boolean; value: number }[]\n ) {}\n}\n\nexport default class MultiLegSelectionResultProcessor implements ISelectionResultProcessor {\n public selections(\n bettingContext: BettingInformation,\n raceNumber: number,\n selections: ObservableSelectedRaceStarters\n ): ISelectionResult {\n Guard.notNull(bettingContext)\n Guard.notNull(selections)\n\n const starters = selections.getStartersForRace(raceNumber)\n const leg = selections.getLegForRaceNumber(raceNumber)\n\n if (!starters || starters().length === 0) return new MultiLegSelectionResult(leg, [''])\n\n if (starters().length === 0 || starters().some(starter => !starter.selection))\n return new MultiLegSelectionResult(leg, [''])\n\n if (!bettingContext.fieldSelectedAtIndex(leg - 1)) {\n return new MultiLegSelectionResult(leg, [this.dotSeperate(starters)])\n } else if (bettingContext.fieldSelectedAtIndex(leg - 1)) {\n return new MultiLegSelectionResult(leg, ['FD'])\n } else {\n return new MultiLegSelectionResult(leg, [])\n }\n }\n\n private dotSeperate(stream: ko.ObservableArray): string {\n return stream()\n .map(\n starter =>\n new CheckBoxProjection(starter.number(), starter.selection() as CheckBoxSelection)\n )\n .map(\n checkboxProjection =>\n new CheckBoxValuesProjection(\n checkboxProjection.starter,\n range(checkboxProjection.selection.count()).map(i => ({\n value: i,\n checked: checkboxProjection.selection.selectedAt(i),\n }))\n )\n )\n .filter(checkboxValuesProjection =>\n checkboxValuesProjection.selections.some(\n selection => selection.checked && selection.value === 0\n )\n )\n .map(checkboxValuesProjection => checkboxValuesProjection.starter)\n .sort(sortNumberAscending)\n .join('.')\n }\n\n public getSelectionsResult(\n bettingContext: BettingInformation,\n raceNumber: number\n ): ISelectionResult {\n return this.selections(bettingContext, raceNumber, bettingContext.selections)\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport Guard from '../../AppUtils/Framework/Guard'\n\nexport default class MultiLegValidator implements IBetTypeValidator {\n constructor(public legs: number) {}\n\n isValid(bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n const selections = bettingContext.selections\n\n if (!selections) return false\n\n return selections.allLegsHaveSelections(this.legs)\n }\n}\n","import MultiLegSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResultProcessor'\nimport MultiLegValidator from '@classic/Betting-v2/Validation/MultiLegValidator'\nimport CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class MysteryConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Mystery,\n name: 'Mystery',\n supportsFlexi: true,\n sortOptions: ['Number', 'Price', 'FixedPrice'],\n template: 'mystery-template',\n betSelectionTemplate: 'quad-checkbox-selection-template',\n multiBet: false,\n multiSelections: true,\n fieldCheckBoxCount: 0,\n checkBoxCount: 0,\n sameAsCheckBoxCount: 0,\n processor: new CheckboxSelectionProcessor(1),\n validator: new MultiLegValidator(4),\n selectionResultProcessor: new MultiLegSelectionResultProcessor(),\n legs: 1,\n })\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport Guard from '../../AppUtils/Framework/Guard'\n\nexport default class AllUpValidator implements IBetTypeValidator {\n constructor(public legs: number) {}\n\n isValid(bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n const selections = bettingContext.selections\n\n if (!selections) return false\n\n return (\n selections.betweenTwoAndSixLegsWithSelections() &&\n selections.quinellaLegsHaveNoneOrTwoSelectionsMinimum()\n )\n }\n}\n","import CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport MultiLegSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResultProcessor'\nimport AllUpValidator from '@classic/Betting-v2/Validation/AllUpValidator'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\nimport type { IConfigureBetType } from './IConfigureBetType'\n\nexport default class AllUpConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.AllUp,\n name: 'All Up',\n supportsFlexi: false,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'allup-template',\n betSelectionTemplate: 'dual-checkbox-selection-template',\n multiBet: true,\n legs: 1,\n multiSelections: true,\n processor: new CheckboxSelectionProcessor(1),\n validator: new AllUpValidator(2),\n selectionResultProcessor: new MultiLegSelectionResultProcessor(),\n checkBoxCount: 1,\n fieldCheckBoxCount: 1,\n sameAsCheckBoxCount: 0,\n })\n }\n}\n","import MultiLegSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResultProcessor'\nimport MultiLegValidator from '@classic/Betting-v2/Validation/MultiLegValidator'\nimport CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class QuaddieConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Quaddie,\n name: 'Quaddie',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'multi-leg-template',\n betSelectionTemplate: 'dual-checkbox-selection-template',\n multiBet: true,\n multiSelections: true,\n processor: new CheckboxSelectionProcessor(1),\n validator: new MultiLegValidator(4),\n selectionResultProcessor: new MultiLegSelectionResultProcessor(),\n checkBoxCount: 1,\n fieldCheckBoxCount: 4,\n sameAsCheckBoxCount: 0,\n legs: 4,\n })\n }\n}\n","import CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport MultiLegValidator from '@classic/Betting-v2/Validation/MultiLegValidator'\nimport MultiLegSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/MultiLegSelectionResultProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class DoubleConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Double,\n name: 'Double',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'multi-leg-template',\n betSelectionTemplate: 'dual-checkbox-selection-template',\n multiBet: true,\n multiSelections: true,\n processor: new CheckboxSelectionProcessor(1),\n validator: new MultiLegValidator(2),\n selectionResultProcessor: new MultiLegSelectionResultProcessor(),\n checkBoxCount: 1,\n fieldCheckBoxCount: 2,\n sameAsCheckBoxCount: 0,\n legs: 2,\n })\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport { ICheckBoxValidatorProcessorPipeline } from './ICheckBoxValidatorProcessorPipeline'\nimport CheckBoxValidatorProcessorPipeline from './CheckBoxValidatorProcessorPipeline'\n\nexport default class FirstFourValidator implements IBetTypeValidator {\n constructor() {\n this.pipeline = new CheckBoxValidatorProcessorPipeline()\n }\n\n isValid(bettingContext: BettingInformation): boolean {\n return this.pipeline.validate(4, bettingContext)\n }\n\n private pipeline: ICheckBoxValidatorProcessorPipeline\n}\n","import CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport FirstFourValidator from '@classic/Betting-v2/Validation/FirstFourValidator'\nimport CheckBoxSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResultProcessor'\nimport { BetType } from '../Betting/BetType'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class FirstFourConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.First4,\n name: 'First 4',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'first4-template',\n betSelectionTemplate: 'quad-checkbox-selection-template',\n multiBet: false,\n multiSelections: true,\n checkBoxCount: 4,\n fieldCheckBoxCount: 4,\n sameAsCheckBoxCount: 3,\n processor: new CheckboxSelectionProcessor(4),\n validator: new FirstFourValidator(),\n selectionResultProcessor: new CheckBoxSelectionResultProcessor(4),\n legs: 1,\n })\n }\n}\n","import { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { IBetTypeValidator } from '@classic/Betting-v2/Validation/IBetTypeValidator'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { ButtonSelectionType } from '@classic/Betting-v2/Components/Core/UIElements/ButtonSelectionType'\nimport { ButtonsSelection } from '@classic/Betting-v2/Components/Core/UIElements/ButtonsSelection'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\n\nexport declare type Bit = 0 | 1\n\nexport default class SameRaceMultiValidator implements IBetTypeValidator {\n // invoked by KO computed property 'StartersPageViewModel.isValid'.. used to render the react 'quickbet/betslip toast' (refer BettingDrawer.tsx)\n isValid(bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n\n // retrieves only starters that have selections, i.e. starters[].selection must be initialised in order for a selection to exist\n const selectedStarters = bettingContext.selections.getStartersForRace(\n bettingContext.raceNumber\n )()\n\n // determine isValid based purely on starters that have selections\n const { isValid } = SameRaceMultiValidator.validate(\n SameRaceMultiValidator.getSelectionsFromStarters(selectedStarters)\n )\n return isValid\n }\n\n public static getSelectionsFromStarters(starters: IObservableStarter[]): Bit[][] {\n // starters MUST be fully initialised with the KO selection property assigned!\n return starters\n .map(starter => starter.selection() as ButtonsSelection)\n .map(starterButton =>\n starterButton.values().map(value => (value() === ButtonSelectionType.Fob ? 1 : 0))\n )\n }\n\n public static validate(\n allStarters: Bit[][], // may of may not have leg selections\n starterIndex: number | undefined = undefined,\n legNumber: number | undefined = undefined\n ) {\n // 1. starter can only have 1 leg selected - toggle starter leg selection if already selected...\n // eslint-disable-next-line prefer-const\n let [noStarterHasMultipleLegs, singleStarterWithTwoSelectionsIndex] =\n checkStartersDoNotHaveMultipleLegs(allStarters)\n const hasSingleStarterWithTwoSelections =\n singleStarterWithTwoSelectionsIndex !== undefined &&\n starterIndex !== undefined &&\n starterIndex === singleStarterWithTwoSelectionsIndex\n\n // ... if one starter has 2 selections, we might be in the middle of changing selection\n // so to try to see what the selections would look like with this change in place\n // we un-select the old selection (if we know the new one by starterNumber and legNumber)\n if (hasSingleStarterWithTwoSelections) {\n allStarters = getSelectionsAfterLegNumberChange(\n allStarters,\n singleStarterWithTwoSelectionsIndex,\n legNumber\n )\n noStarterHasMultipleLegs = true\n }\n\n // 2. number of starters with leg selections must be within range, i.e. 2, 3, or 4\n const isNumberOfStartersWithLegSelectionsInRange =\n checkNumberOfStartersWithLegWithinRange(allStarters)\n\n // 3. number of starters with leg selections can't create multiple winning combinations\n // - e.g. x1 WIN and x2 TOP2 is invalid\n // - e.g. x3 TOP2 is invalid\n const isSingleCombination = checkSingleCombinationExists(allStarters)\n\n const isValid =\n noStarterHasMultipleLegs && isNumberOfStartersWithLegSelectionsInRange && isSingleCombination\n\n const sumLegSelectionsCount = getSumLegSelectionCount(allStarters)\n\n return { isValid, sumLegSelectionsCount, hasSingleStarterWithTwoSelections }\n }\n}\n\nexport function checkStartersDoNotHaveMultipleLegs(\n allStarters: Bit[][]\n): [boolean, number | undefined] {\n // catering for scenario whereby a starter already has a leg selection and user has requested a different leg selection, i.e. akin to a radio button\n const starterSelectionsWithMultipleLegCounts: { starterIndex: number; legCount: number }[] = []\n allStarters.forEach((starterWithLegSelections, starterIndex) => {\n const legCount = starterWithLegSelections.filter(isLegSelected => isLegSelected).length\n if (legCount > 1) starterSelectionsWithMultipleLegCounts.push({ starterIndex, legCount }) // store starter index and leg selection count\n })\n\n // process any starters with multiple legs selected\n if (starterSelectionsWithMultipleLegCounts.length > 0) {\n if (\n starterSelectionsWithMultipleLegCounts.length == 1 &&\n starterSelectionsWithMultipleLegCounts[0].legCount == 2\n ) {\n // 1 starter has 2 leg selections is valid, but selection needs adjustment\n return [false, starterSelectionsWithMultipleLegCounts[0].starterIndex]\n }\n\n // this should not be possible due to the nature of our 'psuedo radio button'.. 1 starter with >= 3 legs OR multiple starters with >= 2 legs\n return [false, undefined]\n }\n\n // all starters have a single leg selection\n return [true, undefined]\n}\n\nexport function getSelectionsAfterLegNumberChange(\n allStarters: Bit[][],\n starterNumberIndex: number | undefined,\n legNumber: number | undefined\n) {\n // project a new 'all selections' collection with the new previous leg removed\n return allStarters.map((starterWithLegSelections, starterIndex) =>\n starterWithLegSelections.map((legSelection, legSelectionIndex) => {\n if (starterNumberIndex === undefined || legNumber === undefined) return legSelection\n return starterNumberIndex === starterIndex && legNumber !== legSelectionIndex && legSelection\n ? 0\n : legSelection\n })\n )\n}\n\nexport function checkNumberOfStartersWithLegWithinRange(allStarters: Bit[][]) {\n const startersWithLegSelections = allStarters.filter(starter =>\n starter.some(legSelectionIndex => legSelectionIndex)\n )\n const count = startersWithLegSelections.length\n return count > 1 && count < 5\n}\n\nexport function checkSingleCombinationExists(allStarters: Bit[][]) {\n const legCounts = [0, 0, 0, 0]\n allStarters.forEach(starter => {\n for (let leg = 0; leg < 4; leg++) {\n legCounts[leg] += starter[leg]\n }\n })\n\n // legCounts should contain something like [1, 2, 0, 1]\n // we now add all smaller leg counts to current leg\n const aggregatedLegCounts = [0, 0, 0, 0]\n // => we should get [1, 3, 3, 4], which shows us that leg 2 has too many selections\n for (let i = 0; i < legCounts.length; i++) {\n aggregatedLegCounts[i] = legCounts.reduce(\n (prev, crt, index) => prev + (index <= i ? crt : 0),\n 0\n )\n }\n // for a leg number (index + 1), return invalid if sum of selections up to then is greater than said leg number\n const isInvalid = aggregatedLegCounts.some((legCount, legIndex) => legCount > legIndex + 1)\n return !isInvalid\n}\n\nexport function getSumLegSelectionCount(allStarters: Bit[][]) {\n const sumLegSelectionsCount = allStarters.reduce(\n (total, starter) => total + starter.filter(leg => leg == 1).length,\n 0\n )\n return sumLegSelectionsCount\n}\n","import { ISelectionProcessor } from '../../../../../classic/Betting-v2/Components/Core/Processors/ISelectionProcessor'\nimport { IObservableStarter } from '../../../../../classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { ButtonSelectionType } from '../../../../../classic/Betting-v2/Components/Core/UIElements/ButtonSelectionType'\nimport { BettingInformation } from '../../../../../classic/Betting-v2/Model/BettingInformation'\nimport Guard from '../../../../../classic/AppUtils/Framework/Guard'\nimport { ButtonsSelection } from '../../../../../classic/Betting-v2/Components/Core/UIElements/ButtonsSelection'\nimport SameRaceMultiValidator from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiValidator'\nimport LegSelectionContext from '../../../../../classic/Betting-v2/Components/Core/Processors/LegSelectionContext'\nimport ko, { Observable } from 'knockout'\n\nexport default class SameRaceMultiSelectionProcessor implements ISelectionProcessor {\n selectionsErrorMessage: Observable = ko.observable('')\n errorTimeout!: NodeJS.Timeout\n\n public tag(): string {\n return 'SameRaceMultiSelectionProcessor'\n }\n\n public generateSelections(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n legSelectionContext: LegSelectionContext\n ): IObservableStarter[] {\n return this.processSingleSelection(starter, starters, bettingContext, legSelectionContext)\n }\n\n private processSingleSelection(\n starter: IObservableStarter,\n starters: ko.ObservableArray,\n bettingContext: BettingInformation,\n legSelectionContext: LegSelectionContext | null\n ): IObservableStarter[] {\n Guard.notNull(starter)\n Guard.notNull(starters)\n Guard.notNull(bettingContext)\n\n bettingContext.isFixed(true)\n\n // validate whether the acceptor should be allowed\n // - use 'starters' which represents the current UI selections, i.e. not the betting context selection (which is assigned from the output of this method)\n // - re-using the validator to avoid logic duplication (note, the validator is also directly invoked via KO computed property StartersPageViewModel.isValid)\n const selections = SameRaceMultiValidator.getSelectionsFromStarters(starters())\n const starterIndex = starters().findIndex(s => s.number() === starter.number())\n\n // VERY important to cater for legSelectionContext==null, since unfortunately ObservableXxxStarter uses this to trigger 'psuedo selections' on scratched acceptors\n // - also, null references in this method are caught higher up and thus NOT captured in the console!\n\n // remove selection is there's no context (e.g. a scratched/suspended starter) AND an applicable fixed odds scratching status exists\n if (starter.isFixedScratchedOrSuspended() || starter.isSameRaceMultiSuspended()) {\n this.removeOldSelection(starter, legSelectionContext)\n }\n\n const { isValid, sumLegSelectionsCount, hasSingleStarterWithTwoSelections } =\n SameRaceMultiValidator.validate(selections, starterIndex, legSelectionContext?.legNumber)\n\n if (!isValid) {\n if (sumLegSelectionsCount > 1) {\n // remove the new invalid leg selection\n this.removeNewSelection(starter, legSelectionContext)\n // and inform the user\n this.showError()\n } else if (hasSingleStarterWithTwoSelections) {\n this.removeOldSelection(starter, legSelectionContext)\n }\n } else {\n if (hasSingleStarterWithTwoSelections) {\n this.removeOldSelection(starter, legSelectionContext)\n }\n this.hideError()\n }\n\n const selectedStarters = starters().filter(x =>\n (x.selection() as ButtonsSelection).values().some(value => value() == ButtonSelectionType.Fob)\n )\n\n return selectedStarters\n }\n\n private removeOldSelection(\n starter: IObservableStarter,\n legSelectionContext: LegSelectionContext | null\n ) {\n ;(starter.selection() as ButtonsSelection).values().forEach((value, index) => {\n if (!legSelectionContext || index != legSelectionContext.legNumber)\n value(ButtonSelectionType.None)\n })\n }\n\n private removeNewSelection(\n starter: IObservableStarter,\n legSelectionContext: LegSelectionContext | null\n ) {\n ;(starter.selection() as ButtonsSelection).values().forEach((value, index) => {\n if (index == legSelectionContext?.legNumber) value(ButtonSelectionType.None)\n })\n }\n\n private showError() {\n this.hideError()\n\n this.selectionsErrorMessage('starter selection invalid: no reason specified')\n this.errorTimeout = setTimeout(() => this.hideError(), 2_000)\n }\n\n private hideError() {\n if (this.errorTimeout) clearTimeout(this.errorTimeout)\n this.selectionsErrorMessage('')\n }\n\n public getStarterSelections(starters: IObservableStarter[]): boolean[][] {\n // starters parameter is not guaranteed to be ordered by starter number, e.g. ordered by win price\n const orderedStarters = [...starters].sort((a, b) => a.number() - b.number())\n\n const selections = SameRaceMultiValidator.getSelectionsFromStarters(orderedStarters)\n return selections.map(s => s.map(x => x == 1))\n }\n\n // this method is NOT required for SRM.. arguably it shouldn't exist on ISelectionProcessor\n public processFieldSelection(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _starters: ko.ObservableArray,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _selections: ko.ObservableArray,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _bettingContext: BettingInformation,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _index: number,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _selected: boolean\n ) {\n // this method is not required.. potentially shouldn't belong to the interface?\n }\n\n // this method is NOT required for SRM.. arguably it shouldn't exist on ISelectionProcessor\n public processSameAsSelection(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _starters: ko.ObservableArray,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _selections: ko.ObservableArray,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _bettingContext: BettingInformation,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _row: number,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _column: number,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _selected: boolean\n ) {\n // this method is not required.. potentially shouldn't belong to the interface?\n }\n\n public clearAllSelections(\n starters: ko.ObservableArray[],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _selections: ko.ObservableArray[]\n ) {\n // although SRM is a single race product, we still need to iterate over ALL the different races becauae the 'common' i/f caters for multi race products (e.g. allup)\n starters.forEach(starterArray =>\n starterArray().forEach(starter => this.removeOldSelection(starter, null))\n )\n // unless there's some edge case scenario we're trying to accommodate here.. we shouldn't need to explicitly clear the selections here as this is done automatically based on the starter selections\n // selections.forEach(selectionArray =>\n // selectionArray().forEach(selection => this.removeOldSelection(selection, null))\n // )\n }\n}\n","import { ISelectionResultProcessor } from '../../../../../classic/Betting-v2/Components/Core/SelectionResults/ISelectionResultProcessor'\nimport { ISelectionResult } from '../../../../../classic/Betting-v2/Components/Core/SelectionResults/ISelectionResult'\nimport ObservableSelectedRaceStarters from '../../../../../classic/Betting-v2/Model/Observables/ObservableSelectedRaceStarters'\nimport { BettingInformation } from '../../../../../classic/Betting-v2/Model/BettingInformation'\nimport { IObservableStarter } from '../../../../../classic/Betting-v2/Model/Observables/IObservableStarter'\nimport * as buttons from '../../../../../classic/Betting-v2/Components/Core/UIElements/ButtonsSelection'\nimport { ButtonSelectionType } from '../../../../../classic/Betting-v2/Components/Core/UIElements/ButtonSelectionType'\n\nexport default class SameRaceMultiSelectionResultProcessor implements ISelectionResultProcessor {\n selections(\n _bettingContext: BettingInformation,\n raceNumber: number,\n selectedRaceStarters: ObservableSelectedRaceStarters\n ): ISelectionResult {\n // return an object that implements ISelectionResult for compatibility with the contract (specifically Tote) for consumption by BetSelectionBuilder\n const selectedStarters = selectedRaceStarters.getStartersForRace(raceNumber)()\n const fobSelectionResults = selectedStarters.map(this.toSameRaceMultiSelectionResultLeg)\n\n return {\n fobSelectionResults,\n selectionStrings: [], // n/a for SRM\n } as SameRaceMultiSelectionResult\n }\n\n getSelectionsResult(bettingContext: BettingInformation, raceNumber: number): ISelectionResult {\n return this.selections(bettingContext, raceNumber, bettingContext.selections)\n }\n\n private toSameRaceMultiSelectionResultLeg(starter: IObservableStarter) {\n return {\n starterNumber: starter.number(),\n legNumber: (starter.selection() as buttons.ButtonsSelection)\n .values()\n .map(e => e())\n .indexOf(ButtonSelectionType.Fob),\n } as SameRaceMultiSelectionResultLeg\n }\n}\n\nexport interface SameRaceMultiSelectionResult extends ISelectionResult {\n fobSelectionResults: SameRaceMultiSelectionResultLeg[]\n selectionStrings: string[]\n}\n\ninterface SameRaceMultiSelectionResultLeg {\n starterNumber: number\n legNumber: number // 0 - 3\n}\n","import { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport type { IConfigureBetType } from '@classic/Betting-v2/Model/Configuration/IConfigureBetType'\nimport BetTypeInformation from '@classic/Betting-v2/Model/Betting/BetTypeInformation'\nimport SameRaceMultiSelectionProcessor from './SameRaceMultiSelectionProcessor'\nimport SameRaceMultiValidator from './SameRaceMultiValidator'\nimport SameRaceMultiSelectionResultProcessor from './SameRaceMultiSelectionResultProcessor'\n\nexport default class SameRaceMultiConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.SameRaceMulti,\n name: 'Same Race Multi',\n\n legs: 4,\n sortOptions: ['Number', 'SameRaceMultiWinPrice'],\n\n template: 'same-race-multi-template',\n\n // rendering buttons: refer selection.tpl.. SameRaceMultiButtons.tsx\n betSelectionTemplate: 'same-race-multi-buttons-selection-template',\n\n // process button selection.. invoking validator\n processor: new SameRaceMultiSelectionProcessor(),\n\n // validate button selection.. invoked by Processor (during button press) and SelectionViewModel (to show/hide bet drawer)\n validator: new SameRaceMultiValidator(),\n\n // retrieve selection details required for betting, e.g. quickbet\n selectionResultProcessor: new SameRaceMultiSelectionResultProcessor(),\n\n // n/a 'tote style' product properties\n supportsFlexi: false,\n multiBet: false,\n multiSelections: false,\n checkBoxCount: 0,\n fieldCheckBoxCount: 0,\n sameAsCheckBoxCount: 0,\n })\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport { ICheckBoxValidatorProcessorPipeline } from './ICheckBoxValidatorProcessorPipeline'\nimport CheckBoxValidatorProcessorPipeline from './CheckBoxValidatorProcessorPipeline'\n\nexport default class ExactaValidator implements IBetTypeValidator {\n constructor() {\n this.pipeline = new CheckBoxValidatorProcessorPipeline()\n }\n\n isValid(bettingContext: BettingInformation): boolean {\n return this.pipeline.validate(2, bettingContext)\n }\n\n private pipeline: ICheckBoxValidatorProcessorPipeline\n}\n","import CheckBoxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport ExactaValidator from '@classic/Betting-v2/Validation/ExactaValidator'\nimport CheckBoxSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResultProcessor'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\nimport type { IConfigureBetType } from './IConfigureBetType'\n\nexport default class ExactaConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Exacta,\n name: 'Exacta',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'exacta-template',\n betSelectionTemplate: 'dual-checkbox-selection-template',\n multiBet: false,\n multiSelections: true,\n checkBoxCount: 2,\n fieldCheckBoxCount: 2,\n sameAsCheckBoxCount: 1,\n processor: new CheckBoxSelectionProcessor(2),\n selectionResultProcessor: new CheckBoxSelectionResultProcessor(2),\n validator: new ExactaValidator(),\n legs: 1,\n })\n }\n}\n","import { BettingInformation } from '../Model/BettingInformation'\nimport { IBetTypeValidator } from './IBetTypeValidator'\nimport { CheckBoxSelection } from '../Components/Core/UIElements/CheckboxSelection'\nimport Guard from '../../AppUtils/Framework/Guard'\n\nexport default class QuinellaValidator implements IBetTypeValidator {\n isValid(bettingContext: BettingInformation): boolean {\n Guard.notNull(bettingContext)\n try {\n const selections = bettingContext.selections\n\n if (\n !selections ||\n selections.getTotalNumberOfStartersForRace(bettingContext.raceNumber) === 0\n ) {\n return false\n }\n\n const checkboxes = selections\n .getStartersForRace(bettingContext.raceNumber)()\n .filter(starter => starter && typeof starter.selection === 'function')\n .map(starter => starter.selection() as CheckBoxSelection)\n\n if (!bettingContext.isLegIn()) {\n if (checkboxes.some(cb => cb.anySelected() && !cb.onlyFirstSelected())) {\n return false\n }\n\n const selectedCount = checkboxes.filter(cb => cb.anySelected()).length\n return (\n selectedCount >= 2 &&\n selectedCount <= selections.getTotalNumberOfStartersForRace(bettingContext.raceNumber)\n )\n }\n\n if (bettingContext.isLegIn()) {\n const numLegIns = checkboxes.filter(checkBoxes => checkBoxes.selectedAt(0)).length,\n numWiths = checkboxes.filter(checkBoxes => checkBoxes.selectedAt(1)).length\n\n if (numLegIns !== 1) {\n return false\n }\n\n return numWiths >= 2\n }\n\n return false\n } catch {\n return false\n }\n }\n}\n","import CheckboxSelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/CheckboxSelectionProcessor'\nimport QuinellaValidator from '@classic/Betting-v2/Validation/QuinellaValidator'\nimport CheckBoxSelectionResultProcessor from '@classic/Betting-v2/Components/Core/SelectionResults/CheckBoxSelectionResultProcessor'\nimport type { IConfigureBetType } from './IConfigureBetType'\nimport { BetType } from '../Betting/BetType'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\n\nexport default class QuinellaConfigurator implements IConfigureBetType {\n build(): BetTypeInformation {\n return new BetTypeInformation({\n betType: BetType.Quinella,\n name: 'Quinella',\n supportsFlexi: true,\n sortOptions: ['Number', 'FixedPrice', 'Price'],\n template: 'quinella-template',\n betSelectionTemplate: 'dual-checkbox-selection-template',\n multiBet: false,\n multiSelections: true,\n checkBoxCount: 1,\n fieldCheckBoxCount: 1,\n sameAsCheckBoxCount: 0,\n processor: new CheckboxSelectionProcessor(1),\n validator: new QuinellaValidator(),\n selectionResultProcessor: new CheckBoxSelectionResultProcessor(2),\n legs: 1,\n })\n }\n}\n","import { IConfigureBetType } from '../Configuration/IConfigureBetType'\nimport WinPlaceConfigurator from '../Configuration/WinPlaceConfigurator'\nimport TrifectaConfigurator from '../Configuration/TrifectaConfigurator'\nimport MysteryConfigurator from '../Configuration/MysteryConfigurator'\nimport AllUpConfigurator from '../Configuration/AllUpConfigurator'\nimport QuaddieConfigurator from '../Configuration/QuaddieConfigurator'\nimport DoubleConfigurator from '../Configuration/DoubleConfigurator'\nimport FirstFourConfigurator from '../Configuration/FirstFourConfigurator'\nimport SameRaceMultiConfigurator from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiConfigurator'\nimport ExactaConfigurator from '../Configuration/ExactaConfigurator'\nimport QuinellaConfigurator from '../Configuration/QuinellaConfigurator'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default {\n fromUnTyped(betType: string): IConfigureBetType {\n Guard.stringNotNullOrEmpty(betType)\n\n switch (betType) {\n case 'WinPlace':\n return new WinPlaceConfigurator()\n case 'Trifecta':\n return new TrifectaConfigurator()\n case 'Mystery':\n return new MysteryConfigurator()\n case 'AllUp':\n return new AllUpConfigurator()\n case 'Quaddie':\n return new QuaddieConfigurator()\n case 'Double':\n return new DoubleConfigurator()\n case 'First4':\n return new FirstFourConfigurator()\n case 'SameRaceMulti':\n return new SameRaceMultiConfigurator()\n case 'Exacta':\n return new ExactaConfigurator()\n case 'Quinella':\n return new QuinellaConfigurator()\n default:\n throw {}\n }\n },\n}\n","import { last } from '@mobi/utils'\nimport * as ko from 'knockout'\nimport AllUpFormulasDataTransferObject from '../DataTransferObjects/AllUpFormulasDataTransferObject'\n\nexport class Formula {\n constructor(\n public name: ko.Observable,\n public number: ko.Observable,\n public numberOfCombinations: ko.Observable,\n public isSelected: ko.Observable\n ) {}\n\n public toggleSelection() {\n this.isSelected(!this.isSelected())\n }\n}\n\nexport class AllUpFormulas {\n public formulas: ko.ObservableArray\n\n constructor() {\n this.formulas = ko.observableArray([])\n }\n\n public assignFormulas(allUpFormulasDto?: AllUpFormulasDataTransferObject): void {\n if (allUpFormulasDto === undefined) return\n\n const newFormulas = this.getFormulas(allUpFormulasDto)\n\n //update existing\n this.updateFormulas(newFormulas)\n\n if (newFormulas.length > this.formulas().length) {\n //deselect last (defualt) formula from old list if only last (default) is selected\n this.deselectDefaultFormula(this.formulas())\n //add new formulas\n this.addNewFormulas(newFormulas)\n //select last (default) formula if none selected\n this.selectDefaultFormula(this.formulas())\n } else if (newFormulas.length < this.formulas().length) {\n this.removeOldFormulas(newFormulas)\n //select last (default) formula if none selected\n this.selectDefaultFormula(this.formulas())\n }\n }\n\n private selectDefaultFormula(formulas: Formula[]): void {\n if (formulas != null) {\n //select last (default) formula if not selected\n const lastFormula = last(formulas) || null\n if (lastFormula != null && !lastFormula.isSelected()) {\n lastFormula.isSelected(true)\n }\n }\n }\n\n private deselectDefaultFormula(formulas: Formula[]): void {\n if (formulas != null) {\n //deselect last (defualt) formula from list if it is selected\n const lastFormula = last(formulas) || null\n if (lastFormula != null && lastFormula.isSelected()) {\n lastFormula.isSelected(false)\n }\n }\n }\n\n private getFormulas(allUpFormulasDto: AllUpFormulasDataTransferObject): Formula[] {\n const formulas: Formula[] = []\n if (allUpFormulasDto.SingleCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Singles'),\n ko.observable(1),\n ko.observable(allUpFormulasDto.SingleCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n if (allUpFormulasDto.DoubleCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Doubles'),\n ko.observable(2),\n ko.observable(allUpFormulasDto.DoubleCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n if (allUpFormulasDto.TrebleCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Trebles'),\n ko.observable(3),\n ko.observable(allUpFormulasDto.TrebleCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n if (allUpFormulasDto.FoursCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Pick 4'),\n ko.observable(4),\n ko.observable(allUpFormulasDto.FoursCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n if (allUpFormulasDto.FivesCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Pick 5'),\n ko.observable(5),\n ko.observable(allUpFormulasDto.FivesCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n if (allUpFormulasDto.SixCombinations > 0) {\n formulas.push(\n new Formula(\n ko.observable('Pick 6'),\n ko.observable(6),\n ko.observable(allUpFormulasDto.SixCombinations),\n ko.observable(false) as ko.Observable\n )\n )\n }\n\n return formulas\n }\n\n private updateFormulas(newFormulas: Formula[]): void {\n newFormulas.forEach(newFormula => {\n this.formulas().forEach(oldFormula => {\n if (newFormula.number() === oldFormula.number()) {\n oldFormula.numberOfCombinations(newFormula.numberOfCombinations())\n }\n })\n })\n }\n\n private addNewFormulas(newFormulas: Formula[]): void {\n newFormulas.forEach(newFormula => {\n const alreadyExists = this.formulas().some(\n (oldFormula: Formula) => oldFormula.number() === newFormula.number()\n )\n if (!alreadyExists) {\n this.formulas.push(newFormula)\n }\n })\n }\n\n private removeOldFormulas(newFormulas: Formula[]): void {\n const needsRemovingFormulaNumbers: number[] = []\n this.formulas().forEach(oldFormula => {\n const alreadyExists = newFormulas.some(\n (newFormula: Formula) => newFormula.number() === oldFormula.number()\n )\n if (!alreadyExists) {\n needsRemovingFormulaNumbers.push(oldFormula.number())\n }\n })\n needsRemovingFormulaNumbers.forEach(oldFormulaNumber => {\n this.formulas.remove(f => {\n return f.number() === oldFormulaNumber\n })\n })\n }\n}\n","import * as ko from 'knockout'\n\nexport class InvestmentAmountModel {\n constructor(amount: number, min: number, max: number, step: number, title: string) {\n this.title = ko.observable(title)\n this.amount = ko.observable(amount.toString())\n this.step = ko.observable(step)\n this.min = min\n this.max = max\n this.numberCombinations = ko.observable(0)\n this.supportFlexi = ko.observable(false)\n }\n\n public min: number\n public max: number\n public amount: ko.Observable\n public step: ko.Observable\n public title: ko.Observable\n public numberCombinations: ko.Observable\n public supportFlexi: ko.Observable\n}\n","import * as ko from 'knockout'\n\nexport default class SameAs {\n constructor(\n public count: number,\n public row: number,\n public column: number\n ) {\n this.selected = ko.observable(false)\n }\n\n public enable() {\n this.selected(true)\n }\n\n public disable() {\n this.selected(false)\n }\n\n public toggle() {\n this.selected(!this.selected())\n }\n\n public selected: ko.Observable\n}\n","/* eslint-disable @typescript-eslint/prefer-for-of */\nimport * as ko from 'knockout'\nimport { range } from '@mobi/utils'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport type { ISelectionResult } from '../Components/Core/SelectionResults/ISelectionResult'\nimport type { IObservableStarter } from './Observables/IObservableStarter'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport { persistedSortOption } from '@classic/Betting-v2/Sorting/PersistedSorting'\nimport ObservableMeetingInformation from './Observables/ObservableMeetingInformation'\nimport ObservableSelectedRaceStarters from './Observables/ObservableSelectedRaceStarters'\nimport ObservableRaceKey from './Observables/ObservableRaceKey'\nimport BetTypeInformationBuilder from './Betting/BetTypeInformationBuilder'\nimport BetTypeInformation from './Betting/BetTypeInformation'\nimport { BetType } from './Betting/BetType'\nimport { AllUpFormulas } from './AllUpFormulas'\nimport { InvestmentAmountModel } from './InvestmentAmountModel'\nimport SameAs from './SameAs'\n\nexport class BettingInformation {\n public allUpFormulas: AllUpFormulas\n public betIdentifier?: string\n public field: ko.ObservableArray>\n public fixedPlacesPaying?: number\n public investment1: InvestmentAmountModel\n public investment2: InvestmentAmountModel\n public isBoxed: ko.Observable\n public isFixed: ko.Observable\n public isLegIn: ko.Observable\n public lastSelectionBetType: ko.Observable\n public legVisible: ko.Observable\n public meetingDate: Date\n public meetingId: string\n public meetingInformation: ObservableMeetingInformation | null\n public mergeDone: ko.Observable\n public numberOfCombinations: number\n public raceNumber: number\n public responseContent: string\n public rovingBanker: ko.Observable\n public rovingBankersSelected: ko.Observable\n public sameAs: SameAs[][]\n public selectedBetType: ko.Observable\n public selectedSpecial: BetSpecialOffer | null\n public selections: ObservableSelectedRaceStarters // starter selections across all races belonging to a specific fixture\n public sortOption: SortOption\n public specialOffers: BetSpecialOffer[]\n private minimumNumberOfFieldsRequired\n\n constructor(\n meetingId: string,\n raceNumber: number,\n meetingDate: Date,\n lastSelectedBetType: ko.Observable,\n betIdentifier?: string,\n fixedPlacesPaying?: number\n ) {\n this.mergeDone = ko.observable(false).extend({ notify: 'always' })\n\n this.allUpFormulas = new AllUpFormulas()\n this.betIdentifier = betIdentifier != null ? betIdentifier : ''\n this.field = ko.observableArray>([])\n this.fixedPlacesPaying = fixedPlacesPaying != null ? fixedPlacesPaying : 0\n this.investment1 = new InvestmentAmountModel(0.0, 0.0, 99999.5, 0.5, 'Win')\n this.investment2 = new InvestmentAmountModel(0.0, 0.0, 99999.5, 0.5, 'Place')\n this.isBoxed = ko.observable(false)\n this.isFixed = ko.observable(false)\n this.isLegIn = ko.observable(false)\n this.lastSelectionBetType = lastSelectedBetType\n this.legVisible = ko.observable(null)\n this.meetingDate = meetingDate\n this.meetingId = meetingId\n this.meetingInformation = null\n this.numberOfCombinations = 0\n this.raceNumber = raceNumber\n this.responseContent = ''\n this.rovingBanker = ko.observable(false)\n this.rovingBankersSelected = ko.observable(0)\n this.sameAs = []\n this.selectedBetType = ko.observable(\n BetTypeInformationBuilder.fromUnTyped(\n BetType[lastSelectedBetType() || BetType.WinPlace]\n ).build()\n )\n this.selectedSpecial = null\n this.selections = new ObservableSelectedRaceStarters()\n this.sizeSameAsToBetType()\n this.sortOption = persistedSortOption\n this.specialOffers = []\n\n this.minimumNumberOfFieldsRequired = 4\n\n this.mergeDone(true)\n }\n\n public merge(\n meetingId: string,\n raceNumber: number,\n meetingDate: Date,\n betIdentifier?: string,\n fixedPlacesPaying?: number\n ) {\n this.meetingId = meetingId\n this.meetingDate = meetingDate\n this.raceNumber = raceNumber\n this.betIdentifier = betIdentifier\n this.fixedPlacesPaying = fixedPlacesPaying\n }\n\n public setSortOption({ property, direction }: SortOption) {\n this.sortOption.property = property\n this.sortOption.direction = direction\n }\n\n public isAllwaysBet(): boolean {\n if (this.isBoxed()) return true\n\n if (this.selectedBetType().multiBet()) return false\n if (\n (this.selectedBetType().isExacta() ||\n this.selectedBetType().isTrifecta() ||\n this.selectedBetType().isFirst4()) &&\n this.selections.onlyFirstLegHasSelections(this.raceNumber)\n ) {\n return true\n }\n\n let checkboxDefaultCount = this.selectedBetType().checkBoxCount()\n //Quinella has 1 as checkbox count as default but if LegIn selected than it should be 2.\n if (this.selectedBetType().isQuinella() && this.isLegIn()) {\n checkboxDefaultCount++\n }\n\n return this.selections.isAlwaysBet(this.raceNumber, checkboxDefaultCount)\n }\n\n public checkForAllwaysBet(): boolean {\n return (\n (this.selectedBetType().betType() === BetType.Trifecta ||\n this.selectedBetType().betType() === BetType.First4 ||\n this.selectedBetType().betType() === BetType.Exacta) &&\n !this.isBoxed() &&\n !this.rovingBanker()\n )\n }\n\n public clearAll() {\n this.clearFieldSelections()\n this.resetSameAsSelections()\n this.rovingBanker(false)\n this.rovingBankersSelected(0)\n this.isLegIn(false)\n this.isBoxed(false)\n this.selectedSpecial = null\n this.specialOffers = []\n }\n\n public turnOffAllSelections() {\n this.turnOffAllFields()\n this.turnOffAllSameAsSelections()\n this.rovingBanker(false)\n this.rovingBankersSelected(0)\n this.isLegIn(false)\n this.isBoxed(false)\n this.selections.clearAll()\n }\n\n public toggleRovingBanker() {\n this.isBoxed(false)\n this.isLegIn(false)\n this.clearFieldIfNoRovingBanker()\n this.turnOffAllSameAsSelections()\n this.rovingBankersSelected(0)\n this.rovingBanker(!this.rovingBanker())\n }\n\n public toggleLegIn() {\n this.isBoxed(false)\n this.rovingBanker(false)\n this.rovingBankersSelected(0)\n this.turnOffFieldAt(0)\n this.turnOffAllSameAsSelections()\n this.isLegIn(!this.isLegIn())\n }\n\n public toggleBoxed() {\n this.turnOffAllSameAsSelections()\n if (this.isBoxed() || this.isLegIn() || this.rovingBanker()) {\n this.turnOffAllFields()\n } else {\n if (this.fieldSelectedAtAnyIndex()) {\n this.turnOffAllFields()\n this.toggleFieldAt(0)\n }\n }\n\n this.rovingBanker(false)\n this.rovingBankersSelected(0)\n this.isLegIn(false)\n\n this.isBoxed(!this.isBoxed())\n }\n\n public setUpFields() {\n let size = this.selections.legCount()\n\n if (size < this.minimumNumberOfFieldsRequired) {\n size = this.minimumNumberOfFieldsRequired\n }\n\n this.field(range(size).map((): ko.Observable => ko.observable(false)))\n }\n\n public clearFieldSelections() {\n this.field([])\n }\n\n public resetSameAsSelections() {\n this.sameAs = []\n }\n\n private turnOffAllSameAsSelections() {\n this.sameAs.flat().forEach(sameAs => sameAs.selected(false))\n }\n\n public clearFieldIfNoRovingBanker() {\n if (this.rovingBankersSelected() === 0) {\n this.turnOffAllFields()\n }\n }\n\n public turnOffAllFields() {\n this.field().forEach(field => {\n field(false)\n })\n }\n\n public turnOffFieldAt(index: number) {\n Guard.greaterThanOrEqualZero(index)\n this.field()[index](false)\n }\n\n public bettingOptionsSelected(): boolean {\n return this.fieldSelectedAtAnyIndex()\n }\n\n public checkBoxOptionsSelected(): boolean {\n return this.rovingBanker() || this.isLegIn() || this.isBoxed()\n }\n\n public sizeSameAsToBetType() {\n const size = this.selectedBetType().sameAsCheckBoxCount()\n\n if (size === 0) return\n\n this.sameAs = range(1, size + 1).map(row =>\n range(row + 1, size + 2).map(column => new SameAs(size, row, column))\n )\n }\n\n public fieldSelectedAtIndex(index: number): boolean {\n if (index < 0) return false\n\n if (index >= this.field().length) return false\n\n if (!this.field() || this.field().length === 0) return false\n\n return this.field()[index]()\n }\n\n public sameAsSelectedAtIndex(column: number): boolean {\n for (let i = 0; i < this.sameAs.length; ++i) {\n for (let j = 0; j < this.sameAs[i].length; ++j) {\n if (this.sameAs[i][j].column === column && this.sameAs[i][j].selected()) return true\n }\n }\n\n return false\n }\n\n public sameAsSelectedAtIndexString(column: number): number[] {\n const values = []\n\n for (let i = 0; i < this.sameAs.length; ++i) {\n for (let j = 0; j < this.sameAs[i].length; ++j) {\n if (this.sameAs[i][j].column === column && this.sameAs[i][j].selected())\n values.push(this.sameAs[i][j].row)\n }\n }\n\n return values\n }\n\n public getFieldAtIndex(index: number): ko.Observable {\n return this.field()[index]\n }\n\n public fieldSelectedAtAnyIndex(): boolean {\n if (!this.field() || this.field().length === 0) return false\n\n return this.field().some(selection => selection())\n }\n\n public sameAsSelectedAtAnyIndex(): boolean {\n if (!this.sameAs || this.sameAs.length === 0) return false\n\n return this.sameAs.flat().some(sameAs => sameAs.selected())\n }\n\n public toggleFieldAt(index: number) {\n Guard.greaterThanOrEqualZero(index)\n\n this.field()[index](!this.field()[index]())\n }\n\n public toggleSameAs(row: number, column: number) {\n if (!this.sameAs || this.sameAs.length === 0) {\n this.sizeSameAsToBetType()\n }\n\n this.getSameAtRowAndColumn(row, column).forEach(sameAs => {\n sameAs.selected(!sameAs.selected())\n })\n }\n\n public turnOffSameAs(row: number, column: number) {\n if (!this.sameAs || this.sameAs.length === 0) {\n this.sizeSameAsToBetType()\n }\n\n this.getSameAtRowAndColumn(row, column).forEach(sameAs => {\n sameAs.selected(false)\n })\n }\n\n public sameAsAt(row: number, column: number): SameAs | null {\n const sameAt = this.getSameAtRowAndColumn(row, column)[0]\n\n return sameAt ?? null\n }\n\n public turnOffSameAsForColumn(column: number) {\n if (!this.sameAs || this.sameAs.length === 0) {\n this.sizeSameAsToBetType()\n }\n\n this.getSameAtColumn(column).forEach(sameAs => {\n sameAs.selected(false)\n })\n }\n\n public turnOffAllwaysField() {\n this.turnOffFieldAt(0)\n }\n\n public turnOffRovingBankerField() {\n this.turnOffFieldAt(0)\n }\n\n public turnOffLegInField() {\n this.turnOffFieldAt(0)\n }\n\n public assignTotalRovingBankers(totalRovingBankers: number) {\n this.rovingBankersSelected(totalRovingBankers)\n }\n\n public assignMeetingInfo(meeting: ObservableMeetingInformation) {\n Guard.notNull(meeting)\n this.meetingInformation = meeting\n }\n\n public results(): ISelectionResult {\n return this.selectedBetType().selectionStringProcessor.selections(\n this,\n this.raceNumber,\n this.selections\n )\n }\n\n public getLegsForProcessing(): {\n raceKey: ko.Observable\n starters: ko.ObservableArray\n }[] {\n return this.selections.selections().filter(selection => {\n return selection.starters().length > 0\n })\n }\n\n public resultsForLeg(leg: number): ISelectionResult {\n return this.selectedBetType().selectionStringProcessor.selections(\n this,\n this.selections.getRaceNumberForLeg(leg),\n this.selections\n )\n }\n\n public updateSelectionsForCurrentRace(updatedStarters: IObservableStarter[]): void {\n this.selections.updateSelectionForRace(this.raceNumber, updatedStarters)\n }\n\n private getSameAtRowAndColumn(row: number, column: number): SameAs[] {\n return this.sameAs.flat().filter(sameAs => sameAs.row === row && sameAs.column === column)\n }\n\n private getSameAtColumn(column: number): SameAs[] {\n return this.sameAs.flat().filter(sameAs => sameAs.column === column)\n }\n}\n","import * as ko from 'knockout'\nimport type { BetTypeDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/DataTransferObjects'\nimport { IObservableStarter } from './IObservableStarter'\nimport ObservableRaceStarters from './ObservableRaceStarters'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport ObservableRaceKey from './ObservableRaceKey'\nimport ObservablePage from './ObservablePage'\nimport { BettingInformation } from '../BettingInformation'\nimport BetTypeInformation from '../Betting/BetTypeInformation'\nimport BetTypeInformationBuilder from '../Betting/BetTypeInformationBuilder'\nimport { BetType } from '../Betting/BetType'\nimport { timed } from '@core/Utils'\n\nexport default class ObservableRacePage extends ObservablePage {\n public raceStarters: ObservableRaceStarters\n public availableBetTypes: ko.ObservableArray\n public betIdentifier: string\n public giddyUpRaceKey: ko.Observable\n public giddyUpFixtureKey: ko.Observable\n\n constructor() {\n super()\n this.raceStarters = new ObservableRaceStarters()\n this.availableBetTypes = ko.observableArray()\n this.betIdentifier = ''\n // @ts-expect-error Type issue\n this.giddyUpRaceKey = ko.observable()\n // @ts-expect-error Type issue\n this.giddyUpFixtureKey = ko.observable()\n }\n\n addBetType(betType: BetTypeDataTransferObject) {\n Guard.notNull(betType)\n Guard.stringNotNullOrEmpty(betType.Type)\n const mappedBetType = BetTypeInformationBuilder.fromUnTyped(betType.Type).build()\n if (betType.IsAbandoned) {\n mappedBetType.isAbandoned(betType.IsAbandoned)\n mappedBetType.displayText(mappedBetType.displayText() + ' - Abandoned')\n }\n this.availableBetTypes.push(mappedBetType)\n }\n\n addStartersForRace(raceKey: ObservableRaceKey, starters: IObservableStarter[]) {\n Guard.notNull(raceKey)\n Guard.notNull(starters)\n\n this.raceStarters.addStartersForRace(raceKey, starters)\n }\n\n mergeStartersForRace(raceNumber: number, starters: IObservableStarter[]) {\n Guard.greaterThanZero(raceNumber)\n Guard.notNull(starters)\n\n const raceKey = this.getRaceKeyForRaceNumber(raceNumber)\n\n if (raceKey) {\n this.mergeStartersForRaceKey(raceKey, starters)\n }\n }\n\n mergeStartersForRaceKey(raceKey: ObservableRaceKey, starters: IObservableStarter[]) {\n Guard.notNull(raceKey)\n Guard.greaterThanZero(raceKey.raceNumber())\n Guard.notNull(starters)\n\n this.raceStarters.mergeStartersForRace(raceKey, starters)\n }\n\n getStartersForRace(raceNumber: number): ko.ObservableArray {\n return (\n this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.raceNumber() === raceNumber)\n .map(keyValue => keyValue.Value)[0] ?? ko.observableArray()\n )\n }\n\n getAllStarters(): ko.ObservableArray[] {\n const results = this.raceStarters.starters().map(starter => starter.Value)\n if (results === null) return [ko.observableArray([])]\n return results\n }\n\n getStartersForLeg(legNumber: number): ko.ObservableArray {\n return (\n this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.leg() === legNumber)\n .map(keyValue => keyValue.Value)[0] ?? ko.observableArray()\n )\n }\n\n resetStartersSelections() {\n timed('ObservableRacePage::resetStartersSelections', () => {\n this.raceStarters.clearOutStarterSelections()\n })\n }\n\n getRaceKeyForRaceNumber(raceNumber: number): ObservableRaceKey | undefined {\n return this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.raceNumber() === raceNumber)\n .map(keyValue => keyValue.Key)[0]\n }\n\n getRaceKeyForLeg(legNumber: number): ObservableRaceKey | undefined {\n return this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.leg() === legNumber)\n .map(keyValue => keyValue.Key)[0]\n }\n\n getRaceNumbers(): ObservableRaceKey[] {\n return this.raceStarters.getRaceNumbers()\n }\n\n getDoubleRaceNumbers(): number[] {\n return this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.isDoubleLeg() && keyValue.Value().length > 0)\n .map(keyValue => keyValue.Key.raceNumber())\n }\n\n getQuaddieRaceNumbers(): number[] {\n return this.raceStarters\n .starters()\n .filter(keyValue => keyValue.Key.isQuaddieLeg() && keyValue.Value().length > 0)\n .map(keyValue => keyValue.Key.raceNumber())\n }\n\n public provisionBettingInformation(\n lastSelectedBetType: ko.Observable\n ): BettingInformation {\n return new BettingInformation(\n this.meetingInformation.meetingId(),\n this.meetingInformation.selectedRace.raceNumber(),\n this.meetingInformation.meetingDate(),\n lastSelectedBetType,\n this.betIdentifier,\n this.meetingInformation.selectedRace.fixedPlacesPaying()\n )\n }\n\n public merge(other: ObservableRacePage, forceClear?: boolean) {\n Guard.notNull(other)\n this.mergeDone(false)\n super.merge(other)\n\n this.betIdentifier = other.betIdentifier\n this.raceStarters.merge(other.raceStarters, forceClear)\n this.availableBetTypes(other.availableBetTypes())\n this.giddyUpRaceKey(other.giddyUpRaceKey())\n this.giddyUpFixtureKey(other.giddyUpFixtureKey())\n this.hasDoubleProvDivs(other.hasDoubleProvDivs())\n this.hasQuaddieProvDivs(other.hasQuaddieProvDivs())\n this.mergeDone(true)\n }\n}\n","export enum RacePageResponseType {\n Starters,\n Results,\n}\n","import * as ko from 'knockout'\nimport { IObservableFinisher } from './IObservableFinisher'\n\nexport default class ObservableRaceFinishers {\n constructor() {\n this.finishers = ko.observableArray([])\n }\n\n public addFinishersForRace(finisher: IObservableFinisher) {\n this.finishers.push(finisher)\n }\n\n public merge(other: ObservableRaceFinishers, forceClear?: boolean) {\n if (forceClear || this.finishers().length != other.finishers().length) {\n this.finishers(other.finishers())\n return\n }\n\n const otherFinishers = new Map()\n other.finishers().forEach(f => otherFinishers.set(f.number(), f))\n for (const finisher of this.finishers()) {\n finisher.untypedMerge(otherFinishers.get(finisher.number()) as IObservableFinisher)\n }\n }\n\n public getFinisher(finisherNumber: number) {\n const justWithFinisher = ko.utils.arrayFilter(\n this.finishers(),\n finisher => finisher.number() === finisherNumber\n )\n\n return justWithFinisher.length === 1 ? justWithFinisher[0] : null\n }\n\n public removeAll() {\n this.finishers([])\n }\n\n public finishers: ko.ObservableArray\n}\n","import * as ko from 'knockout'\n\nexport default class ObservableRaceReplay {\n constructor() {\n // @ts-expect-error Type issue\n this.hasVideo = ko.observable()\n // @ts-expect-error Type issue\n this.videoKey = ko.observable()\n // @ts-expect-error Type issue\n this.raceLocation = ko.observable()\n // @ts-expect-error Type issue\n this.date = ko.observable()\n }\n\n public merge(other: ObservableRaceReplay) {\n this.hasVideo(other.hasVideo())\n this.videoKey(other.videoKey())\n this.raceLocation(other.raceLocation())\n this.date(other.date())\n }\n\n public hasVideo: ko.Observable\n public videoKey: ko.Observable\n public raceLocation: ko.Observable\n public date: ko.Observable\n}\n","import * as ko from 'knockout'\nimport ObservablePage from './ObservablePage'\nimport ObservableRaceFinishers from './ObservableRaceFinishers'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableFinisher as ObservableFinisher } from './IObservableFinisher'\nimport ObservableSubstitutePool from './ObservableSubstitutePool'\nimport ObservableScratching from './ObservableScratching'\nimport NoveltyDividend from '../NoveltyDividend'\nimport ObservableRaceReplay from './ObservableRaceReplay'\n\nexport default class ObservableResultsPage extends ObservablePage {\n public raceNumber: ko.Observable\n public raceFinishers: ObservableRaceFinishers\n public simplePlacings: ko.Observable\n public raceStatus: ko.Observable\n public protestStatus: ko.Observable\n public noveltyDividends: ko.ObservableArray\n public availableSubstitutePools: ko.ObservableArray\n public availableScratchings: ko.ObservableArray\n public raceReplay: ObservableRaceReplay\n public giddyUpRaceKey: ko.Observable\n public giddyUpFixtureKey: ko.Observable\n\n constructor() {\n super()\n this.raceNumber = ko.observable()\n this.raceFinishers = new ObservableRaceFinishers()\n this.simplePlacings = ko.observable()\n this.raceStatus = ko.observable()\n this.protestStatus = ko.observable()\n this.noveltyDividends = ko.observableArray([])\n this.availableSubstitutePools = ko.observableArray([])\n this.availableScratchings = ko.observableArray([])\n this.raceReplay = new ObservableRaceReplay()\n this.giddyUpRaceKey = ko.observable()\n this.giddyUpFixtureKey = ko.observable()\n }\n\n public addFinisher(finisher: ObservableFinisher) {\n Guard.notNull(finisher)\n\n this.raceFinishers.addFinishersForRace(finisher)\n }\n\n public addNoveltyDividends(noveltyDividends: NoveltyDividend[]) {\n Guard.notNull(noveltyDividends)\n this.noveltyDividends(noveltyDividends)\n }\n\n public addSubstitutePool(subPool: ObservableSubstitutePool) {\n this.availableSubstitutePools.push(subPool)\n }\n\n public addScratching(scratching: ObservableScratching) {\n this.availableScratchings.push(scratching)\n }\n\n public merge(other: ObservableResultsPage, forceClear?: boolean) {\n Guard.notNull(other)\n this.mergeDone(false)\n\n super.merge(other)\n this.simplePlacings(other.simplePlacings())\n this.raceStatus(other.raceStatus())\n this.protestStatus(other.protestStatus())\n this.raceFinishers.merge(other.raceFinishers, !!forceClear)\n this.noveltyDividends(other.noveltyDividends())\n this.availableSubstitutePools(other.availableSubstitutePools())\n this.availableScratchings(other.availableScratchings())\n this.raceReplay.merge(other.raceReplay)\n this.giddyUpRaceKey(other.giddyUpRaceKey())\n this.giddyUpFixtureKey(other.giddyUpFixtureKey())\n this.mergeDone(true)\n }\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableFixedOddsFinisherInfo {\n constructor() {\n // @ts-expect-error Type issue\n this.isScratched = ko.observable()\n // @ts-expect-error Type issue\n this.isSuspended = ko.observable()\n // @ts-expect-error Type issue\n this.isFavourite = ko.observable()\n // @ts-expect-error Type issue\n this.scratchedTime = ko.observable()\n // @ts-expect-error Type issue\n this.winDiv = ko.observable()\n // @ts-expect-error Type issue\n this.placeDiv = ko.observable()\n // @ts-expect-error Type issue\n this.winDividendDeduction = ko.observable()\n // @ts-expect-error Type issue\n this.placeDividendDeduction = ko.observable()\n // @ts-expect-error Type issue\n this.displayWinDividend = ko.observable()\n // @ts-expect-error Type issue\n this.displayPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.shouldDisplayPlaceDividend = ko.observable()\n }\n\n public merge(other: ObservableFixedOddsFinisherInfo) {\n Guard.notNull(other)\n\n this.isScratched(other.isScratched())\n this.isSuspended(other.isSuspended())\n this.isFavourite(other.isFavourite())\n this.scratchedTime(other.scratchedTime())\n this.winDiv(other.winDiv())\n this.placeDiv(other.placeDiv())\n this.winDividendDeduction(other.winDividendDeduction())\n this.placeDividendDeduction(other.placeDividendDeduction())\n this.displayWinDividend(other.displayWinDividend())\n this.displayPlaceDividend(other.displayPlaceDividend())\n this.shouldDisplayPlaceDividend(other.shouldDisplayPlaceDividend())\n }\n\n public isScratched: ko.Observable\n public isSuspended: ko.Observable\n public isFavourite: ko.Observable\n public scratchedTime: ko.Observable\n public winDiv: ko.Observable\n public placeDiv: ko.Observable\n public winDividendDeduction: ko.Observable\n public placeDividendDeduction: ko.Observable\n public displayWinDividend: ko.Observable\n public displayPlaceDividend: ko.Observable\n public shouldDisplayPlaceDividend: ko.Observable\n}\n","import { IAppWindow } from '../../../AppUtils/Framework/WindowManagement/IAppWindow'\nimport { IObservableFinisher } from './IObservableFinisher'\nimport ObservableFixedOddsFinisherInfo from './ObservableFixedOddsFinisherInfo'\nimport * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { RaceTypes } from '../../Model/RaceTypes'\nimport { SilkImages, SilkImage } from '../SilkImages'\n\nexport abstract class ObservableFinisher implements IObservableFinisher {\n constructor() {\n // @ts-expect-error Type issue\n this.tag = ko.observable()\n // @ts-expect-error Type issue\n this.template = ko.observable()\n // @ts-expect-error Type issue\n this.number = ko.observable()\n // @ts-expect-error Type issue\n this.type = ko.observable()\n // @ts-expect-error Type issue\n this.name = ko.observable()\n // @ts-expect-error Type issue\n this.silkImages = ko.observable()\n // @ts-expect-error Type issue\n this.placing = ko.observable()\n // @ts-expect-error Type issue\n this.isFormAvailable = ko.observable()\n // @ts-expect-error Type issue\n this.isScratched = ko.observable()\n // @ts-expect-error Type issue\n this.hasFixedOdds = ko.observable()\n // @ts-expect-error Type issue\n this.isScratchedToteAndFob = ko.observable()\n // @ts-expect-error Type issue\n this.isFixedOddsStarter = ko.observable()\n // @ts-expect-error Type issue\n this.isFavourite = ko.observable()\n // @ts-expect-error Type issue\n this.starterPersonName = ko.observable()\n // @ts-expect-error Type issue\n this.trainerName = ko.observable()\n // @ts-expect-error Type issue\n this.isEmergency = ko.observable()\n // @ts-expect-error Type issue\n this.emergencyNum = ko.observable()\n // @ts-expect-error Type issue\n this.emres = ko.observable()\n // @ts-expect-error Type issue\n this.hasPlacePool = ko.observable()\n // @ts-expect-error Type issue\n this.scratchType = ko.observable()\n // @ts-expect-error Type issue\n this.isCountBack = ko.observable()\n // @ts-expect-error Type issue\n this.toteWinDiv = ko.observable()\n // @ts-expect-error Type issue\n this.totePlaceDiv = ko.observable()\n // @ts-expect-error Type issue\n this.toteWinProvDiv = ko.observable()\n // @ts-expect-error Type issue\n this.totePlaceProvDiv = ko.observable()\n // @ts-expect-error Type issue\n this.displayWinDividend = ko.observable()\n // @ts-expect-error Type issue\n this.displayPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.shouldDisplayPlaceDividend = ko.observable()\n // @ts-expect-error Type issue\n this.lastFour = ko.observable()\n this.fixedOddsFinisherInfo = new ObservableFixedOddsFinisherInfo()\n // @ts-expect-error Type issue\n this.rating = ko.observable()\n // @ts-expect-error Type issue\n this.isRiderChanged = ko.observable()\n // @ts-expect-error Type issue\n this.spWinPrice = ko.observable()\n }\n\n merge(other: ObservableFinisher) {\n Guard.notNull(other)\n\n this.tag(other.tag())\n this.template(other.template())\n this.number(other.number())\n this.type(other.type())\n this.name(other.name())\n this.silkImages(other.silkImages())\n this.placing(other.placing())\n this.isFormAvailable(other.isFormAvailable())\n this.isScratched(other.isScratched())\n this.hasFixedOdds(other.hasFixedOdds())\n this.isScratchedToteAndFob(other.isScratchedToteAndFob())\n this.isFixedOddsStarter(other.isFixedOddsStarter())\n this.isFavourite(other.isFavourite())\n this.starterPersonName(other.starterPersonName())\n this.trainerName(other.trainerName())\n this.isEmergency(other.isEmergency())\n this.emergencyNum(other.emergencyNum())\n this.hasPlacePool(other.hasPlacePool())\n this.scratchType(other.scratchType())\n this.isCountBack(other.isCountBack())\n this.toteWinDiv(other.toteWinDiv())\n this.totePlaceDiv(other.totePlaceDiv())\n this.toteWinProvDiv(other.toteWinProvDiv())\n this.totePlaceProvDiv(other.totePlaceProvDiv())\n this.displayWinDividend(other.displayWinDividend())\n this.displayPlaceDividend(other.displayPlaceDividend())\n this.shouldDisplayPlaceDividend(other.shouldDisplayPlaceDividend())\n this.lastFour(other.lastFour())\n this.fixedOddsFinisherInfo.merge(other.fixedOddsFinisherInfo)\n this.isRiderChanged(other.isRiderChanged())\n this.rating(other.rating())\n this.spWinPrice(other.spWinPrice())\n\n this.computeEmRes()\n }\n\n public untypedMerge(other: IObservableFinisher) {\n this.merge(other as ObservableFinisher)\n }\n\n public getSilkImage(appWindow: IAppWindow): SilkImage {\n if (this.silkImages()) {\n return this.silkImages().getSilkImageFor(appWindow.innerWidth())\n }\n return new SilkImage()\n }\n\n public computeEmRes() {\n let emres = ''\n\n if (this.emergencyNum()) {\n switch (this.type()) {\n case RaceTypes[RaceTypes.Races]:\n case RaceTypes[RaceTypes.Trots]:\n emres = '(EM' + this.emergencyNum() + ')'\n break\n\n case RaceTypes[RaceTypes.Dogs]:\n emres = '(RES' + this.emergencyNum() + ')'\n break\n\n default:\n emres = '(UNKNOWN)'\n }\n }\n\n this.emres(emres)\n }\n\n public tag: ko.Observable\n public template: ko.Observable\n public number: ko.Observable\n public type: ko.Observable\n public name: ko.Observable\n public silkImages: ko.Observable\n public placing: ko.Observable\n public isFormAvailable: ko.Observable\n public isScratched: ko.Observable\n public hasFixedOdds: ko.Observable\n public isScratchedToteAndFob: ko.Observable\n public isFixedOddsStarter: ko.Observable\n public isFavourite: ko.Observable\n public starterPersonName: ko.Observable\n public trainerName: ko.Observable\n public isEmergency: ko.Observable\n public emergencyNum: ko.Observable\n public emres: ko.Observable\n public hasPlacePool: ko.Observable\n public scratchType: ko.Observable\n public isCountBack: ko.Observable\n public toteWinDiv: ko.Observable\n public totePlaceDiv: ko.Observable\n public toteWinProvDiv: ko.Observable\n public totePlaceProvDiv: ko.Observable\n public displayWinDividend: ko.Observable\n public displayPlaceDividend: ko.Observable\n public shouldDisplayPlaceDividend: ko.Observable\n public lastFour: ko.Observable\n public fixedOddsFinisherInfo: ObservableFixedOddsFinisherInfo\n public rating: ko.Observable\n public isRiderChanged: ko.Observable\n public spWinPrice: ko.Observable\n}\n","import { ObservableFinisher } from './ObservableFinisher'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport * as ko from 'knockout'\nimport { IObservableFinisher } from './IObservableFinisher'\n\nexport default class ObservableRaceFinisher extends ObservableFinisher {\n constructor() {\n super()\n\n this.jockeyWeight = ko.observable()\n this.barrier = ko.observable()\n }\n\n public merge(other: ObservableRaceFinisher) {\n Guard.notNull(other)\n super.merge(other)\n\n this.jockeyWeight(other.jockeyWeight())\n this.barrier(other.barrier())\n }\n\n public untypedMerge(other: IObservableFinisher) {\n this.merge(other as ObservableRaceFinisher)\n }\n\n public jockeyWeight: ko.Observable\n public barrier: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { ObservableFinisher } from '../Model/Observables/ObservableFinisher'\nimport { IFinisherCodeBuilder } from './IFinisherCodeBuilder'\nimport MissingStarterException from '../Exceptions/MissingStarterException'\nimport { IObservableFinisher } from '../Model/Observables/IObservableFinisher'\nimport SilkImageMapper from '../Mapping/SilkImageMapper'\n\nexport abstract class BaseFinisherCodeBuilder implements IFinisherCodeBuilder {\n addBaseInformation(\n model: ObservableFinisher,\n dto: dtos.FinisherDataTransferObject\n ): ObservableFinisher {\n if (!dto) throw new MissingStarterException('Missing data for an individual starter')\n\n model.type(dto.Type)\n model.name(dto.Name)\n model.number(dto.Number)\n model.placing(dto.Placing)\n model.isFixedOddsStarter(dto.IsFixedOddsStarter)\n model.starterPersonName(dto.StarterPersonName)\n model.trainerName(dto.TrainerName || '')\n model.isCountBack(dto.IsCountBack)\n model.toteWinDiv(dto.ToteWinDiv)\n model.totePlaceDiv(dto.TotePlaceDiv)\n model.toteWinProvDiv(dto.ToteWinProvDiv)\n model.totePlaceProvDiv(dto.TotePlaceProvDiv)\n model.displayPlaceDividend(dto.DisplayPlaceDividend)\n model.shouldDisplayPlaceDividend(dto.ShouldDisplayPlaceDividend)\n model.displayWinDividend(dto.DisplayWinDividend)\n model.hasPlacePool(dto.HasPlacePool)\n model.isScratched(dto.IsScratched)\n model.isScratchedToteAndFob(dto.IsScratchedToteAndFob)\n model.isFavourite(dto.IsFavourite)\n model.isEmergency(dto.IsEmergency)\n model.scratchType(dto.ScratchType)\n model.lastFour(dto.LastFour)\n model.isEmergency(dto.IsEmergency)\n model.emergencyNum(dto.EmergencyNumber)\n model.hasFixedOdds(dto.HasFixedOdds)\n model.rating(dto.Rating)\n model.isRiderChanged(dto.IsRiderChanged)\n model.spWinPrice(dto.SpWinPrice || 0)\n\n model.computeEmRes()\n\n model.isFormAvailable(!dto.IsFormDataEmpty)\n\n if (dto.HasFixedOdds && model.fixedOddsFinisherInfo) {\n model.fixedOddsFinisherInfo.winDiv(dto.FixedOddsFinisherInfo.WinDiv)\n model.fixedOddsFinisherInfo.placeDiv(dto.FixedOddsFinisherInfo.PlaceDiv)\n model.fixedOddsFinisherInfo.displayPlaceDividend(\n dto.FixedOddsFinisherInfo.DisplayPlaceDividend\n )\n model.fixedOddsFinisherInfo.displayWinDividend(dto.FixedOddsFinisherInfo.DisplayWinDividend)\n model.fixedOddsFinisherInfo.shouldDisplayPlaceDividend(\n dto.FixedOddsFinisherInfo.ShouldDisplayPlaceDividend\n )\n model.fixedOddsFinisherInfo.isScratched(dto.FixedOddsFinisherInfo.IsScratched)\n model.fixedOddsFinisherInfo.isSuspended(dto.FixedOddsFinisherInfo.IsSuspended)\n model.fixedOddsFinisherInfo.isFavourite(dto.FixedOddsFinisherInfo.IsFavourite)\n model.fixedOddsFinisherInfo.scratchedTime(dto.FixedOddsFinisherInfo.ScratchedTime)\n model.fixedOddsFinisherInfo.winDividendDeduction(\n dto.FixedOddsFinisherInfo.WinDividendDeduction\n )\n model.fixedOddsFinisherInfo.placeDividendDeduction(\n dto.FixedOddsFinisherInfo.PlaceDividendDeduction\n )\n } else {\n model.hasFixedOdds(false)\n if (dto.IsScratched) {\n model.isScratchedToteAndFob(dto.IsScratched)\n }\n }\n\n if (dto.SilkImages) {\n SilkImageMapper.map(dto.SilkImages, model)\n }\n\n return model\n }\n\n abstract build(dto: dtos.FinisherDataTransferObject): IObservableFinisher\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { IObservableFinisher } from '../Model/Observables/IObservableFinisher'\nimport ObservableRaceFinisher from '../Model/Observables/ObservableRaceFinisher'\nimport { BaseFinisherCodeBuilder } from './BaseFinisherCodeBuilder'\n\nexport default class RaceFinisherBuilder extends BaseFinisherCodeBuilder {\n build(dto: dtos.FinisherDataTransferObject): IObservableFinisher {\n const model = super.addBaseInformation(\n new ObservableRaceFinisher(),\n dto\n ) as ObservableRaceFinisher\n model.template('race-finishers-template')\n model.barrier(dto.Barrier)\n model.jockeyWeight(dto.JockeyWeight)\n model.tag('Race')\n return model\n }\n}\n","import { ObservableFinisher } from './ObservableFinisher'\nimport * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableFinisher } from './IObservableFinisher'\n\nexport default class ObservableDogFinisher extends ObservableFinisher {\n constructor() {\n super()\n\n // @ts-expect-error Type issue\n this.boxNumber = ko.observable()\n // @ts-expect-error Type issue\n this.stripeCount = ko.observable()\n }\n\n public merge(other: ObservableDogFinisher) {\n Guard.notNull(other)\n super.merge(other)\n\n this.boxNumber(other.boxNumber())\n this.stripeCount(other.stripeCount())\n }\n\n public untypedMerge(other: IObservableFinisher) {\n this.merge(other as ObservableDogFinisher)\n }\n\n public boxNumber: ko.Observable\n public stripeCount: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { IObservableFinisher } from '../Model/Observables/IObservableFinisher'\nimport ObservableDogFinisher from '../Model/Observables/ObservableDogFinisher'\nimport { BaseFinisherCodeBuilder } from './BaseFinisherCodeBuilder'\n\nexport default class DogFinisherBuilder extends BaseFinisherCodeBuilder {\n build(source: dtos.FinisherDataTransferObject): IObservableFinisher {\n const result = super.addBaseInformation(\n new ObservableDogFinisher(),\n source\n ) as ObservableDogFinisher\n result.template('dog-finishers-template')\n result.boxNumber(source.Box)\n result.tag('Dog')\n result.stripeCount(source.StripeCount)\n return result\n }\n}\n","import * as ko from 'knockout'\nimport { ObservableFinisher } from './ObservableFinisher'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport { IObservableFinisher } from './IObservableFinisher'\n\nexport default class ObservableTrotFinisher extends ObservableFinisher {\n constructor() {\n super()\n\n // @ts-expect-error Type issue\n this.handicap = ko.observable()\n }\n\n merge(other: ObservableTrotFinisher) {\n Guard.notNull(other)\n super.merge(other)\n\n this.handicap(other.handicap())\n }\n\n public untypedMerge(other: IObservableFinisher) {\n this.merge(other as ObservableTrotFinisher)\n }\n\n public handicap: ko.Observable\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport { IObservableFinisher } from '../Model/Observables/IObservableFinisher'\nimport ObservableTrotFinisher from '../Model/Observables/ObservableTrotFinisher'\nimport { BaseFinisherCodeBuilder } from './BaseFinisherCodeBuilder'\n\nexport default class TrotFinisherBuilder extends BaseFinisherCodeBuilder {\n build(dto: dtos.FinisherDataTransferObject): IObservableFinisher {\n const model = super.addBaseInformation(\n new ObservableTrotFinisher(),\n dto\n ) as ObservableTrotFinisher\n model.template('trot-finishers-template')\n model.tag('Trot')\n model.handicap(dto.Handicap)\n return model\n }\n}\n","import RaceFinisherBuilder from './RaceFinisherBuilder'\nimport DogFinisherBuilder from './DogFinisherBuilder'\nimport TrotFinisherBuilder from './TrotFinisherBuilder'\nimport { IFinisherCodeBuilder as FinisherCodeBuilder } from './IFinisherCodeBuilder'\n\nexport default {\n from(starterType: string): FinisherCodeBuilder {\n switch (starterType) {\n case 'Races':\n return new RaceFinisherBuilder()\n case 'Dogs':\n return new DogFinisherBuilder()\n case 'Trots':\n return new TrotFinisherBuilder()\n default:\n throw new Error('invalid source.Type')\n }\n },\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport MissingStartersException from '../Exceptions/MissingStartersException'\nimport ObservableResultsPage from '../Model/Observables/ObservableResultsPage'\nimport FinisherBuilder from './FinisherBuilder'\n\nexport default {\n map(dto: dtos.ResultsPageDataTransferObject, model: ObservableResultsPage) {\n if (!dto || !dto.Finishers) throw new MissingStartersException('No finishers available')\n\n dto.Finishers.forEach(finisher => {\n model.addFinisher(FinisherBuilder.from(finisher.Type).build(finisher))\n })\n },\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\nimport ObservableSubstitute from './ObservableSubstitute'\n\nexport default class ObservableSubstitutePool {\n constructor() {\n this.number = ko.observable(0)\n this.name = ko.observable('')\n this.legs = ko.observableArray([] as number[])\n this.subs = ko.observableArray([] as ObservableSubstitute[])\n }\n\n public merge(other: ObservableSubstitutePool) {\n Guard.notNull(other)\n\n this.number(other.number())\n this.name(other.name())\n this.legs(other.legs())\n this.subs(other.subs())\n }\n\n public number: ko.Observable\n public name: ko.Observable\n public legs: ko.ObservableArray\n public subs: ko.ObservableArray\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableSubstitute {\n constructor() {\n this.displayNumber = ko.observable('')\n this.displayName = ko.observable('')\n this.displayResult = ko.observable('')\n\n this.starterNumber = ''\n this.starterName = ''\n\n this.isAbandoned = false\n this.isWinner = false\n this.isLoser = false\n this.isUnallocated = false\n\n this.updateDisplayVars()\n }\n\n merge(other: ObservableSubstitute) {\n Guard.notNull(other)\n\n this.starterNumber = other.starterNumber.toString()\n this.starterName = other.starterName\n\n this.isAbandoned = other.isAbandoned\n this.isWinner = other.isWinner\n this.isLoser = other.isLoser\n this.isUnallocated = other.isUnallocated\n\n this.updateDisplayVars()\n }\n\n updateDisplayVars() {\n if (this.isAbandoned) {\n this.displayNumber('')\n this.displayName('Abandoned')\n this.displayResult('')\n } else if (this.isUnallocated) {\n this.displayNumber('')\n this.displayName('No substitute')\n this.displayResult('')\n } else {\n this.displayNumber(this.starterNumber + '.')\n this.displayName(this.starterName)\n\n if (this.isWinner) {\n this.displayResult('Won')\n } else if (this.isLoser) {\n this.displayResult('Lost')\n } else {\n this.displayResult('')\n }\n }\n }\n\n public displayNumber: ko.Observable\n public displayName: ko.Observable\n public displayResult: ko.Observable\n\n public starterNumber: string\n public starterName: string\n\n public isAbandoned: boolean\n public isWinner: boolean\n public isLoser: boolean\n public isUnallocated: boolean\n}\n","import ObservableResultsPage from '../Model/Observables/ObservableResultsPage'\nimport ObservableSubstitutePool from '../Model/Observables/ObservableSubstitutePool'\nimport ObservableSubstitute from '../Model/Observables/ObservableSubstitute'\nimport { SubstitutePoolDataTransferObject } from '@mobi/api-types'\n\nexport default {\n map(dto: SubstitutePoolDataTransferObject[], model: ObservableResultsPage) {\n dto.forEach(availablePool => {\n //Create new observable\n const pool = new ObservableSubstitutePool()\n pool.number(availablePool.RaceNumber)\n pool.name(availablePool.Name)\n\n //Convert legs\n // @ts-expect-error Type issue\n for (const leg of availablePool.RaceLegs) {\n pool.legs().push(leg)\n }\n\n //Convert DTO subs into observable subs\n for (const subInPool of availablePool.AvailableSubstitutesInPool) {\n const sub = new ObservableSubstitute()\n sub.starterName = subInPool.Name\n sub.starterNumber = subInPool.StarterNumber.toString()\n\n sub.isAbandoned = subInPool.IsAbandoned\n sub.isWinner = subInPool.IsWinner\n sub.isLoser = subInPool.IsLoser\n sub.isUnallocated = subInPool.IsUnallocated\n\n sub.updateDisplayVars()\n\n pool.subs().push(sub)\n }\n\n //Finally add it to model for template\n model.addSubstitutePool(pool)\n })\n },\n}\n","import { dayjs } from '@mobi/utils'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport default class ObservableScratching {\n public starterNumber: string\n public starterName: string\n\n public isFixedOdds: boolean\n public scratchedDateTime: string\n\n public winDivDeduction: string | null\n public placeDivDeduction: string | null\n\n public isEmergency: boolean\n public meetingCode: string\n public emergencyNum: number\n\n public raceCodes: {\n Races: string\n Trots: string\n Dogs: string\n }\n\n constructor() {\n this.starterNumber = ''\n this.starterName = ''\n\n this.isFixedOdds = false\n this.scratchedDateTime = ''\n\n this.winDivDeduction = ''\n this.placeDivDeduction = ''\n\n this.isEmergency = false\n this.meetingCode = ''\n this.emergencyNum = 0\n\n this.raceCodes = {\n Races: 'R',\n Trots: 'T',\n Dogs: 'D',\n }\n }\n\n public displayStarterName() {\n if (this.isEmergency) {\n switch (\n this.meetingCode //TODO: Use raceCodes()\n ) {\n case 'Races':\n case 'Trots':\n return this.starterName + ' (Em' + this.emergencyNum + ')'\n\n case 'Dogs':\n return this.starterName + ' (Res' + this.emergencyNum + ')'\n }\n }\n\n return this.starterName\n }\n\n public displayScratchedDateTime() {\n if (this.scratchedDateTime) {\n return dayjs.tz(this.scratchedDateTime).local().format('DD/MM/YYYY HH:mm')\n } else {\n return ''\n }\n }\n\n public merge(other: ObservableScratching) {\n Guard.notNull(other)\n\n this.starterNumber = other.starterNumber\n this.starterName = other.starterName\n\n this.isFixedOdds = other.isFixedOdds\n this.scratchedDateTime = other.scratchedDateTime\n\n if (other.winDivDeduction !== null) {\n this.winDivDeduction = parseFloat(other.winDivDeduction).toFixed(2)\n } else {\n this.winDivDeduction = ''\n }\n if (other.placeDivDeduction !== null) {\n this.placeDivDeduction = parseFloat(other.placeDivDeduction).toFixed(2)\n } else {\n this.placeDivDeduction = ''\n }\n\n this.isEmergency = other.isEmergency\n this.meetingCode = other.meetingCode\n this.emergencyNum = other.emergencyNum\n }\n}\n","import { ScratchingDataTransferObject } from '@mobi/api-types'\nimport ObservableResultsPage from '../Model/Observables/ObservableResultsPage'\nimport ObservableScratching from '../Model/Observables/ObservableScratching'\n\nexport default {\n map(dto: ScratchingDataTransferObject[], model: ObservableResultsPage, meetingCode: string) {\n dto.forEach(dtoScratching => {\n //Create new observable\n const scratching = new ObservableScratching()\n\n scratching.starterNumber = dtoScratching.StarterNumber\n scratching.starterName = dtoScratching.StarterName\n\n scratching.isFixedOdds = dtoScratching.IsFixedOdds\n scratching.scratchedDateTime = dtoScratching.ScratchedDateTime\n\n if (dtoScratching.WinDivDeduction !== null) {\n scratching.winDivDeduction = parseFloat(\n dtoScratching.WinDivDeduction as unknown as string\n ).toFixed(2)\n } else {\n scratching.winDivDeduction = null\n }\n if (dtoScratching.PlaceDivDeduction !== null) {\n scratching.placeDivDeduction = parseFloat(\n dtoScratching.PlaceDivDeduction as unknown as string\n ).toFixed(2)\n } else {\n scratching.placeDivDeduction = null\n }\n\n // @ts-expect-error Missing type\n scratching.isEmergency = dtoScratching.IsEmergency\n scratching.meetingCode = meetingCode\n // @ts-expect-error Missing type\n scratching.emergencyNum = dtoScratching.EmergencyNumber\n\n //Finally add it to model for template\n model.addScratching(scratching)\n })\n },\n}\n","export default class NoveltyDividend {\n public poolName: string\n public raceNumbers: number[]\n public hasRaceNumbers: boolean\n public raceNumbersString: string\n public dividends: Dividend[]\n\n constructor() {\n this.poolName = ''\n this.raceNumbers = []\n this.hasRaceNumbers = false\n this.raceNumbersString = ''\n this.dividends = []\n }\n}\n\nexport class Dividend {\n public name: string\n public dividend: string\n\n constructor(name: string, dividend: string) {\n this.name = name\n this.dividend = dividend\n }\n}\n","import * as dtos from '../DataTransferObjects/DataTransferObjects'\nimport NoveltyDividend from '../Model/NoveltyDividend'\nimport ObservableResultsPage from '../Model/Observables/ObservableResultsPage'\nimport { Dividend } from '../Model/NoveltyDividend'\n\nexport default {\n map(dto: dtos.ResultsPageDataTransferObject, model: ObservableResultsPage) {\n const noveltyDividends = []\n for (const noveltyDividend of dto.NoveltyDividends) {\n noveltyDividends.push(noveltyDividendModel(noveltyDividend))\n }\n model.addNoveltyDividends(noveltyDividends)\n },\n}\n\nfunction noveltyDividendModel(\n noveltyDividendDto: dtos.NoveltyDividendDataTransferObject\n): NoveltyDividend {\n const noveltyDividend = new NoveltyDividend()\n noveltyDividend.poolName = noveltyDividendDto.PoolName\n\n noveltyDividendDto.RaceNumbers.forEach(raceNumber => {\n noveltyDividend.raceNumbers.push(raceNumber)\n })\n\n const raceNumbers = noveltyDividend.raceNumbers\n if (raceNumbers != undefined && raceNumbers.length > 0) {\n noveltyDividend.hasRaceNumbers = true\n const numbersString = '(' + raceNumbers.join(', ') + ')'\n noveltyDividend.raceNumbersString = numbersString\n }\n\n noveltyDividendDto.Dividends.forEach(dividendDto => {\n noveltyDividend.dividends.push(new Dividend(dividendDto.Name, dividendDto.Dividend))\n })\n\n return noveltyDividend\n}\n","import moment from 'moment'\nimport {\n PageDataTransferObject,\n RacePageDataTransferObject,\n ResultsPageDataTransferObject,\n} from '../DataTransferObjects/DataTransferObjects'\nimport MeetingRaceMapper from './MeetingRaceMapper'\nimport StartersMapper from './StartersMapper'\nimport PoolMapper from './PoolMapper'\nimport BetTypesMapper from './BetTypesMapper'\nimport ObservableRacePage from '../Model/Observables/ObservableRacePage'\nimport { RacePageResponseType } from '../Types/RacePageResponseType'\nimport { IObservablePage } from '../Model/Observables/IObservablePage'\nimport ObservableResultsPage from '../Model/Observables/ObservableResultsPage'\nimport ObservablePage from '../Model/Observables/ObservablePage'\nimport FinishersMapper from './FinishersMapper'\nimport SubstitutePoolMapper from './SubstitutePoolMapper'\nimport ScratchingsMapper from './ScratchingsMapper'\nimport NoveltyDividendsMapper from './NoveltyDividendsMapper'\n\nexport default {\n map(dto: PageDataTransferObject): IObservablePage {\n let model: IObservablePage = new ObservablePage()\n\n switch (dto.Tag) {\n case 'Starters':\n model = this.mapStarters(dto as RacePageDataTransferObject)\n break\n case 'Results':\n model = this.mapResults(dto as ResultsPageDataTransferObject)\n break\n }\n\n model.pageType = RacePageResponseType[dto.Tag]\n model.meetingInformation = MeetingRaceMapper.map(dto)\n PoolMapper.map(dto as RacePageDataTransferObject, model)\n\n for (const race of dto.MeetingInformation.Races) {\n model.addRace(MeetingRaceMapper.mapRace(dto.MeetingInformation.MeetingId, race))\n }\n model.meetingInformation.selectedRace = MeetingRaceMapper.mapRace(\n dto.MeetingInformation.MeetingId,\n dto.MeetingInformation.SelectedRace,\n dto.AvailablePools\n )\n\n return model\n },\n\n mapResults(dto: ResultsPageDataTransferObject): ObservableResultsPage {\n const resultsModel = new ObservableResultsPage()\n resultsModel.raceStatus(dto.RaceStatus)\n resultsModel.protestStatus(dto.ProtestStatus)\n resultsModel.simplePlacings(dto.SimplePlacings)\n resultsModel.giddyUpRaceKey(dto.GiddyUpRaceKey)\n resultsModel.giddyUpFixtureKey(dto.GiddyUpFixtureKey)\n FinishersMapper.map(dto, resultsModel)\n NoveltyDividendsMapper.map(dto, resultsModel)\n SubstitutePoolMapper.map(dto.AvailableSubstitutePools, resultsModel)\n ScratchingsMapper.map(\n dto.AvailableScratchings,\n resultsModel,\n dto.MeetingInformation.MeetingCode\n )\n this.mapRaceReplay(dto, resultsModel)\n return resultsModel\n },\n\n mapStarters(dto: RacePageDataTransferObject): ObservableRacePage {\n const raceModel = new ObservableRacePage()\n\n BetTypesMapper.map(dto, raceModel)\n StartersMapper.map(dto, raceModel)\n\n raceModel.specialOffersInfo(dto.SpecialOffersInfo)\n raceModel.giddyUpRaceKey(dto.GiddyUpRaceKey)\n raceModel.giddyUpFixtureKey(dto.GiddyUpFixtureKey)\n raceModel.hasDoubleProvDivs(dto.HasDoubleProvDivs)\n raceModel.hasQuaddieProvDivs(dto.HasQuaddieProvDivs)\n\n raceModel.betIdentifier = this.generateBetIdentifier(dto)\n\n return raceModel\n },\n\n generateBetIdentifier(dto: RacePageDataTransferObject): string {\n const meetingDateText = moment(dto.MeetingInformation.MeetingDate).format('YYYYMMDD')\n const unixTimestamp = moment().format('x')\n return `TOTE_${meetingDateText}_${dto.MeetingInformation.MeetingId}_${dto.MeetingInformation.SelectedRace.RaceNumber}_${dto.BetType}_${unixTimestamp}`\n },\n\n mapRaceReplay(dto: ResultsPageDataTransferObject, resultsModel: ObservableResultsPage) {\n resultsModel.raceReplay.hasVideo(dto.RaceReplay.HasVideo)\n resultsModel.raceReplay.videoKey(dto.RaceReplay.VideoKey)\n resultsModel.raceReplay.raceLocation(dto.RaceReplay.RaceLocation)\n resultsModel.raceReplay.date(dto.RaceReplay.Date)\n },\n}\n","import { injectable } from 'inversify'\nimport { IUrlProvider } from './IUrlProvider'\nimport { getServerVersion } from '../../Foundation/Services/ServerConfig'\nimport dayjs from 'dayjs'\n\n@injectable()\nexport class UrlProvider implements IUrlProvider {\n // Betting\n readonly getBetCost = '/tote/bet/betcost'\n readonly proposeBet = '/tote/bet/propose'\n readonly commitBet = '/tote/bet/commit'\n\n //Multi\n readonly addLegToMultiBet = '/multi/addtoteprop'\n\n //GiddyUp\n readonly getGiddyUpEntitlement = '/api/entitlements/GetGiddyUpEntitlements'\n\n //Meetings\n public async getCompleteRaceApiUrl(meetingId: string, meetingDate: Date, raceNumber: number) {\n return getCompleteRaceApiUrl(meetingId, meetingDate, raceNumber)\n }\n\n public getStartersApiUrl(\n meetingId: string,\n meetingDate: Date,\n raceNumber: number\n ): Promise {\n return Promise.resolve(getStartersApiUrl(meetingId, meetingDate, raceNumber))\n }\n\n public getRaceStartersApiUrl(\n meetingId: string,\n meetingDate: Date,\n raceNumbers: number[]\n ): Promise {\n return Promise.resolve(getRaceStartersApiUrl(meetingId, meetingDate, raceNumbers))\n }\n\n public getRacePageWebUrl(\n meetingId: string,\n meetingDate: Date,\n raceNumber: number\n ): Promise {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n return Promise.resolve(`#tote/meetings/${meetingId}/${raceNumber}?date=${formattedDate}`)\n }\n}\n\nconst appendVersionCacheBreaker = (url: string): string => {\n return url + `?v=${getServerVersion()}`\n}\n\nconst getStartersApiUrl = (meetingId: string, meetingDate: Date, raceNumber: number): string => {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n return appendVersionCacheBreaker(\n `/api/meetings/${meetingId}/${formattedDate}/race/${raceNumber}/starters`\n ).toLowerCase()\n}\n\nexport const getRaceStartersApiUrl = (\n meetingId: string,\n meetingDate: Date,\n raceNumbers: number[]\n): string => {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n return appendVersionCacheBreaker(\n `/api/meetings/${meetingId}/${formattedDate}/races/${raceNumbers.join(',')}`\n ).toLowerCase()\n}\n\nexport const getCompleteRaceApiUrl = (\n meetingId: string,\n meetingDate: Date | string,\n raceNumber: number\n) => {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n const url = `/api/meetings/${meetingId}/${formattedDate}/race/${raceNumber}`\n return (appendVersionCacheBreaker(url) + '&includeSrm').toLowerCase()\n}\n","import { getRaceStartersApiUrl } from '@classic/Betting-v2/Utils/UrlProvider'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { QueryKey, useQuery } from 'react-query'\nimport { PageDataTransferObject } from '@mobi/api-types'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ntype Props = {\n meetingId: string\n meetingDate: Date\n raceNumbers: number[]\n}\n\nexport const useStartersData = ({ meetingId, meetingDate, raceNumbers }: Props) => {\n return useQuery(\n queryKey(meetingId, meetingDate, raceNumbers),\n () => queryFn(meetingId, meetingDate, raceNumbers),\n options\n )\n}\n\nexport const queryKey = (meetingId: string, meetingDate: Date, raceNumbers: number[]): QueryKey => {\n return [queryKeys.racePageStartersForRaces, meetingId.toLowerCase(), meetingDate, raceNumbers]\n}\n\nexport const queryFn = async (\n meetingId: string,\n meetingDate: Date,\n raceNumbers: number[]\n): Promise => {\n const url = getRaceStartersApiUrl(meetingId, meetingDate, raceNumbers)\n return await get({\n url,\n })\n}\n\nconst options = {\n staleTime: Infinity,\n}\n","import { RacePageDTO } from '@mobi/api-types'\nimport { getCompleteRaceApiUrl } from '@classic/Betting-v2/Utils/UrlProvider'\nimport { get } from '@classic/Foundation/Services/ApiService'\n\nexport const getRacePageDataFromApi = async (\n meetingId: string,\n meetingDate: Date | string,\n raceNumber: number\n): Promise => {\n const url = getCompleteRaceApiUrl(meetingId.toLowerCase(), meetingDate, raceNumber)\n const response = await get({\n url,\n })\n return response\n}\n","import { dayjs } from '@mobi/utils'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport type { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport const getRaceFormDataFromApi = (\n meetingId: string,\n meetingDate: Date | string,\n raceNumber: number\n) => {\n const url = getFormForRaceApiUrl(meetingId.toLowerCase(), meetingDate, raceNumber)\n return get({ url })\n}\n\n// Local Helpers\n\nfunction getFormForRaceApiUrl(meetingId: string, meetingDate: Date | string, raceNumber: number) {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n return `/api/meetings/${meetingId}/${formattedDate}/race/${raceNumber}/form`.toLowerCase()\n}\n\n// Types\n\nexport type FormRaceResponse = DogsFormRaceResponse | RacesFormRaceResponse | TrotsFormRaceResponse\n\nexport type DogsFormRaceResponse = {\n Forms: DogsRunnerForm[]\n StarterType: Extract\n}\n\nexport type RacesFormRaceResponse = {\n Forms: RacesRunnerForm[]\n StarterType: Extract\n}\n\nexport type TrotsFormRaceResponse = {\n Forms: TrotsRunnerForm[]\n StarterType: Extract\n}\n\nexport interface DogsRunnerForm extends RunnerFormBase {\n Histories: DogHistoryFormData[]\n}\n\nexport interface RacesRunnerForm extends RunnerFormBase {\n RaceHistories: RaceHistoryFormData[]\n}\n\nexport interface TrotsRunnerForm extends RunnerFormBase {\n TrotHistories: TrotHistoryFormData[]\n}\n\ninterface RunnerFormBase {\n Age: string\n Career: string\n Color: string\n DamName: string\n // TODO remove, as it's only used in tests\n DisplayLastTenStarts: string\n LastTenStarts: string\n PrizeMoneyWon: string\n Sex: string\n SireName: string\n StarterNumber: number\n TrackDistance: string\n // Optional\n StarterName?: string\n BestTime?: string\n Comments?: string | null\n DisplayLastFiveStarts?: string\n Distance?: string\n FirstUp?: string\n GearChanges?: string | null\n LastTime?: string\n OwnerName?: string\n RatingDry?: string\n RecommendedPrice?: string\n SecondUp?: string\n StartType?: string\n TrackConditions?: { Name: string; Stats: string | null }[]\n TrackName?: string\n TrainerName?: string\n}\n\n// Runner History\n\ninterface RunnerHistoryBase {\n Distance: string\n FixtureDate: string\n Place: string\n RaceClass: string\n RaceNumber: string\n RaceReplay: {\n HasVideo: boolean\n VideoKey: string\n RaceLocation: string\n Date: string\n }\n TrackName: string\n StewardsComments?: string | null\n StarterName?: string\n StarterNumber?: number\n}\n\ninterface DogHistoryFormData extends RunnerHistoryBase {\n BarrierBox: string\n BestOfNight: string\n BodyWeight: string\n Margin: string\n Placings: Pick[]\n RaceTime: string\n StartingPrice: string\n WinnerTime: string\n WinnerOrSecondPlaceName?: string\n}\n\ninterface RaceHistoryFormData extends RunnerHistoryBase {\n Barrier: string\n FieldSize: string\n JockeyName: string\n Margin: string\n Placings: Omit[]\n Position400: string\n Position800: string\n RaceTime: string\n StartPrice: string\n TrackCondition: string\n Weight: string\n}\n\ninterface TrotHistoryFormData extends RunnerHistoryBase {\n DriverName: string\n FieldSize: string\n Handicap: string\n Margin: string\n MileRate: string\n Placings: Pick[]\n StartPrice: string\n StartType: string\n}\n\ninterface PlacingsBase {\n Barrier: string\n Handicap: string\n JockeyName: string\n Margin: string\n Place: string\n StarterName: string\n Weight: string\n}\n","import { useQueries } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRacePageDataFromApi } from './api'\nimport { getRaceFormDataFromApi } from '../useRaceFormData/api'\n\nexport const useRacePageData = ({\n meetingId,\n meetingDate,\n raceNumber,\n withForm = false,\n}: {\n meetingId: string\n meetingDate: Date | string\n raceNumber: number | string\n /** default false */\n withForm?: boolean\n}) => {\n const [race, form] = useQueries([\n {\n queryKey: queryKeys.racePageComplete(meetingId, meetingDate, +raceNumber),\n queryFn: () => getRacePageDataFromApi(meetingId, meetingDate, +raceNumber),\n staleTime: Infinity,\n },\n {\n queryKey: queryKeys.racePageForm(meetingId, meetingDate, +raceNumber),\n queryFn: () => getRaceFormDataFromApi(meetingId, meetingDate, +raceNumber),\n enabled: withForm,\n staleTime: Infinity,\n },\n ])\n return {\n isLoading: race.isLoading || (withForm && form.isLoading),\n isError: race.isError || (withForm && form.isError),\n isFetching: race.isFetching,\n race: race.data,\n form: form.data,\n }\n}\n","import { injectable } from 'inversify'\nimport { IObservablePage } from '../Model/Observables/IObservablePage'\nimport Mapper from '../Mapping/Mappers'\nimport { IStartersService } from './IStartersService'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport * as useStartersData from '@core/Areas/Racing/Hooks/useStartersData'\nimport { getRacePageDataFromApi } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\n@injectable()\nexport class StartersReactQueryService implements IStartersService {\n public async retrieveCompleteRace(\n meetingId: string,\n raceNumber: number,\n meetingDate: Date\n ): Promise {\n const pageDto = await queryClient.fetchQuery(\n queryKeys.racePageComplete(meetingId, meetingDate, raceNumber),\n { queryFn: () => getRacePageDataFromApi(meetingId, meetingDate, raceNumber) }\n )\n const page = Mapper.map(pageDto)\n return page\n }\n public async retrieveStartersForRaces(\n meetingId: string,\n meetingDate: Date,\n raceNumbers: number[]\n ): Promise {\n const { queryKey, queryFn } = useStartersData\n const pageDto = await queryFn(meetingId, meetingDate, raceNumbers)\n queryClient.setQueryData(queryKey(meetingId, meetingDate, raceNumbers), pageDto)\n return Mapper.map(pageDto)\n }\n}\n","import { injectable } from 'inversify'\nimport { IFormService } from './IFormService'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRaceFormDataFromApi } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\n\n@injectable()\nexport class FormReactQueryService implements IFormService {\n public updateQueryCache(meetingId: string, meetingDate: Date, raceNumber: number): void {\n queryClient.fetchQuery(queryKeys.racePageForm(meetingId, meetingDate, raceNumber), {\n queryFn: () => getRaceFormDataFromApi(meetingId, meetingDate, raceNumber),\n staleTime: Infinity,\n })\n }\n}\n","export default class LegacyTabModel {\n public RaceNo!: number\n public Sel!: string\n public AllUpBetType!: string\n}\n","import moment from 'moment'\nimport { BettingInformation } from './BettingInformation'\nimport { BetType } from './Betting/BetType'\nimport { ILegacyBetModel } from './ILegacyBetModel'\nimport LegacyTabModel from './LegacyTabModel'\nimport { ISelectionResult } from '../Components/Core/SelectionResults/ISelectionResult'\nimport { FobSelectionResult } from '../Components/Core/SelectionResults/FobSelectionResult'\nimport ObservableMeetingInformation from './Observables/ObservableMeetingInformation'\n\nexport class LegacyBetModelBuilder {\n private data: ILegacyBetModel = {} as ILegacyBetModel\n\n constructor(\n bettingContext: BettingInformation,\n isForEnquiry: boolean,\n shouldBeFormDataCompatible: boolean\n ) {\n this.createModel(bettingContext, shouldBeFormDataCompatible)\n\n if (isForEnquiry) {\n this.data.HasInvestment = false\n this.data.Investment1 = '0.00'\n this.data.Investment2 = '0.00'\n }\n\n if (!isForEnquiry && bettingContext.selectedBetType().isAllUp()) {\n this.processAllUpFormulas(bettingContext, shouldBeFormDataCompatible)\n }\n }\n\n public getFormData() {\n return this.data\n }\n\n public getModel(): ILegacyBetModel {\n return this.data\n }\n\n private processAllUpFormulas(\n bettingContext: BettingInformation,\n shouldBeFormDataCompatible: boolean\n ): void {\n if (\n bettingContext.allUpFormulas != undefined &&\n bettingContext.allUpFormulas.formulas().length > 0\n ) {\n this.data.AllUpFormulas = []\n const selectedFormulas = bettingContext.allUpFormulas\n .formulas()\n .filter(formula => formula.isSelected())\n\n if (shouldBeFormDataCompatible) {\n selectedFormulas.forEach((formula, index) => {\n // @ts-expect-error Types need work\n this.data['AllUpFormulas[' + index + '].Number'] = formula.number()\n // @ts-expect-error Types need work\n this.data['AllUpFormulas[' + index + '].Combinations'] = formula.numberOfCombinations()\n })\n } else {\n selectedFormulas.forEach(formula => {\n this.data.AllUpFormulas.push({\n Number: formula.number(),\n Combinations: formula.numberOfCombinations(),\n })\n })\n }\n }\n }\n\n private transformSingleLegTabs(\n bettingContext: BettingInformation,\n results: ISelectionResult\n ): LegacyTabModel[] {\n const tabs: LegacyTabModel[] = []\n\n if (bettingContext.checkForAllwaysBet() && bettingContext.isAllwaysBet()) {\n const tabViewModel = new LegacyTabModel()\n tabViewModel.RaceNo = bettingContext.raceNumber\n tabViewModel.Sel = results.selectionStrings[0]\n tabs.push(tabViewModel)\n\n results.selectionStrings.slice(1).forEach(() => {\n const tabViewModel = new LegacyTabModel()\n tabViewModel.RaceNo = bettingContext.raceNumber\n tabViewModel.Sel = ''\n tabs.push(tabViewModel)\n })\n } else {\n results.selectionStrings.forEach(selString => {\n const tabViewModel = new LegacyTabModel()\n tabViewModel.RaceNo = bettingContext.raceNumber\n tabViewModel.Sel = selString\n tabs.push(tabViewModel)\n })\n }\n\n return tabs\n }\n\n private transformLegTabs(bettingContext: BettingInformation): LegacyTabModel[] {\n const tabs: LegacyTabModel[] = []\n\n for (const legSelection of bettingContext.getLegsForProcessing()) {\n const tabViewModel = new LegacyTabModel()\n tabViewModel.RaceNo = legSelection.raceKey().raceNumber()\n tabViewModel.Sel = bettingContext.resultsForLeg(\n legSelection.raceKey().leg()\n ).selectionStrings[0]\n if (bettingContext.selectedBetType().betType() === BetType.AllUp) {\n tabViewModel.AllUpBetType = legSelection.raceKey().poolInfo.selectedPool().name()\n }\n tabs.push(tabViewModel)\n }\n\n return tabs\n }\n\n private createModel(bettingContext: BettingInformation, shouldBeFormDataCompatible: boolean) {\n this.data.BetType = BetType[bettingContext.selectedBetType().betType()]\n this.data.MeetingDate = moment(bettingContext.meetingDate).format('YYYY-MM-DD')\n this.data.MeetingId = bettingContext.meetingId\n this.data.IsSpecialFobBet = false\n this.data.HasInvestment = true\n this.data.Investment1 = bettingContext.investment1.amount()\n this.data.Investment2 = bettingContext.investment2.amount()\n\n if (!bettingContext.selectedBetType().multiBet()) {\n this.processSingleLeg(bettingContext, shouldBeFormDataCompatible)\n } else {\n this.processMultiLeg(bettingContext, shouldBeFormDataCompatible)\n }\n\n this.data.PyosSelectedSpecial = bettingContext.selectedSpecial\n this.data.SpecialOffers = bettingContext.specialOffers\n }\n\n private processMultiLeg(bettingContext: BettingInformation, shouldBeFormDataCompatible: boolean) {\n this.data.IsRovingBanker = false\n this.data.IsAllways = false\n const tabs = this.transformLegTabs(bettingContext)\n this.data.FixedPlacesPaying = bettingContext.fixedPlacesPaying as number\n this.data.IsFlexi = bettingContext.selectedBetType().supportsFlexi\n\n if (bettingContext.selectedBetType().isAllUp()) {\n this.data.RaceSelections = tabs.map(tab => tab.RaceNo).join(',')\n }\n\n if (shouldBeFormDataCompatible) {\n this.configureMultiLegTabsAsFormDataFormat(bettingContext, tabs)\n } else {\n this.configureTabs(bettingContext, tabs)\n }\n }\n\n private processSingleLeg(\n bettingContext: BettingInformation,\n shouldBeFormDataCompatible: boolean\n ) {\n const results = bettingContext.results()\n if (bettingContext.isFixed()) {\n this.data.PropositionNumber = (results as FobSelectionResult).propositionNumber\n this.data.FixedWinPrice = Number((results as FobSelectionResult).winPrice)\n if (\n (\n bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.fixedOddsInfo.isPlaceAvailable()\n ) {\n this.data.FixedPlacePrice = Number((results as FobSelectionResult).placePrice)\n }\n }\n\n this.data.IsRovingBanker = bettingContext.rovingBanker()\n this.data.IsAllways = bettingContext.isAllwaysBet()\n\n const tabs = this.transformSingleLegTabs(bettingContext, results)\n if (bettingContext.checkForAllwaysBet()) {\n this.data.IsAllways = bettingContext.isAllwaysBet()\n }\n\n if (bettingContext.selectedBetType().isQuinella() && !this.data.IsAllways) {\n this.data.IsQuinellaLegIn = true\n }\n\n this.data.FixedPlacesPaying = bettingContext.fixedPlacesPaying as number\n this.data.IsFlexi = bettingContext.selectedBetType().supportsFlexi\n\n if (shouldBeFormDataCompatible) {\n this.configureSingleLegTabsAsFormDataFormat(bettingContext, results, tabs)\n } else {\n this.configureTabs(bettingContext, tabs)\n }\n }\n\n private configureTabs(bettingContext: BettingInformation, tabs: LegacyTabModel[]) {\n this.data.BetIdentifier = bettingContext.betIdentifier as string\n this.data.Tabs = tabs\n }\n\n private configureSingleLegTabsAsFormDataFormat(\n bettingContext: BettingInformation,\n selectionResult: ISelectionResult,\n tabs: LegacyTabModel[]\n ) {\n if (\n bettingContext.isFixed() &&\n (bettingContext.meetingInformation as ObservableMeetingInformation).selectedRace\n .fixedOddsInfo != null\n ) {\n // @ts-expect-error Type issues\n this.data['FixedBettingConditions'] = (\n bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.fixedOddsInfo.bettingConditions()\n\n // @ts-expect-error Type issues\n this.data['FixedBettingRules'] = (\n bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.fixedOddsInfo.bettingRules()\n\n // @ts-expect-error Type issues\n this.data['FixedBettingTerms'] = (\n bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.fixedOddsInfo.bettingTerms()\n }\n\n if (tabs != undefined && tabs.length > 0) {\n tabs.forEach((tab, index) => {\n // @ts-expect-error Type issues\n this.data['Tabs[' + index + '].RaceNo'] = tab.RaceNo\n // @ts-expect-error Type issues\n this.data['Tabs[' + index + '].Sel'] = tab.Sel\n })\n }\n }\n\n private configureMultiLegTabsAsFormDataFormat(\n bettingContext: BettingInformation,\n tabs: LegacyTabModel[]\n ) {\n if (tabs != undefined && tabs.length > 0) {\n tabs.forEach((tab, index) => {\n // @ts-expect-error Type issues\n this.data['Tabs[' + index + '].RaceNo'] = tab.RaceNo\n // @ts-expect-error Type issues\n this.data['Tabs[' + index + '].Sel'] = tab.Sel\n if (bettingContext.selectedBetType().isAllUp()) {\n // @ts-expect-error Type issues\n this.data['Tabs[' + index + '].AllUpBetType'] = tab.AllUpBetType\n }\n })\n }\n }\n}\n","import { ILegacyBetAdapter } from './ILegacyBetAdapter'\nimport { LegacyBetModelBuilder } from './LegacyBetModelBuilder'\nimport { BettingInformation } from './BettingInformation'\nimport { injectable, inject } from 'inversify'\nimport type { IBetEnquiryService } from '../Services/IBetEnquiryService'\nimport type { IErrorHandler } from '../Utils/IErrorHandler'\nimport type { IEventAggregator } from '../../AppUtils/Framework/Messaging/IEventAggregator'\nimport BetEnquiryResponseDataTransferObject from '../DataTransferObjects/BetEnquiryResponseDataTransferObject'\nimport { BetType } from './Betting/BetType'\nimport ObservableMeetingInformation from './Observables/ObservableMeetingInformation'\n\n@injectable()\nexport class LegacyBetAdapter implements ILegacyBetAdapter {\n private betEnquiryService: IBetEnquiryService\n private errorHandler: IErrorHandler\n private eventAggregator: IEventAggregator\n\n constructor(\n @inject('IBetEnquiryService') betEnquiryService: IBetEnquiryService,\n @inject('IErrorHandler') errorHandler: IErrorHandler,\n @inject('IEventAggregator') eventAggregator: IEventAggregator\n ) {\n this.betEnquiryService = betEnquiryService\n this.errorHandler = errorHandler\n this.eventAggregator = eventAggregator\n }\n\n public doBetEnquiry(\n bettingInformation: BettingInformation,\n callback: (betEnquiryResponse: BetEnquiryResponseDataTransferObject) => void\n ): void {\n const betViewModelBuilder = new LegacyBetModelBuilder(bettingInformation, true, false)\n let betEnquiryPromise: Promise\n if (bettingInformation.selectedBetType().betType() === BetType.AllUp) {\n betEnquiryPromise = this.betEnquiryService.enquireAllUpBet(betViewModelBuilder.getModel())\n } else {\n betEnquiryPromise = this.betEnquiryService.enquireBet(betViewModelBuilder.getModel())\n }\n\n betEnquiryPromise\n .then(success => {\n if (success.ExceptionMessage != undefined || success.Message != undefined) {\n const scratchedErrorCallback = () => {\n // If selected starter is scratched, refresh starters\n if (success.ExceptionMessage && success.ExceptionMessage.includes('scratched')) {\n const raceNumbersToRefresh = [\n (\n bettingInformation.meetingInformation as ObservableMeetingInformation\n ).selectedRace.raceNumber(),\n ]\n this.eventAggregator.publish('race-refresh-command', raceNumbersToRefresh)\n }\n }\n\n this.errorHandler.showErrorMessage(\n success.Message,\n success.ExceptionMessage,\n scratchedErrorCallback\n )\n } else {\n callback(success)\n }\n })\n .catch(error => {\n if (error.status === 400) {\n const caughtException = jQuery.parseJSON(error.responseText)\n this.errorHandler.showErrorMessage(\n caughtException.Message,\n caughtException.ExceptionMessage\n )\n } else {\n this.eventAggregator.publish('bet.account')\n\n this.errorHandler.handleErrorAsIs(0, 'Unknown')\n }\n })\n }\n}\n","import jQuery from 'jquery'\nimport { injectable, inject } from 'inversify'\nimport { ServiceError } from '../Model/ServiceError'\nimport type { ILoginHelper } from '../../AppUtils/Framework/Utils/ILoginHelper'\nimport { IErrorHandler } from './IErrorHandler'\nimport { store } from '@core/Store'\nimport { closeModal, openModal } from '@core/Components/Modal'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\n@injectable()\nexport class ErrorHandler implements IErrorHandler {\n private logInHelper: ILoginHelper\n\n static readonly ERROR_CODE_NOT_FOUND: number = 404\n\n constructor(@inject('ILoginHelper') logInHelper: ILoginHelper) {\n this.logInHelper = logInHelper\n }\n\n private showPopup(popupDiv: JQuery) {\n //delay 50 milliseconds to allow background layout completed\n setTimeout(function () {\n jQuery('div .popup').hide() // hide all other popups (especially any confirmation popup)\n const documentHeight = jQuery(document).height()\n popupDiv.css({ height: documentHeight }).fadeIn('fast')\n popupDiv.children('.overlay').animate({ opacity: 0.6 }, 'fast')\n\n const scrollTop = window.pageYOffset\n ? window.pageYOffset\n : document.body.parentElement\n ? document.body.parentElement.scrollTop\n : 0\n\n //Using a minimum scroll top to stop the close popup being over the 'log out' button.\n popupDiv.children('.window').css({ top: Math.max(scrollTop + 20, 40) })\n\n //Check if the height has changed due to showing the popup, and increase the overlay size accordingly\n const newHeight = popupDiv.children('.window').height() + scrollTop + 100\n if (newHeight > documentHeight) {\n popupDiv.children('.overlay').css({ height: newHeight })\n }\n }, 50)\n }\n\n private hideErrorPopup() {\n jQuery('#error-window').fadeOut('fast')\n }\n\n private hideNewErrorPopup() {\n jQuery('#new-error-window').fadeOut('fast')\n }\n\n public showErrorMessage(title: string, subtitle: string, callback?: () => void): void {\n showWarningOrErrorPopup({ title, subtitle, type: 'error', callback })\n }\n\n public showWarningMessage(title: string, subtitle: string, callback?: () => void): void {\n showWarningOrErrorPopup({ title, subtitle, type: 'warning', callback })\n }\n\n public handleErrorAsIs(statusCode: number, errorResponse: string): void {\n switch (statusCode) {\n case 403:\n this.logInHelper.presentLogIn()\n break\n case 550:\n jQuery('#error-window').html(errorResponse)\n this.showPopup(jQuery('#error-window'))\n jQuery('#error-window .close').click(() => {\n this.hideErrorPopup()\n })\n break\n case 551:\n this.reload()\n break\n default:\n jQuery('#ajax-error').show()\n jQuery('#main-container').html('')\n break\n }\n }\n\n public handle(error: ServiceError): void {\n if (error.status === 403) {\n return\n } else if (error.status === 550) {\n jQuery('#actual-error-message').html(error.responseText)\n this.showPopup(jQuery('#new-error-window'))\n jQuery('#new-error-window .close').click(() => {\n this.hideNewErrorPopup()\n })\n }\n }\n\n public reload(): void {\n location.reload()\n }\n}\n\nexport function showWarningOrErrorPopup({\n title,\n subtitle,\n type,\n callback,\n}: {\n title: string\n type: 'error' | 'warning'\n callback?: () => void\n subtitle?: string\n}) {\n store.dispatch(\n openModal({\n id: 'betting-v2-error-handler',\n modalComponent: NoticeBox,\n modalComponentProps: {\n title,\n subtitle,\n noticeBoxType: type === 'error' ? NoticeBoxTypes.Error : NoticeBoxTypes.Warning,\n hasBorder: false,\n buttonClick: () => {\n store.dispatch(closeModal({ id: 'betting-v2-error-handler' }))\n callback?.()\n },\n },\n isDismissable: false,\n position: 'middle',\n })\n )\n}\n","import type { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport type { IObservableFinisher } from '../Model/Observables/IObservableFinisher'\nimport type { SortOption } from './types'\n\nexport default {\n sortNumber(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableStarter, right: IObservableStarter) => number {\n return (left: IObservableStarter, right: IObservableStarter) => {\n let result = direction === 'Ascending' ? 1 : -1\n if (left.number() < right.number()) {\n result = result * -1\n } else if (left.number() > right.number()) {\n result = result * 1\n } else {\n result = result * 0\n }\n return result\n }\n },\n\n sortPlacing(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableFinisher, right: IObservableFinisher) => number {\n return (left: IObservableFinisher, right: IObservableFinisher) => {\n let result = direction === 'Ascending' ? 1 : -1\n if (left.placing() < right.placing()) {\n result = result * -1\n } else if (left.placing() > right.placing()) {\n result = result * 1\n } else {\n result = result * 0\n }\n return result\n }\n },\n\n sortName(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableStarter, right: IObservableStarter) => number {\n return (left: IObservableStarter, right: IObservableStarter) => {\n let result = direction === 'Ascending' ? 1 : -1\n if (left.name() < right.name()) {\n result = result * -1\n } else if (left.name() > right.name()) {\n result = result * 1\n } else {\n result = result * 0\n }\n return result\n }\n },\n\n sortPrice(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableStarter, right: IObservableStarter) => number {\n return (left: IObservableStarter, right: IObservableStarter) => {\n let result = direction === 'Ascending' ? 1 : -1\n if (+left.displayWinDividend() < +right.displayWinDividend()) {\n result = result * -1\n } else if (+left.displayWinDividend() > +right.displayWinDividend()) {\n result = result * 1\n } else {\n if (left.number() < right.number()) {\n result = result * -1\n } else if (left.number() > right.number()) {\n result = result * 1\n } else {\n result = result * 0\n }\n }\n return result\n }\n },\n\n sortFixedPrice(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableStarter, right: IObservableStarter) => number {\n return (left: IObservableStarter, right: IObservableStarter) => {\n let result = direction === 'Ascending' ? 1 : -1\n if (\n +left.fixedOddsStarterInfo.displayWinDividend() <\n +right.fixedOddsStarterInfo.displayWinDividend()\n ) {\n result = result * -1\n } else if (\n +left.fixedOddsStarterInfo.displayWinDividend() >\n +right.fixedOddsStarterInfo.displayWinDividend()\n ) {\n result = result * 1\n } else {\n if (left.number() < right.number()) {\n result = result * -1\n } else if (left.number() > right.number()) {\n result = result * 1\n } else {\n result = result * 0\n }\n }\n return result\n }\n },\n\n sortSameRaceMultiWinPrice(\n direction: SortOption['direction'] = 'Ascending'\n ): (left: IObservableStarter, right: IObservableStarter) => number {\n return (left: IObservableStarter, right: IObservableStarter) => {\n const leftWin = left.fixedOddsStarterInfo.sameRaceMultiPrices.win() ?? 0\n const rightWin = right.fixedOddsStarterInfo.sameRaceMultiPrices.win() ?? 0\n const leftMissing = isSameRaceMultiScratchedSuspendedOrWithoutPrice(left)\n const rightMissing = isSameRaceMultiScratchedSuspendedOrWithoutPrice(right)\n let result = 0\n\n if (leftMissing && rightMissing) {\n // both absent means both equally bad\n result = 0\n } else if (rightMissing) {\n // if absent, keep order to make sure it stays behind\n result = -1\n } else if (leftMissing) {\n // if absent, switch order to make sure it stays behind\n result = 1\n } else {\n // positive result of subtraction swaps left and right\n result = leftWin - rightWin\n\n if (result === 0) {\n // use starters' numbers, they should never be equal\n result = left.number() - right.number()\n }\n\n result = direction === 'Ascending' ? result : -result\n }\n\n return result\n }\n },\n\n for({\n property,\n direction,\n }: SortOption): (left: IObservableStarter, right: IObservableStarter) => number {\n switch (property) {\n case 'Number':\n return this.sortNumber(direction)\n case 'FixedPrice':\n return this.sortFixedPrice(direction)\n case 'Price':\n return this.sortPrice(direction)\n case 'Name':\n return this.sortName(direction)\n case 'SameRaceMultiWinPrice':\n return this.sortSameRaceMultiWinPrice(direction)\n default:\n throw new Error('invalid sortProperty')\n }\n },\n\n filter(property: SortOption['property']): (element: IObservableStarter) => boolean {\n if (property === 'FixedPrice') {\n return value => {\n return (\n !value.fixedOddsStarterInfo ||\n !value.hasFixedOdds() ||\n !value.fixedOddsStarterInfo.hasWinDividend() ||\n !value.fixedOddsStarterInfo.displayWinDividend() ||\n value.fixedOddsStarterInfo.displayWinDividend().length === 0 ||\n value.fixedOddsStarterInfo.isSuspended() ||\n value.fixedOddsStarterInfo.isScratched()\n )\n }\n } else {\n return value =>\n !value.isToteEnabled() ||\n value.isScratchedToteAndFob() ||\n value.isScratched() ||\n !value.displayWinDividend() ||\n value.displayWinDividend().length === 0 ||\n value.displayWinDividend() === '-'\n }\n },\n\n shouldFilter(property: SortOption['property']): boolean {\n return property === 'FixedPrice' || property === 'Price'\n },\n}\n\nexport function isSameRaceMultiScratchedSuspendedOrWithoutPrice(starter: IObservableStarter) {\n return (\n starter.fixedOddsStarterInfo.isScratched() ||\n starter.fixedOddsStarterInfo.isSuspended() ||\n (starter.fixedOddsStarterInfo.sameRaceMultiPrices.win() ?? 0) == 0\n )\n}\n","import * as ko from 'knockout'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport type { IObservableStarter } from '../Model/Observables/IObservableStarter'\nimport type { SortOption } from './types'\nimport SortFunction from './SortFunction'\n\nexport const ModelSorter = {\n sortBy(starters: ko.ObservableArray, sortOption: SortOption) {\n Guard.arrayNotNullOrEmpty(starters())\n\n const sortOptionProperty = sortOption.property\n const sortOptiondirection = sortOption.direction\n\n if (!SortFunction.shouldFilter(sortOptionProperty)) {\n starters.sort(SortFunction.for(sortOption))\n return\n }\n\n const scratchOrSuspended = starters().filter(starter =>\n SortFunction.filter(sortOptionProperty)(starter)\n )\n const sortableStarters = starters().filter(\n starter => !SortFunction.filter(sortOptionProperty)(starter)\n )\n\n scratchOrSuspended.sort(\n SortFunction.for({ property: 'Number', direction: sortOptiondirection })\n )\n sortableStarters.sort(SortFunction.for(sortOption))\n starters(sortableStarters.concat(scratchOrSuspended))\n },\n}\n","import { inject, injectable } from 'inversify'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport { timed } from '@core/Utils'\nimport { ModelSorter } from '../Sorting/ModelSorter'\nimport { BetType } from './Betting/BetType'\nimport BetTypeInformation from './Betting/BetTypeInformation'\nimport BetTypeInformationBuilder from './Betting/BetTypeInformationBuilder'\nimport { BettingInformation } from './BettingInformation'\nimport type { IBettingInformationManager } from './IBettingInformationManager'\nimport ObservableRacePage from './Observables/ObservableRacePage'\n\n@injectable()\nexport default class BettingInformationManager implements IBettingInformationManager {\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('IAppWindow') applicationWindow: IAppWindow\n ) {\n this.eventAggregator = eventAggregator\n this.applicationWindow = applicationWindow\n }\n\n public init(raceInformation: ObservableRacePage, bettingInformation: BettingInformation) {\n this.raceInformation = raceInformation\n this.bettingInformation = bettingInformation\n this.reapplySort()\n }\n\n private setSortFor({ property, direction }: SortOption) {\n if (this.bettingInformation.sortOption != null) {\n this.bettingInformation.sortOption.property = property\n this.bettingInformation.sortOption.direction = direction\n }\n }\n\n private reapplySort() {\n const sortOption = this.bettingInformation.sortOption\n const startersForRace = this.raceInformation.getStartersForRace(\n this.raceInformation.meetingInformation.selectedRace.raceNumber()\n )\n\n if (startersForRace().length > 0 && this.bettingInformation.sortOption != null) {\n const isFixedAvailable =\n this.raceInformation.meetingInformation.selectedRace.fixedOddsInfo?.isRaceAvailable()\n\n if (\n !this.bettingInformation.selectedBetType().supportsSort(sortOption.property) ||\n (!isFixedAvailable && sortOption.property === 'FixedPrice')\n ) {\n this.bettingInformation.sortOption.property = 'Number'\n this.bettingInformation.sortOption.direction = 'Ascending'\n }\n ModelSorter.sortBy(startersForRace, sortOption)\n }\n }\n\n public processSort(params: { raceNumber: number; option: SortOption }) {\n ModelSorter.sortBy(this.raceInformation.getStartersForRace(params.raceNumber), params.option)\n this.setSortFor(params.option)\n }\n\n public update(raceChanged: boolean) {\n this.bettingInformation.mergeDone(false)\n\n const shouldResetToWinPlace = this.shouldResetBackToWinPlace()\n if (raceChanged || shouldResetToWinPlace) {\n if (shouldResetToWinPlace) this.bettingInformation.lastSelectionBetType(null)\n\n const betTypeToReset = shouldResetToWinPlace\n ? BetType.WinPlace\n : this.bettingInformation.lastSelectionBetType() || BetType.WinPlace\n\n this.reset(betTypeToReset, false)\n }\n this.reapplySort()\n\n this.bettingInformation.mergeDone(true)\n }\n\n public processBetTypeChange(betType: BetType) {\n if (betType === BetType.Mystery) {\n this.eventAggregator.publish('load-mystery-bet', {\n raceNumber: this.bettingInformation.raceNumber,\n })\n } else {\n this.applicationWindow.requestAnimationFrame(() => {\n timed('BettingInformationManager::processBetTypeChange', () => {\n this.bettingInformation.mergeDone(false)\n this.reset(betType)\n this.bettingInformation.mergeDone(true)\n })\n this.applicationWindow.requestAnimationFrame(() => {\n this.applicationWindow.requestAnimationFrame(() => {\n this.eventAggregator.publish('process-bet-type-completed')\n })\n })\n })\n }\n }\n\n private shouldResetBackToWinPlace() {\n return !this.raceInformation\n .availableBetTypes()\n .some(\n (betType: BetTypeInformation) =>\n betType.betType() === this.bettingInformation.selectedBetType().betType()\n )\n }\n\n public reset(betType: BetType, preserveSelections = false) {\n timed('BettingInformationManager::reset', () => {\n if (!preserveSelections) {\n this.bettingInformation.clearAll()\n }\n this.bettingInformation.selectedBetType(\n BetTypeInformationBuilder.fromUnTyped(BetType[betType]).build()\n )\n this.bettingInformation.selections.setUpForLegs(this.raceInformation, preserveSelections)\n this.bettingInformation.isFixed(false)\n if (!preserveSelections) {\n this.bettingInformation.setUpFields()\n this.bettingInformation.sizeSameAsToBetType()\n }\n })\n }\n\n private applicationWindow: IAppWindow\n private eventAggregator: IEventAggregator\n private raceInformation!: ObservableRacePage\n private bettingInformation!: BettingInformation\n}\n","interface IEntitlementsData {\n isGiddyUpEntitled: boolean\n reasonText: string\n}\n\nexport class EntitlementsDataTransferObject {\n public success!: boolean\n public errorCode!: number\n public errorMessage!: string\n public data!: IEntitlementsData\n}\n","import { IEntitlementService } from './IEntitlementService'\nimport { EntitlementsDataTransferObject } from '../DataTransferObjects/EntitlementsDataTransferObject'\nimport type { IUrlProvider } from '../Utils/IUrlProvider'\nimport type { IApiService } from '../../Foundation/Services/ApiServiceInjectable'\nimport { injectable, inject } from 'inversify'\n\n@injectable()\nexport class EntitlementService implements IEntitlementService {\n private apiService: IApiService\n\n constructor(\n @inject('IUrlProvider') urlProvider: IUrlProvider,\n @inject('IApiService') apiService: IApiService\n ) {\n this.urlProvider = urlProvider\n this.apiService = apiService\n }\n\n public isEntitled(serviceName: string): Promise {\n switch (serviceName) {\n case 'giddyUp':\n return this.isGiddyUpEntitled()\n default:\n return Promise.resolve(new EntitlementsDataTransferObject())\n }\n }\n\n private isGiddyUpEntitled(): Promise {\n const url = this.urlProvider.getGiddyUpEntitlement\n const promise = this.apiService.get({ url })\n return promise.then()\n }\n\n private urlProvider: IUrlProvider\n}\n","import { ContainerModule, interfaces } from 'inversify'\nimport {\n StartersReactQueryService,\n FormReactQueryService,\n BetEnquiryService,\n} from '../Services/Services'\nimport { IBetEnquiryService } from '../Services/IBetEnquiryService'\nimport { IStartersService } from '../Services/IStartersService'\n\nimport { LegacyBetAdapter } from '../Model/LegacyBetAdapter'\nimport { ILegacyBetAdapter } from '../Model/ILegacyBetAdapter'\nimport { IUrlProvider } from '../Utils/IUrlProvider'\nimport { UrlProvider } from '../Utils/UrlProvider'\nimport { IErrorHandler } from '../Utils/IErrorHandler'\nimport { ErrorHandler } from '../Utils/ErrorHandler'\nimport { IBettingInformationManager } from '../Model/IBettingInformationManager'\nimport BettingInformationManager from '../Model/BettingInformationManager'\nimport { IEntitlementService } from '../Services/IEntitlementService'\nimport { EntitlementService } from '../Services/EntitlementService'\nimport { IFormService } from '../Services/IFormService'\n\nconst services = new ContainerModule((bind: interfaces.Bind) => {\n bind('ILegacyBetAdapter').to(LegacyBetAdapter).inSingletonScope()\n bind('IStartersService').to(StartersReactQueryService).inSingletonScope()\n bind('IBetEnquiryService').to(BetEnquiryService).inSingletonScope()\n bind('IUrlProvider').to(UrlProvider)\n bind('IErrorHandler').to(ErrorHandler)\n bind('IBettingInformationManager').to(BettingInformationManager)\n bind('IEntitlementService').to(EntitlementService)\n bind('IFormService').to(FormReactQueryService).inSingletonScope()\n})\n\nexport default services\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\nimport type { IDisposable } from './IDisposable'\nimport type { IEventAggregator } from '../Messaging/IEventAggregator'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport abstract class Disposable implements IDisposable {\n constructor(eventAggregator: IEventAggregator) {\n this.evtAggregator = eventAggregator\n this.disposableEventAggregatorSubscriptions = new Map()\n this.disposed = false\n this.onDisposal = () => undefined\n }\n\n protected registerDisposals(func: Function) {\n this.onDisposal = func\n }\n\n public dispose() {\n if (this.disposed) return\n this.disposed = true\n this.onDisposal()\n for (const topic of this.disposableEventAggregatorSubscriptions.keys()) {\n this.removeSubscriptions(topic)\n }\n this.disposableEventAggregatorSubscriptions.clear()\n }\n\n public mergeDisposables(other: Map) {\n for (const topic of other.keys()) {\n const otherFunctions = other.get(topic)\n\n if (!otherFunctions) {\n continue\n }\n\n if (!this.disposableEventAggregatorSubscriptions.has(topic)) {\n this.disposableEventAggregatorSubscriptions.set(topic, otherFunctions)\n }\n\n const existingFunctions = this.disposableEventAggregatorSubscriptions.get(topic)\n\n if (existingFunctions) {\n this.disposableEventAggregatorSubscriptions.set(\n topic,\n existingFunctions.concat(otherFunctions)\n )\n }\n }\n }\n\n protected safeSubscribe(topic: string, func: Function) {\n if (!this.disposableEventAggregatorSubscriptions.has(topic)) {\n this.disposableEventAggregatorSubscriptions.set(topic, [])\n }\n\n this.disposableEventAggregatorSubscriptions.get(topic)?.push(func)\n\n this.evtAggregator.subscribe(topic, func)\n }\n\n protected removeSubscriptions(topic: string) {\n const callbacks = this.disposableEventAggregatorSubscriptions.get(topic)\n\n if (callbacks) {\n for (const func of callbacks) {\n this.evtAggregator.unsubscribe(topic, func)\n }\n }\n this.disposableEventAggregatorSubscriptions.delete(topic)\n }\n\n protected evtAggregator: IEventAggregator\n private disposed: boolean\n private disposableEventAggregatorSubscriptions: Map\n private onDisposal: Function\n}\n","export enum RaceDisplayType {\n Unknown,\n Starters,\n Results,\n}\n","import * as ko from 'knockout'\nimport { dayjs } from '@mobi/utils'\nimport { FeatureFlags } from '@mobi/settings'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { IRaceDisplayStateManagerViewModel } from './IRaceDisplayStateManagerViewModel'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IStartersService } from '@classic/Betting-v2/Services/IStartersService'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport { injectable, inject } from 'inversify'\nimport { RacePageResponseType } from '@classic/Betting-v2/Types/RacePageResponseType'\nimport ObservableResultsPage from '@classic/Betting-v2/Model/Observables/ObservableResultsPage'\nimport { IObservablePage } from '@classic/Betting-v2/Model/Observables/IObservablePage'\nimport { ErrorHandler } from '@classic/Betting-v2/Utils/ErrorHandler'\nimport type { IErrorHandler } from '@classic/Betting-v2/Utils/IErrorHandler'\nimport type { IFormService } from '@classic/Betting-v2/Services/IFormService'\nimport type { IUrlProvider } from '@classic/Betting-v2/Utils/IUrlProvider'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { state$ as deviceState$ } from '@core/State/Device'\nimport {\n iotSubscribeTopics as subscribeToRaceStateEvents,\n iotUnsubscribeTopics as unsubscribeFromRaceStateEvents,\n EventData,\n RaceDelayStatus,\n ToteRaceResultsDelayedPushEvent,\n ToteRaceAbandonedPushEvent,\n ToteRaceStatusChangedPushEvent,\n isToteRaceStatusChangedPushEvent,\n isToteRacePoolCompletedPushEvent,\n isToteRaceResultsDelayedPushEvent,\n isToteRaceAbandonedPushEvent,\n getToteRaceTopics,\n getFobMarketSettlementTopic,\n hasRaceId,\n hasMarketId,\n isFobMarketSettlementPushEvent,\n} from '@core/State/PushData'\nimport { RaceDisplayType } from './RaceDisplayType'\n\n@injectable()\nexport class RaceDisplayStateManagerViewModel\n extends Disposable\n implements IRaceDisplayStateManagerViewModel\n{\n private startersService: IStartersService\n private formService: IFormService\n private errorHandler: IErrorHandler\n private urlProvider: IUrlProvider\n private currentTopics: string[] = []\n private isRaceCloseFeatureActive = false\n private raceStatusSubscription!: Rx.IDisposable | null\n private ldSubscription!: Rx.IDisposable\n private deviceSubscription!: Rx.IDisposable\n private refetchTimer!: number\n public meetingId!: string\n public raceNumber!: number\n public meetingDate!: Date\n public raceDisplayState!: ko.Observable\n public component!: ko.Computed\n public raceInformation!: IObservablePage\n public ready: ko.Observable\n private raceRefreshCommandHandler!: (forceClear: boolean) => void | null\n\n private appWindow: IAppWindow\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('IStartersService') startersService: IStartersService,\n @inject('IFormService') formService: IFormService,\n @inject('IAppWindow') appWindow: IAppWindow,\n @inject('IErrorHandler') errorHandler: IErrorHandler,\n @inject('IUrlProvider') urlProvider: IUrlProvider\n ) {\n super(eventAggregator)\n this.startersService = startersService\n this.formService = formService\n this.errorHandler = errorHandler\n this.urlProvider = urlProvider\n this.ready = ko.observable(false).extend({ notify: 'always' })\n this.appWindow = appWindow\n }\n\n public init(params: { meetingId: string; raceNumber: number; meetingDate: Date }) {\n this.ready(false)\n Guard.notNull(params)\n Guard.notNull(params.meetingId)\n Guard.greaterThanZero(params.raceNumber)\n\n this.meetingId = params.meetingId\n this.raceNumber = params.raceNumber\n this.meetingDate = params.meetingDate\n this.raceInformation = new ObservableRacePage() as unknown as IObservablePage\n this.raceDisplayState = ko.observable(RaceDisplayType[RaceDisplayType.Unknown])\n this.loadDataFromApi(this.meetingId, this.raceNumber, this.meetingDate, true)\n this.registerEventHandlers()\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const isRaceCloseFeatureActive = record.features.get(FeatureFlags.PUSHDATA_RACECLOSE.key)\n\n if (isRaceCloseFeatureActive !== this.isRaceCloseFeatureActive) {\n this.isRaceCloseFeatureActive = isRaceCloseFeatureActive\n this.resubscribeToPushData()\n }\n })\n\n this.deviceSubscription = deviceState$\n .map(value => ({\n hidden: value.get('hidden'),\n hiddenLastChanged: value.get('hiddenLastChange'),\n }))\n .distinctUntilChanged()\n .pairwise()\n // only trigger refresh if in background > 20s\n .filter(\n data => data[1].hiddenLastChanged - data[0].hiddenLastChanged > 20000 && !data[1].hidden\n )\n .delay(1000)\n .subscribe(() => {\n if (this.raceNumber) {\n this.evtAggregator.publish('race-refresh-command', [this.raceNumber], false, false)\n }\n })\n\n this.registerDisposals(() => {\n if (this.ldSubscription) {\n this.ldSubscription.dispose()\n }\n if (this.deviceSubscription) {\n this.deviceSubscription.dispose()\n }\n this.unsubscribeFromPushData()\n window.clearInterval(this.refetchTimer)\n })\n }\n\n protected registerEventHandlers() {\n this.safeSubscribe(\n 'race-refresh-command',\n (raceNumbersToRefresh: number[], shouldClearSelections = false) => {\n this.raceRefreshCommandHandler = (forceClear: boolean) => {\n if (raceNumbersToRefresh != null && raceNumbersToRefresh.length > 0) {\n if (raceNumbersToRefresh.length === 1) {\n this.loadDataFromApi(this.meetingId, this.raceNumber, this.meetingDate, forceClear)\n } else {\n this.refreshDataFromApi(this.meetingId, this.meetingDate, raceNumbersToRefresh)\n }\n }\n if (shouldClearSelections) {\n this.evtAggregator.publish('clear-all-selections-command')\n }\n }\n\n this.raceRefreshCommandHandler(false)\n }\n )\n\n this.safeSubscribe('race-navigate-command', (command: { raceNumber: number }) => {\n this.urlProvider\n .getRacePageWebUrl(this.meetingId, this.meetingDate, command.raceNumber)\n .then(url => {\n this.appWindow.changeHashTo(url)\n this.resubscribeToPushData()\n })\n })\n\n this.safeSubscribe('race-route-updated-command', (command: { raceNumber: number }) => {\n this.loadDataFromApi(this.meetingId, command.raceNumber, this.meetingDate, true)\n // raceNumber is updated in the above function call\n this.resubscribeToPushData()\n window.clearInterval(this.refetchTimer)\n })\n\n this.safeSubscribe('load-mystery-bet', (command: { raceNumber: number }) => {\n this.evtAggregator.publish('stop-all-race-replay')\n const mysteryDate = dayjs(this.meetingDate).format('YYYY-MM-DD')\n this.appWindow.changeHashTo(\n `#tote/mystery/${this.meetingId}/${command.raceNumber}?date=${mysteryDate}`\n )\n })\n }\n\n protected loadDataFromApi(\n meetingId: string,\n raceNumber: number,\n meetingDate: Date,\n forceClear: boolean\n ) {\n this.raceNumber = raceNumber\n this.formService.updateQueryCache(meetingId, meetingDate, raceNumber)\n this.fetchDataFromApi(\n this.startersService.retrieveCompleteRace(meetingId, raceNumber, meetingDate),\n forceClear\n )\n }\n\n protected refreshDataFromApi(meetingId: string, meetingDate: Date, raceNumbers: number[]) {\n const promise = this.startersService.retrieveStartersForRaces(\n meetingId,\n meetingDate,\n raceNumbers\n )\n this.fetchDataFromApi(promise, false)\n }\n\n protected fetchDataFromApi(promise: Promise, forceClear: boolean) {\n this.evtAggregator.publish('stop-all-race-replay')\n this.ready(false)\n promise\n .then(model => {\n if (!forceClear) {\n forceClear = this.raceInformation.pageType !== model.pageType\n }\n\n switch (model.pageType) {\n case RacePageResponseType.Starters:\n if (model.pageType !== this.raceInformation.pageType) {\n const observableRacePage = new ObservableRacePage()\n observableRacePage.meetingInformation = this.raceInformation.meetingInformation\n this.raceInformation = observableRacePage as unknown as IObservablePage\n }\n this.raceInformation.merge(model, forceClear)\n this.raceDisplayState(RaceDisplayType[RaceDisplayType.Starters])\n break\n case RacePageResponseType.Results:\n if (model.pageType !== this.raceInformation.pageType) {\n const observableResultsPage = new ObservableResultsPage()\n observableResultsPage.meetingInformation = this.raceInformation.meetingInformation\n observableResultsPage.raceNumber(this.raceNumber)\n this.raceInformation = observableResultsPage\n }\n this.raceInformation.merge(model, forceClear)\n ;(this.raceInformation as ObservableResultsPage).raceNumber(this.raceNumber)\n this.raceDisplayState(RaceDisplayType[RaceDisplayType.Results])\n break\n default:\n this.raceDisplayState(RaceDisplayType[RaceDisplayType.Unknown])\n break\n }\n this.ready(true)\n this.resubscribeToPushData()\n })\n .catch(error => {\n if (error.silent) return\n\n if (!forceClear && this.raceRefreshCommandHandler) {\n this.raceRefreshCommandHandler(true)\n return\n }\n\n if (\n error &&\n error.response &&\n error.response.status === ErrorHandler.ERROR_CODE_NOT_FOUND\n ) {\n this.errorHandler.showErrorMessage('Error', 'Sorry - race not found.')\n throw error\n } else {\n let errorTitle = 'Error'\n let errorMessage = 'Sorry - something went wrong. Please try again.'\n\n if (window && window.navigator && !window.navigator.onLine) {\n errorTitle = 'Network Error'\n errorMessage = 'Please check your internet connection.'\n }\n\n this.errorHandler.showErrorMessage(errorTitle, errorMessage)\n throw error\n }\n })\n }\n\n private unsubscribeFromPushData() {\n if (this.currentTopics && this.currentTopics.length > 0) {\n unsubscribeFromRaceStateEvents(this.currentTopics)\n this.currentTopics.length = 0\n }\n if (this.raceStatusSubscription) {\n this.raceStatusSubscription.dispose()\n this.raceStatusSubscription = null\n }\n }\n\n private resubscribeToPushData() {\n this.unsubscribeFromPushData()\n\n if (this.isRaceCloseFeatureActive) {\n const raceId = this.getRaceKey(this.raceNumber)\n if (raceId && raceId.length > 0) {\n this.currentTopics = getToteRaceTopics(raceId, [\n 'resultsDelay',\n 'statusChanged',\n 'poolCompleted',\n 'abandonedChanged',\n ])\n }\n const marketId = this.getMarketId(this.raceNumber)\n if (marketId && marketId.length > 0) {\n this.currentTopics.push(getFobMarketSettlementTopic(marketId))\n }\n }\n\n if (this.currentTopics.length > 0) {\n let raceState$ = subscribeToRaceStateEvents(this.currentTopics).filter(data => {\n if (!data) {\n return false\n }\n const payload = data.payload\n if (hasRaceId(payload)) {\n const isRaceIdMatched = payload.raceId.toString() === this.getRaceKey(this.raceNumber)\n const canHandle =\n isToteRacePoolCompletedPushEvent(payload) ||\n isToteRaceResultsDelayedPushEvent(payload) ||\n isToteRaceStatusChangedPushEvent(payload) ||\n isToteRaceAbandonedPushEvent(payload)\n return isRaceIdMatched && canHandle\n }\n\n if (hasMarketId(payload)) {\n return payload.marketId.toString() === this.getMarketId(this.raceNumber)\n }\n\n return false\n })\n\n let [poolComplete$, others$] = raceState$.partition(data => {\n return isToteRacePoolCompletedPushEvent(data.payload)\n })\n\n poolComplete$ = poolComplete$.debounce(4000)\n others$ = others$.debounce(2000)\n raceState$ = others$.merge(poolComplete$)\n this.raceStatusSubscription = raceState$.subscribe(this.handlePushData.bind(this))\n }\n }\n\n private getRaceKey(raceNumber: number): string {\n const observableRace = this.raceInformation.meetingInformation\n .races()\n .find(x => x.raceNumber() === raceNumber)\n return observableRace != undefined ? observableRace.key() : ''\n }\n\n private getMarketId(raceNumber: number): string {\n const race = this.raceInformation.meetingInformation\n .races()\n .find(x => x.raceNumber() === raceNumber)\n\n return race && race.fixedOddsInfo && race.fixedOddsInfo.marketSequence()\n ? race.fixedOddsInfo.marketSequence().toString()\n : ''\n }\n\n private handlePushData(event: EventData) {\n if (!event || !event.payload) {\n return\n }\n const payload = event.payload\n\n if (isToteRaceResultsDelayedPushEvent(payload)) {\n return this.handleToteRaceDelayChange(payload)\n }\n\n if (isToteRaceStatusChangedPushEvent(payload)) {\n return this.handleRaceStatusChange(payload)\n }\n\n if (isToteRacePoolCompletedPushEvent(payload)) {\n return this.handleTotePoolCompleted()\n }\n\n if (isToteRaceAbandonedPushEvent(payload)) {\n return this.handleRaceAbandoned(payload)\n }\n\n if (isFobMarketSettlementPushEvent(payload)) {\n this.handleFobMarketSettlement()\n }\n }\n\n private handleRaceStatusChange(event: ToteRaceStatusChangedPushEvent) {\n const newRaceStatus = event.status.toLowerCase()\n\n // Race Closed event is handled in starter page when status is open\n if (newRaceStatus === 'closed' && this.getRaceStatus().toLowerCase() === 'open') {\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewModel = this\n this.refreshUntil(() => {\n if (newRaceStatus === 'interim_fourth') {\n if (viewModel.raceDisplayState() === RaceDisplayType[RaceDisplayType.Results]) {\n const resultsInformation = viewModel.raceInformation as ObservableResultsPage\n const simplePlacings = ko.unwrap(resultsInformation.simplePlacings) as unknown as string\n const isFullyResulted = !!simplePlacings && simplePlacings.split(/[,-]/).length === 4\n return isFullyResulted\n }\n return false\n }\n\n const isStatusMatched = viewModel.getRaceStatus().toLowerCase() === newRaceStatus\n return isStatusMatched\n })\n }\n\n private handleTotePoolCompleted() {\n this.evtAggregator.publish('race-refresh-command', [this.raceNumber], false, false)\n }\n\n private handleRaceAbandoned(event: ToteRaceAbandonedPushEvent) {\n this.refreshUntil(() => {\n const raceStatus = this.getRaceStatus().toLowerCase()\n return event.status === 'abandoned' ? raceStatus === 'abandoned' : raceStatus !== 'abandoned'\n })\n }\n\n private handleFobMarketSettlement() {\n this.evtAggregator.publish('race-refresh-command', [this.raceNumber], false, false)\n }\n\n private handleToteRaceDelayChange({ status, comment }: ToteRaceResultsDelayedPushEvent) {\n const protestMsg = this.getRaceDelayDisplayText(status, comment)\n if (!!status && this.raceDisplayState() === RaceDisplayType[RaceDisplayType.Results]) {\n ;(this.raceInformation as ObservableResultsPage).protestStatus(protestMsg)\n } else {\n this.refreshUntil(() => {\n if (this.raceDisplayState() === RaceDisplayType[RaceDisplayType.Results]) {\n return (this.raceInformation as ObservableResultsPage).protestStatus() === protestMsg\n }\n return false\n })\n }\n }\n\n private getRaceDelayDisplayText(status: RaceDelayStatus, comment?: string): string | undefined {\n const mappedRaceDelayStatuses: Record = {\n holdAllTickets: 'HOLD ALL TICKETS',\n protestPending: 'PROTEST PENDING',\n protestDismissed: 'PROTEST DISMISSED',\n protestUpheld: 'PROTEST UPHELD',\n none: undefined,\n }\n const raceDelayStatus = mappedRaceDelayStatuses[status]\n const raceDelayComment = comment ? ' - ' + comment : ''\n return raceDelayStatus ? raceDelayStatus + raceDelayComment : undefined\n }\n\n private getRaceStatus() {\n return ko.unwrap(\n this.raceInformation.meetingInformation.selectedRace.raceStatus\n ) as unknown as string\n }\n\n private refreshUntil(isRefreshed: () => boolean) {\n if (!isRefreshed()) {\n this.evtAggregator.publish('race-refresh-command', [this.raceNumber], false, false)\n if (!isRefreshed()) {\n window.clearInterval(this.refetchTimer)\n const eventReceivedTime = Date.now()\n this.refetchTimer = window.setInterval(() => {\n if (isRefreshed()) {\n window.clearInterval(this.refetchTimer)\n return\n }\n this.evtAggregator.publish('race-refresh-command', [this.raceNumber], false, false)\n const fetchTimeout = 10000\n if (Date.now() > eventReceivedTime + fetchTimeout) {\n window.clearInterval(this.refetchTimer)\n }\n }, 3000)\n }\n }\n }\n}\n","import { PushEvent, ToteRaceStatusChangedPushEvent, FobMarketSettlementPushEvent } from '.'\n\ntype EventWithRaceId = Pick\n\ntype EventWithMarketId = Pick\n\nexport function hasRaceId(payload: PushEvent): payload is EventWithRaceId {\n const key: keyof EventWithRaceId = 'raceId'\n return payload && key in payload\n}\n\nexport function hasMarketId(payload: PushEvent): payload is EventWithMarketId {\n const key: keyof EventWithMarketId = 'marketId'\n return payload && key in payload\n}\n","import { FixedOddsMarketCodes, type MarketCodesType } from '@mobi/api-types'\n\nexport const MORE_BETTING_OPTIONS_ID = 'js-MoreBettingOptions'\n\nexport const CHANGE_BET_TYPE_EVENT = 'change-bettype-to'\n\nexport const FixedOddsMarketDisplayNames = {\n [FixedOddsMarketCodes.HeadToHead]: 'Head to Head',\n [FixedOddsMarketCodes.RunnerVsField]: 'Runner vs Field',\n [FixedOddsMarketCodes.StartingPrice]: 'SP - Fixed',\n} as const\n\n/** Provides filter and sort order for MoreBettingOptions display */\nexport const FixedOddsMarketsInMoreBettingOptions: readonly MarketCodesType[] = [\n 'EO',\n 'IO',\n 'HVH',\n 'H2H',\n 'RVF',\n 'FAV',\n]\n\nexport const BettingInformationOverrides = {\n StartingPrice: [\n {\n title: 'Betting Conditions',\n detail: [\n 'Win Only. Starting Price bets will receive the official on-course bookmaker’s price at the time betting closes. Where an official price cannot be sourced, the TABtouch closing Fixed Odds price shall serve as the SP.',\n ],\n },\n {\n title: 'Betting Rules',\n detail: ['Bet is subject to ‘Refunds and Deductions’ betting rules.'],\n },\n ],\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { CHANGE_BET_TYPE_EVENT } from '@core/Areas/RaceCard/constants'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport type { IBettingInformationManager } from '@classic/Betting-v2/Model/IBettingInformationManager'\nimport type { IStartersService } from '@classic/Betting-v2/Services/IStartersService'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport type { IBettingStateManagerViewModel } from './IBettingStateManagerViewModel'\n\nconst lastSelectedBetType: ko.Observable = ko.observable(null)\n\nexport const resetMatchedRaceBetTypePersist = () => lastSelectedBetType(null)\n\n@injectable()\nexport class BettingStateManagerViewModel\n extends Disposable\n implements IBettingStateManagerViewModel\n{\n private bettingInformationManager: IBettingInformationManager\n private mettingInformationSubscriptions!: ko.Subscription\n\n public startersService: IStartersService\n public bettingInformation!: BettingInformation\n public raceInformation!: ObservableRacePage\n public ready: ko.Observable\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('IBettingInformationManager') bettingInformationManager: IBettingInformationManager,\n @inject('IStartersService') startersService: IStartersService\n ) {\n super(eventAggregator)\n\n this.bettingInformationManager = bettingInformationManager\n this.startersService = startersService\n this.ready = ko.observable(false).extend({ notify: 'always' })\n }\n\n public init(params: { raceInformation: ObservableRacePage }) {\n this.ready(false)\n Guard.notNull(params)\n Guard.notNull(params.raceInformation)\n Guard.notNull(params.raceInformation.meetingInformation)\n\n if (lastSelectedBetType() !== null) {\n const isLastBetTypeAvailable = params.raceInformation\n .availableBetTypes()\n .some(({ betType }) => betType() === lastSelectedBetType())\n if (!isLastBetTypeAvailable) resetMatchedRaceBetTypePersist()\n }\n\n this.raceInformation = params.raceInformation\n this.bettingInformation =\n params.raceInformation.provisionBettingInformation(lastSelectedBetType)\n this.bettingInformation.selections.setUpForLegs(params.raceInformation, false)\n this.bettingInformation.setUpFields()\n this.bettingInformationManager.init(this.raceInformation, this.bettingInformation)\n this.configureDisposal()\n this.setupSubscriptionsAndEventNotifications()\n this.ready(true)\n }\n\n protected setupSubscriptionsAndEventNotifications() {\n this.subscribeToMeetingChanges()\n this.subscribeToBetTypeChanges()\n this.subscribeToSortChange()\n }\n\n private subscribeToMeetingChanges() {\n this.mettingInformationSubscriptions = this.raceInformation.mergeDone.subscribe(mergeIsDone => {\n if (!mergeIsDone) {\n this.ready(false)\n } else {\n const oldRaceNumber = this.bettingInformation.raceNumber\n\n this.bettingInformation.merge(\n this.raceInformation.meetingInformation.meetingId(),\n this.raceInformation.meetingInformation.selectedRace.raceNumber(),\n this.raceInformation.meetingInformation.meetingDate(),\n this.raceInformation.betIdentifier,\n this.raceInformation.meetingInformation.selectedRace.fixedPlacesPaying()\n )\n\n const raceChanged = oldRaceNumber != this.bettingInformation.raceNumber\n this.bettingInformationManager.update(raceChanged)\n\n this.ready(true)\n }\n })\n }\n\n protected subscribeToBetTypeChanges() {\n this.safeSubscribe(CHANGE_BET_TYPE_EVENT, (params: { betType: BetType }) => {\n this.ready(false)\n this.raceInformation.resetStartersSelections()\n if (params.betType !== BetType.Mystery) lastSelectedBetType(params.betType)\n this.bettingInformationManager.processBetTypeChange(params.betType)\n this.ready(true)\n })\n }\n\n protected subscribeToSortChange() {\n this.safeSubscribe('sort-starters', (params: { raceNumber: number; option: SortOption }) => {\n this.ready(false)\n this.bettingInformationManager.processSort(params)\n this.bettingInformation.setSortOption(params.option)\n this.ready(true)\n })\n }\n\n private configureDisposal() {\n this.registerDisposals(() => this.mettingInformationSubscriptions.dispose())\n }\n}\n","import dayjs from 'dayjs'\nimport type {\n SameRaceMultiSelection,\n ToteSelection,\n AllUpSelection,\n FobMatchedSelection,\n RacingBetType,\n EventDetails,\n} from '@mobi/betslip/types'\nimport { BettingInformation } from './BettingInformation'\nimport { BetType } from './Betting/BetType'\nimport { FobSelectionResult } from '../Components/Core/SelectionResults/FobSelectionResult'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport AllUpFormulasDataTransferObject from '../DataTransferObjects/AllUpFormulasDataTransferObject'\nimport SameRaceMultiSelectionResultProcessor, {\n SameRaceMultiSelectionResult,\n} from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiSelectionResultProcessor'\nimport { SameRaceMultiPriceResponse } from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPrice'\nimport ObservableMeetingInformation from './Observables/ObservableMeetingInformation'\nimport WinPlaceSelectionResultProcessor from '../Components/Core/SelectionResults/WinPlaceSelectionResultProcessor'\n\ninterface BetSelectionBuilderBuild {\n bettingInformation: BettingInformation\n numberOfCombinations: number\n allUpFormulas?: AllUpFormulasDataTransferObject\n priceResponse?: SameRaceMultiPriceResponse\n winPlaceStarterOverride?: number\n}\n\nexport const BetSelectionBuilder = {\n build({\n bettingInformation: bi,\n numberOfCombinations,\n allUpFormulas,\n priceResponse,\n winPlaceStarterOverride,\n }: BetSelectionBuilderBuild): QuickbetSelection {\n const shouldAllowPlaceInvestment = BetSelectionBuilder.getShouldAllowPlaceInvestment(bi)\n\n return (\n BetSelectionBuilder.buildSameRaceMulti(bi, priceResponse) ??\n BetSelectionBuilder.buildFixed(bi, shouldAllowPlaceInvestment, winPlaceStarterOverride) ??\n BetSelectionBuilder.buildAllUp(bi, shouldAllowPlaceInvestment, allUpFormulas) ??\n BetSelectionBuilder.buildTote(bi, shouldAllowPlaceInvestment, numberOfCombinations)\n )\n },\n\n buildSameRaceMulti(\n bettingInfo: BettingInformation,\n priceResponse?: SameRaceMultiPriceResponse\n ): QuickbetSelection | null {\n if (BetType.SameRaceMulti !== bettingInfo.selectedBetType().betType()) return null\n\n const selectionResult = new SameRaceMultiSelectionResultProcessor().getSelectionsResult(\n bettingInfo,\n bettingInfo.raceNumber\n ) as SameRaceMultiSelectionResult\n\n const acceptors: SameRaceMultiSelection['acceptors'] = selectionResult.fobSelectionResults.map<\n SameRaceMultiSelection['acceptors'][0]\n >(result => ({\n acceptorNumber: result.starterNumber,\n legNumber: result.legNumber,\n }))\n\n const selection: SameRaceMultiSelection = {\n type: 'same-race-multi',\n fixtureId: bettingInfo.meetingId,\n fixtureDate: dayjs(bettingInfo.meetingDate).format('YYYY-MM-DD'),\n raceNumber: bettingInfo.raceNumber,\n acceptors,\n winPrice: priceResponse?.price || 0,\n }\n\n return {\n bettingType: 'fixed-odds-racing',\n selection,\n selectionDetails: {} as EventDetails,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment: false,\n }\n },\n\n buildFixed(\n bi: BettingInformation,\n shouldAllowPlaceInvestment: boolean,\n winPlaceStarterOverride?: number\n ): QuickbetSelection | null {\n if (!bi.isFixed()) return null\n\n const selectionResult = new WinPlaceSelectionResultProcessor(\n winPlaceStarterOverride\n ).getSelectionsResult(bi, bi.raceNumber)\n const result: FobSelectionResult = selectionResult as FobSelectionResult\n const selection: FobMatchedSelection = {\n type: 'fob-matched',\n fixtureId: bi.meetingId,\n fixtureDate: dayjs(bi.meetingDate).format('YYYY-MM-DD'),\n raceNumber: bi.raceNumber,\n acceptorNumber: result.starterNumber,\n propositionSeq: result.propositionSequence.toString(),\n winPrice: Number(result.winPrice),\n winPriceLastSeen: Number(result.winPrice),\n placePrice: result.placePrice !== '-' ? Number(result.placePrice) : null,\n placePriceLastSeen: result.placePrice !== '-' ? Number(result.placePrice) : null,\n priceSource: 'selection',\n }\n return {\n bettingType: 'fixed-odds-racing',\n selection,\n selectionDetails: null,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n },\n\n buildAllUp(\n bi: BettingInformation,\n shouldAllowPlaceInvestment: boolean,\n allUpFormulas?: AllUpFormulasDataTransferObject\n ): QuickbetSelection | null {\n if (!bi.selectedBetType().isAllUp()) return null\n\n bi.allUpFormulas.assignFormulas(allUpFormulas)\n const selection: AllUpSelection = {\n fixtureId: bi.meetingId,\n fixtureDate: dayjs(bi.meetingDate).format('YYYY-MM-DD'),\n betType: 'All Up',\n formulas: bi.allUpFormulas.formulas().map(formula => {\n return {\n formula: formula.number(),\n numberOfCombinations: formula.numberOfCombinations(),\n isSelected: formula.isSelected(),\n }\n }),\n details: getAllUpSelections(bi),\n }\n return {\n bettingType: 'tote-racing',\n selection,\n selectionDetails: null,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n },\n\n buildTote(\n bi: BettingInformation,\n shouldAllowPlaceInvestment: boolean,\n numberOfCombinations: number\n ): QuickbetSelection {\n const selection: ToteSelection = {\n fixtureId: bi.meetingId,\n fixtureDate: dayjs(bi.meetingDate).format('YYYY-MM-DD'),\n raceNumber: bi.raceNumber,\n betType: getTabTouchCoreBetType(bi),\n selectionString: getSelectionString(bi),\n numberOfCombinations,\n isAllways: bi.isAllwaysBet(),\n isLegIn: bi.isLegIn(),\n isRovingBanker: bi.rovingBanker(),\n }\n return {\n bettingType: 'tote-racing',\n selection,\n selectionDetails: null,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n },\n\n getShouldAllowPlaceInvestment(bi: BettingInformation) {\n if (BetType.WinPlace !== bi.selectedBetType().betType()) return false\n\n const { selectedRace: race } = bi.meetingInformation as ObservableMeetingInformation\n if (bi.isFixed()) {\n return race.isFixedOddsRace() && race.fixedOddsInfo.isPlaceAvailable()\n } else {\n return race.hasPlacePool()\n }\n },\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getAllUpSelections(bettingContext: BettingInformation): AllUpSelection['details'] {\n const allUpSelections: AllUpSelection['details'] = []\n for (const legSelection of bettingContext.getLegsForProcessing()) {\n const raceKey = legSelection.raceKey()\n const selection: AllUpSelection['details'][0] = {\n raceNum: raceKey.raceNumber(),\n poolType: getTabTouchCorePoolType(raceKey.poolInfo.selectedPool().name()),\n betSelections: bettingContext.resultsForLeg(raceKey.leg()).selectionStrings[0],\n }\n allUpSelections.push(selection)\n }\n return allUpSelections\n}\n\nfunction getTabTouchCorePoolType(poolName: string): AllUpSelection['details'][0]['poolType'] {\n switch (poolName) {\n case 'Win':\n return 'W'\n case 'Place':\n return 'P'\n case 'Eachway':\n return 'EW'\n case 'Quinella':\n return 'Q'\n default:\n throw new Error('Invalid pool')\n }\n}\n\nfunction getSelectionString(bettingContext: BettingInformation): string {\n const selectionStringParts: string[] = []\n if (bettingContext.selectedBetType().multiBet()) {\n // Double, Quaddie, All-up\n for (const legSelection of bettingContext.getLegsForProcessing()) {\n const leg = legSelection.raceKey().leg()\n const selectionString = bettingContext.resultsForLeg(leg).selectionStrings[0]\n selectionStringParts.push(selectionString)\n }\n } else {\n const results = bettingContext.results()\n results.selectionStrings.forEach(selectionString => {\n if (selectionString) {\n // Allways bets will have empty leg selections\n selectionStringParts.push(selectionString)\n }\n })\n }\n if (bettingContext.isAllwaysBet()) {\n return selectionStringParts[0]\n }\n return selectionStringParts.join('/')\n}\n\nfunction getTabTouchCoreBetType(bettingInformation: BettingInformation): RacingBetType {\n const defaultReturnValue: RacingBetType = 'Win & Place'\n\n if (!bettingInformation || !bettingInformation.selectedBetType) {\n return defaultReturnValue\n }\n\n const selectedBetType = bettingInformation.selectedBetType()\n if (selectedBetType == null || !selectedBetType.betType) {\n return defaultReturnValue\n }\n\n const betType = selectedBetType.betType()\n\n switch (betType) {\n case BetType.WinPlace:\n return 'Win & Place'\n case BetType.Quinella:\n return 'Quinella'\n case BetType.Exacta:\n return 'Exacta'\n case BetType.Trifecta:\n return 'Trifecta'\n case BetType.First4:\n return 'First 4'\n case BetType.Double:\n return 'Double'\n case BetType.Quaddie:\n return 'Quaddie'\n case BetType.Mystery:\n return 'Mystery'\n case BetType.AllUp:\n return 'All Up'\n default:\n return defaultReturnValue\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport type { ISelectionResult } from '../SelectionResults/ISelectionResult'\nimport type { ISelectionContext } from './ISelectionContext'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport { timed } from '@core/Utils'\n\ntype CallbackMap = Map\n\nexport default class SelectionProcessor {\n constructor(\n private eventAggregator: IEventAggregator,\n private bettingContext: BettingInformation,\n private model: ObservableRacePage\n ) {\n Guard.notNull(bettingContext)\n\n this.disposableCallbacks = new Map()\n\n this.safeSubscribe(\n 'selection-made-command',\n (command: {\n raceNumber: number\n starter: IObservableStarter\n context: ISelectionContext\n }) => {\n this.processSelection(command)\n }\n )\n\n this.safeSubscribe(\n 'field-selected-command',\n (command: { raceNumber: number; position: number; selected: boolean }) => {\n this.processField(command)\n }\n )\n\n this.safeSubscribe(\n 'sameas-selected-command',\n (command: { raceNumber: number; row: number; column: number; selected: boolean }) => {\n this.processSameAs(command)\n }\n )\n\n this.safeSubscribe('clear-all-selections-command', () => {\n this.clearAllSelections()\n })\n }\n\n public callBacksForDisposal() {\n return this.disposableCallbacks\n }\n\n public getSelections(race: number): ISelectionResult {\n return timed('Process Generate Selection Result', () => {\n return this.bettingContext\n .selectedBetType()\n .selectionStringProcessor.selections(\n this.bettingContext,\n race,\n this.bettingContext.selections\n )\n })\n }\n\n private processSelection(command: {\n raceNumber: number\n starter: IObservableStarter\n context: ISelectionContext\n }) {\n timed('Process Selection', () => {\n let updateSelections: IObservableStarter[] = []\n const selectedBetType = this.bettingContext.selectedBetType()\n\n if (selectedBetType && selectedBetType.processor) {\n updateSelections = selectedBetType.processor.generateSelections(\n command.starter,\n this.model.getStartersForRace(command.raceNumber),\n this.bettingContext,\n command.context\n )\n }\n\n this.bettingContext.selections.assignSelectionForRace(command.raceNumber, updateSelections)\n })\n }\n\n private processField(command: { raceNumber: number; position: number; selected: boolean }) {\n timed('Process Field', () => {\n this.bettingContext\n .selectedBetType()\n .processor.processFieldSelection(\n this.model.getStartersForRace(command.raceNumber),\n this.bettingContext.selections.getStartersForRace(command.raceNumber),\n this.bettingContext,\n command.position,\n command.selected\n )\n })\n }\n\n private processSameAs(command: {\n raceNumber: number\n row: number\n column: number\n selected: boolean\n }) {\n timed('Process Same As', () => {\n this.bettingContext\n .selectedBetType()\n .processor.processSameAsSelection(\n this.model.getStartersForRace(command.raceNumber),\n this.bettingContext.selections.getStartersForRace(command.raceNumber),\n this.bettingContext,\n command.row,\n command.column,\n command.selected\n )\n })\n }\n\n private clearAllSelections() {\n timed('Clear all selections', () => {\n this.bettingContext\n .selectedBetType()\n .processor.clearAllSelections(\n this.model.getAllStarters(),\n this.bettingContext.selections.getAllSelectedStarters()\n )\n this.bettingContext.turnOffAllSelections()\n })\n }\n\n private safeSubscribe(topic: string, func: Function) {\n if (!this.disposableCallbacks.has(topic)) {\n this.disposableCallbacks.set(topic, [])\n }\n\n this.disposableCallbacks.get(topic)?.push(func)\n\n this.eventAggregator.subscribe(topic, func)\n }\n\n private readonly disposableCallbacks: CallbackMap\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { hexColors } from '@mobi/settings'\n\nexport interface SpecialIndicatorProps {\n height?: string\n width?: string\n className?: string\n viewBox?: string\n themeName?: string\n}\n\nexport const SpecialIndicatorStyled = styled('svg')(\n ({ height, width, themeName }: SpecialIndicatorProps) => ({\n display: 'inline-block',\n fill: themeName === 'purple' ? hexColors.white : colors.specialIndicator.foreground,\n width: width || '2rem',\n height: height || '2rem',\n verticalAlign: 'middle',\n })\n)\n","import { useQuery } from 'react-query'\n\nimport { useLogon } from '@core/Utils/hooks'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { logError } from '@core/Utils'\n\nexport type InducementEntitlement = {\n Entitlement: {\n BamEntitlementId: string\n }\n IsEntitled: boolean\n ReasonText: string\n HiddenReasonText: string\n Condition: string\n CallToAction: null\n}\n\nexport const fetchInducements = async (): Promise => {\n return await get({ url: '/api/pyos/inducemententitlement' })\n}\n\nexport const useInducementService = (): boolean => {\n const { isLoggedIn, accountNumber } = useLogon()\n\n const queryKey = isLoggedIn\n ? [queryKeys.inducement, accountNumber]\n : [queryKeys.inducement, 'logged-out']\n\n const { isError, error, data } = useQuery(queryKey, fetchInducements, {\n enabled: isLoggedIn !== null,\n staleTime: 60 * 60 * 1000, // 60 min\n })\n\n if (isError) {\n logError(`Unable to check 'can show inducements' flag: ${(error as Error).message}`)\n return false\n }\n\n return data?.IsEntitled ?? false\n}\n","import React from 'react'\nimport { colors } from '../../Settings'\nimport { SpecialIndicatorStyled, SpecialIndicatorProps } from './SpecialIndicator.styles'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { hexColors } from '@mobi/settings'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\n\nexport const SpecialIndicator: React.FC = ({\n height,\n width,\n className,\n viewBox,\n themeName,\n}) => {\n const canShowInducements = useInducementService()\n\n return canShowInducements ? (\n \n \n \n \n ) : null\n}\n","import styled from '@emotion/styled'\nimport { SpecialIndicator } from '@core/Components/SpecialIndicator'\nimport { hexColors } from '@mobi/settings/src/hexColors'\n\nexport const ReceiptListStyled = styled('dl')({\n margin: 0,\n fontSize: '1.2rem',\n lineHeight: 1.4,\n})\n\nexport const ReceiptListRowStyled = styled('div')({\n marginBottom: '0.5rem',\n display: 'flex',\n flexWrap: 'wrap',\n\n '&:last-of-type': {\n marginBottom: 0,\n },\n})\n\nexport const ReceiptListItemStyled = styled('dt')({\n flexGrow: 1,\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n\n '&::after': {\n content: '\"\"',\n flexGrow: 1,\n height: '0.2rem',\n marginLeft: '0.4rem',\n marginRight: '0.4rem',\n borderBottom: '0.2rem dotted rgba(0,0,0,0.1)',\n },\n})\n\nexport const ReceiptListItemTextStyled = styled('dd')({\n margin: 0,\n textAlign: 'right',\n})\n\nexport const ReceiptSpecialIndicator = styled(SpecialIndicator)({\n width: '1.6rem',\n height: '1.6rem',\n})\n\nexport const ReceiptCampaignTextStyled = styled.span<{ isBonusBet: boolean }>(({ isBonusBet }) => ({\n color: isBonusBet ? hexColors.orange : hexColors.cobalt,\n}))\n","import styled from '@emotion/styled'\nimport { transparentize } from 'polished'\n\nimport { hexColors } from '@mobi/settings'\n\nimport { ReceiptListRowStyled } from '@core/Areas/Quickbet/Components/Receipt/Receipt.styles'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\n\ninterface BettingDrawerStyledProps {\n open: boolean\n zIndexOverride?: number\n}\n\nexport const MAX_DRAWER_CONTENT_WIDTH = '40rem'\n\nexport const BettingDrawerStyled = styled('div')(\n {\n backgroundColor: transparentize(0.1, hexColors.white),\n bottom: 0,\n boxSizing: 'border-box',\n left: 0,\n position: 'fixed',\n right: 0,\n transition: 'transform 0.2s',\n },\n\n ({ open, zIndexOverride }) => ({\n transform: `translateY(${open ? 0 : '100%'})`,\n zIndex: zIndexOverride == null ? 8 : zIndexOverride,\n paddingBottom: isReactNativeApp ? '0' : 'env(safe-area-inset-bottom, 0)',\n })\n)\n\nexport const BonusBetReceiptRowStyled = styled(ReceiptListRowStyled)({\n color: hexColors.mariner,\n fontWeight: 'normal',\n})\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { BettingDrawerStyled, MAX_DRAWER_CONTENT_WIDTH } from './BettingDrawer.styles'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\nexport const BettingDrawer: React.FC<{\n open: boolean\n handleQuickbetClick(): void\n handleAddToBetslipClick?(): void\n dataTId?: string\n}> = ({ open, handleQuickbetClick, handleAddToBetslipClick, dataTId = 'forward-buttons' }) =>\n ReactDOM.createPortal(\n \n \n \n {handleAddToBetslipClick && (\n \n \n Add to Betslip\n \n \n )}\n\n \n \n Quickbet\n \n \n \n \n ,\n document.body\n )\n","import styled from '@emotion/styled'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\n\nexport const SameRaceMultiQuickbetStyled = styled(GridCell)({\n paddingTop: '2px', // price row above also has margin/padding\n})\n","import { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport React from 'react'\nimport { SameRaceMultiQuickbetStyled } from './SameRaceMultiQuickbet.styles'\n\nexport interface SameRaceMultiQuickbetProps {\n isValid: boolean\n handleQuickbetSelected(): void\n}\n\nexport function SameRaceMultiQuickbet({\n isValid,\n handleQuickbetSelected,\n}: SameRaceMultiQuickbetProps) {\n return (\n \n \n Quickbet\n \n \n )\n}\n","import { GridCell } from '@mobi/component-library/Common/Grid'\nimport { ErrorMessageStyled } from '@core/Components/Messages/Messages.styles'\nimport styled from '@emotion/styled'\n\nexport const SameRaceMultiPriceDetailContainerStyled = styled(GridCell)({\n fontSize: '1.4rem', // 1.4 * 10 = 14px\n display: 'flex',\n paddingBottom: '3px', // 'quickbet' button below also has padding/margin\n})\n\nexport const SameRaceMultiPriceTitleStyled = styled('div')({\n flex: 1, // siblings equal width\n})\n\nexport const SameRaceMultiPriceDetailStyled = styled('div')({\n display: 'flex',\n flex: 1, // siblings equal width\n justifyContent: 'space-between', // children left/right justified\n})\n\nexport const SameRaceMultiKeyStyled = styled('span')({\n fontWeight: 'normal',\n})\n\nexport const SameRaceMultiValueStyled = styled('span')({\n fontWeight: 'bold',\n marginLeft: '3px',\n})\n\nexport const SameRaceMultiErrorMessageStyled = styled(ErrorMessageStyled)({\n width: 'unset',\n textAlign: 'center',\n})\n","import { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport React from 'react'\nimport { SameRaceMultiPriceResponse } from './SameRaceMultiPrice'\nimport {\n SameRaceMultiPriceDetailContainerStyled,\n SameRaceMultiPriceDetailStyled,\n SameRaceMultiKeyStyled,\n SameRaceMultiValueStyled,\n SameRaceMultiErrorMessageStyled,\n SameRaceMultiPriceTitleStyled,\n} from './SameRaceMultiPriceDetail.styles'\n\ninterface SelectionPriceDetail {\n isError: boolean\n isLoading: boolean\n data: SameRaceMultiPriceResponse | undefined\n numberOfLegs: number\n}\n\nexport function SameRaceMultiSelectionPriceDetail({\n isError,\n isLoading,\n data,\n numberOfLegs,\n}: SelectionPriceDetail) {\n if (isError) {\n return (\n Unable to retrieve price.\n )\n }\n\n const price = !data?.price\n ? '-'\n : data.price.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n\n return (\n \n Same Race Multi\n\n \n
      \n Legs:\n {numberOfLegs}\n
      \n\n
      \n {isLoading ? (\n \n ) : (\n
      \n Odds:\n {price}\n
      \n )}\n
      \n
      \n
      \n )\n}\n","import styled from '@emotion/styled'\nimport { transparentize } from 'polished'\nimport { hexColors } from '@mobi/settings'\n\ninterface BettingDrawerStyledProps {\n open: boolean\n}\n\nexport const SameRaceMultiBettingDrawerStyled = styled('div')({\n transition: 'transform 0.2s',\n backgroundColor: transparentize(0, hexColors.white),\n boxSizing: 'border-box',\n borderTop: `0.1rem solid ${hexColors.veryLightGrey}`,\n padding: '6px',\n})\n\nexport const SameRaceMultiBettingDrawerContainerStyled = styled('div')(\n {\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n transition: 'transform 0.2s',\n boxSizing: 'border-box',\n zIndex: 8,\n },\n ({ open }) => ({\n transform: `translateY(${open ? 0 : '100%'})`,\n })\n)\n\nexport const SameRaceMultiBettingDrawerNoticeBoxPositionerStyled = styled('div')({\n margin: '10px',\n boxShadow: '0px 0px 5px #aaaa',\n})\n","import React from 'react'\nimport { fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport { GridRow } from '@mobi/component-library/Common/Grid'\nimport dayjs from 'dayjs'\nimport { useQuery } from 'react-query'\nimport { SameRaceMultiQuickbet } from './SameRaceMultiQuickbet'\nimport { SameRaceMultiSelectionPriceDetail } from './SameRaceMultiPriceDetail'\nimport { SameRaceMultiBettingDrawerStyled } from './SameRaceMultiBettingDrawer.styles'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport interface SameRaceMultiPriceResponse {\n price: number // price can not be null since an invalid price will result in an error returned by the mobi API\n}\n\nexport async function getSelectionPrice(\n meetingDate: Date,\n meetingId: string,\n raceNumber: number,\n selections: string\n): Promise {\n const results = await fetchFromApi(\n `/api/meetings/${meetingId}/${dayjs(meetingDate).format(\n 'YYYY-MM-DD'\n )}/race/${raceNumber}/srmSelectionPrice?${selections}`\n )\n return await results.json()\n}\n\nconst queryDefaults = {\n cacheTime: 0,\n retry: 1,\n refetchOnWindowFocus: false,\n}\n\nexport interface SelectionPriceProps {\n isValid: boolean\n meetingDate: Date\n meetingId: string\n raceNumber: number\n starterSelections: boolean[][]\n handleQuickbetSelected(price?: SameRaceMultiPriceResponse): void\n}\n\nexport function SameRaceMultiPrice({\n isValid,\n meetingDate,\n meetingId,\n raceNumber,\n starterSelections,\n handleQuickbetSelected,\n}: SelectionPriceProps) {\n // generate the required query selections format\n // - e.g. selection=10-2&selection=11-1 means RunnerNumber: 10 is Win and RunnerNumber 11 is Top2\n // - selections array MUST be in ascending starter number order\n const selectionsWithStarters = starterSelections\n .map((x, i) => ({ starter: i, legs: x }))\n .filter(x => x.legs.some(s => s))\n const selectionsQuery = selectionsWithStarters\n .map(s => `selection=${s.starter + 1}-${s.legs.indexOf(true) + 1}`)\n .join('&')\n\n const { isLoading, isError, data } = useQuery({\n ...queryDefaults,\n enabled: isValid,\n queryKey: [\n queryKeys.sameRaceMultiGetSelectionPrice,\n meetingDate,\n meetingId,\n raceNumber,\n selectionsQuery,\n ],\n queryFn: () => getSelectionPrice(meetingDate, meetingId, raceNumber, selectionsQuery),\n })\n\n return (\n \n \n \n \n\n \n handleQuickbetSelected(data)}\n />\n \n \n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { NoticeBox } from '@core/Components/NoticeBox'\nimport { SameRaceMultiPrice, SelectionPriceProps } from './SameRaceMultiPrice'\nimport {\n SameRaceMultiBettingDrawerContainerStyled,\n SameRaceMultiBettingDrawerNoticeBoxPositionerStyled,\n} from './SameRaceMultiBettingDrawer.styles'\nimport { QueryClient, QueryClientProvider } from 'react-query'\n\nexport interface BettingDrawerProps extends SelectionPriceProps {\n selectionsErrorMessage: string\n}\n\nexport function SameRaceMultiBettingDrawer({\n isValid,\n handleQuickbetSelected,\n meetingDate,\n meetingId,\n raceNumber,\n starterSelections,\n selectionsErrorMessage,\n}: BettingDrawerProps): JSX.Element {\n const queryClient = new QueryClient()\n\n return ReactDOM.createPortal(\n \n {/* display selections error irrespective of whether valid selections exist */}\n {selectionsErrorMessage && (\n \n \n \n )}\n\n {/* only render selection price is valid selections exist */}\n {isValid && (\n \n \n \n )}\n ,\n document.body\n )\n}\n","import React from 'react'\nimport { toMoney } from '@mobi/utils/money'\n\nexport interface MoneyProps extends ToMoneyOptions {\n amount: number\n className?: string\n testId?: string\n prefix?: string\n}\n\nexport function Money({ amount, className, testId, prefix, ...options }: MoneyProps): JSX.Element {\n const testElement = testId ? { [`data-tid-${testId}`]: '' } : { ['data-tid-money']: '' }\n\n return (\n \n {`${prefix ? prefix : ''}${toMoney(amount, options)}`}\n \n )\n}\n\n// =====\n// Types\n// =====\n\ntype ToMoneyOptions = NonNullable[1]>\n","import type { BetSlipBetRequest, BetSlipResponse } from '@mobi/betslip/types/betting'\n\nexport function isBetslipBetRequest(value: unknown): value is BetSlipBetRequest {\n if ((value as BetSlipBetRequest).toteBets !== undefined) return true\n if ((value as BetSlipBetRequest).toteSportsBets !== undefined) return true\n return false\n}\n\nexport function isBetslipResponses(value: unknown): value is BetSlipResponse[] {\n return Array.isArray(value) && (value[0] as BetSlipResponse).id !== undefined\n}\n","import { state$ as kambiState$ } from '@core/Areas/Kambi/driver'\nimport { KambiPlaceBetResponse, KambiPlaceSingleBetRequest } from './types'\nimport { BetResponseCode } from '@core/Data/betting'\n\nexport function placeKambiBetSingle(\n request: KambiPlaceSingleBetRequest\n): Promise {\n return getKambiAuthToken()\n .then(playerSessionId => {\n return fetch(\n `${window._kc.apiPlayerBaseUrl}coupon.json?lang=en_AU&market=AU&client_id=2&channel_id=3`,\n {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${playerSessionId}`,\n },\n body: JSON.stringify(request),\n }\n )\n })\n .then(response => response.json() as Promise)\n .catch(() => {\n throw {\n code: BetResponseCode.NetworkError,\n response: {\n message: 'Network Error',\n },\n }\n })\n}\n\nfunction getKambiAuthToken() {\n return new Promise(resolve =>\n kambiState$\n .take(1)\n .toPromise()\n .then(kambiState => kambiState.get('playerSessionId'))\n .then(playerSessionId => resolve(playerSessionId))\n )\n}\n","import { placeKambiBetSingle } from '@core/Areas/Kambi/helpers/kambiBettingApi'\n\nimport {\n KambiPlaceBetFailedResponse,\n KambiPlaceBetSuccessResponse,\n KambiPlaceSingleBetRequest,\n} from '@core/Areas/Kambi/helpers/types'\n\nimport { FobCommitResponse, FobSingleErrorResponse, FobSingleSportsRequest } from './betting'\n\nenum BetResponseCode {\n UnknownError,\n Unauthorized,\n InsufficientFunds,\n PriceChanged,\n HandicapChanged,\n NetworkError,\n}\n\nconst BET_RESPONSE_UNKNOWN_ERROR = {\n code: BetResponseCode.UnknownError,\n response: {\n message: 'Unknown Error',\n },\n} as Readonly\n\nexport function placeKambiBet(request: FobSingleSportsRequest): Promise {\n const kambiRequest = kambiBetRequestFromRequest(request)\n\n return placeKambiBetSingle(kambiRequest).then(response => {\n if (response.status === 'SUCCESS') {\n return betResponseFromKambiResponse(response)\n } else if (typeof response.status === 'number') {\n if (response.status === 401) {\n throw {\n code: BetResponseCode.Unauthorized,\n response: {\n message: 'Unauthorized',\n },\n }\n } else {\n throw BET_RESPONSE_UNKNOWN_ERROR\n }\n } else {\n throw betErrorFromKambiResponse(request, response)\n }\n })\n}\n\nfunction kambiBetRequestFromRequest(request: FobSingleSportsRequest): KambiPlaceSingleBetRequest {\n if (!request.externalBetId.startsWith('KAMBI_')) {\n throw new Error('externalBetId does not contain Kambi outcomeId')\n }\n\n if (request.investmentPlace || request.pricePlace) {\n throw new Error('Unexpected investmentPlace in Sports Single')\n }\n\n const outcomeId = parseInt(request.externalBetId.split('_')[1], 10)\n const odds = floatToKambiCurrency(request.priceWin ?? 0.0)\n const stake = floatToKambiCurrency(request.investmentWin ?? 0.0)\n\n return {\n couponRows: [\n {\n index: 0,\n odds: odds,\n outcomeId,\n type: 'SIMPLE',\n },\n ],\n allowOddsChange: 'NO',\n bets: [\n {\n couponRowIndexes: [0],\n eachWay: false,\n stake,\n },\n ],\n requestId: generateGUID(),\n channel: 'MOBILE',\n }\n}\n\nfunction betResponseFromKambiResponse(response: KambiPlaceBetSuccessResponse): FobCommitResponse {\n const bet = response.coupon.bets[0]\n\n return {\n ticketNumber: response.couponRef,\n betPlacedTime: new Date(response.coupon.placedDate),\n winInvestment: kambiCurrencyToFloat(bet.stake),\n projectedWinPayout: kambiCurrencyToFloat(bet.potentialPayout),\n amountPaid: kambiCurrencyToFloat(bet.stake),\n\n placeInvestment: 0,\n projectedPlacePayout: 0,\n\n bonusBet: 0,\n campaignId: null,\n campaignType: null,\n campaignActivatedInd: false,\n hasSpecialOffer: false,\n specialOffers: [],\n }\n}\n\nfunction betErrorFromKambiResponse(\n request: FobSingleSportsRequest,\n response: KambiPlaceBetFailedResponse\n): FobSingleErrorResponse {\n if (response.generalErrors && response.generalErrors.length > 0) {\n const error = response.generalErrors[0]\n\n if (error.type === 'NOT_ENOUGH_FUNDS') {\n return {\n code: BetResponseCode.InsufficientFunds,\n response: { message: 'Insufficient Funds' },\n }\n } else {\n return BET_RESPONSE_UNKNOWN_ERROR\n }\n }\n\n if (response.couponRowErrors.length > 0 && response.couponRowErrors[0].errors.length > 0) {\n const error = response.couponRowErrors[0].errors[0]\n\n if (error.type === 'ODDS_CHANGED') {\n const newPriceString = error.arguments.find(a => a.type === 'ODDS')?.value\n\n return {\n code: BetResponseCode.PriceChanged,\n response: {\n message: 'Price Changed',\n prices: {\n winPrice: newPriceString ? kambiCurrencyToFloat(newPriceString) : undefined,\n previousWinPrice: request.priceWin,\n },\n },\n }\n }\n }\n\n return BET_RESPONSE_UNKNOWN_ERROR\n}\n\nfunction kambiCurrencyToFloat(n: number | string): number {\n return typeof n === 'string' ? kambiCurrencyToFloat(parseInt(n, 10)) : n / 1000\n}\n\nfunction floatToKambiCurrency(n: number) {\n return Math.floor(n * 1000)\n}\n\nfunction generateGUID(): string {\n function s4(): string {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1)\n }\n\n return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`\n}\n","import type {\n AllUpSelection,\n BetLegType,\n BetPrices,\n BetSlipBetRequest,\n BetSlipResponse,\n} from '@mobi/betslip/types'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { post } from '@classic/Foundation/Services/ApiService'\nimport { ProductCode } from './Betting/selections'\nimport { isBetslipBetRequest } from './betslip'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\nimport { placeKambiBet } from './kambiBetting'\n\nexport type BetRequest =\n | ToteRequest\n | AllUpRequest\n | RacingSingleRequest\n | FobSingleRequest\n | FobSingleSportsRequest\n | MysteryProposeRequest\n | MysteryCommitRequest\n | BetSlipBetRequest\n | SameRaceMultiRequest\n\n// ToteBetRequest\nexport interface ToteRequest {\n productPlanSeq: number\n fixtureId: string\n fixtureDate: string\n raceNumber: number\n selections: string\n investmentWin: number\n investmentPlace: number\n betTransactionId: string\n useBonusCash?: boolean\n}\n\nexport function isToteRequest(value: BetRequest): value is ToteRequest {\n return (value as ToteRequest).selections !== undefined\n}\n\n// ToteAllUpBetRequest\nexport interface AllUpRequest {\n productPlanSeq: number\n fixtureId: string\n fixtureDate: string\n raceDetails: AllUpSelection['details']\n formulas: AllUpSelection['formulas']\n investment: number\n betTransactionId: string\n}\n\nexport function isAllUpRequest(value: BetRequest): value is AllUpRequest {\n return (value as AllUpRequest).formulas !== undefined\n}\n\nexport interface ToteBetResponse {\n ticketNumber: number\n betCost: number\n betPlacedTime: Date\n accountBalance: number\n divXAnnotations: string\n numberOfCombinations: number\n campaignActivatedInd: boolean\n bonusBet: number\n amountPaid: number\n}\n\n// tote mystery proposal\nexport interface MysteryProposeRequest {\n fixtureDate: string\n fixtureId: string\n raceNumber: number\n productCode: string\n option: number\n numberOfBets: number\n investmentWin?: number\n investmentPlace?: number\n useBonusCash?: boolean\n}\n\nexport function isMysteryProposalRequest(value: BetRequest): value is MysteryProposeRequest {\n return (value as MysteryProposeRequest).option !== undefined\n}\n\nexport interface MysteryProposeResponse {\n accountBalance: number\n metaData: string\n bonusBalanceAvailable: number\n bets: MysteryProposeBet[]\n}\n\nexport interface MysteryProposeBet {\n id: number\n betCost: number\n divXAnnotations: string\n metaData: string\n betLines: MysteryProposeBetLine[]\n productCode: keyof typeof ProductCode\n isFlexi: boolean\n}\n\nexport interface MysteryProposeBetLine {\n dividend: number\n poolCode: string\n selections: string\n isAllways: boolean\n legs: MysteryProposeBetLineLeg[]\n}\n\nexport interface MysteryProposeBetLineLeg {\n legNumber: number\n raceNumber: number\n acceptors: MysteryProposeAcceptor[]\n}\n\nexport interface MysteryProposeAcceptor {\n name: string\n number: number\n}\n\n// tote mystery commit\nexport interface MysteryCommitRequest {\n proposalIds: number[]\n metaData: string\n useBonusCash?: boolean\n}\n\nexport function isMysteryCommitRequest(value: BetRequest): value is MysteryCommitRequest {\n return (value as MysteryCommitRequest).proposalIds !== undefined\n}\n\nexport function isMysteryCommitResponse(\n value: ToteBetResponse | MysteryCommitResponse | FobCommitResponse\n): value is MysteryCommitResponse {\n return (value as MysteryCommitResponse).errorMessage !== undefined\n}\n\nexport interface MysteryCommitResponse {\n accountBalance: number\n campaignActivatedInd: boolean\n bets: ToteBetResponse[]\n errorMessage: string | null\n errorReason: string | null\n}\n\nexport function isFobSingleRacingRequest(value: BetRequest): value is FobSingleRacingRequest {\n return (value as FobSingleRacingRequest).propositionSeq !== undefined\n}\nexport function isFobSingleSportsRequest(value: BetRequest): value is FobSingleSportsRequest {\n return (value as FobSingleSportsRequest).externalBetId !== undefined\n}\nexport function isFobSingleKambiSportsRequest(value: BetRequest): value is FobSingleSportsRequest {\n return isFobSingleSportsRequest(value) && value.externalBetId.startsWith('KAMBI_')\n}\n\ninterface FobSingleBase {\n responseVersion: number\n investmentWin?: number | null\n investmentPlace?: number | null\n priceWin?: number | null\n pricePlace?: number | null\n betTransactionId: string\n specialSeq?: number | null\n tags?: string[]\n selectedCampaign?: Campaign\n}\n// FobSingleRacingBetRequest\nexport interface FobSingleRacingRequest extends FobSingleBase {\n propositionSeq: string\n variantSeq?: string | null\n legType: BetLegType\n handicap?: number | null\n}\n\n// FobSingleSportsRequest\nexport interface FobSingleSportsRequest extends FobSingleBase {\n externalBetId: string\n}\n\nexport type FobSingleRequest = FobSingleSportsRequest | FobSingleRacingRequest\n\nexport function isRacingSingleRequest(value: BetRequest): value is RacingSingleRequest {\n return (\n (value as RacingSingleRequest).starterNumber !== undefined ||\n (value as RacingSingleRequest).propositionCode !== undefined\n )\n}\n\n// FobMatchedRacingBetRequest\nexport interface RacingSingleRequest {\n responseVersion: number\n fixtureDate: string\n fixtureId: string\n raceNumber: number\n legType: BetLegType\n priceWin: number | null\n pricePlace: number | null\n investmentWin: number\n investmentPlace: number\n starterNumber?: number | null\n specialSeq?: number | null\n propositionCode?: string | null\n betTransactionId: string\n selectedCampaign?: Campaign\n}\n\nexport function isSameRaceMultiBetRequest(request: BetRequest): request is SameRaceMultiRequest {\n return !!(request as SameRaceMultiRequest).selectionPrice\n}\n\nexport interface SameRaceMultiSelection {\n starter: number\n position: number\n}\n\nexport interface SameRaceMultiRequest {\n responseVersion: number\n fixtureDate: string\n fixtureId: string\n raceNumber: number\n selectionPrice: number\n selections: SameRaceMultiSelection[]\n investment: number\n specialSeq?: number | null\n betTransactionId: string\n selectedCampaign?: Campaign\n}\n\n/**\n * @deprecated Stop using enums, they offer a bad DX, reverse lookups are unreliable at best and getting keys from them is near impossible. Use literals instead, or use a mapping\n */\nexport enum BetErrorType {\n Unspecified = 0,\n Unauthorized = 1,\n InvalidBet = 2,\n IncorrectNumberOfLegs = 3,\n InsufficientFunds = 4,\n PricesChanged = 5,\n HandicapChanged = 6,\n SpecialsError = 7,\n Closed = 8,\n BetPlacementFault = 10,\n DuplicateBonusBet = 11,\n InvalidBonusBet = 12,\n}\n\nexport type BetErrorTypeLiteral =\n | 'Unspecified'\n | 'Unauthorized'\n | 'InvalidBet'\n | 'IncorrectNumberOfLegs'\n | 'InsufficientFunds'\n | 'PricesChanged'\n | 'HandicapChanged'\n | 'SpecialsError'\n | 'Closed'\n | 'BetPlacementFault'\n | 'DuplicateBonusBet'\n | 'InvalidBonusBet'\n\nconst betErrorTypeMap = new Map([\n [BetErrorType.Unspecified, 'Unspecified'],\n [BetErrorType.Unauthorized, 'Unauthorized'],\n [BetErrorType.InvalidBet, 'InvalidBet'],\n [BetErrorType.IncorrectNumberOfLegs, 'IncorrectNumberOfLegs'],\n [BetErrorType.InsufficientFunds, 'InsufficientFunds'],\n [BetErrorType.PricesChanged, 'PricesChanged'],\n [BetErrorType.HandicapChanged, 'HandicapChanged'],\n [BetErrorType.SpecialsError, 'SpecialsError'],\n [BetErrorType.Closed, 'Closed'],\n [BetErrorType.BetPlacementFault, 'BetPlacementFault'],\n [BetErrorType.DuplicateBonusBet, 'DuplicateBonusBet'],\n [BetErrorType.InvalidBonusBet, 'InvalidBonusBet'],\n])\n\nexport function ensureBetErrorTypeLiteral(\n betErrorType: string | number | BetErrorType\n): BetErrorTypeLiteral {\n if (typeof betErrorType === 'string') {\n // We can't be sure this is a BetErrorTypeLiteral, but for compatibility reasons it's better to assume it is\n return betErrorType as BetErrorTypeLiteral\n }\n\n if (betErrorTypeMap.has(betErrorType)) {\n return betErrorTypeMap.get(betErrorType) as BetErrorTypeLiteral\n }\n\n throw new Error(`Unable to map ${betErrorType} as a literal value`)\n}\n\nexport const SingleErrorMapping = new Map([\n [BetErrorType.HandicapChanged, 'Handicap changed. Bet is no longer valid.'],\n [BetErrorType.InvalidBonusBet, 'Error using Bonus Bet'],\n [BetErrorType.DuplicateBonusBet, 'Bonus Bet can only be used once'],\n])\n\nexport const MultiErrorMapping = new Map([\n [BetErrorType[BetErrorType.InvalidBonusBet], 'Error using Bonus Bet'],\n [BetErrorType[BetErrorType.DuplicateBonusBet], 'Bonus Bet can only be used once'],\n])\n\nexport const MultiBetFatalErrorMapping = new Map([\n [BetErrorType.HandicapChanged, 'HANDICAP'],\n [BetErrorType.Closed, 'CLOSED'],\n])\n\n// shared with fob single and SRM\nexport interface FobProposeResponse {\n prices: BetPrices\n accountBalance?: number\n specialOffers?: BetSpecialOffer[]\n}\n\n// shared with fob single and SRM\nexport interface FobCommitResponse {\n accountBalance?: number\n ticketNumber: number\n projectedPlacePayout: number\n projectedWinPayout: number\n placeInvestment: number\n winInvestment: number\n betPlacedTime: Date\n campaignActivatedInd: boolean\n campaignId: number | null\n campaignType: string | null\n bonusBet: number\n amountPaid: number\n hasSpecialOffer: boolean\n specialOffers: BetSpecialOffer[]\n}\n\nexport interface FobSingleErrorResponse {\n code: BetResponseCode\n response: {\n message: string\n accountBalance?: number\n prices?: BetPrices\n }\n}\n\nexport interface SuperPicksResponse {\n specialOffers: BetSpecialOffer[]\n}\n\nexport interface SuperPicksErrorResponse {\n response: {\n message: string\n }\n}\n\nexport interface GetSuperPicksRequest {\n FixtureDate?: string\n FixtureId?: string\n RaceNumber?: number\n StarterNumber?: number\n PropositionSeq?: string\n}\n\nexport enum BetResponseCode {\n UnknownError,\n Unauthorized,\n InsufficientFunds,\n PriceChanged,\n HandicapChanged,\n NetworkError,\n}\n\nconst httpStatusToBetResponseCode: Record = {\n 401: BetResponseCode.Unauthorized,\n 402: BetResponseCode.InsufficientFunds,\n\n 406: BetResponseCode.PriceChanged,\n 417: BetResponseCode.HandicapChanged,\n}\n\nexport const networkErrorMessage = 'Network Error'\n\nexport function proposeBet(\n request: BetRequest\n): Promise<\n FobProposeResponse | ToteBetResponse | MysteryProposeResponse | BetSlipResponse[] | null\n> {\n // order is VERY important because there is no runtime type guard/descriptor implemented.. instead XxxRequest relies on the presence of 'special fields' of which there is no guarantee of uniqueness\n if (isMysteryProposalRequest(request)) {\n return quickbetMysteryPropose(request)\n }\n if (isFobSingleKambiSportsRequest(request)) {\n return quickbetFobProposeKambiSingle(request)\n }\n if (isFobSingleRacingRequest(request) || isFobSingleSportsRequest(request)) {\n return quickbetFobProposeSingle(request)\n }\n if (isSameRaceMultiBetRequest(request)) {\n return quickbetSameRaceMultiPropose(request)\n }\n if (isToteRequest(request)) {\n return quickbetTotePropose(request)\n }\n if (isAllUpRequest(request)) {\n return quickbetAllUpPropose(request)\n }\n if (isRacingSingleRequest(request)) {\n return quickbetRacingProposeSingle(request)\n }\n if (isBetslipBetRequest(request)) {\n return betslipPropose(request)\n }\n return Promise.resolve(null)\n}\n\n// Order is VERY important because there is no runtime type guard/descriptor implemented.. instead XxxRequest relies on the presence of 'special fields' of which there is no guarantee of uniqueness\nexport function confirmBet(\n request: BetRequest\n): Promise {\n if (isMysteryCommitRequest(request)) {\n return quickbetMysteryCommit(request)\n }\n if (isFobSingleKambiSportsRequest(request)) {\n return quickbetFobCommitKambiSingle(request)\n }\n if (isFobSingleRacingRequest(request) || isFobSingleSportsRequest(request)) {\n return quickbetFobCommitSingle(request)\n }\n if (isSameRaceMultiBetRequest(request)) {\n return quickbetSameRaceMultiCommit(request)\n }\n if (isToteRequest(request)) {\n return quickbetToteCommit(request)\n }\n if (isAllUpRequest(request)) {\n return quickbetAllUpCommit(request)\n }\n if (isRacingSingleRequest(request)) {\n return quickbetRacingCommitSingle(request)\n }\n if (isBetslipBetRequest(request)) {\n return betslipCommit(request)\n }\n\n return Promise.resolve(null)\n}\n\nexport function betslipCommit(request: BetSlipBetRequest): Promise {\n return placeBet('/api/betslip/commit', request)\n}\n\nexport function betslipPropose(request: BetSlipBetRequest): Promise {\n return placeBet('/api/betslip/propose', request)\n}\n\nexport function betslipRefresh(request: BetSlipBetRequest): Promise {\n return placeBet('/api/betslip/refresh', request)\n}\n\nfunction quickbetTotePropose(request: ToteRequest): Promise {\n return placeBet('/api/betting/tote/propose', request)\n}\n\nfunction quickbetAllUpPropose(request: AllUpRequest): Promise {\n return placeBet('/api/betting/tote/propose/allup', request)\n}\n\nfunction quickbetMysteryPropose(request: MysteryProposeRequest): Promise {\n return placeBet(\n '/api/betting/tote/propose/mystery',\n request\n )\n}\n\nfunction quickbetRacingProposeSingle(request: RacingSingleRequest): Promise {\n return placeBet(\n '/api/betting/fob/propose/racing-single',\n request\n )\n}\n\nfunction quickbetFobProposeKambiSingle(\n request: FobSingleSportsRequest\n): Promise {\n // kambi has no propose step, so just return the request data\n return Promise.resolve({\n prices: {\n winPrice: request.priceWin ?? 0,\n placePrice: request.pricePlace,\n },\n })\n}\n\nfunction quickbetFobProposeSingle(\n request: FobSingleRequest | FobSingleSportsRequest\n): Promise {\n return placeBet(\n '/api/betting/fob/propose/single',\n request\n )\n}\n\nfunction quickbetFobCommitKambiSingle(request: FobSingleSportsRequest): Promise {\n return placeKambiBet(request)\n}\n\nfunction quickbetFobCommitSingle(\n request: FobSingleRequest | FobSingleSportsRequest\n): Promise {\n return placeBet(\n '/api/betting/fob/commit/single',\n request\n )\n}\nfunction quickbetSameRaceMultiPropose(request: SameRaceMultiRequest): Promise {\n return placeBet(\n '/api/betting/fob/propose/same-race-multi',\n request\n )\n}\n\nfunction quickbetSameRaceMultiCommit(request: SameRaceMultiRequest): Promise {\n return placeBet(\n '/api/betting/fob/commit/same-race-multi',\n request\n )\n}\n\nfunction quickbetAllUpCommit(request: AllUpRequest): Promise {\n return placeBet('/api/betting/tote/commit/allup', request)\n}\n\nfunction quickbetToteCommit(request: ToteRequest): Promise {\n return placeBet('/api/betting/tote/commit', request)\n}\n\nfunction quickbetMysteryCommit(request: MysteryCommitRequest): Promise {\n return placeBet(\n '/api/betting/tote/commit/mystery',\n request\n )\n}\n\nfunction quickbetRacingCommitSingle(request: RacingSingleRequest): Promise {\n return placeBet(\n '/api/betting/fob/commit/racing-single',\n request\n )\n}\n\nfunction placeBet(url: string, request: TRequest): Promise {\n return post({ url, body: request }).catch(async error => {\n if (!error.response) {\n throw {\n code: BetResponseCode.NetworkError,\n response: { message: networkErrorMessage },\n }\n }\n const errorResponse = await error.response.json()\n throw {\n code: httpStatusToBetResponseCode[error.response.status] || BetResponseCode.UnknownError,\n response: errorResponse,\n }\n })\n}\n\nexport function getSuperPicks(request: GetSuperPicksRequest): Promise {\n return post({ url: '/api/specials/superpicksversion2', body: request }).catch(\n async error => {\n const errorResponse = await error.response.json()\n throw {\n response: errorResponse,\n }\n }\n )\n}\n","import { createSignal } from 'rwwa-rx-state-machine'\n\nexport enum KeypadModes {\n Denomination = 'Denomination',\n Numeric = 'Numeric',\n Percentage = 'Percentage',\n}\n\nexport enum SpecialKeys {\n Clear = 'clr',\n Backspace = 'bksp',\n Blank = '',\n Decimal = '.',\n}\n\nexport interface KeyPressed {\n mode: KeypadModes\n value: number | SpecialKeys\n}\n\nexport const Keypress = createSignal('Keypress')\n","import Decimal from 'decimal.js'\nimport type { RacingBetType, BettingType, BetLegType } from '@mobi/betslip/types'\nimport { KeypadModes, SpecialKeys, KeyPressed } from '@core/Components/Keypad/KeyPress'\nimport { BetSpecialOffer, IBetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { Stake } from '@classic/Specials/Model/Stake'\nimport { PyosRewardCalculator } from '@classic/Specials/Store/PyosRewardCalculator'\nimport { roundEstimateDown } from '@mobi/utils/money'\n\nexport function calculateInvestment(\n keyPressed: KeyPressed,\n currentAmount: number,\n lastKeyPressed: KeyPressed,\n secondLastKeyPressed: KeyPressed\n): number {\n // When editing an item from Betslip, the investment may be non-zero.\n // If there is no `lastKeyPress`, treat it as if the previous mode was denomination, so that pressing a denomination\n // key results in adding to the initial value (as indicated on the button), not overwriting the initial value.\n if (keyPressed.mode !== (lastKeyPressed.mode || KeypadModes.Denomination)) {\n currentAmount = 0\n }\n\n switch (keyPressed.mode) {\n case KeypadModes.Denomination: {\n if (keyPressed.value === SpecialKeys.Clear) {\n return 0\n } else {\n return currentAmount + (keyPressed.value as number)\n }\n }\n\n case KeypadModes.Numeric: {\n switch (keyPressed.value) {\n case SpecialKeys.Backspace: {\n const newValue = parseFloat(currentAmount.toString().slice(0, -1))\n return isNaN(newValue) ? 0 : newValue\n }\n\n default: {\n const integerPartMaxDigits = 5\n let currentStringAmount = currentAmount.toString()\n\n if (lastKeyPressed.value === SpecialKeys.Decimal) {\n currentStringAmount += '.' + keyPressed.value.toString()\n return parseFloat(currentStringAmount)\n }\n\n if (secondLastKeyPressed.value === SpecialKeys.Decimal && lastKeyPressed.value === 0) {\n currentStringAmount += '.0' + keyPressed.value.toString()\n return parseFloat(currentStringAmount)\n }\n\n currentStringAmount += keyPressed.value.toString()\n const decimalCheck = currentStringAmount.split('.')\n\n if (decimalCheck[0] && decimalCheck[0].length > integerPartMaxDigits) {\n return currentAmount\n }\n\n if (decimalCheck[1] && decimalCheck[1].length > 2) {\n return currentAmount\n }\n\n return parseFloat(currentStringAmount)\n }\n }\n }\n\n case KeypadModes.Percentage: {\n return 0\n }\n\n default: {\n return 0\n }\n }\n}\nexport function calculateBetCost(\n bettingType: BettingType | null,\n winInvestment: number,\n placeInvestment: number,\n isEachWay: boolean,\n betType?: RacingBetType,\n numberOfCombinations = 1\n): number {\n switch (bettingType) {\n case 'fixed-odds-racing': {\n return isEachWay ? winInvestment * 2 : winInvestment + placeInvestment\n }\n case 'tote-racing': {\n switch (betType) {\n case 'Win & Place': {\n return (winInvestment + placeInvestment) * numberOfCombinations\n }\n case 'Exacta':\n case 'Quinella':\n case 'Trifecta':\n case 'First 4':\n case 'Double':\n case 'Quaddie': {\n return winInvestment\n }\n case 'All Up': {\n return winInvestment * numberOfCombinations\n }\n default: {\n return 0\n }\n }\n }\n case 'mystery-quick-pick':\n case 'tote-sports-tipping': {\n return winInvestment * numberOfCombinations\n }\n case 'favourite-numbers': {\n return 0.5 * numberOfCombinations\n }\n case 'fixed-odds-sports': {\n return winInvestment\n }\n default: {\n return 0\n }\n }\n}\n\nexport function calculateProjectedReturn(\n bettingType: BettingType | null,\n winPrice: number | undefined,\n placePrice: number | undefined,\n winInvestment: number,\n placeInvestment: number,\n isEachWay: boolean,\n bonusBetValue?: number,\n specialOffer?: BetSpecialOffer | null\n): number {\n if (isEachWay) {\n const winEstimate = roundEstimateDown((winPrice ?? 0) * winInvestment, 2)\n const placeEstimate = roundEstimateDown((placePrice ?? 0) * winInvestment, 2)\n const projectedReturn = winEstimate + placeEstimate\n\n return projectedReturn\n }\n\n switch (bettingType) {\n case 'fixed-odds-racing': {\n let boostReward = 0\n if (specialOffer) {\n const stakeObj: Stake = Stake.normalise({\n Win: Decimal(winInvestment || 0),\n Place: Decimal(placeInvestment || 0),\n })\n boostReward = new PyosRewardCalculator()\n .calculateProjectedBoostReward(specialOffer as IBetSpecialOffer, stakeObj)\n .toNumber()\n }\n\n const winEstimate = roundEstimateDown(winInvestment * (winPrice ?? 0), 2)\n const placeEstimate = roundEstimateDown(placeInvestment * (placePrice ?? 0), 2)\n const projectedReturn = winEstimate + placeEstimate + boostReward - (bonusBetValue ?? 0)\n\n return roundEstimateDown(projectedReturn, 2)\n }\n case 'fixed-odds-sports': {\n return roundEstimateDown(winInvestment * (winPrice ?? 0), 2)\n }\n default: {\n return 0\n }\n }\n}\n\nexport function calculateFlexiAmount(winInvestment: number, numberOfCombinations: number): number {\n return Math.floor(((winInvestment * 100) / numberOfCombinations) * 100) / 100\n}\n\nexport function determineLegTypeFromInvestments(\n winInvestment: number,\n placeInvestment: number\n): BetLegType {\n if (winInvestment > 0 && placeInvestment === 0) {\n return 'W'\n }\n if (winInvestment === 0 && placeInvestment > 0) {\n return 'P'\n }\n if (winInvestment > 0 && placeInvestment > 0) {\n return 'WP'\n }\n return 'W'\n}\n\nexport function calculateInvestmentFontSizeFactor({\n amount,\n decimalPlaces,\n}: {\n amount: number\n decimalPlaces?: number | undefined\n}) {\n // changed to ratio to fit in `$101.00 ▼ and $99,999` on an iPhone5 screen\n const ratioByDigitNum = {\n x4: 0.85,\n x5: 0.75,\n x6: 0.63,\n x7: 0.6,\n x8: 0.6,\n x9: 0.55,\n max: 0.5,\n default: 0.9,\n }\n\n const numberOfDigits =\n typeof decimalPlaces !== 'undefined' && decimalPlaces === 0\n ? amount.toFixed(2).toString().length - 2\n : amount.toFixed(2).toString().length\n\n const isBelowMinDigit = numberOfDigits < 4\n const isBetweenDigitRatio = numberOfDigits >= 4 && numberOfDigits <= 9\n\n const key = (\n isBelowMinDigit ? 'default' : isBetweenDigitRatio ? `x${numberOfDigits}` : 'max'\n ) as keyof typeof ratioByDigitNum\n\n return ratioByDigitNum[key] || ratioByDigitNum.default\n}\n","import type {\n Selection,\n FavouriteNumbersSelection,\n ToteSportsSelection,\n StartingPriceFOOSelection,\n} from '@mobi/betslip/types'\nimport { isMysterySelection } from '@mobi/betslip/helpers/typeGuards'\n\nexport enum ProductCode {\n Win,\n Place,\n WinPlace,\n Quinella,\n Exacta,\n Trifecta,\n First4,\n Double,\n Quaddie,\n Combo,\n AllUp,\n FavouriteNumbers,\n Footo,\n FootyTipping,\n SportsTipping,\n FobRacing,\n V4,\n V5,\n V64,\n V65,\n V75,\n FobSports,\n FobMixed,\n ExactaRovingBanker,\n TrifectaRovingBanker,\n First4RovingBanker,\n AllUpOld,\n}\n\nexport type PriceSources = 'selection' | 'localstorage' | 'api' | 'push'\n\n// =======================\n// Type Narrowing Function\n// =======================\n\nexport function isFavouriteNumbersSelection(\n value: Selection | null\n): value is FavouriteNumbersSelection {\n return (\n !!value &&\n !isMysterySelection(value) &&\n (value as FavouriteNumbersSelection).bets &&\n Array.isArray((value as FavouriteNumbersSelection).bets)\n )\n}\n\nexport function isToteSportsSelection(\n value: Selection | Immutable | null\n): value is ToteSportsSelection {\n return !!value && (value as ToteSportsSelection).poolSequence !== undefined\n}\n\nexport function isRovingBanker(productPlanSequence: number): boolean {\n return [122, 123, 124].includes(productPlanSequence)\n}\n\nexport function isStartingPriceFOOSelection(\n selection: Selection | null\n): selection is StartingPriceFOOSelection {\n return !!(\n selection &&\n 'propositionSeq' in selection &&\n selection.type === 'fob-proposition' &&\n 'marketCode' in selection &&\n selection.marketCode === 'SP'\n )\n}\n","import type { FavouriteNumbersSelection } from '@mobi/betslip/types'\n\ntype CombinationMap = Record\n\nexport const ComboLookup: CombinationMap = {\n 7: 1,\n 8: 8,\n 9: 36,\n 10: 120,\n 11: 330,\n 12: 792,\n 13: 1716,\n 14: 3432,\n 15: 6435,\n 16: 11440,\n}\n\nconst getCombinations = (numbers: number): number => ComboLookup[numbers.toString()] ?? 0\n\nexport const costCalculator = (numbers: number): number => getCombinations(numbers) * 0.5\n\nconst isPotLuck = (bet: FavouriteNumbersSelection['bets'][0]): boolean => {\n return bet.game1Selections.length === 1 && bet.game2Selections.length === 0\n}\n\nexport const calculateCombinations = (bets: FavouriteNumbersSelection['bets']): number => {\n return bets.reduce((total, bet) => {\n const game1Numbers = isPotLuck(bet) ? bet.game1Selections[0] : bet.game1Selections.length\n const game2Numbers = bet.game2Selections.length\n return total + getCombinations(game1Numbers) + getCombinations(game2Numbers)\n }, 0)\n}\n\nexport function calculateEasyBetCost(\n game1Selections: number,\n game2Selections: number,\n poolNumberSelections: number\n): number {\n return (costCalculator(game1Selections) + costCalculator(game2Selections)) * poolNumberSelections\n}\n\nexport function calculatePotLuckCost(\n potLuckNumbers: number,\n potLuckBets: number,\n numberOfPools: number\n): number {\n return numberOfPools * potLuckBets * costCalculator(potLuckNumbers)\n}\n","import { Selections } from '../driver'\n\nexport const calculateCombinations = (selections: string): number => {\n if (selections.length === 0) return 0\n return selections.split('/').reduce((prevSel, currentSel) => {\n prevSel = prevSel * currentSel.split('.').length\n return prevSel\n }, 1)\n}\n\nexport const calculateSelectionString = (selections: Selections): string =>\n Object.keys(selections)\n .map(key => {\n const parts = []\n const selection = selections[key]\n if (selection.isHome) parts.push('H')\n if (selection.isDraw) parts.push('D')\n if (selection.isAway) parts.push('A')\n return parts.join('.')\n })\n .join('/')\n","import { Money } from '@core/Components/Text/Money'\nimport { toMoney } from '@mobi/utils/money'\nimport React from 'react'\nimport {\n ReceiptCampaignTextStyled,\n ReceiptListItemStyled,\n ReceiptListItemTextStyled,\n ReceiptListRowStyled,\n ReceiptListStyled,\n} from '../Receipt/Receipt.styles'\n\nexport type BonusDetailsNotificationProps = {\n betCost: number\n isUsingBonusBet: boolean\n isUsingBonusCash: boolean\n bonusCashBalance: number | null\n accountBalance: number | null\n}\n\nexport function BonusDetailsNotification({\n ...props\n}: BonusDetailsNotificationProps): JSX.Element | null {\n if (props.isUsingBonusBet) return createBonusBetDetails(props)\n\n // unfortunately we need to check if customer has bonus cash available because 'isUsingBonusCash' is incorrectly assigned as true when customer has no bonus cash available!\n if (props.isUsingBonusCash && props.bonusCashBalance) return createBonusCashDetails(props)\n\n return null\n}\n\nfunction createBonusBetDetails(props: BonusDetailsNotificationProps): JSX.Element {\n return (\n \n \n \n Bonus Bet\n \n \n \n \n \n \n \n\n \n Account Funds\n {toMoney(0)}\n \n \n )\n}\n\nfunction createBonusCashDetails(props: BonusDetailsNotificationProps): JSX.Element {\n const bonusCashCost = Math.min(props.betCost, props.bonusCashBalance ?? 0)\n const accountFundsCost = props.betCost - bonusCashCost\n return (\n \n \n \n Bonus Cash\n \n \n \n \n \n \n \n\n \n Account Funds\n {toMoney(accountFundsCost)}\n \n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const DisclaimerStyled = styled('div')({\n marginTop: '5px',\n})\n","import React from 'react'\nimport type { ToteSelection } from '@mobi/betslip/types'\nimport { isAllUpSelection, isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Money } from '@core/Components/Text/Money'\nimport { networkErrorMessage } from '@core/Data/betting'\nimport { QuickbetState } from '../../driver'\nimport { UserAccountState } from '@core/State/UserAccount/userAccountDriver'\nimport { toMoney } from '@mobi/utils/money'\nimport { calculateBetCost } from '../../helpers/calculator'\nimport { isFavouriteNumbersSelection, isToteSportsSelection } from '@core/Data/Betting/selections'\nimport { FormulaState } from '../Formula/driver'\nimport { calculateCombinations as favouriteNumbersCombinations } from '@core/Areas/FavouriteNumbers/calculator'\nimport { calculateCombinations as tippingCombinations } from '@core/Areas/Tipping/helpers/calculator'\nimport { BonusDetailsNotification } from './BonusDetailsNotification'\nimport { DisclaimerStyled } from './NotificationTypes.styles'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\nexport enum NotificationType {\n Unauthorized = 'UNAUTHORIZED',\n InvalidSuperPickSelection = 'INVALID_SUPERPICK_SELECTION',\n InsufficientFunds = 'INSUFFCIENT_FUNDS',\n NonHandledError = 'NON_HANDLED_ERROR',\n ProposeSucceeded = 'PROPOSE_SUCCEEDED',\n PriceChange = 'PRICE_CHANGE',\n HandicapChanged = 'HANDICAP_CHANGED',\n InsufficientInvestmentForCombinations = 'INSUFFICIENT_FUNDS_FOR_COMBINATIONS',\n RaceClosed = 'RACE_CLOSED',\n MysteryQuickPickFixedInvestment = 'MYSTERY_QP_FIXED_INVESTMENT',\n InvalidBonusBet = 'INVALID_BONUS_BET',\n}\n\ntype NotificationData = Record<\n string,\n {\n icon: NoticeBoxTypes\n title: string\n subtitle?: string\n children?: () => JSX.Element[] | JSX.Element | undefined\n }\n>\n\ntype NotificationDataArgs = Pick<\n QuickbetState,\n | 'canBet'\n | 'notificationTitle'\n | 'notificationSubtitle'\n | 'bettingType'\n | 'isEachWay'\n | 'selection'\n | 'isUsingBonusBet'\n | 'isUsingBonusCash'\n> &\n Pick &\n Pick & {\n winInvestment: number\n placeInvestment: number\n }\n\nconst {\n Unauthorized,\n InsufficientFunds,\n InvalidSuperPickSelection,\n NonHandledError,\n ProposeSucceeded,\n PriceChange,\n HandicapChanged,\n InsufficientInvestmentForCombinations,\n RaceClosed,\n MysteryQuickPickFixedInvestment,\n InvalidBonusBet,\n} = NotificationType\n\nconst { Error: ErrorIcon, Warning: WarningIcon, Info: InformationIcon } = NoticeBoxTypes\n\nexport const notificationData = ({\n notificationTitle,\n notificationSubtitle,\n accountBalance,\n canBet,\n bettingType,\n winInvestment,\n placeInvestment,\n isEachWay,\n selection,\n numberOfCombinationsSelected,\n isUsingBonusBet,\n isUsingBonusCash,\n bonusCashBalance,\n}: NotificationDataArgs): NotificationData => {\n const numberOfCombinations = isAllUpSelection(selection)\n ? numberOfCombinationsSelected\n : isToteSelection(selection)\n ? selection.numberOfCombinations\n : isFavouriteNumbersSelection(selection)\n ? favouriteNumbersCombinations(selection.bets)\n : isToteSportsSelection(selection)\n ? tippingCombinations(selection.betSelections)\n : 1\n\n const betType = bettingType === 'tote-racing' ? (selection as ToteSelection).betType : undefined\n const betCost = calculateBetCost(\n bettingType,\n winInvestment,\n placeInvestment,\n isEachWay,\n betType,\n numberOfCombinations\n )\n\n return {\n [Unauthorized]: {\n icon: ErrorIcon,\n title: 'Please log in to place bet',\n },\n [InvalidSuperPickSelection]: {\n icon: WarningIcon,\n title: 'Invalid SuperPick selection',\n subtitle: notificationSubtitle == null ? undefined : notificationSubtitle,\n },\n [InsufficientFunds]: {\n icon: ErrorIcon,\n title: 'Your account has insufficient funds',\n children: () =>\n accountBalance ? (\n

      \n Current account balance is{' '}\n \n \n \n

      \n ) : undefined,\n },\n [NonHandledError]: {\n icon: ErrorIcon,\n title: notificationTitle as string,\n subtitle:\n notificationTitle === networkErrorMessage\n ? canBet\n ? 'Please check your internet connection and try again.'\n : 'Please check your internet connection.'\n : undefined,\n children: () =>\n notificationTitle === networkErrorMessage && !canBet ? (\n

      \n IMPORTANT Please check your Transactions or contact our Customer\n Service Centre on to confirm whether the operation\n succeeded.\n

      \n ) : undefined,\n },\n [ProposeSucceeded]: {\n icon: WarningIcon,\n title: `This bet will cost ${toMoney(betCost)}`,\n children: () => (\n <>\n \n Bets cannot be cancelled once placed.\n \n ),\n },\n [PriceChange]: {\n icon: WarningIcon,\n title: 'Prices have changed',\n subtitle: `This bet will cost ${toMoney(betCost)}`,\n },\n [HandicapChanged]: {\n icon: ErrorIcon,\n title: 'Handicap changed. Bet is no longer valid',\n },\n [InsufficientInvestmentForCombinations]: {\n icon: WarningIcon,\n title: `Insufficient investment for ${numberOfCombinations} combinations.`,\n },\n [RaceClosed]: {\n icon: ErrorIcon,\n title: 'Betting Closed',\n },\n [MysteryQuickPickFixedInvestment]: {\n icon: InformationIcon,\n title: 'Investment is pre-set for this bet type',\n },\n [InvalidBonusBet]: {\n icon: ErrorIcon,\n title: 'Bonus Bet has already been used',\n },\n }\n}\n","import type {\n EventDetails,\n MysteryDetails,\n FavouriteNumbersDetails,\n ToteSportsDetails,\n} from '@mobi/betslip/types'\n\n// ========================\n// Type Narrowing Functions\n// ========================\n\nexport function isMysteryDetails(details: EventDetails | null): details is MysteryDetails {\n if (!details || typeof details !== 'object') return false\n return !!(details as MysteryDetails).mysteryOption\n}\n\nexport function isFavouriteNumbersDetails(\n details: EventDetails | null\n): details is FavouriteNumbersDetails {\n if (!details || typeof details !== 'object') return false\n return !!(details as FavouriteNumbersDetails).pools\n}\n\nexport function isToteSportsDetails(details: EventDetails | null): details is ToteSportsDetails {\n if (!details || typeof details !== 'object') return false\n return Boolean((details as ToteSportsDetails).poolName && (details as ToteSportsDetails).games)\n}\n","import { createSignal } from 'rwwa-rx-state-machine'\nimport { ToteRaceStatusChangedPushEvent } from 'tabtouch-push-contract'\nimport type {\n Selection,\n EventDetails,\n BettingType,\n BetSlipResponse,\n BetError,\n} from '@mobi/betslip/types'\nimport {\n ToteBetResponse,\n FobProposeResponse,\n FobCommitResponse,\n FobSingleErrorResponse,\n MysteryProposeResponse,\n MysteryCommitResponse,\n} from '../../Data/betting'\nimport { BonusBet, InvestmentType } from './Components/BetInvestment/betInvestmentDriver'\nimport { BetslipItem } from '../Betslip/driver'\nimport { NotificationType } from './Components/Notifications/NotificationTypes'\n\nexport interface QuickbetSelection {\n bettingType: BettingType\n selection: Selection\n selectionDetails: EventDetails | null\n isEachWayAvailable: boolean\n shouldAllowPlaceInvestment: boolean\n presetInvestment?: boolean\n promptForInvestment?: boolean\n tags?: string[]\n betSource?: string\n keepSelections?: (_?: boolean) => boolean | undefined\n}\n\nexport interface QuickbetNotificationData {\n type: NotificationType\n title?: string\n subtitle?: string\n}\n\nexport const SetInvalidInvestmentNotification = createSignal(\n 'SetInvalidInvestmentNotification'\n)\nexport const QuickbetLoadSelection = createSignal('LoadQuickbetSelection')\nexport const QuickbetClosed = createSignal('QuickbetClosed')\nexport const SetAllowInvestmentState = createSignal<{\n shouldAllowPlaceInvestment: boolean\n shouldAllowWinInvestment: boolean\n}>('SetAllowInvestmentState')\nexport const ChangeInvestment = createSignal('ChangeInvestment')\nexport const SetActiveInvestment = createSignal('SetActiveInvestment')\nexport const ToggleEachWay = createSignal('ToggleEachWay')\nexport const ToggleBonusBetUsage = createSignal('ToggleBonusBetUsage')\nexport const ToggleBonusCashUsage = createSignal('ToggleBonusCashUsage')\nexport const SetBonusBet = createSignal('SetBonusBet')\nexport const ProposeBet = createSignal('ProposeBet')\nexport const ProposeBetSucceeded = createSignal<\n ToteBetResponse | FobProposeResponse | MysteryProposeResponse\n>('ProposeBetSucceeded')\nexport const ProposeBetslipBetsSucceeded = createSignal('ProposeBetslipBetsSucceeded')\nexport const ProposeBetFailed = createSignal('ProposeBetFailed')\nexport const ConfirmBet = createSignal('ConfirmBet')\nexport const ConfirmBetSucceeded = createSignal<\n ToteBetResponse | FobCommitResponse | MysteryCommitResponse\n>('ConfirmBetSucceeded')\nexport const ConfirmBetslipBetsSucceeded = createSignal(\n 'ConfirmBetslipBetsSucceeded'\n)\nexport const ConfirmBetFailed = createSignal('ConfirmBetFailed')\nexport const ConfirmBetslipBetsFailed = createSignal('ConfirmBetslipBetFailed')\nexport const DepositFundsDisplayed = createSignal('DepositFundsDisplayed')\nexport const EditBetslipItem = createSignal('SetBetslipItemBeingEdited')\nexport const AddingToBetslip = createSignal('AddingToBetslip')\nexport const RaceClosedEventReceived = createSignal<{\n event: ToteRaceStatusChangedPushEvent\n toastId?: string\n}>('RaceClosedEventReceived')\nexport const SetMysteryQuickPickPresetInvestment = createSignal(\n 'SetMysteryQuickPickPresetInvestment'\n)\nexport const InsufficientFundsForBet = createSignal<{ betCost: number; shortfall: number }>(\n 'InsufficientFundsForBet'\n)\nexport const ClearInsufficientFundsForBet = createSignal('ClearInsufficientFundsForBet')\n","import { createSignal } from 'rwwa-rx-state-machine'\nimport { SuperPicksResponse, SuperPicksErrorResponse } from '../../Data/betting'\n\nexport const LoadSuperPicks = createSignal('LoadSuperPicks')\nexport const ChangeSelectedSuperPick = createSignal('ChangeSelectedSuperPick')\nexport const GetSuperPicksSucceeded = createSignal('SuperPickEnquirySucceeded')\nexport const UpdateSelectedSuperPick = createSignal('UpdateSelectedSuperPick')\nexport const GetSuperPicksFailed = createSignal('SuperPickEnquiryFailed')\nexport const SetInvalidSuperPickSelection = createSignal('SetInvalidSuperPickSelection')\nexport const ResetInvalidSuperPickSelection = createSignal('ResetInvalidSuperPickSelection')\n","import * as immutable from 'immutable'\nimport { attachDriver, Signal, createSignal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { AllUpSelection } from '@mobi/betslip/types'\nimport { isAllUpSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { QuickbetLoadSelection, QuickbetSelection, EditBetslipItem } from '../../signals'\n\ntype AllUpFormula = AllUpSelection['formulas'][0]\n\ninterface ImmutableFormulaState {\n // the type of `state` when used as a Record\n formulas: immutable.List\n numberOfCombinationsSelected: number\n}\n\nexport interface FormulaState {\n // the type of `state` after `.toJS()` is called\n formulas: AllUpFormula[]\n numberOfCombinationsSelected: number\n}\n\nconst defaultFormulaState: ImmutableFormulaState = {\n formulas: immutable.List(),\n numberOfCombinationsSelected: 0,\n}\n\nexport interface FormulaStateRecord\n extends TypedRecord,\n ImmutableFormulaState {}\nexport const FormulaStateFactory = makeTypedFactory(\n defaultFormulaState\n)\n\ninterface ToggleFormulaData {\n formula: number\n wasSelected: boolean\n}\nexport const ToggleFormula = createSignal('ToggleFormula')\n\nexport function formulaDriver(state = FormulaStateFactory(), signal: Signal): FormulaStateRecord {\n switch (signal.tag) {\n case EditBetslipItem:\n case QuickbetLoadSelection: {\n const { selection } = signal.data as QuickbetSelection\n if (isAllUpSelection(selection)) {\n const formulas = immutable.List(selection.formulas)\n const numberOfCombinationsSelected = getNumCombinationsSelected(formulas)\n return state.merge({\n ...defaultFormulaState,\n formulas,\n numberOfCombinationsSelected,\n })\n }\n\n return state.merge({\n ...defaultFormulaState,\n })\n }\n\n case ToggleFormula: {\n const { formula, wasSelected } = signal.data as ToggleFormulaData\n const index = state.formulas.findIndex(x => x?.formula === formula)\n if (index < 0) {\n return state\n }\n\n const toggledItem = state.formulas.get(index)\n if (!toggledItem) {\n return state\n }\n const formulas = state.formulas\n .splice(index, 1, { ...toggledItem, isSelected: !wasSelected })\n .toList()\n const numberOfCombinationsSelected = getNumCombinationsSelected(formulas)\n return state.merge({\n formulas,\n numberOfCombinationsSelected,\n })\n }\n\n default:\n return state\n }\n}\n\nexport function getNumCombinationsSelected(selections: immutable.List): number {\n return selections\n .filter(f => f.isSelected)\n .reduce((accumulator, currentValue) => accumulator + currentValue.numberOfCombinations, 0)\n}\n\nexport const state$ = attachDriver({ path: 'formula', driver: formulaDriver })\n","export const MIN_LEGS_IN_MULTI = 2\n\nexport const MAX_LEGS_IN_RACE_MULTI = 10\nexport const MAX_LEGS_IN_SPORT_MULTI = 15\n\nexport const MAX_LEGS_FOR_MULTI_FORMULA = 6\n\nexport const MULTI_FORMULA_COMBINATIONS = {\n f1: { legs2: 2, legs3: 3, legs4: 4, legs5: 5, legs6: 6 },\n f2: { legs3: 3, legs4: 6, legs5: 10, legs6: 15 },\n f3: { legs4: 4, legs5: 10, legs6: 20 },\n f4: { legs5: 5, legs6: 15 },\n f5: { legs6: 6 },\n}\n","import * as immutable from 'immutable'\nimport type {\n Selection,\n FobSelection,\n BetSlipResponse,\n BetError,\n BetPrices,\n} from '@mobi/betslip/types'\nimport {\n isFobDetails,\n isFobSelection,\n isRaceDetails,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { BetslipItem, BetslipInvestment, MultiBetError, MultiInvestment } from '../driver'\nimport {\n BetErrorType,\n SingleErrorMapping,\n MultiBetFatalErrorMapping,\n MultiErrorMapping,\n} from '@core/Data/betting'\nimport { KeypadModes } from '@core/Components/Keypad/KeyPress'\nimport { MIN_LEGS_IN_MULTI, MAX_LEGS_IN_RACE_MULTI, MAX_LEGS_IN_SPORT_MULTI } from '../constants'\n\nexport const isUnspecifiedErrorType = (errorType: BetErrorType | undefined): boolean =>\n errorType === BetErrorType.Unspecified\n\nexport const isFatalErrorType = (betErrorType: BetErrorType | string | undefined): boolean => {\n if (!betErrorType) {\n return false\n }\n\n const betError = toBetErrorType(betErrorType)\n return betError === BetErrorType.Closed || betError === BetErrorType.HandicapChanged\n}\n\nexport const isNonHandledError = (betErrorType: BetErrorType | undefined): boolean =>\n betErrorType !== undefined && betErrorType !== BetErrorType.PricesChanged\n\nexport const isFatalMultiBetLegError = (item: BetslipItem): boolean =>\n isFatalErrorType(item.multiBetLegError?.betErrorType)\n\nexport const hasErrors = (item: BetslipItem): boolean => !!item.betErrorType\n\nexport const isValidMultiInvestmentForLegs = (\n multiInvestment: MultiInvestment,\n multiItemsCount: number\n): boolean =>\n Array.from(Array(Math.min(multiItemsCount, 6)).keys()).some(cur => {\n if (cur === 1) {\n return false\n }\n\n return !!multiInvestment[(cur === 0 ? 'value' : `f${cur}`) as keyof MultiInvestment]\n })\n\nexport const isValidMulti = (\n multiInvestment: MultiInvestment,\n multiError: MultiBetError | null,\n multiItems: immutable.List\n): boolean => {\n const hasValidInvestment = isValidMultiInvestmentForLegs(multiInvestment, multiItems.count())\n\n return (\n hasValidInvestment &&\n !hasTooFewMultiLegs(multiItems) &&\n !hasTooManyMultiLegs(multiItems) &&\n !hasInvalidLegsOnMulti(multiItems) &&\n !multiError?.betErrorType\n )\n}\n\nexport const hasNoFatalErrors = (item: BetslipItem): boolean => !isFatalErrorType(item.betErrorType)\n\nconst hasNoUnspecifiedErrors = (item: BetslipItem): boolean =>\n !isUnspecifiedErrorType(item.betErrorType)\n\nexport const isDuplicateBonusBetErrorType = (error: BetErrorType | undefined): boolean =>\n error === BetErrorType.DuplicateBonusBet\n\nexport const hasBetPlacementFault = (error: BetErrorType | undefined): boolean => {\n return error === BetErrorType.BetPlacementFault\n}\nexport const hasNotBeenPlaced = (item: BetslipItem): boolean => !item.receipt\n\nexport const hasBeenPlaced = (item: BetslipItem): boolean => !!item.receipt\n\nexport const hasWinBoostedSuperPick = (item: BetslipItem): boolean =>\n (item &&\n !!item.selectedSuperPickOffer &&\n item.selectedSuperPickOffer.isBoostOffer &&\n item.selectedSuperPickOffer.legTypeCode === 'W') as boolean\n\nexport const hasPlaceBoostedSuperPick = (item: BetslipItem): boolean =>\n (item &&\n !!item.selectedSuperPickOffer &&\n item.selectedSuperPickOffer.isBoostOffer &&\n item.selectedSuperPickOffer.legTypeCode === 'P') as boolean\n\nexport const hasInvestment = (item: BetslipItem): boolean =>\n (!!item.investment.win && item.investment.win.value > 0) ||\n (!!item.investment.place && item.investment.place.value > 0)\n\nexport const hasTooFewMultiLegs = (multiItems: immutable.List): boolean =>\n multiItems.filter(item => item.isInMulti).count() < MIN_LEGS_IN_MULTI\n\nexport const hasTooManyMultiLegs = (multiItems: immutable.List): boolean => {\n const isRaceMulti = multiItems.some(\n item => item.isInMulti && isRaceDetails(item.selectionDetails)\n )\n return isRaceMulti\n ? multiItems.filter(item => item.isInMulti).count() > MAX_LEGS_IN_RACE_MULTI\n : multiItems.count() > MAX_LEGS_IN_SPORT_MULTI\n}\n\nexport const clearNonFatalErrors = (item: BetslipItem): BetslipItem =>\n !isFatalErrorType(item.betErrorType)\n ? { ...item, errorMessage: '', betErrorType: undefined }\n : item\n\nexport const clearNonFatalMultiBetLegError = (item: BetslipItem): BetslipItem =>\n isFatalMultiBetLegError(item) ? item : { ...item, multiBetLegError: null }\n\nexport const setFobSelectionPriceSource = (item: BetslipItem): BetslipItem => {\n if (item.selection && isFobSelection(item.selection)) {\n return { ...item, selection: { ...item.selection, priceSource: 'localstorage' } }\n }\n return item\n}\n\nexport const getBetsToPlace = (items: immutable.List): immutable.List =>\n items\n .filter(hasNoUnspecifiedErrors)\n .filter(x => !isDuplicateBonusBetErrorType(x.betErrorType))\n .filter(x => !hasBetPlacementFault(x.betErrorType))\n .filter(hasNoFatalErrors)\n .filter(hasNotBeenPlaced)\n .filter(hasInvestment)\n .toList()\n\nexport const getBetsInMulti = (items: immutable.List): immutable.List =>\n items.filter(item => !!item && item.isInMulti && !isToteSelection(item.selection)).toList()\n\nexport const getNewInvestmentAfterResponse = (\n item: BetslipItem,\n errorType?: BetErrorType | undefined\n): BetslipInvestment => {\n const shouldResetInvestment =\n !!item.receipt || isFatalErrorType(errorType) || errorType == BetErrorType.InvalidBonusBet\n return {\n win: {\n lastKeyPressed: { mode: KeypadModes.Numeric, value: 0 },\n secondLastKeyPressed: { mode: KeypadModes.Numeric, value: 0 },\n value: shouldResetInvestment || !item.investment.win ? 0 : item.investment.win.value,\n isBonusBet: shouldResetInvestment ? false : item.investment.win.isBonusBet,\n },\n place: {\n lastKeyPressed: { mode: KeypadModes.Numeric, value: 0 },\n secondLastKeyPressed: { mode: KeypadModes.Numeric, value: 0 },\n value: shouldResetInvestment || !item.investment.place ? 0 : item.investment.place.value,\n isBonusBet: shouldResetInvestment ? false : item.investment.place.isBonusBet,\n },\n bonusBet: shouldResetInvestment ? undefined : item.investment.bonusBet,\n }\n}\n\nexport const getErrorMessage = (betError: BetError | null | undefined): string =>\n betError == null\n ? ''\n : SingleErrorMapping.get(toBetErrorType(betError.type)) ||\n betError.message ||\n 'Unknown error occurred'\n\nexport const getBetErrorType = (\n response:\n | {\n error: BetError | null\n }\n | undefined\n): BetErrorType | undefined => {\n if (!response || !response.error) return undefined\n return toBetErrorType(response.error.type ?? BetErrorType.Unspecified)\n}\n\nexport const mapMultiBetError = (\n betErrorType: BetErrorType | string | undefined\n):\n | {\n betErrorType: BetErrorType\n errorMessage: string\n }\n | undefined => {\n if (betErrorType == undefined) return undefined\n\n const betError: BetErrorType = toBetErrorType(betErrorType)\n\n if (isFatalErrorType(betError)) {\n return {\n betErrorType: betError,\n errorMessage: MultiBetFatalErrorMapping.get(betError) as string,\n }\n }\n if (betError === BetErrorType.PricesChanged) {\n return { betErrorType: BetErrorType.PricesChanged, errorMessage: '' }\n }\n return { betErrorType: BetErrorType.Unspecified, errorMessage: 'Invalid Leg' }\n}\n\nexport function toBetErrorType(value: string | BetErrorType): BetErrorType {\n if (typeof value === 'string') {\n return BetErrorType[value as keyof typeof BetErrorType]\n }\n return value\n}\n\nexport function getMultiBetResponse(responses: T[]): T | undefined {\n return responses?.find(res => !!res.legs && res.legs.length > 1)\n}\n\nfunction getInvalidMultiItems(items: immutable.List): immutable.List {\n const uniqueKeys: string[] = []\n const dupeKeys: string[] = []\n const multiItems = getBetsInMulti(items)\n\n const checkForDupes = (key: string) => {\n if (uniqueKeys.includes(key)) {\n if (!dupeKeys.includes(key)) {\n dupeKeys.push(key)\n }\n } else {\n uniqueKeys.push(key)\n }\n }\n\n multiItems.forEach(item => {\n const { selectionDetails } = item\n if (isRaceDetails(selectionDetails)) {\n checkForDupes(selectionDetails.races[0].key)\n }\n if (isFobDetails(selectionDetails)) {\n checkForDupes(selectionDetails.event)\n }\n })\n return immutable.List(\n multiItems.filter(item => {\n const { selectionDetails } = item\n if (isRaceDetails(selectionDetails)) {\n return dupeKeys.includes(selectionDetails.races[0].key)\n }\n if (isFobDetails(selectionDetails)) {\n return dupeKeys.includes(selectionDetails.event)\n }\n return false\n })\n )\n}\n\nexport function isSpecialUsed(item: BetslipItem, items: immutable.List): boolean {\n if (Array.isArray(item.specialOffers) && item.specialOffers.length > 0) {\n return items.some(\n bet =>\n !!bet.selectedSuperPickOffer &&\n bet.selectedSuperPickOffer.tokenId === item.specialOffers[0].tokenId &&\n bet.id !== item.id\n )\n }\n return false\n}\n\nexport function hasInvalidLegsOnMulti(items: immutable.List): boolean {\n const uniqueKeys: string[] = []\n const isDuplicateKey = (key: string) => uniqueKeys.includes(key)\n\n return getBetsInMulti(items).some((item): boolean => {\n const { selectionDetails } = item\n\n if (isRaceDetails(selectionDetails)) {\n const { key } = selectionDetails.races[0]\n if (isDuplicateKey(key)) {\n return true\n }\n uniqueKeys.push(key)\n }\n if (isFobDetails(selectionDetails)) {\n const key = selectionDetails.event\n if (isDuplicateKey(key)) {\n return true\n }\n uniqueKeys.push(key)\n }\n return false\n })\n}\n\nexport function setInvalidLegOnMultiItem(\n item: BetslipItem,\n items: immutable.List\n): BetslipItem {\n const invalidItems = getInvalidMultiItems(items)\n if (!invalidItems.includes(item)) {\n return item\n }\n return { ...item, multiBetLegError: { betErrorType: 0, errorMessage: 'Invalid Leg' } }\n}\n\nexport function buildSelection(\n item: BetslipItem,\n ignorePriceChanges: boolean,\n responsePrices?: BetPrices\n): Selection {\n const selection = item.selection\n\n if (isFobSelection(selection) && !isStartingPriceSelection(selection)) {\n const newSelection: FobSelection = {\n ...selection,\n }\n\n // * ignorePriceChanges: push prices are disgarded during bet confirmation/placement, so\n // take price changes on propose/confirm actions (but not refresh)\n // * or, if we haven't received a push price (eg. no price change since subscription)\n // then take this price\n const canOverwritePrices = !ignorePriceChanges || selection.priceSource !== 'push'\n\n if (canOverwritePrices && responsePrices) {\n if (responsePrices.placePrice) {\n newSelection.placePrice = responsePrices.placePrice\n newSelection.placePriceLastSeen = responsePrices.previousPlacePrice ?? null\n }\n if (responsePrices.winPrice) {\n newSelection.winPrice = responsePrices.winPrice\n newSelection.winPriceLastSeen = responsePrices.previousWinPrice ?? null\n }\n newSelection.priceSource = 'api'\n }\n return newSelection\n } else {\n return item.selection as Selection\n }\n}\n\nexport const getMultibetErrorDescription = (\n multiBetResponse: BetSlipResponse | undefined\n): MultiBetError | null => {\n if (!!multiBetResponse && !multiBetResponse.success) {\n const betErrorType = getBetErrorType(multiBetResponse) || BetErrorType.Unspecified\n return {\n betErrorType: betErrorType,\n errorMessage:\n MultiErrorMapping.get(BetErrorType[betErrorType]) ||\n multiBetResponse.error?.message ||\n 'An error has occurred',\n }\n } else {\n return null\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport type {\n Selection,\n MysterySelection,\n EventDetails,\n BettingType,\n BetError,\n BetPrices,\n} from '@mobi/betslip/types'\nimport {\n isFobSelection,\n isMysterySelection,\n isRaceDetails,\n isSameRaceMultiSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { makeTypedFactory, TypedRecord } from 'typed-immutable-record'\nimport { ToteRaceStatusChangedPushEvent } from 'tabtouch-push-contract'\nimport { BetResponseCode, MysteryProposeResponse, BetErrorType } from '@core/Data/betting'\nimport { isMysteryDetails } from '@core/Data/Betting/selectionDetails'\nimport {\n ChangeInvestment,\n ProposeBet,\n ProposeBetFailed,\n ProposeBetSucceeded,\n ConfirmBet,\n ConfirmBetFailed,\n ConfirmBetSucceeded,\n ConfirmBetslipBetsSucceeded,\n ConfirmBetslipBetsFailed,\n DepositFundsDisplayed,\n EditBetslipItem,\n QuickbetLoadSelection,\n QuickbetSelection,\n SetActiveInvestment,\n ToggleBonusBetUsage,\n ToggleBonusCashUsage,\n ToggleEachWay,\n SetInvalidInvestmentNotification,\n AddingToBetslip,\n RaceClosedEventReceived,\n SetMysteryQuickPickPresetInvestment,\n ProposeBetslipBetsSucceeded,\n QuickbetClosed,\n SetAllowInvestmentState,\n InsufficientFundsForBet,\n ClearInsufficientFundsForBet,\n} from './signals'\nimport { HasLoggedIn } from '@core/State/UserAccount/userAccountDriver'\nimport {\n ChangeSelectedSuperPick,\n LoadSuperPicks,\n UpdateSelectedSuperPick,\n} from '@core/Components/SuperPick/signals'\nimport { ToggleFormula } from './Components/Formula/driver'\nimport { BetslipItem } from '../Betslip/driver'\nimport { NotificationType } from './Components/Notifications/NotificationTypes'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { toBetErrorType } from '../Betslip/helpers/state'\n\nexport interface QuickbetState {\n id: string | null\n bettingType: BettingType | null\n canBet: boolean\n canChangeInvestment: boolean\n betPlaced: boolean\n isBusy: boolean\n canProposeBet: boolean\n canConfirmBet: boolean\n selection: Selection | null\n selectionDetails: TSelectionDetails | null\n shouldAllowWinInvestment: boolean\n shouldAllowPlaceInvestment: boolean\n isEachWayAvailable: boolean\n isEachWay: boolean\n isUsingBonusBet: boolean\n isUsingBonusCash: boolean\n isAddingToBetslip: boolean\n isBetslipItem: boolean\n notificationType: NotificationType | null\n notificationTitle: string | null\n notificationSubtitle: string | null\n presetInvestment: boolean\n promptForInvestment: boolean // is investment input required\n tags?: string[]\n isSameRaceMulti?: boolean\n betSource: string | null\n keepSelections?: null | ((_?: boolean) => boolean | undefined)\n insufficientFundsForBet: boolean\n betCost: number\n shortfall: number\n}\n\nexport const defaultNotificationState = {\n notificationType: null,\n notificationTitle: null,\n notificationSubtitle: null,\n}\n\nexport const defaultQuickbetState: QuickbetState = {\n id: null,\n bettingType: null,\n canBet: true,\n canChangeInvestment: true,\n betPlaced: false,\n isBusy: false,\n canProposeBet: true,\n canConfirmBet: false,\n selection: null,\n selectionDetails: null,\n isEachWayAvailable: false,\n isUsingBonusBet: false,\n isUsingBonusCash: true,\n isEachWay: false,\n shouldAllowWinInvestment: true,\n shouldAllowPlaceInvestment: false,\n isAddingToBetslip: false,\n isBetslipItem: false,\n presetInvestment: false,\n promptForInvestment: true,\n tags: [],\n isSameRaceMulti: false,\n ...defaultNotificationState,\n betSource: null,\n keepSelections: null,\n insufficientFundsForBet: false,\n betCost: 0,\n shortfall: 0,\n}\n\nconst canChangeInvestmentState = {\n canChangeInvestment: true,\n canProposeBet: true,\n canConfirmBet: false,\n ...defaultNotificationState,\n}\n\nlet isQuickbetOpen = false\n\nexport interface QuickbetStateRecord extends TypedRecord, QuickbetState {}\nexport const QuickbetStateFactory = makeTypedFactory(\n defaultQuickbetState\n)\n\nconst shouldShowPriceChangeMessage = (currentPrices: BetPrices, newPrices: BetPrices): boolean =>\n !!(newPrices.winPrice && currentPrices.winPrice && newPrices.winPrice < currentPrices.winPrice) ||\n !!(\n newPrices.placePrice &&\n currentPrices.placePrice &&\n newPrices.placePrice < currentPrices.placePrice\n )\n\nconst getEventId = (stateImmu: QuickbetStateRecord) => {\n const selectionDetails = stateImmu.toJS().selectionDetails\n\n if (isRaceDetails(selectionDetails)) {\n return selectionDetails.races[0].key\n }\n\n if (isMysteryDetails(selectionDetails)) {\n return selectionDetails.race.key\n }\n\n return null\n}\n\nexport function quickbetDriver(\n state = QuickbetStateFactory(),\n signal: Signal\n): QuickbetStateRecord {\n switch (signal.tag) {\n case QuickbetLoadSelection: {\n isQuickbetOpen = true\n const {\n bettingType,\n selection,\n selectionDetails,\n isEachWayAvailable,\n shouldAllowPlaceInvestment,\n presetInvestment = false,\n promptForInvestment = true,\n tags,\n betSource,\n keepSelections,\n } = signal.data as QuickbetSelection\n\n const isSameRaceMulti = isSameRaceMultiSelection(selection)\n\n return state.merge({\n ...defaultQuickbetState,\n id: uuidv4(),\n bettingType,\n selection,\n selectionDetails,\n isEachWayAvailable,\n shouldAllowPlaceInvestment,\n presetInvestment,\n promptForInvestment,\n canChangeInvestment: promptForInvestment,\n canProposeBet: promptForInvestment,\n canConfirmBet: !promptForInvestment,\n notificationType: !promptForInvestment ? NotificationType.ProposeSucceeded : null,\n tags,\n isSameRaceMulti,\n betSource: betSource ?? null,\n keepSelections: keepSelections ?? null,\n })\n }\n\n case ToggleFormula:\n case ChangeInvestment: {\n const currentState: QuickbetState = state.toJS()\n\n const selection = currentState.selection as MysterySelection\n\n if (\n currentState.bettingType === 'mystery-quick-pick' ||\n currentState.bettingType === 'mystery-custom-bet'\n ) {\n selection.bets = null\n selection.metaData = null\n }\n\n state = state.merge({\n selection,\n insufficientFundsForBet: false,\n betCost: 0,\n shortfall: 0,\n ...canChangeInvestmentState,\n })\n\n // Need to force the Notification and canChangeInvestment as canChangeInvestmentState will clear it\n if (currentState.bettingType === 'mystery-quick-pick') {\n state = state.merge({\n canChangeInvestment: false,\n notificationType: NotificationType.MysteryQuickPickFixedInvestment,\n })\n }\n\n return state\n }\n\n case EditBetslipItem: {\n const {\n id,\n selection,\n selectionDetails,\n isEachWay,\n isEachWayAvailable,\n bettingType,\n shouldAllowPlaceInvestment,\n isUsingBonusCash,\n }: BetslipItem = signal.data\n return state.merge({\n ...defaultQuickbetState,\n id,\n selection,\n selectionDetails,\n isEachWayAvailable,\n isEachWay,\n bettingType,\n isBetslipItem: true,\n shouldAllowPlaceInvestment,\n isUsingBonusCash: isUsingBonusCash,\n })\n }\n\n case SetActiveInvestment: {\n return state.merge({\n ...canChangeInvestmentState,\n })\n }\n\n case ChangeSelectedSuperPick: {\n const isConfirmationStage = !state.canProposeBet && state.canConfirmBet\n const hasInvalidSuperPickSelection = !state.canChangeInvestment && state.canProposeBet\n if (hasInvalidSuperPickSelection || isConfirmationStage) {\n return state.merge({\n ...canChangeInvestmentState,\n })\n }\n return state\n }\n\n case SetInvalidInvestmentNotification: {\n const { type, title = null, subtitle = null } = signal.data\n return state.merge({\n notificationType: type,\n notificationTitle: title,\n notificationSubtitle: subtitle,\n canChangeInvestment: false,\n })\n }\n\n case ToggleBonusBetUsage: {\n const forcedValue = signal.data\n const isUsingBonusBet = forcedValue != undefined ? forcedValue : !state.get('isUsingBonusBet')\n return state.merge({\n isUsingBonusBet,\n isUsingBonusCash: isUsingBonusBet ? false : state.get('isUsingBonusCash'),\n })\n }\n\n case ToggleBonusCashUsage: {\n const forcedValue = signal.data\n const isUsingBonusCash =\n forcedValue != undefined ? forcedValue : !state.get('isUsingBonusCash')\n return state.merge({\n isUsingBonusCash,\n isUsingBonusBet: isUsingBonusCash ? false : state.get('isUsingBonusBet'),\n })\n }\n\n case SetAllowInvestmentState: {\n return state.merge({\n shouldAllowPlaceInvestment: signal.data.shouldAllowPlaceInvestment,\n shouldAllowWinInvestment: signal.data.shouldAllowWinInvestment,\n })\n }\n\n case ToggleEachWay: {\n return state.merge({\n ...canChangeInvestmentState,\n isEachWay: !state.get('isEachWay'),\n })\n }\n\n case ProposeBet: {\n return state.merge({\n isBusy: true,\n })\n }\n\n case ProposeBetSucceeded:\n case ProposeBetslipBetsSucceeded: {\n const currentState: QuickbetState = { ...state.toJS() }\n\n if (isMysterySelection(currentState.selection)) {\n const response = signal.data as MysteryProposeResponse\n const bets: MysterySelection['bets'] = response.bets\n const metaData: string = response.metaData\n const selection = currentState.selection\n selection.bets = bets\n selection.metaData = metaData\n\n state = state.merge({\n selection,\n isBusy: false,\n canChangeInvestment: false,\n canProposeBet: false,\n canConfirmBet: true,\n notificationType: NotificationType.ProposeSucceeded,\n })\n\n return state\n }\n\n if (\n isFobSelection(currentState.selection) &&\n !isStartingPriceSelection(currentState.selection)\n ) {\n const currentPrices: BetPrices = {\n winPrice: currentState.selection.winPrice,\n placePrice: currentState.selection.placePrice,\n previousWinPrice: null,\n previousPlacePrice: null,\n }\n\n const { winPrice: newWinPrice, placePrice: newPlacePrice } = signal.data.prices\n const newPrices: BetPrices = {\n winPrice: newWinPrice === null ? currentPrices.winPrice : newWinPrice,\n placePrice: newPlacePrice === null ? currentPrices.placePrice : newPlacePrice,\n previousWinPrice: null,\n previousPlacePrice: null,\n }\n\n const specialOffers = signal.data.specialOffers\n\n if (specialOffers && specialOffers[0]) {\n UpdateSelectedSuperPick({ specialOffers })\n }\n const showPricesChanged = shouldShowPriceChangeMessage(currentPrices, newPrices)\n return state.merge({\n isBusy: false,\n canChangeInvestment: false,\n canProposeBet: false,\n canConfirmBet: true,\n selection: {\n ...currentState.selection,\n winPrice: newPrices.winPrice,\n placePrice: newPrices.placePrice,\n },\n ...defaultNotificationState,\n notificationType: showPricesChanged\n ? NotificationType.PriceChange\n : NotificationType.ProposeSucceeded,\n })\n }\n\n state = state.merge({\n isBusy: false,\n canChangeInvestment: false,\n canProposeBet: false,\n canConfirmBet: true,\n notificationType: NotificationType.ProposeSucceeded,\n })\n\n return state\n }\n\n case ProposeBetFailed: {\n if (signal.data.code === BetResponseCode.Unauthorized) {\n return state.merge({\n notificationType: NotificationType.Unauthorized,\n isBusy: false,\n canChangeInvestment: false,\n })\n }\n if (signal.data.code === BetResponseCode.HandicapChanged) {\n return state.merge({\n isBusy: false,\n canBet: false,\n notificationType: NotificationType.HandicapChanged,\n canChangeInvestment: false,\n canProposeBet: false,\n canConfirmBet: false,\n })\n }\n // Fallback case for errors like \"Max stake exceeded\", \"event or market closed\".\n return state.merge({\n isBusy: false,\n canConfirmBet: false,\n canChangeInvestment: false,\n notificationType: NotificationType.NonHandledError,\n notificationTitle: signal.data.response.message,\n canBet: false,\n canProposeBet: false,\n })\n }\n\n case InsufficientFundsForBet: {\n const { betCost, shortfall } = signal.data\n return state.merge({\n insufficientFundsForBet: true,\n betCost,\n shortfall,\n })\n }\n\n case ClearInsufficientFundsForBet: {\n return state.merge({\n insufficientFundsForBet: false,\n betCost: 0,\n shortfall: 0,\n })\n }\n\n case ConfirmBet: {\n return state.merge({\n isBusy: true,\n })\n }\n\n case ConfirmBetSucceeded:\n case ConfirmBetslipBetsSucceeded: {\n return state.merge({\n isBusy: false,\n canBet: false,\n canConfirmBet: false,\n betPlaced: true,\n ...defaultNotificationState,\n })\n }\n\n case ConfirmBetslipBetsFailed: {\n state = state.set('betPlaced', false)\n const betslipError = signal.data as BetError[]\n\n if (\n betslipError.every(error => toBetErrorType(error.type) === BetErrorType.InsufficientFunds)\n ) {\n return state.merge({\n isBusy: false,\n canConfirmBet: false,\n notificationType: NotificationType.InsufficientFunds,\n })\n }\n\n if (betslipError.every(error => toBetErrorType(error.type) === BetErrorType.Closed)) {\n const message = betslipError[0]?.message\n return state.merge({\n isBusy: false,\n canConfirmBet: false,\n notificationType: NotificationType.NonHandledError,\n notificationTitle: message,\n canBet: false,\n })\n }\n\n return state.merge({\n isBusy: false,\n notificationType: NotificationType.NonHandledError,\n notificationTitle: 'Unable to place any bets. Please try again later',\n canConfirmBet: false,\n canBet: false,\n })\n }\n\n case ConfirmBetFailed: {\n state = state.set('betPlaced', false)\n\n if (signal.data.code === BetResponseCode.PriceChanged) {\n const currentState: QuickbetState = { ...state.toJS() }\n\n const currentPrices: BetPrices = {\n winPrice: (currentState.selection as { winPrice: number }).winPrice,\n placePrice: (currentState.selection as { placePrice: number }).placePrice,\n previousWinPrice: null,\n previousPlacePrice: null,\n }\n\n const { winPrice: newWinPrice, placePrice: newPlacePrice } = signal.data.response.prices\n const newPrices: BetPrices = {\n winPrice: newWinPrice === null ? currentPrices.winPrice : newWinPrice,\n placePrice: newPlacePrice === null ? currentPrices.placePrice : newPlacePrice,\n previousWinPrice: null,\n previousPlacePrice: null,\n }\n\n if (currentState.bettingType === 'fixed-odds-racing') {\n LoadSuperPicks()\n }\n\n const showPricesChanged = shouldShowPriceChangeMessage(currentPrices, newPrices)\n state = state.merge({\n isBusy: false,\n selection: {\n ...currentState.selection,\n winPrice: newPrices.winPrice,\n placePrice: newPrices.placePrice,\n },\n ...defaultNotificationState,\n notificationType: showPricesChanged ? NotificationType.PriceChange : null,\n })\n\n return state\n }\n if (signal.data.code === BetResponseCode.HandicapChanged) {\n return state.merge({\n isBusy: false,\n canBet: false,\n notificationType: NotificationType.HandicapChanged,\n canChangeInvestment: false,\n canConfirmBet: false,\n canProposeBet: false,\n })\n }\n if (signal.data.code === BetResponseCode.InsufficientFunds) {\n return state.merge({\n isBusy: false,\n canConfirmBet: false,\n notificationType: NotificationType.InsufficientFunds,\n })\n }\n if (signal.data.code === BetResponseCode.Unauthorized) {\n return state.merge({\n notificationType: NotificationType.Unauthorized,\n isBusy: false,\n canChangeInvestment: false,\n })\n }\n if (signal.data.code === BetResponseCode.Unauthorized) {\n return state.merge({\n notificationType: NotificationType.Unauthorized,\n isBusy: false,\n canChangeInvestment: false,\n })\n }\n if (signal.data.code === BetResponseCode.NetworkError) {\n return state.merge({\n isBusy: false,\n canBet: false,\n canChangeInvestment: false,\n canConfirmBet: false,\n canProposeBet: false,\n notificationType: NotificationType.NonHandledError,\n notificationTitle: signal.data.response.message,\n })\n }\n // Fallback case for errors like \"Max stake exceeded\", \"event or market closed\".\n return state.merge({\n isBusy: false,\n notificationType: NotificationType.NonHandledError,\n notificationTitle: signal.data.response.message,\n canConfirmBet: false,\n canBet: false,\n })\n }\n\n case DepositFundsDisplayed: {\n return state.merge({\n isBusy: false,\n canProposeBet: false,\n canConfirmBet: true,\n ...defaultNotificationState,\n notificationType: NotificationType.ProposeSucceeded,\n })\n }\n\n case HasLoggedIn: {\n if (state.get('canProposeBet') && !state.get('canConfirmBet')) {\n if (state.get('bettingType') === 'mystery-quick-pick') {\n return state // Don't do anything for Mystery Quick Pick\n }\n\n return state.merge({\n ...defaultNotificationState,\n canChangeInvestment: true,\n })\n }\n if (state.get('canConfirmBet') && !state.get('canProposeBet')) {\n return state.merge({\n ...defaultNotificationState,\n notificationType: NotificationType.ProposeSucceeded,\n })\n }\n return state\n }\n\n case AddingToBetslip: {\n return state.merge({\n isAddingToBetslip: true,\n })\n }\n\n case QuickbetClosed: {\n isQuickbetOpen = false\n return state.merge({\n tags: [],\n betSource: null,\n })\n }\n\n case RaceClosedEventReceived: {\n if (!isQuickbetOpen) {\n RegisterToast({\n id: signal.data.toastId,\n message: 'Betting Closed',\n type: 'error',\n timeout: 0,\n })\n }\n if (\n isQuickbetOpen &&\n !state.isBusy &&\n !state.betPlaced &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (isToteSelection((state.selection as any).toJS()) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isMysterySelection((state.selection as any).toJS())) &&\n (signal.data.event as ToteRaceStatusChangedPushEvent).raceId.toString() ===\n getEventId(state)\n ) {\n return state.merge({\n isBusy: false,\n canConfirmBet: false,\n canChangeInvestment: false,\n notificationType: NotificationType.RaceClosed,\n canBet: false,\n canProposeBet: false,\n })\n }\n return state\n }\n\n case SetMysteryQuickPickPresetInvestment: {\n return state.merge({\n canChangeInvestment: false,\n notificationType: NotificationType.MysteryQuickPickFixedInvestment,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'quickbet',\n driver: quickbetDriver,\n})\n\nexport const immutableState$ = state$.map(state => state.toJS() as Immutable)\n","import { SignalEmitter, attachDriver, createSignal } from 'rwwa-rx-state-machine'\nimport { StateMap } from 'typings/immutable'\nimport { fromJS } from 'immutable'\n\nexport const RaceBettingPageMysterySelection = createSignal(\n 'RaceBettingPageMysterySelection'\n)\n\nexport const ClearRaceBettingPageMysterySelection = createSignal(\n 'ClearRaceBettingPageMysterySelection'\n)\n\nexport interface MysteryRaceBettingPageWrapperState {\n selectedKey: string | null\n}\nexport type MysteryStateMap = StateMap\n\nexport const defaultState: Readonly = {\n selectedKey: null,\n}\n\nexport function mysteryRaceBettingPageWrapperDriver(\n state = fromJS(defaultState),\n signal: { tag: SignalEmitter; data: string }\n): MysteryStateMap {\n switch (signal.tag) {\n case RaceBettingPageMysterySelection: {\n const key: string = signal.data\n const selectedKey = state.toJS().selectedKey\n\n const newSelectedKeyValue = key === selectedKey ? null : key\n\n const newState = state.merge({\n selectedKey: newSelectedKeyValue,\n })\n return newState\n }\n case ClearRaceBettingPageMysterySelection: {\n const newState = state.merge({\n ...defaultState,\n })\n return newState\n }\n\n default:\n return state\n }\n}\n\nexport const mysteryRaceBettingPageWrapperState$ = attachDriver({\n driver: mysteryRaceBettingPageWrapperDriver,\n path: 'mystery-race-betting-page-wrapper-dDriver',\n})\n","import React, { ReactNode, useMemo } from 'react'\nimport dayjs from 'dayjs'\n\ntype Props = {\n date: Date\n format: string\n children?: (formattedDate: string) => ReactNode\n}\n\nconst DateTime = ({ date, format, children }: Props): JSX.Element => {\n const formattedDate = useMemo(() => dayjs(date).format(format), [date, format])\n\n return \n}\n\nexport default DateTime\n","import React from 'react'\n\nconst SeparatorBullet = (): JSX.Element => \n\nexport default SeparatorBullet\n","import React from 'react'\nimport { Race } from '@core/Areas/Racing/Types'\nimport { DateTime } from '@core/Components/DateTime'\nimport { SeparatorBullet } from '@core/Components/Separator'\n\ntype Props = {\n race: Pick\n}\n\nconst RaceTime = ({ race }: Props): JSX.Element => {\n const { raceTime, provDivUpdateTime } = race\n\n return (\n \n \n\n {provDivUpdateTime && (\n \n {' '}\n \n \n {' '}\n \n \n )}\n \n )\n}\n\nexport default RaceTime\n","import produce from 'immer'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport {\n ToteAcceptorScratchedPushEvent,\n ToteAcceptorUnscratchedPushEvent,\n} from '@core/State/PushData'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport const pushToteAcceptorScratched = (\n event: ToteAcceptorScratchedPushEvent,\n meetingId: string,\n meetingDate: Date,\n raceNumber: number,\n raceId: string | null,\n raceInformation: ObservableRacePage\n) => {\n handleEvent(event, meetingId, meetingDate, raceNumber, raceId, true, raceInformation)\n}\n\nexport const pushToteAcceptorUnscratched = (\n event: ToteAcceptorUnscratchedPushEvent,\n meetingId: string,\n meetingDate: Date,\n raceNumber: number,\n raceId: string | null,\n raceInformation: ObservableRacePage\n) => {\n handleEvent(event, meetingId, meetingDate, raceNumber, raceId, false, raceInformation)\n}\n\nfunction handleEvent(\n event: ToteAcceptorScratchedPushEvent | ToteAcceptorUnscratchedPushEvent,\n meetingId: string,\n meetingDate: Date,\n raceNumber: number,\n raceId: string | null,\n isScratched: boolean,\n raceInformation: ObservableRacePage\n) {\n if (!event.raceId || !event.acceptorNumber || event.raceId.toString() != raceId) {\n return\n }\n\n const queryKey = queryKeys.racePageComplete(meetingId, meetingDate, raceNumber)\n\n // Update ReactQuery state\n queryClient.setQueryData(queryKey, current => {\n if (!current) return undefined // key not found\n if (!isRacePageDto(current)) return undefined // only update open races\n return produce(current, draft => {\n const starters = draft.RaceStarters.find(rs => rs.RaceKey.RaceNumber === raceNumber)\n const starter = starters?.Starters.find(s => s.Number === event.acceptorNumber)\n if (starter) starter.IsScratched = isScratched\n })\n })\n\n // Update KO View Model state\n const starters = raceInformation.getStartersForRace(raceNumber)()\n\n const scratchedStarter = starters.find(starter => starter.number() === event.acceptorNumber)\n\n if (scratchedStarter) {\n scratchedStarter.isScratched(isScratched)\n if (!scratchedStarter.hasFixedOdds() || !isScratched) {\n scratchedStarter.isScratchedToteAndFob(isScratched)\n }\n // TODO: Handle late scratchings when regurgitator payload is updated\n // scratchedStarter.scratchType('Late')\n }\n}\n","import produce from 'immer'\nimport { ToteRaceStatusChangedPushEvent } from '@core/State/PushData'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ninterface PushRaceClosedEvent {\n event: ToteRaceStatusChangedPushEvent\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}\n\nexport function pushToteRaceStatusChanged({\n event,\n meetingId,\n meetingDate,\n raceNumber,\n}: PushRaceClosedEvent) {\n if (event.status !== 'closed') return\n const queryKey = queryKeys.racePageComplete(meetingId, meetingDate, raceNumber)\n queryClient.setQueryData(queryKey, updateDataWithNewStatus)\n}\n\nconst updateDataWithNewStatus = (current: RacePageDTO | undefined) => {\n // No data associated with key\n if (!current) return undefined\n // Only update open races\n if (!isRacePageDto(current)) return undefined\n\n return produce(current, draft => {\n draft.MeetingInformation.SelectedRace.RaceStatus = 'Closed'\n draft.MeetingInformation.SelectedRace.RaceStatusText = 'Closed'\n })\n}\n","import { ButtonSelectionType } from '../UIElements/ButtonSelectionType'\nimport { ISelectionContext } from './ISelectionContext'\nexport default class LegSelectionContext implements ISelectionContext {\n constructor(\n public legNumber: number,\n public buttonSelectionType: ButtonSelectionType\n ) {}\n}\n","import type { BetSlipItem, BetSelection } from '../types'\nimport { isSelectionAllowedInMulti } from './state'\n\n/** Used by client wrapper to create bet slip item */\nexport const createBetSlipItem = (\n {\n bettingType,\n isEachWayAvailable,\n selection,\n selectionDetails,\n shouldAllowPlaceInvestment,\n betSource,\n }: BetSelection,\n presetData: PresetData = {}\n): BetSlipItem => {\n const isAllowedInMulti = isSelectionAllowedInMulti(selection)\n\n return {\n id: Date.now().toString(),\n bettingType,\n isEachWayAvailable,\n isEachWay: presetData.isEachWay || false,\n investment: {\n win: { value: presetData.investmentWin || 0 },\n place: { value: presetData.investmentPlace || 0 },\n bonusBet: undefined,\n },\n isSuperPickAvailable: false,\n selection,\n selectionDetails,\n shouldAllowPlaceInvestment,\n\n errorMessage: '',\n selectedSuperPickOffer: null,\n isInMulti: isAllowedInMulti,\n multiLegBetType: isAllowedInMulti ? 'W' : undefined,\n multiBetLegError: null,\n specialOffers: [],\n tags: [],\n betSource,\n }\n}\n\n// ========\n// Types\n// ========\n\ntype PresetData = {\n investmentWin?: number\n investmentPlace?: number\n isEachWay?: boolean\n}\n","import { attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { Keypress, KeyPressed, KeypadModes } from '@core/Components/Keypad/KeyPress'\nimport { calculateInvestment } from '../../helpers/calculator'\nimport {\n SetActiveInvestment,\n EditBetslipItem,\n QuickbetLoadSelection,\n SetMysteryQuickPickPresetInvestment,\n SetBonusBet,\n} from '../../signals'\nimport { BetslipItem } from '../../../Betslip/driver'\n\nexport enum InvestmentType {\n Win = 'win',\n Place = 'place',\n}\n\nexport interface BonusBet {\n campaignId: number\n value: number\n}\n\nexport interface SingleInvestment {\n value: number\n isBonusBet?: boolean\n isBonusCash?: boolean\n lastKeyPressed: KeyPressed\n secondLastKeyPressed: KeyPressed\n}\n\nexport interface InvestmentState {\n bonusBet: BonusBet | undefined\n win: SingleInvestment\n place: SingleInvestment\n activeInvestment: InvestmentType\n}\n\nexport const defaultInvestmentState: InvestmentState = {\n bonusBet: undefined,\n win: {\n value: 0,\n isBonusBet: false,\n lastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n secondLastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n },\n place: {\n value: 0,\n isBonusBet: false,\n lastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n secondLastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n },\n activeInvestment: InvestmentType.Win,\n}\n\nexport interface InvestmentStateRecord\n extends TypedRecord,\n InvestmentState {}\nexport const InvestmentStateFactory = makeTypedFactory(\n defaultInvestmentState\n)\n\nexport function betInvestmentDriver(\n state = InvestmentStateFactory(),\n signal: Signal\n): InvestmentStateRecord {\n switch (signal.tag) {\n case QuickbetLoadSelection: {\n return state.merge({\n ...defaultInvestmentState,\n })\n }\n\n case Keypress: {\n const currentState: InvestmentStateRecord = { ...state.toJS() }\n const lastKeyPressed = currentState[currentState.activeInvestment].lastKeyPressed\n const secondLastKeyPressed = currentState[currentState.activeInvestment].secondLastKeyPressed\n const currentValue = currentState[currentState.activeInvestment].value\n const newValue = calculateInvestment(\n signal.data,\n currentValue,\n lastKeyPressed,\n secondLastKeyPressed\n )\n\n const newState: InvestmentStateRecord = {\n ...currentState,\n [currentState.activeInvestment]: {\n value: newValue,\n secondLastKeyPressed: lastKeyPressed,\n lastKeyPressed: signal.data,\n },\n }\n\n return state.merge(newState)\n }\n\n case SetActiveInvestment: {\n return state.merge({\n activeInvestment: signal.data,\n })\n }\n\n case SetMysteryQuickPickPresetInvestment: {\n const investmentWin: number = signal.data\n\n return state.merge({\n ...defaultInvestmentState,\n win: {\n value: investmentWin,\n lastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n },\n })\n }\n\n case EditBetslipItem: {\n const {\n investment: { win, place },\n }: BetslipItem = signal.data\n return state.merge({\n ...defaultInvestmentState,\n win,\n place,\n activeInvestment: state.activeInvestment,\n })\n }\n\n case SetBonusBet: {\n const bonusBet = signal.data as BonusBet\n const currentState: InvestmentStateRecord = { ...state.toJS() }\n let win: SingleInvestment = currentState.win\n let place: SingleInvestment = currentState.place\n\n win = {\n ...win,\n value: 0,\n isBonusBet: false,\n }\n place = {\n ...place,\n value: 0,\n isBonusBet: false,\n }\n\n if (bonusBet && currentState.activeInvestment == InvestmentType.Win) {\n win = {\n ...win,\n value: bonusBet.value,\n isBonusBet: true,\n }\n }\n\n if (bonusBet && currentState.activeInvestment == InvestmentType.Place) {\n place = {\n ...place,\n value: bonusBet.value,\n isBonusBet: true,\n }\n }\n\n return state.merge({\n bonusBet: bonusBet,\n win: win,\n place: place,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'betInvestment',\n driver: betInvestmentDriver,\n})\n","import * as immutable from 'immutable'\nimport type { Selection, EventDetails, BettingType } from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { BetslipItem } from '../driver'\nimport { v1 as createUuid } from 'uuid'\nimport { defaultInvestmentState } from '@core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver'\nimport { getNumCombinationsSelected } from '@core/Areas/Quickbet/Components/Formula/driver'\n\ninterface CreateItemForBetslip {\n bettingType: BettingType\n isEachWayAvailable: boolean\n selection: Selection\n selectionDetails: EventDetails | null\n shouldAllowPlaceInvestment: boolean\n tags?: string[]\n betSource?: string\n}\n\nexport const createItemForLegacyBetslip = ({\n bettingType,\n isEachWayAvailable,\n selection,\n selectionDetails,\n shouldAllowPlaceInvestment,\n tags,\n betSource,\n}: CreateItemForBetslip): BetslipItem => {\n const isAllowedInMulti = !isToteSelection(selection) && !isStartingPriceSelection(selection)\n return {\n id: createUuid(),\n bettingType,\n isEachWayAvailable,\n isEachWay: false,\n investment: {\n win: {\n ...defaultInvestmentState.win,\n value: 0,\n },\n place: {\n ...defaultInvestmentState.place,\n value: 0,\n },\n bonusBet: undefined,\n },\n isSuperPickAvailable: false,\n selection,\n selectionDetails,\n shouldAllowPlaceInvestment,\n numberOfCombinations: isAllUpSelection(selection)\n ? getNumCombinationsSelected(immutable.List(selection.formulas))\n : 1,\n errorMessage: '',\n selectedSuperPickOffer: null,\n isInMulti: isAllowedInMulti,\n multiLegBetType: isAllowedInMulti ? 'W' : undefined,\n multiBetLegError: null,\n specialOffers: [],\n hasIotSubscription: false,\n tags,\n betSource,\n }\n}\n","import { FeatureFlagKey } from '../LaunchDarklyService'\nimport { state$ as launchDarklyState$ } from '../driver'\nimport { logError } from '@classic/Foundation/Services/LoggingService'\n\nexport async function isActive(\n key: FeatureFlagKey,\n defaultValue = false,\n shouldWaitForUser = false\n): Promise {\n try {\n const launchDarkly = await launchDarklyState$\n .where(x => x.features.size > 0)\n .skipWhile(({ isUserAnonymous }) => shouldWaitForUser && isUserAnonymous)\n .take(1)\n .toPromise()\n\n return launchDarkly && launchDarkly.features.get(key) == true\n } catch (e) {\n // with an abundance or caution.. swallow all errors and return the default value\n logError(\n `failed to retrieve launch darkly flag, key=${key}, defaultValue=${defaultValue}, e=${e}`\n )\n return defaultValue\n }\n}\n","import type { Contract } from '@mobi/web-native-comms'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { isActive } from '@core/State/LaunchDarklyFeatures/helpers/isActive'\nimport { isHapticFeedbackSettingEnabled } from '@core/Areas/Settings/Store/selectors'\nimport { store } from '@core/Store'\n\nexport const triggerHapticFeedback = async (feedbackType: Contract['START_HAPTIC_FEEDBACK']) => {\n const isFeatureActive = await isActive('haptic-feedback')\n const isHapticEnabled = isHapticFeedbackSettingEnabled(store.getState())\n\n if (!isFeatureActive || !isHapticEnabled) return\n\n // Trigger haptic feedback\n if (isReactNativeApp) {\n sendToNative('START_HAPTIC_FEEDBACK', feedbackType)\n } else {\n window.navigator.vibrate?.(feedbackType == 'success' ? 50 : 25)\n }\n}\n","import React from 'react'\nimport { ConfirmAllBetsSuccessful } from '@core/Areas/Betslip/signals'\nimport { ConfirmBetSucceeded } from '@core/Areas/Quickbet/signals'\nimport { triggerHapticFeedback } from '@core/Utils/hapticFeedback/hapticFeedback'\n\nexport const useHapticFeedbackOnBetSuccess = (location: 'betslip' | 'quickbet') => {\n React.useEffect(() => {\n const listener = { betslip: ConfirmAllBetsSuccessful, quickbet: ConfirmBetSucceeded }[location]\n if (!listener) return undefined\n\n const subscription = listener.signal$.subscribe(() => {\n triggerHapticFeedback('success')\n })\n return () => subscription.dispose()\n }, [location])\n}\n","import { attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport {\n isFobMatchedSelection,\n isFobPropositionSelection,\n isStartingPriceMatchedSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { getSuperPicks, GetSuperPicksRequest, SuperPicksResponse } from '@core/Data/betting'\nimport {\n QuickbetLoadSelection,\n QuickbetSelection,\n EditBetslipItem,\n} from '@core/Areas/Quickbet/signals'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport {\n LoadSuperPicks,\n ChangeSelectedSuperPick,\n GetSuperPicksSucceeded,\n GetSuperPicksFailed,\n SetInvalidSuperPickSelection,\n ResetInvalidSuperPickSelection,\n UpdateSelectedSuperPick,\n} from './signals'\n\nexport interface SuperPickState {\n fixtureDate?: string\n fixtureId?: string\n raceNumber?: number\n acceptorNumber?: number\n propositionSeq: string | null\n specialOffers: BetSpecialOffer[]\n selectedSuperPickSeq?: number | null\n invalidSelectionMessage?: string | null\n isSuperPickLoaded: boolean\n isSuperBoostAvailable: boolean\n}\n\nexport const defaultSuperpickState: SuperPickState = {\n fixtureDate: undefined,\n fixtureId: undefined,\n raceNumber: undefined,\n acceptorNumber: undefined,\n propositionSeq: null,\n selectedSuperPickSeq: null,\n specialOffers: [],\n invalidSelectionMessage: null,\n isSuperPickLoaded: false,\n isSuperBoostAvailable: false,\n}\n\nexport interface SuperPickStateRecord extends TypedRecord, SuperPickState {}\nexport const SuperpickStateFactory = makeTypedFactory(\n defaultSuperpickState\n)\n\nexport function superPickDriver(\n state = SuperpickStateFactory(),\n signal: Signal\n): SuperPickStateRecord {\n switch (signal.tag) {\n case QuickbetLoadSelection: {\n if (signal.data) {\n const payload = signal.data as QuickbetSelection\n if (\n isFobMatchedSelection(payload.selection) ||\n isStartingPriceMatchedSelection(payload.selection)\n ) {\n const acceptorNumber = isFobMatchedSelection(payload.selection)\n ? payload.selection.acceptorNumber\n : payload.selection.selectedAcceptor?.number\n\n return state.merge({\n ...defaultSuperpickState,\n fixtureId: payload.selection.fixtureId,\n fixtureDate: payload.selection.fixtureDate,\n raceNumber: payload.selection.raceNumber,\n acceptorNumber,\n })\n }\n if (isFobPropositionSelection(payload.selection)) {\n return state.merge({\n ...defaultSuperpickState,\n propositionSeq: payload.selection.propositionSeq,\n })\n }\n }\n return state.merge({\n ...defaultSuperpickState,\n })\n }\n\n case EditBetslipItem: {\n if (!signal.data) {\n return state.merge({\n ...defaultSuperpickState,\n })\n }\n\n const payload = signal.data as BetslipItem\n const selectedSuperPickSeq = payload.selectedSuperPickOffer\n ? payload.selectedSuperPickOffer.specialSeq\n : null\n\n if (isFobMatchedSelection(payload.selection)) {\n return state.merge({\n ...defaultSuperpickState,\n fixtureId: payload.selection.fixtureId,\n fixtureDate: payload.selection.fixtureDate,\n raceNumber: payload.selection.raceNumber,\n acceptorNumber: payload.selection.acceptorNumber,\n selectedSuperPickSeq,\n })\n }\n\n if (isFobPropositionSelection(payload.selection)) {\n return state.merge({\n ...defaultSuperpickState,\n propositionSeq: payload.selection.propositionSeq,\n selectedSuperPickSeq,\n })\n }\n\n return state.merge({\n ...defaultSuperpickState,\n selectedSuperPickSeq,\n })\n }\n\n case LoadSuperPicks: {\n const currentState: SuperPickStateRecord = { ...state.toJS() }\n\n const request: GetSuperPicksRequest = {\n FixtureDate: currentState.fixtureDate,\n FixtureId: currentState.fixtureId,\n RaceNumber: currentState.raceNumber,\n StarterNumber: currentState.acceptorNumber,\n PropositionSeq: currentState.propositionSeq || undefined,\n }\n\n getSuperPicks(request)\n .then(response => GetSuperPicksSucceeded(response))\n .catch(error => GetSuperPicksFailed(error))\n\n return state.merge({\n isSuperPickLoaded: false,\n })\n }\n\n case GetSuperPicksSucceeded: {\n let specialOffers: BetSpecialOffer[] = []\n let isSuperBoostAvailable = false\n if (signal.data.specialOffers) {\n specialOffers = (signal.data as SuperPicksResponse).specialOffers\n .map(so => BetSpecialOffer.normalise(so))\n .sort((a: BetSpecialOffer, b: BetSpecialOffer) => {\n if (a.isSuperBoost) {\n return -1\n }\n\n if (b.isSuperBoost) {\n return 1\n }\n\n return 0\n })\n isSuperBoostAvailable = !!specialOffers.find(so => so.isSuperBoost)\n }\n return state.merge({\n specialOffers,\n isSuperPickLoaded: true,\n isSuperBoostAvailable,\n })\n }\n\n case UpdateSelectedSuperPick: {\n if (!signal.data.specialOffers) {\n return state\n }\n\n const selectedOffer: BetSpecialOffer = BetSpecialOffer.normalise(signal.data.specialOffers[0])\n\n const existingOffers = (state.toJS() as SuperPickState).specialOffers\n const index = existingOffers.findIndex(offer => offer.specialSeq === selectedOffer.specialSeq)\n if (index !== -1) {\n existingOffers.splice(index, 1, selectedOffer)\n }\n\n return state.merge({\n specialOffers: existingOffers,\n isSuperPickLoaded: true,\n })\n }\n case GetSuperPicksFailed: {\n return state\n }\n\n case ChangeSelectedSuperPick: {\n if (state.selectedSuperPickSeq === signal.data) {\n return state.merge({\n selectedSuperPickSeq: null,\n invalidSelectionMessage: null,\n })\n }\n return state.merge({\n selectedSuperPickSeq: signal.data,\n invalidSelectionMessage: null,\n })\n }\n\n case SetInvalidSuperPickSelection: {\n return state.merge({\n invalidSelectionMessage: signal.data,\n })\n }\n\n case ResetInvalidSuperPickSelection: {\n return state.merge({\n invalidSelectionMessage: null,\n })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n path: 'superpick',\n driver: superPickDriver,\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { Money, MoneyProps } from '@core/Components/Text/Money'\nimport { lessOrEqualThan } from '@mobi/component-library/Utils/media'\nimport { calculateInvestmentFontSizeFactor } from '../../helpers/calculator'\nimport { hexColors } from '@mobi/settings'\n\nexport const BetInvestmentStyled = styled.div({\n backgroundColor: colors.quickbet.header.background,\n color: colors.quickbet.header.text,\n padding: '0 1.5rem 1.5rem',\n position: 'relative',\n})\n\nexport interface BetInvestmentGroupStyledProps {\n isActive: boolean\n}\n\nexport const BetInvestmentGroupStyled = styled.div(\n {\n alignContent: 'stretch',\n alignItems: 'center',\n backgroundColor: colors.quickbet.investment.background,\n color: colors.quickbet.investment.text,\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n fontSize: '1.4rem',\n justifyContent: 'flex-start',\n padding: '0.8rem',\n height: '3.5rem',\n },\n\n ({ isActive }) => ({\n backgroundColor: isActive\n ? colors.quickbet.investment.active.background\n : colors.quickbet.investment.background,\n color: isActive ? colors.quickbet.investment.active.text : colors.quickbet.investment.text,\n })\n)\n\ninterface InvestmentContainerStyledProps {\n isBonusBet: boolean\n isActive: boolean\n}\n\nexport const InvestmentContainerStyled = styled.div(\n {\n textAlign: 'right',\n padding: '0.3em 0.8em 0.3em 0.8em',\n borderRadius: '0.4em',\n display: 'flex',\n marginLeft: 'auto',\n },\n props => ({\n backgroundColor: props.isBonusBet ? hexColors.orange : 'unset',\n color: props.isActive\n ? colors.quickbet.investment.active.text\n : props.isBonusBet\n ? colors.quickbet.investment.active.text\n : colors.quickbet.investment.text,\n })\n)\n\ninterface InvestmentStyledProps extends MoneyProps {\n shouldFontResize?: boolean\n}\n\nconst defaultValueFontSize = 2.6\n\nexport const InvestmentStyled = styled(Money)(\n {\n flex: '1 0',\n fontSize: `${defaultValueFontSize}rem`,\n fontWeight: 'bold',\n textAlign: 'right',\n // Increase the lineHeight to match the fontSize, to prevent artifacts from text above and below the amount of space\n // for the line, as given by the lineHeight (iOS 11 only; see MOBILE-865)\n lineHeight: 'normal',\n },\n\n ({ amount, shouldFontResize, decimalPlaces = 0 }) => {\n if (shouldFontResize) {\n return {\n [lessOrEqualThan('px450')]: {\n fontSize: `${(\n defaultValueFontSize *\n calculateInvestmentFontSizeFactor({ amount, decimalPlaces }) *\n 1.2\n ).toFixed(2)}rem`,\n },\n [lessOrEqualThan('px400')]: {\n fontSize: `${(\n defaultValueFontSize *\n calculateInvestmentFontSizeFactor({ amount, decimalPlaces }) *\n 1.08\n ).toFixed(2)}rem`,\n },\n [lessOrEqualThan('px350')]: {\n fontSize: `${(\n defaultValueFontSize * calculateInvestmentFontSizeFactor({ amount, decimalPlaces })\n ).toFixed(2)}rem`,\n },\n }\n }\n return null\n }\n)\n\nexport const TotalCostSectionStyled = styled.div({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '1rem 0 0',\n height: '2.7rem',\n fontSize: '1.1rem',\n marginBottom: '-0.5rem',\n})\n\nexport const TotalCostMoneyStyled = styled('span')({\n fontSize: '1.6rem',\n fontWeight: 'bold',\n})\n","export const getPriceChange = (\n oldPrice: number | undefined | null,\n newPrice: number\n): PriceChange => {\n if (!oldPrice) {\n return PriceChange.None\n }\n\n if (oldPrice > newPrice) {\n return PriceChange.Decrease\n } else if (oldPrice < newPrice) {\n return PriceChange.Increase\n }\n return PriceChange.None\n}\n\n// string values coming from API response\nexport enum PriceChange {\n Increase = 'Up',\n Decrease = 'Down',\n None = 'NoChange',\n}\n\nexport const getDividendChange = (\n newDividend: number,\n oldDividend: number | undefined | null\n): DividendChange => {\n if (!oldDividend || !newDividend) {\n return DividendChange.Undefined\n }\n\n if (newDividend < oldDividend) {\n return DividendChange.Decrease\n } else if (newDividend > oldDividend) {\n return DividendChange.Increase\n }\n return DividendChange.None\n}\n\n// string values coming from API response\nexport enum DividendChange {\n Increase = 'Up',\n Decrease = 'Down',\n None = 'No Change',\n Undefined = '',\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { PriceChange } from './utils'\nimport { MoneyGroupedProps } from './MoneyGrouped'\nimport { Money } from './Money'\n\nexport const MoneyGroupedStyled = styled(Money)(\n {\n display: 'inline-block',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n margin: 0,\n position: 'relative',\n zIndex: 1,\n },\n\n ({ priceChange }) => {\n if (priceChange !== PriceChange.Increase && priceChange !== PriceChange.Decrease) {\n return undefined\n }\n return {\n marginRight: '1rem',\n color:\n priceChange === PriceChange.Increase\n ? colors.priceChange.increase.text\n : colors.priceChange.decrease.text,\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: 0, // Refer to link about CSS triangle usage:\n height: 0, // https://css-tricks.com/snippets/css/css-triangle/\n borderLeft: '0.5rem solid transparent',\n borderRight: '0.5rem solid transparent',\n borderBottomStyle: priceChange === PriceChange.Increase ? 'solid' : 'none',\n borderBottomWidth: priceChange === PriceChange.Increase ? '0.7rem' : 'none',\n borderTopStyle: priceChange === PriceChange.Decrease ? 'solid' : 'none',\n borderTopWidth: priceChange === PriceChange.Decrease ? '0.7rem' : 'none',\n transform: 'translateY(-50%)',\n top: '50%',\n right: '-1.2rem',\n },\n }\n }\n)\n","import React from 'react'\nimport { MoneyGroupedStyled } from './MoneyGrouped.styles'\nimport { PriceChange } from './utils'\n\nexport interface MoneyGroupedProps {\n price: number\n priceChange?: PriceChange\n}\n\nexport function MoneyGrouped(props: MoneyGroupedProps) {\n return \n}\n","import styled from '@emotion/styled'\nimport { hideVisually } from 'polished'\nimport { colors } from '@core/Settings'\nimport { MoneyGrouped, MoneyGroupedProps } from '@core/Components/Text/MoneyGrouped'\nimport { PriceChange } from '@core/Components/Text/utils'\n\nexport const LegInfoWrapperStyled = styled('dl')({\n color: colors.quickbet.investment.legInfo.text,\n margin: 0,\n fontSize: '1.2rem',\n})\n\nexport const LegInfoPriceTextStyled = styled('span')({\n ...hideVisually(),\n})\n\ninterface SingleLegTypeProps {\n isActive: boolean\n}\n\nexport const SingleLegTypeStyled = styled('dt')(\n {\n lineHeight: '1.7rem',\n },\n\n ({ isActive }) => ({\n color: isActive ? colors.quickbet.investment.active.text : colors.quickbet.investment.text,\n })\n)\n\nfunction determinePriceChangeColor({\n isActive,\n shouldHighlight,\n priceChange,\n}: {\n isActive?: boolean\n shouldHighlight?: boolean\n priceChange: PriceChange\n}) {\n // !active + !boosted + pricechanged / priceunchanged = white\n if (\n !isActive &&\n !shouldHighlight &&\n (priceChange === PriceChange.None ||\n priceChange === PriceChange.Increase ||\n priceChange === PriceChange.Decrease)\n ) {\n return { color: colors.quickbet.investment.text }\n }\n\n // active + !boosted + priceunchanged = blueDiamond\n if (isActive && !shouldHighlight && priceChange === PriceChange.None) {\n return { color: colors.quickbet.investment.active.text }\n }\n\n // active + !boosted + pricechanged = red\n if (isActive && !shouldHighlight && priceChange === PriceChange.Decrease) {\n return { color: colors.priceChange.decrease.text }\n }\n\n // active + !boosted + pricechanged = green\n if (isActive && !shouldHighlight && priceChange === PriceChange.Increase) {\n return { color: colors.priceChange.increase.text }\n }\n\n // active / notactive + boosted + pricechanged / priceunchanged = black\n if (\n (isActive || !isActive) &&\n shouldHighlight &&\n (priceChange === PriceChange.None ||\n priceChange === PriceChange.Increase ||\n priceChange === PriceChange.Decrease)\n ) {\n return { color: colors.quickbet.investment.legInfo.boosted.text }\n }\n\n // default = blueDiamond\n return { color: colors.quickbet.investment.active.text }\n}\n\ninterface SingleLegPriceProps {\n isActive?: boolean\n priceChange: PriceChange\n shouldHighlight?: boolean\n}\n\nexport const SingleLegMoneyGroupedStyled = styled(MoneyGrouped)(\n ({ isActive, shouldHighlight, priceChange }) =>\n determinePriceChangeColor({ isActive, shouldHighlight, priceChange })\n)\n\nexport const EachWayTypeStyled = styled(SingleLegTypeStyled)({\n clear: 'both',\n float: 'left',\n lineHeight: '1.7rem',\n marginTop: 0,\n width: '4rem',\n})\n\nexport const EachWayPriceStyled = styled('dd')({\n lineHeight: '1.7rem',\n float: 'left',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n margin: 0,\n position: 'relative',\n})\n\nexport const SingleLegPriceStyled = styled('dd')(\n ({ isActive, shouldHighlight, priceChange }) =>\n determinePriceChangeColor({ isActive, shouldHighlight, priceChange }),\n {\n display: 'flex',\n alignItems: 'center',\n lineHeight: '1.7rem',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n margin: 0,\n position: 'relative',\n },\n ({ priceChange }) => {\n if (priceChange === PriceChange.Increase || priceChange === PriceChange.Decrease) {\n return {\n '&::after': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderLeft: '0.4rem solid transparent',\n borderRight: '0.4rem solid transparent',\n marginLeft: '0.4rem',\n position: 'relative',\n // border color is inherited from text color\n borderBottomStyle: 'solid',\n borderBottomWidth: priceChange === PriceChange.Increase ? '0.6rem' : 0,\n borderTopStyle: 'solid',\n borderTopWidth: priceChange === PriceChange.Decrease ? '0.6rem' : 0,\n },\n }\n }\n return {}\n },\n ({ shouldHighlight }) => ({\n '&::before': {\n backgroundColor: shouldHighlight\n ? colors.quickbet.investment.legInfo.boosted.background\n : colors.quickbet.investment.legInfo.background,\n borderRadius: '0.5rem',\n content: '\" \"',\n height: '100%',\n top: '50%',\n left: '-0.2rem',\n right: '-0.2rem',\n padding: '0.1rem 0.2rem',\n position: 'absolute',\n transform: 'translateY(-50%)',\n zIndex: 0,\n },\n })\n)\n\ninterface SingleLegMoneyGroupedProps extends MoneyGroupedProps {\n isActive: boolean\n priceChange: PriceChange\n shouldHighlight?: boolean\n}\n\nexport const LegInfoPriceFinalDigitStyled = styled('div')({\n display: 'flex',\n position: 'relative',\n})\n\nexport const LegInfoPriceFinalDigitWrapStyled = styled('div')({\n display: 'flex',\n overflow: 'hidden',\n})\n\ninterface LegInfoPriceFinalDigitInnerProps {\n isDecimal?: boolean\n isArrow?: boolean\n}\n\nexport const LegInfoPriceFinalDigitInnerStyled = styled('div')(\n {\n display: 'flex',\n height: '1.7rem',\n position: 'relative',\n overflow: 'hidden',\n },\n ({ isDecimal, isArrow }) => ({\n width: isDecimal ? '0.4rem' : isArrow ? 'auto' : '0.8rem',\n })\n)\n\nexport const LegInfoPriceFinalDigitInnerDigitStyled = styled('div')({\n overflow: 'hidden',\n display: 'flex',\n position: 'relative',\n transform: 'translateY(-100%) translateY(1.7rem)',\n transition: 'none',\n})\ninterface LegInfoPriceChangeProps {\n shouldDisplay: boolean\n}\n\nexport const LegInfoPriceChangeStyled = styled('div')(\n {\n position: 'absolute',\n background: colors.quickbet.investment.legInfo.boosted.background,\n borderRadius: '0.5rem',\n top: 0,\n bottom: 0,\n },\n ({ shouldDisplay }) => {\n return {\n visibility: shouldDisplay ? 'visible' : 'hidden',\n }\n }\n)\n\nexport const LegInfoPriceScreenReaderFriendlyStyled = styled('span')({\n border: 0,\n clip: 'rect(1px, 1px, 1px, 1px)',\n clipPath: 'inset(50%)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n width: '1px',\n wordWrap: 'normal',\n})\n","import styled from '@emotion/styled'\n\nexport const OdometerStyled = styled('div')({\n display: 'inline-block',\n overflow: 'hidden',\n})\n\ninterface DigitContainerStyledProps {\n duration?: number\n startAnim?: boolean\n height: string\n}\n\nexport const DigitContainerStyled = styled('div')(\n {\n overflow: 'hidden',\n display: 'flex',\n position: 'relative',\n transform: 'translateY(0)',\n },\n ({ startAnim, duration, height }) => ({\n transform: startAnim ? `translateY(-100%) translateY(${height})` : 'none',\n transition: startAnim ? `transform ${duration}ms ease-out 50ms` : 'none',\n })\n)\ninterface DigitProps {\n isDecimalSeparator?: boolean\n isExtraDigit?: boolean\n height: string\n width: string\n}\n\nexport const DigitStyled = styled('div')(\n {\n display: 'inline-block',\n position: 'relative',\n overflow: 'hidden',\n },\n ({ isDecimalSeparator, isExtraDigit, height, width }) => {\n const adjustedWidth = isExtraDigit ? '0' : isDecimalSeparator ? '0.4rem' : width\n\n return { width: adjustedWidth, height }\n }\n)\n","import React from 'react'\nimport { OdometerStyled, DigitStyled, DigitContainerStyled } from './Odometer.styles'\n\n/* ****************************************** */\n/*\n\n Usage:\n \n\n Options:\n start: start value\n end: end value\n duration: animation duration\n\n Future options:\n themes: foreground/background colors\n animation-timing: [linear, ease-in, ease-out, custom]\n\n Made with ♥ by Racing and Waging Western Australia\n\n*/\n/* ****************************************** */\n\ninterface NumStringProps {\n start: number\n end: number\n turnCount: number\n index: number\n}\n\nconst NumString = ({ start, end, turnCount, index }: NumStringProps) => {\n // Generates the number string for rotating number\n // Using maxTurnCount to limit length of string generated\n // When the string is too long the number rotates so fast that it is perceived to rotate backwards\n\n const maxTurnCount = 10 + index * 2\n let numberStr = ''\n let countRunner = start\n const turns = turnCount > maxTurnCount ? maxTurnCount : turnCount\n const tickAddition = turns !== 0 ? turnCount / turns : 0\n\n // returns start if there are no turns\n if (turns !== 0) {\n numberStr = start + ' '\n for (let i = 0; i < turns - 1; i++) {\n countRunner += tickAddition\n numberStr += (Math.floor(countRunner) % 10) + ' '\n }\n numberStr += end + ''\n } else {\n numberStr = start + ''\n }\n\n return numberStr\n}\n\ninterface GetTurnsProps {\n startDigitsMatched: string[]\n difference: number\n}\n\nconst GetTurns = ({ startDigitsMatched, difference }: GetTurnsProps) => {\n // Calculates how many turns each digit needs to make to move from start to end number\n\n const turnsArr: number[] = []\n const newstartDigitsMatched = [...startDigitsMatched]\n const startDigitMatchedCount = startDigitsMatched.length\n\n startDigitsMatched.map((_digit, index) => {\n newstartDigitsMatched.shift()\n if (newstartDigitsMatched.length === 0) {\n newstartDigitsMatched.push('0')\n }\n // merge array into string then convert to number\n let startJoined = parseInt(newstartDigitsMatched.join(''), 10)\n\n turnsArr.push(\n Math.floor(\n startJoined / Math.pow(10, startDigitMatchedCount - 1 - index) +\n difference / Math.pow(10, startDigitMatchedCount - 1 - index)\n )\n )\n\n const startJoinedString = startJoined.toString().substr(1)\n startJoined = startJoinedString !== '' ? parseInt(startJoinedString, 10) : 0\n return null\n })\n\n return turnsArr\n}\n\ninterface OdometerProps {\n start: number\n end: number\n duration: number\n startAnim?: boolean\n prefix?: string\n width?: string\n height?: string\n}\n\nexport const Odometer = ({\n start,\n end,\n duration = 700,\n startAnim = true,\n prefix = '',\n height = '1.7rem',\n width = '0.8rem',\n}: OdometerProps) => {\n // Math.floor prevents weird numbers from appearing\n // eg multiplying 17.51 by 100 produces 1751.0000000000002\n const startCopy: number = Math.round(start * 100)\n const endCopy: number = Math.round(end * 100)\n const startDigits: string[] = startCopy.toString().split('')\n const endDigits: string[] = endCopy.toString().split('')\n const difference: number = endCopy - startCopy\n const startCount: number = startDigits.length\n const endCount: number = endDigits.length\n const countDifference: number = endCount - startCount\n let digitCount: number = Math.max(startCount, endCount)\n let startDigitsMatched: string[] = [...startDigits]\n const endDigitsMatched: string[] = [...endDigits]\n\n if (countDifference > 0) {\n startDigitsMatched = Array(Math.abs(countDifference)).fill(0).concat(startDigits)\n }\n if (countDifference < 0) {\n // remove digits from the start of start number\n startDigitsMatched.splice(0, -countDifference)\n digitCount = endCount\n }\n\n const turnsArr: number[] = GetTurns({ startDigitsMatched, difference })\n\n const rows: JSX.Element[] = []\n\n // Prefix\n if (prefix !== '') {\n rows.push(\n \n \n {prefix}\n \n \n )\n }\n\n for (let index = 0; index < digitCount; index++) {\n rows.push(\n \n \n {NumString({\n start: parseInt(startDigitsMatched[index], 10),\n end: parseInt(endDigitsMatched[index], 10),\n turnCount: turnsArr[index],\n index,\n })}\n \n \n )\n\n const indexToDigitCount = digitCount - index\n // Decimal point added 2 digits from the end\n // 623452.53 => 62345253 => digitCount = 8, so decimal point needs to be after digit at index 5: 6 2 3 4 5 2 . 5 3\n if (indexToDigitCount === 3) {\n rows.push(\n \n \n .\n \n \n )\n }\n\n // commas supported for millions and thousands separation\n // 98539623452.53 => 9853962345253 => digitCount = 13, so commas after digits at indexes 1, 4, 7: 9 8 , 5 3 9 , 6 2 3 , 4 5 2 . 5 3\n else if (indexToDigitCount % 3 === 0) {\n rows.push(\n \n \n ,\n \n \n )\n }\n }\n\n // Fix - Adds an extra empty digit after the last digit to prevent last digit from not rotating when end digit count > start digit count\n // This problem is caused by css transitions not working when react dynamically adds an element to the DOM\n // Because the extra div is added to the page prior to the value changing, transitions work correctly\n // -- Cons ---\n // only one extra digit is applied, if end digit count is greater than start digit count by more than 1, this wont work eg. start: 8.00, end: 120.00\n rows.push(\n \n \n  \n \n \n )\n\n return {rows}\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport Decimal from 'decimal.js'\nimport { Transition } from 'react-transition-group'\nimport type { Selection, FobSelection, EventDetails } from '@mobi/betslip/types'\nimport {\n isFobSelection,\n isNoveltyBetType,\n isRaceDetails,\n isSameRaceMultiSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ as quickbetState$, QuickbetState } from '../../driver'\nimport { state$ as superPickState$, SuperPickState } from '@core/Components/SuperPick/driver'\nimport { InvestmentType } from '../BetInvestment/betInvestmentDriver'\nimport { InvestmentComponentProps } from '../BetInvestment/BetInvestment'\nimport {\n LegInfoWrapperStyled,\n SingleLegTypeStyled,\n SingleLegPriceStyled,\n EachWayTypeStyled,\n EachWayPriceStyled,\n SingleLegMoneyGroupedStyled,\n LegInfoPriceTextStyled,\n LegInfoPriceFinalDigitStyled,\n LegInfoPriceChangeStyled,\n LegInfoPriceFinalDigitInnerStyled,\n LegInfoPriceFinalDigitInnerDigitStyled,\n LegInfoPriceFinalDigitWrapStyled,\n LegInfoPriceScreenReaderFriendlyStyled,\n} from './LegInfo.styles'\nimport { getPriceChange, PriceChange } from '@core/Components/Text/utils'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { Odometer } from '@core/Components/Odometer'\n\ninterface LegInfoState {\n selection: Selection\n selectionDetails: EventDetails\n winPricePreviousAndCurrent: number[]\n placePricePreviousAndCurrent: number[]\n selectedSuperPickOffer?: BetSpecialOffer | null\n isEachWay: boolean\n}\n\ntype LegInfoProps = Pick\n\nexport type LegInfoCombinedProps = LegInfoState & LegInfoProps\n\nexport class LegInfoComponent extends React.PureComponent {\n public render(): JSX.Element | null {\n let winBoost = 0\n let placeBoost = 0\n\n if (this.props.selectedSuperPickOffer) {\n const elementWithPriceIncrease = this.props.selectedSuperPickOffer.elements?.find(\n element => element.priceIncrease !== null\n )\n if (elementWithPriceIncrease) {\n winBoost = elementWithPriceIncrease.priceIncrease?.win.toNumber() as number\n placeBoost = elementWithPriceIncrease.priceIncrease?.place.toNumber() as number\n }\n }\n\n if (isStartingPriceSelection(this.props.selection)) {\n return \n }\n\n if (isFobSelection(this.props.selection)) {\n const winPriceChange = this.props.winPricePreviousAndCurrent\n ? getPriceChange(\n this.props.winPricePreviousAndCurrent[0],\n this.props.winPricePreviousAndCurrent[1]\n )\n : PriceChange.None\n const placePriceChange = this.props.placePricePreviousAndCurrent\n ? getPriceChange(\n this.props.placePricePreviousAndCurrent[0],\n this.props.placePricePreviousAndCurrent[1]\n )\n : PriceChange.None\n\n if (isRaceDetails(this.props.selectionDetails)) {\n if (this.props.investmentType === InvestmentType.Win) {\n const legType = isSameRaceMultiSelection(this.props.selection) ? 'Same Race Multi' : 'Win'\n return (\n \n )\n }\n if (this.props.investmentType === InvestmentType.Place) {\n return (\n \n )\n }\n }\n\n if (this.props.isEachWay) {\n return (\n \n \n Win price:\n \n \n \n \n \n Place price:\n \n \n \n \n \n )\n }\n if (this.props.investmentType === InvestmentType.Win) {\n return (\n \n )\n }\n if (this.props.investmentType === InvestmentType.Place) {\n return (\n \n )\n }\n }\n\n if (isToteSelection(this.props.selection)) {\n let label = this.props.investmentType === InvestmentType.Win ? 'Win' : 'Place'\n if (\n isNoveltyBetType(this.props.selection.betType) ||\n this.props.selection.betType === 'All Up'\n ) {\n label = 'Spend'\n }\n return (\n \n \n {label}\n \n \n )\n }\n return null\n }\n}\n\ninterface GenericSingleLegTypeProps {\n legType: string\n price: number\n isActive: boolean\n boostAmount: number\n priceChange: PriceChange\n}\n\nfunction LegInfoWithPriceComponent({\n legType,\n price,\n isActive = true,\n boostAmount = 0,\n priceChange = PriceChange.None,\n}: GenericSingleLegTypeProps) {\n const isBoosted = boostAmount > 0\n const finalPrice = Decimal(price || 0)\n .plus(boostAmount)\n .toNumber()\n const finalPriceString = '$' + finalPrice.toFixed(2)\n return (\n \n \n {legType}{' '}\n price{isBoosted ? ' boosted' : null}:\n \n \n {status => {\n return (\n \n \n {finalPriceString}\n \n\n \n\n \n \n )\n }}\n \n \n )\n}\n\nfunction LegInfoStartingPriceComponent({\n legType,\n isActive = true,\n}: {\n legType: string\n isActive: boolean\n}) {\n const finalPriceString = 'Starting Price'\n\n return (\n \n {legType} \n\n \n \n {finalPriceString}\n \n\n \n \n \n )\n}\n\ninterface LegInfoPriceFinalDigit {\n price: number\n}\n\nexport const LegInfoPriceFinalDigit = ({ price }: LegInfoPriceFinalDigit): JSX.Element => {\n let rows: JSX.Element[] = []\n\n const priceString = `$${price}`\n // checks if string has decimal once place from the end eg. 56.5\n const shouldAddExtra0: boolean = priceString.slice(-2, -1) === '.'\n const priceString0Check = shouldAddExtra0 ? priceString + '0' : priceString\n // if no decimal exists, add in '.00'\n const priceStringDecimalCheck =\n priceString.indexOf('.') === -1 ? priceString0Check + '.00' : priceString0Check\n const priceArray: string[] = priceStringDecimalCheck.split('')\n\n rows = priceArray.map((digit, index) => (\n \n {digit}\n \n ))\n\n return (\n \n )\n}\n\nconst isPriceUpdated = (pair: (number | null)[]): boolean => {\n return pair[0] !== pair[1]\n}\n\nconst state$ = Observable.combineLatest(\n quickbetState$,\n quickbetState$\n .map(record => ((record.toJS() as QuickbetState).selection as FobSelection).winPrice)\n .pairwise()\n .filter(isPriceUpdated)\n .startWith([0, 0]),\n quickbetState$\n .map(record => ((record.toJS() as QuickbetState).selection as FobSelection).placePrice)\n .pairwise()\n .filter(isPriceUpdated)\n .startWith([0, 0]),\n superPickState$,\n (quickbetStateRecord, winPriceHistory, placePriceHistory, superPickStateRecord): LegInfoState => {\n const superPick: SuperPickState = superPickStateRecord.toJS()\n const specialOffers = superPick.specialOffers\n const selectedSuperPickOffer = specialOffers\n ? specialOffers.find(offer => offer.specialSeq === superPick.selectedSuperPickSeq)\n : null\n const quickbet: QuickbetState = quickbetStateRecord.toJS()\n return {\n selection: quickbet.selection as Selection,\n selectionDetails: quickbet.selectionDetails as EventDetails,\n isEachWay: quickbet.isEachWay,\n winPricePreviousAndCurrent: winPriceHistory,\n placePricePreviousAndCurrent: placePriceHistory as number[],\n selectedSuperPickOffer,\n }\n }\n)\n\nexport const LegInfo: React.ComponentClass = observeImmutable<\n LegInfoState,\n LegInfoProps\n>(state$, ({ record, investmentType, isActive }) => (\n \n))\nLegInfo.displayName = 'LegInfo'\n","import styled from '@emotion/styled'\n\nexport const CheckboxElementStyled = styled('div')({\n position: 'relative',\n})\n\ninterface CheckboxIconProps {\n includePadding?: boolean\n}\n\nexport const CheckboxIconStyled = styled('div')(\n {\n position: 'absolute',\n },\n ({ includePadding = true }) => ({\n top: includePadding ? '1.1rem' : '0',\n })\n)\n\nexport const CheckboxStyled = styled('input')({\n visibility: 'hidden',\n margin: 0,\n width: 0,\n position: 'absolute',\n})\n\ninterface CheckboxLabelStyledProps {\n color: string\n includePadding?: boolean\n}\n\nexport const CheckboxLabelStyled = styled('label')(\n {\n fontSize: '1.2rem',\n lineHeight: 'normal',\n display: 'inline-block',\n position: 'relative',\n whiteSpace: 'nowrap',\n },\n\n ({ color, includePadding = true }) => ({\n color,\n padding: includePadding ? '1.3rem 0 1.3rem 2.5rem' : '0.1em 0 0 2.5rem',\n })\n)\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport {\n CheckboxElementStyled,\n CheckboxIconStyled,\n CheckboxStyled,\n CheckboxLabelStyled,\n} from './Checkbox.styles'\n\ninterface CheckboxProps extends Partial> {\n label: string\n id: string\n checked: boolean\n color?: string\n iconSize?: string\n includePadding?: boolean\n}\n\nexport function Checkbox({\n label,\n checked,\n color,\n iconSize = '1.7rem',\n includePadding = true,\n ...inputProps\n}: CheckboxProps) {\n const checkboxColor = color ? color : hexColors.black\n return (\n \n \n {checked && }\n {!checked && }\n \n \n \n {label}\n \n \n )\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { hexColors } from '@mobi/settings'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { Checkbox } from '../Checkbox/Checkbox'\nimport { state$ as investmentState$, InvestmentState } from '../BetInvestment/betInvestmentDriver'\nimport { QuickbetState, state$ as quickbetState$ } from '../../driver'\nimport { ToggleEachWay } from '../../signals'\n\ninterface EachWayCheckboxProps {\n isEachWay: boolean\n isUsingBonusBet: boolean\n}\n\nconst state$ = Observable.combineLatest(\n quickbetState$,\n investmentState$,\n (quickbetRecord, investmentRecord): EachWayCheckboxProps => {\n const quickbetState = quickbetRecord.toJS() as QuickbetState\n const investmentState = investmentRecord.toJS() as InvestmentState\n return {\n isEachWay: quickbetState.isEachWay,\n isUsingBonusBet: !!investmentState.bonusBet,\n }\n }\n)\n\nexport function EachWayCheckboxComponent({\n isEachWay,\n isUsingBonusBet,\n}: EachWayCheckboxProps): JSX.Element {\n const toggleEachWay = () => ToggleEachWay()\n return (\n \n )\n}\n\nexport default observeImmutable(state$, ({ record }) => )\n","import styled from '@emotion/styled'\nimport { Money } from '@core/Components/Text/Money'\n\nexport const ProjectedReturnStyled = styled('div')({\n fontSize: '1.2rem',\n textAlign: 'right',\n lineHeight: 'normal',\n padding: '1.6rem 0',\n whiteSpace: 'nowrap',\n})\n\nexport const ProjectedReturnMoneyStyled = styled(Money)({\n fontSize: '1.4rem',\n fontWeight: 'bold',\n})\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { isStartingPriceSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { state$ as quickbetState$, QuickbetState } from '../../driver'\nimport { InvestmentState, state$ as investmentState$ } from '../BetInvestment/betInvestmentDriver'\nimport { state$ as superPickState$, SuperPickState } from '../../../../Components/SuperPick/driver'\nimport { ProjectedReturnMoneyStyled, ProjectedReturnStyled } from './ProjectedReturn.styles'\nimport { observeImmutable } from '../../../../Components/HOCs'\nimport { calculateProjectedReturn } from '../../helpers/calculator'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\n\ninterface ProjectedReturnProps {\n value: number | null\n}\n\nconst projectedReturn$ = Observable.combineLatest(\n quickbetState$,\n investmentState$,\n superPickState$,\n (quickbet, investment, superPick): ProjectedReturnProps => {\n const investmentJs = investment.toJS() as InvestmentState\n\n const {\n win: { value: investmentWin },\n place: { value: investmentPlace },\n } = investmentJs\n\n const bonusBetValue = investmentJs.bonusBet?.value\n\n let selectedSpecialOffer: BetSpecialOffer | null = null\n\n if (superPick.specialOffers && superPick.selectedSuperPickSeq) {\n selectedSpecialOffer =\n (superPick.toJS() as SuperPickState).specialOffers.find(\n offer => offer.specialSeq === superPick.selectedSuperPickSeq\n ) ?? null\n }\n const quickbetState: QuickbetState = quickbet.toJS()\n const hasNoReturn =\n !!quickbetState.selection && isStartingPriceSelection(quickbetState.selection)\n\n if (hasNoReturn) {\n return { value: null }\n }\n\n return {\n value:\n investmentWin + investmentPlace <= 0\n ? 0\n : calculateProjectedReturn(\n quickbet.bettingType,\n (quickbetState.selection as { winPrice: number }).winPrice,\n (quickbetState.selection as { placePrice: number }).placePrice,\n investmentWin,\n investmentPlace,\n quickbet.isEachWay,\n bonusBetValue,\n selectedSpecialOffer\n ),\n }\n }\n)\n\nexport function ProjectedReturnComponent({ value }: ProjectedReturnProps): JSX.Element {\n return (\n \n {value !== null && (\n <>\n Projected Return: \n \n )}\n \n )\n}\n\nexport const ProjectedReturn = observeImmutable(\n projectedReturn$,\n ({ record }) => \n)\n","import styled from '@emotion/styled'\nimport { BetInvestmentGroupStyled } from '../BetInvestment/BetInvestment.styles'\nimport { calculateInvestmentFontSizeFactor } from '../../helpers/calculator'\nimport { lessOrEqualThan } from '@mobi/component-library/Utils/media'\n\nexport const FlexiDisplayStyled = BetInvestmentGroupStyled.withComponent('section')\n\nconst defaultValueFontSize = 2.6\n\nexport const AmountStyled = styled('span')<{ amount: number }>(\n {\n flex: '1 0',\n fontSize: `${(defaultValueFontSize * 0.8).toFixed(2)}rem`,\n fontWeight: 'bold',\n textAlign: 'right',\n // Increase the lineHeight to match the fontSize, to prevent artifacts from text above and below the amount of space\n // for the line, as given by the lineHeight (iOS 11 only; see MOBILE-865)\n lineHeight: 'normal',\n },\n ({ amount }) => {\n return {\n [lessOrEqualThan('px450')]: {\n fontSize: `${(\n defaultValueFontSize *\n calculateInvestmentFontSizeFactor({ amount }) *\n 1.2\n ).toFixed(2)}rem`,\n },\n [lessOrEqualThan('px400')]: {\n fontSize: `${(\n defaultValueFontSize *\n calculateInvestmentFontSizeFactor({ amount }) *\n 1.08\n ).toFixed(2)}rem`,\n },\n [lessOrEqualThan('px350')]: {\n fontSize: `${(defaultValueFontSize * calculateInvestmentFontSizeFactor({ amount })).toFixed(\n 2\n )}rem`,\n },\n }\n }\n)\n","import React from 'react'\nimport { FlexiDisplayStyled, AmountStyled } from './FlexiDisplay.styles'\nimport { calculateFlexiAmount } from '../../helpers/calculator'\n\ninterface FlexiDisplayProps {\n winInvestment: number\n numberCombinations: number\n isUserInputAllowed?: boolean\n}\n\nexport function FlexiDisplay({\n winInvestment,\n numberCombinations,\n isUserInputAllowed,\n}: FlexiDisplayProps): JSX.Element {\n const calculatedFlexi = calculateFlexiAmount(winInvestment, numberCombinations)\n return (\n \n Flexi{' '}\n {`${calculatedFlexi}%`}\n \n )\n}\n\ninterface MysteryFlexDisplayProps {\n divXAnnotation: string\n}\n\nexport function MysteryFlexDisplay({ divXAnnotation }: MysteryFlexDisplayProps) {\n return (\n \n Flexi {divXAnnotation}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { BetInvestmentGroupStyled } from '../BetInvestment/BetInvestment.styles'\nimport { lessOrEqualThan, greaterThan } from '@mobi/component-library/Utils/media'\n\nexport const NumberOfCombinationsDisplayStyled = BetInvestmentGroupStyled.withComponent('section')\n\nconst maxNumberOfDigits = 10\n\nconst fontSizeFactorDict = {\n // This scale accounts for string lengths from 1 to 10\n x7: 0.7,\n x8: 0.6,\n x9: 0.6,\n [`x${maxNumberOfDigits}`]: 0.5,\n xDefault: 0.75,\n} as const\n\nconst defaultValueFontSize = 2.6\n\nconst isValidFactor = (key: string): key is keyof typeof fontSizeFactorDict => {\n return Object.hasOwn(fontSizeFactorDict, key)\n}\n\nconst getFontSizeFactor = (digitCount: number) => {\n const sizeFactorKey = `x${digitCount}`\n\n if (isValidFactor(sizeFactorKey)) {\n return fontSizeFactorDict[sizeFactorKey]\n }\n\n return fontSizeFactorDict.xDefault\n}\n\nexport const CombinationsStyled = styled('span')<{ combinations: number }>(\n {\n flex: '1 0',\n fontSize: '2.6rem',\n fontWeight: 'bold',\n textAlign: 'right',\n // Increase the lineHeight to match the fontSize, to prevent artifacts from text above and below the amount of space\n // for the line, as given by the lineHeight (iOS 11 only; see MOBILE-865)\n lineHeight: 'normal',\n },\n ({ combinations }) => {\n const numberOfDigits = combinations.toString().length\n\n const fontSizeFactor = getFontSizeFactor(numberOfDigits)\n\n return {\n [lessOrEqualThan('px450')]: {\n fontSize: `${(defaultValueFontSize * fontSizeFactor * 1.25).toFixed(1)}rem`,\n },\n [lessOrEqualThan('px400')]: {\n fontSize: `${(defaultValueFontSize * fontSizeFactor * 1.1).toFixed(1)}rem`,\n },\n [lessOrEqualThan('px350')]: {\n fontSize: `${(defaultValueFontSize * fontSizeFactor).toFixed(1)}rem`,\n },\n [greaterThan('px450')]: {\n // Lower the default font-size to display 10 digits for any viewport that's larger than `px450`.\n fontSize:\n (numberOfDigits === maxNumberOfDigits &&\n `${(defaultValueFontSize * fontSizeFactorDict['xDefault']).toFixed(1)}rem`) ||\n undefined,\n },\n }\n }\n)\n","import React from 'react'\nimport {\n NumberOfCombinationsDisplayStyled,\n CombinationsStyled,\n} from './NumberOfCombinationsDisplay.styles'\n\ninterface NumberOfCombinationsDisplayProps {\n numberOfCombinations: number\n}\n\nexport function NumberOfCombinationsDisplay({\n numberOfCombinations = 0,\n}: NumberOfCombinationsDisplayProps): JSX.Element {\n return (\n \n Combos{' '}\n \n {numberOfCombinations}\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { BaseButtonStyled } from '@mobi/component-library/Common/Buttons'\n\ninterface BonusBetButtonProps {\n selected: boolean\n disabled?: boolean\n}\n\nexport const BonusBetButtonStyled = styled(BaseButtonStyled)(\n {\n fontSize: '1.2rem',\n fontWeight: 'bold',\n padding: '1rem',\n },\n\n ({ selected, disabled }) => ({\n background: selected ? hexColors.white : hexColors.orange,\n color: disabled ? 'default' : hexColors.black,\n })\n)\n","import React from 'react'\nimport { state$ as userAccountState$, Campaign } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as quickbetState$ } from '../../driver'\nimport { observeImmutable } from '../../../../Components/HOCs'\nimport { BonusBetButtonStyled } from './BonusBetButton.styles'\nimport { Observable } from 'rx'\n\nconst isBonusCampaign = (campaign: Campaign) =>\n campaign.rewardType === 'BonusBetReward' || campaign.rewardType === 'BonusCashReward'\n\nconst state$ = Observable.combineLatest(\n userAccountState$,\n quickbetState$,\n (userAccountState, quickbetState): BonusBetButtonStateProps => {\n return {\n isLoggedIn: userAccountState.isLoggedIn ?? false,\n isUsingBonusBet: quickbetState.isUsingBonusBet,\n isBusy: quickbetState.isBusy,\n canConfirmBet: quickbetState.canConfirmBet,\n hasNotification: !!quickbetState.notificationType,\n activeCampaigns: userAccountState.activeCampaigns?.filter(isBonusCampaign).toArray(),\n insufficientFundsForBet: quickbetState.insufficientFundsForBet,\n }\n }\n)\n\nexport type BonusBetButtonStateProps = {\n isLoggedIn: boolean\n isUsingBonusBet: boolean\n isBusy: boolean\n canConfirmBet: boolean\n hasNotification: boolean\n activeCampaigns: Campaign[] | undefined\n insufficientFundsForBet: boolean\n}\n\nexport type BonusBetExternalProps = {\n toggleBonusBet: () => void\n trackBonusBetClick: () => void\n}\n\nexport function BonusBetButtonComponent({\n isUsingBonusBet,\n toggleBonusBet,\n trackBonusBetClick,\n canConfirmBet,\n hasNotification,\n isBusy,\n isLoggedIn,\n activeCampaigns,\n insufficientFundsForBet,\n}: BonusBetButtonStateProps & BonusBetExternalProps): JSX.Element | null {\n const hasActiveCampaigns = !!(activeCampaigns?.length ?? 0)\n\n const shouldShowBonusBetButton =\n !insufficientFundsForBet &&\n isLoggedIn &&\n hasActiveCampaigns &&\n !canConfirmBet &&\n !hasNotification\n\n if (!shouldShowBonusBetButton) {\n return null\n }\n\n return (\n {\n toggleBonusBet()\n trackBonusBetClick()\n }}\n selected={isUsingBonusBet}\n disabled={isBusy}\n >\n {isUsingBonusBet ? 'Use Balance' : 'Use My Bonus'}\n \n )\n}\n\nexport const BonusBetButton = observeImmutable(\n state$,\n ({ record, toggleBonusBet, trackBonusBetClick }) => {\n return (\n \n )\n }\n)\n","import type { BettingType } from '@mobi/betslip/types'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\n\nexport function isCampaignRedeemableWithBettingType(\n campaign: Campaign,\n bettingType: BettingType | null\n): boolean {\n if (campaign.redeemableBy == null) {\n return false\n }\n\n switch (bettingType) {\n case 'fixed-odds-racing':\n return campaign.redeemableBy.includes('FobRacingBet')\n case 'fixed-odds-sports':\n return campaign.redeemableBy.includes('FobSportsBet')\n case 'tote-racing':\n return campaign.redeemableBy.includes('ToteRacingBet')\n case 'tote-sports-tipping':\n return campaign.redeemableBy.includes('ToteSportsBet')\n default:\n return false\n }\n}\n","import type { RootState } from '@core/Store'\n\nexport const selectLastDepositError = (state: RootState) => {\n return state.quickDeposit.lastDepositError\n}\n\nexport const selectIsBusy = (state: RootState) => state.quickDeposit.depositStatus !== 'idle'\n","import { toMoney } from '@mobi/utils/money'\nimport React, { type HTMLAttributes } from 'react'\nimport { Observable } from 'rx'\nimport type { Selection, BettingType } from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isFobSportsSelection,\n isNoveltyBetType,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackBonusBetEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { isToteSportsSelection } from '@core/Data/Betting/selections'\nimport { state$ as superPickState$, SuperPickState } from '@core/Components/SuperPick/driver'\nimport {\n Campaign,\n state$ as userAccountState$,\n UserAccountState,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { calculateCombinations as tippingCombinations } from '@core/Areas/Tipping/helpers/calculator'\n\nimport {\n BetInvestmentGroupStyled,\n BetInvestmentStyled,\n InvestmentStyled,\n TotalCostSectionStyled,\n TotalCostMoneyStyled,\n InvestmentContainerStyled,\n} from './BetInvestment.styles'\nimport { state$ as investmentState$, InvestmentType, InvestmentState } from './betInvestmentDriver'\nimport { LegInfo } from '../LegInfo/LegInfo'\nimport EachWayCheckbox from '../EachWay/EachWayCheckbox'\nimport { ProjectedReturn } from '../ProjectedReturn/ProjectedReturn'\nimport { FlexiDisplay } from '../FlexiDisplay/FlexiDisplay'\nimport { NumberOfCombinationsDisplay } from '../NumberOfCombinationsDisplay/NumberOfCombinationsDisplay'\nimport { ResetInvalidSuperPickSelection } from '@core/Components/SuperPick/signals'\nimport { state$ as formulaState$, FormulaState } from '../Formula/driver'\nimport { BonusBetButton } from '../BonusBetButton/BonusBetButton'\nimport { state$ as quickbetState$, QuickbetState } from '../../driver'\nimport {\n SetActiveInvestment,\n SetAllowInvestmentState,\n SetBonusBet,\n ToggleBonusBetUsage,\n} from '../../signals'\nimport { isCampaignRedeemableWithBettingType } from '../../helpers/campaignHelper'\nimport { useFeature, useObservableImmutable } from '@core/Utils/hooks'\nimport { useSelector } from 'react-redux'\nimport { selectIsBusy } from '@core/Areas/QuickDeposit/Store/selectors'\nimport { ClearInsufficientFundsForBet } from '@core/Areas/Quickbet/signals'\n\nexport interface BetInvestmentStateProps {\n winValue: number\n placeValue: number\n selection: Selection\n isBusy: boolean\n canConfirmBet: boolean\n canBet: boolean\n isUserInputAllowed: boolean\n isEachWayAvailable: boolean\n bettingType: BettingType\n shouldAllowPlaceInvestment: boolean\n shouldAllowWinInvestment: boolean\n activeInvestment: InvestmentType\n isSuperPickSelectionInvalid: boolean\n numberOfCombinationsSelected: number\n presetInvestment?: boolean\n activeCampaigns: Campaign[] | null\n isWinBonusBet: boolean\n isPlaceBonusBet: boolean\n isUsingBonusBet: boolean\n isUsingBonusCash: boolean\n isBonusBetSelected: boolean\n}\n\nconst betInvestmentState$ = Observable.combineLatest(\n quickbetState$,\n investmentState$,\n superPickState$,\n formulaState$,\n userAccountState$,\n (\n quickbetRecord,\n investmentRecord,\n superPickRecord,\n formulaRecord,\n userAccountState: UserAccountState\n ): BetInvestmentStateProps => {\n const quickbetState = quickbetRecord.toJS() as QuickbetState\n const investmentState = investmentRecord.toJS() as InvestmentState\n const superPickState = superPickRecord.toJS() as SuperPickState\n const formulaState = formulaRecord.toJS() as FormulaState\n return {\n winValue: investmentState.win.value,\n placeValue: investmentState.place.value,\n selection: quickbetState.selection as Selection,\n isBusy: quickbetState.isBusy,\n canConfirmBet: quickbetState.canConfirmBet,\n canBet: quickbetState.canBet,\n isUserInputAllowed: quickbetState.canChangeInvestment,\n isEachWayAvailable: quickbetState.isEachWayAvailable,\n bettingType: quickbetState.bettingType as BettingType,\n shouldAllowPlaceInvestment: quickbetState.shouldAllowPlaceInvestment,\n shouldAllowWinInvestment: quickbetState.shouldAllowWinInvestment,\n activeInvestment: investmentState.activeInvestment,\n isSuperPickSelectionInvalid: !!superPickState.invalidSelectionMessage,\n numberOfCombinationsSelected: formulaState.numberOfCombinationsSelected,\n presetInvestment: quickbetState.presetInvestment ? true : undefined,\n activeCampaigns: userAccountState.activeCampaigns?.toArray() ?? null,\n isWinBonusBet: investmentState.win.isBonusBet ?? false,\n isPlaceBonusBet: investmentState.place.isBonusBet ?? false,\n isUsingBonusBet: quickbetState.isUsingBonusBet,\n isUsingBonusCash: quickbetState.isUsingBonusCash,\n isBonusBetSelected: !!investmentState.bonusBet,\n }\n }\n)\n\nexport function BetInvestmentComponent({\n winValue,\n placeValue,\n selection,\n isBusy,\n canConfirmBet,\n canBet,\n isUserInputAllowed,\n isEachWayAvailable,\n activeInvestment,\n bettingType,\n shouldAllowWinInvestment,\n shouldAllowPlaceInvestment,\n isSuperPickSelectionInvalid,\n numberOfCombinationsSelected: numberOfFormulasSelected,\n presetInvestment,\n activeCampaigns,\n isWinBonusBet,\n isPlaceBonusBet,\n isUsingBonusBet,\n isUsingBonusCash,\n isBonusBetSelected,\n}: BetInvestmentStateProps): JSX.Element | null {\n const [originalState] = React.useState<{\n shouldAllowWinInvestment: boolean\n shouldAllowPlaceInvestment: boolean\n }>({ shouldAllowPlaceInvestment, shouldAllowWinInvestment })\n\n React.useLayoutEffect(() => {\n SetAllowInvestmentState({\n shouldAllowWinInvestment: !isPlaceBonusBet && originalState.shouldAllowWinInvestment,\n shouldAllowPlaceInvestment: !isWinBonusBet && originalState.shouldAllowPlaceInvestment,\n })\n }, [isPlaceBonusBet, isWinBonusBet, originalState])\n\n // Track when the bonus bet button becomes available.\n const {\n isLoggedIn = null,\n accountNumber = null,\n accountBalance = null,\n bonusBetBalance = null,\n bonusCashBalance = null,\n } = useObservableImmutable(userAccountState$, [\n 'isLoggedIn',\n 'accountBalance',\n 'accountNumber',\n 'bonusBetBalance',\n 'bonusCashBalance',\n ])\n\n const is50cIncrementActive = useFeature('CENTS_INCREMENTS_BET')\n\n const hasBonusBet = activeCampaigns?.some(campaign => campaign.rewardType === 'BonusBetReward')\n const hasBonusCash = activeCampaigns?.some(\n campaign =>\n campaign.rewardType === 'BonusCashReward' &&\n isCampaignRedeemableWithBettingType(campaign, bettingType)\n )\n\n const isEligibleForBonusBet = !!hasBonusBet && !hasBonusCash\n React.useEffect(() => {\n if (isLoggedIn && isEligibleForBonusBet) {\n trackBonusBetEvent(keys.quickbetBonusBetButtonShown, {\n accountNumber: accountNumber ?? '',\n accountBalance,\n bonusBetBalance,\n bonusCashBalance,\n })\n }\n }, [\n isLoggedIn,\n isEligibleForBonusBet,\n accountNumber,\n accountBalance,\n bonusBetBalance,\n bonusCashBalance,\n ])\n\n if (!canBet) {\n return null\n }\n\n function changeToWinInvestment() {\n if (!isBusy) {\n ClearInsufficientFundsForBet()\n SetActiveInvestment(InvestmentType.Win)\n ResetInvalidSuperPickSelection()\n }\n }\n\n function changeToPlaceInvestment() {\n if (!isBusy) {\n ClearInsufficientFundsForBet()\n SetActiveInvestment(InvestmentType.Place)\n ResetInvalidSuperPickSelection()\n }\n }\n\n const isWinActive =\n isSuperPickSelectionInvalid || (isUserInputAllowed && activeInvestment === InvestmentType.Win)\n const isPlaceActive =\n isSuperPickSelectionInvalid || (isUserInputAllowed && activeInvestment === InvestmentType.Place)\n const isFixedOddsRacing = bettingType === 'fixed-odds-racing'\n const isToteRacing = bettingType === 'tote-racing'\n\n const hideDecimals = is50cIncrementActive ? false : isFixedOddsRacing\n\n const shouldDisplayFlexi = isToteSelection(selection) && isNoveltyBetType(selection.betType)\n const shouldDisplayNumberOfCombinations =\n isAllUpSelection(selection) || isToteSportsSelection(selection)\n const numberOfCombinations = isAllUpSelection(selection)\n ? numberOfFormulasSelected\n : isToteSelection(selection)\n ? selection.numberOfCombinations\n : isToteSportsSelection(selection)\n ? tippingCombinations(selection.betSelections)\n : 1\n const hasSecondaryDisplay =\n shouldAllowPlaceInvestment || shouldDisplayFlexi || shouldDisplayNumberOfCombinations\n\n const isFixedOddsSport = isFobSportsSelection(selection)\n\n if (presetInvestment) {\n return null\n }\n\n const toggleBonusBet = () => {\n ToggleBonusBetUsage()\n SetBonusBet(null)\n }\n\n const trackBonusBetClick = () => {\n trackBonusBetEvent(\n isUsingBonusBet\n ? keys.quickbetBonusBetButtonDeactivated\n : keys.quickbetBonusBetButtonActivated,\n {\n accountNumber: accountNumber ?? '',\n accountBalance: accountBalance,\n bonusBetBalance: bonusBetBalance,\n bonusCashBalance: bonusCashBalance,\n }\n )\n }\n\n let shouldDisplayBonusButton = false\n if (!!hasBonusBet || !!hasBonusCash) {\n if (isUsingBonusCash) {\n // We are checking for tote here as bonus cash isn't available and bonus bets are n/a for tote\n if (hasBonusCash || isToteRacing) {\n shouldDisplayBonusButton = false\n } else {\n shouldDisplayBonusButton = true\n }\n } else {\n shouldDisplayBonusButton = true\n }\n }\n\n return (\n \n \n {shouldAllowWinInvestment && (\n \n \n \n )}\n {shouldAllowPlaceInvestment && (\n \n \n \n )}\n\n {shouldDisplayFlexi && (\n \n \n \n )}\n\n {shouldDisplayNumberOfCombinations && (\n \n \n \n )}\n \n\n {(isFixedOddsRacing || isToteRacing) && (\n \n \n \n {shouldDisplayBonusButton && (\n \n \n \n \n \n )}\n {!isBonusBetSelected && isEachWayAvailable && !canConfirmBet && (\n \n \n \n \n \n )}\n \n \n \n \n \n \n )}\n\n {isFixedOddsSport && (\n \n \n \n \n \n \n \n )}\n\n {shouldDisplayNumberOfCombinations && (\n \n Total Cost\n \n ${(winValue * (numberOfCombinations || 0)).toFixed(2)}\n \n \n )}\n \n )\n}\n\nexport type InvestmentComponentProps = {\n onClick: () => void\n isActive: boolean\n investmentType: InvestmentType\n amount: number\n shouldFontResize: boolean\n hideDecimals: boolean\n isBonusBet: boolean\n ariaLabel?: string\n} & Pick, 'tabIndex' | 'aria-label'>\n\nexport function InvestmentComponent({\n onClick,\n isActive,\n investmentType,\n amount,\n shouldFontResize,\n hideDecimals,\n isBonusBet = false,\n ...htmlAttributes\n}: InvestmentComponentProps): JSX.Element {\n return (\n null : onClick}\n role='button'\n {...htmlAttributes}\n data-testid='Quickbet.Investment'\n >\n \n \n\n \n \n \n \n \n )\n}\n\nexport const BetInvestment: React.ComponentClass = observeImmutable(\n betInvestmentState$,\n ({ record }) => {\n const quickBetDepositing = useSelector(selectIsBusy)\n\n return \n }\n)\nBetInvestment.displayName = 'BetInvestment'\n","import React from 'react'\nimport SwipeableViews from 'react-swipeable-views'\nimport { createSignal } from 'rwwa-rx-state-machine'\nimport { observe } from '../HOCs'\nimport { Pagination } from '../Pagination'\n\nexport interface SwipedProps {\n index: number\n}\n\nexport const Swiped = createSignal('Swiped')\n\nconst KeypadSwitch$ = Swiped.signal$\n .filter(t => t.tag === Swiped)\n .map(t => ({ index: t.data.index }))\n .startWith({ index: 0 })\n\nconst changeIndex = (index: number) => Swiped({ index })\n\ninterface SwiperProps {\n children: JSX.Element[]\n usePagination?: boolean\n}\n\nexport const Swiper = observe(\n KeypadSwitch$,\n ({ children, index, usePagination = true }) => {\n return (\n
      \n {\n // Overwriting the `containerStyle` to temporarily reset the `willChange` property as it causes\n // issues on iOS 10.3.2 in combination with the current mobi layout.\n // It's also considered bad practice to prematurely add the property, but that's a different issue with the 3rd party pkg.\n // https://dev.opera.com/articles/css-will-change-property/\n }\n \n {children}\n \n {usePagination && }\n
      \n )\n }\n)\n","import styled from '@emotion/styled'\n\nexport const KeypadWrapperStyled = styled('ul')<{ horizontalPadding?: string }>(\n {\n boxSizing: 'border-box',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n width: '100%',\n\n display: 'inline-flex',\n flexWrap: 'wrap',\n },\n\n ({ horizontalPadding }) => ({\n padding: horizontalPadding ? `0 calc(${horizontalPadding} - 0.2rem)` : undefined,\n })\n)\n\ninterface KeypadItemProps {\n keysPerRow: number\n}\n\nexport const KeypadItemStyled = styled('li')(\n {\n boxSizing: 'border-box',\n padding: '0.2rem',\n },\n\n ({ keysPerRow }) => ({\n width: `calc(100% / ${keysPerRow})`,\n flexGrow: 0,\n flexShrink: 0,\n flexBasis: `calc(100% / ${keysPerRow})`,\n })\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Button } from '@mobi/component-library/Common/Buttons'\n\ninterface KeypadButtonProps {\n disabled?: boolean\n}\n\nexport const KeypadButtonStyled = styled(Button)(\n {\n boxSizing: 'border-box',\n cursor: 'pointer',\n fontSize: '1.4rem',\n fontWeight: 700,\n margin: 0,\n minHeight: '4.5rem',\n width: '100%',\n },\n\n (props: KeypadButtonProps) => ({\n color: props.disabled ? hexColors.darkGrey : hexColors.nero,\n })\n)\n","import React from 'react'\nimport { KeypadButtonStyled } from './KeypadButton.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\ninterface KeypadButtonProps {\n clickHandler: () => void\n disabled: boolean\n label: number | string\n ariaLabel?: string\n}\n\nexport function KeypadButton({\n clickHandler,\n disabled,\n label,\n ariaLabel,\n}: KeypadButtonProps): JSX.Element {\n const icon = label === '\\u232B' ? : label\n const testId = { 'data-tid-keypad-key': label === '\\u232B' ? 'backspace' : label }\n\n return (\n \n {icon}\n \n )\n}\n","import React from 'react'\n\nimport { KeypadWrapperStyled, KeypadItemStyled } from './Keypad.styles'\nimport { KeypadButton } from './KeypadButton'\nimport { KeypadModes, SpecialKeys, KeyPressed, Keypress } from './KeyPress'\n\ninterface KeypadKeyDefinition {\n label: string\n ariaLabel?: string\n value: KeyPressed['value']\n isDisabled?: boolean\n isHidden?: boolean\n}\n\nfunction getNumericValues(\n allowDecimal: boolean,\n isIncrementAvailable: boolean,\n isDisabled: boolean\n): KeypadKeyDefinition[] {\n return [\n { label: '1', value: 1, isDisabled },\n { label: '2', value: 2, isDisabled },\n { label: '3', value: 3, isDisabled },\n { label: '4', value: 4, isDisabled },\n { label: '5', value: 5, isDisabled },\n {\n label: allowDecimal && isIncrementAvailable ? '.' : '\\u0020',\n value: allowDecimal && isIncrementAvailable ? SpecialKeys.Decimal : SpecialKeys.Blank,\n isDisabled: allowDecimal && isIncrementAvailable ? isDisabled : true,\n }, // blank square\n { label: '6', value: 6, isDisabled },\n { label: '7', value: 7, isDisabled },\n { label: '8', value: 8, isDisabled },\n { label: '9', value: 9, isDisabled },\n { label: '0', value: 0, isDisabled },\n { label: '\\u232B', ariaLabel: 'Backspace', value: SpecialKeys.Backspace, isDisabled }, // backspace symbol\n ]\n}\n\nfunction getDenominationValues(\n allowDecimal: boolean,\n showHighStake: boolean,\n isDisabled: boolean\n): KeypadKeyDefinition[] {\n return [\n { label: '50c', value: 0.5, isHidden: !allowDecimal, isDisabled },\n { label: '$1', value: 1, isHidden: allowDecimal && showHighStake, isDisabled },\n { label: '$2', value: 2, isDisabled },\n { label: '$5', value: 5, isDisabled },\n { label: '$10', value: 10, isDisabled },\n { label: '$20', value: 20, isDisabled },\n { label: '$50', value: 50, isDisabled },\n { label: '$100', value: 100, isHidden: allowDecimal && !showHighStake, isDisabled },\n { label: 'Clear', value: SpecialKeys.Clear, isDisabled },\n ]\n}\n\nconst KeypadItem = ({ setting, keysPerRow }: { setting: KeypadKeyProps; keysPerRow: number }) => (\n \n \n \n)\n\ninterface KeypadProps {\n keypadMode?: KeypadModes\n allowDecimals?: boolean\n rowCount?: number\n disabled?: boolean\n horizontalPadding?: string\n showHighStake?: boolean\n isIncrementAvailable?: boolean\n}\n\ninterface KeypadKeyProps {\n key: number\n label: string\n ariaLabel: string | null\n disabled: boolean\n hidden: boolean\n onClick: () => void\n}\n\nexport function Keypad({\n keypadMode = KeypadModes.Denomination,\n allowDecimals = false,\n rowCount = 2,\n disabled = false,\n horizontalPadding,\n showHighStake = true,\n isIncrementAvailable = false,\n}: KeypadProps) {\n const keypadValues: KeypadKeyDefinition[] =\n keypadMode === KeypadModes.Numeric\n ? getNumericValues(allowDecimals, isIncrementAvailable, disabled)\n : getDenominationValues(allowDecimals, showHighStake, disabled)\n\n const keypadSettings: KeypadKeyProps[] = keypadValues\n .map((entry, index) => ({\n key: index,\n label: entry.label,\n ariaLabel: entry.ariaLabel ? entry.ariaLabel : null,\n disabled: !!entry.isDisabled,\n hidden: !!entry.isHidden,\n onClick: () => Keypress({ mode: keypadMode, value: entry.value }),\n }))\n .filter(setting => !setting.hidden)\n\n const keysPerRow = Math.ceil(keypadSettings.length / rowCount)\n const testId = { 'data-tid-keypad': keypadMode }\n\n return (\n \n {keypadSettings.map(setting => (\n \n ))}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const modalXPadding = '1.5rem'\n\nexport interface QuickbetBodyProps {\n superPickEnabled?: boolean\n}\n\nexport const QuickbetBodyStyled = styled('div')(\n {\n padding: `1.5rem ${modalXPadding} 0rem ${modalXPadding}`,\n background: hexColors.whiteSmoke,\n minHeight: '13rem',\n overflow: 'auto',\n },\n ({ superPickEnabled }) =>\n superPickEnabled && {\n minHeight: '23.9rem',\n }\n)\n\nexport const QuickbetActionsStyled = styled('footer')({\n boxSizing: 'border-box',\n position: 'relative',\n width: '100%',\n padding: modalXPadding,\n})\n","import styled from '@emotion/styled'\nimport { modalXPadding } from '../../Quickbet.styles'\n\nexport const QuickbetKeypadWrapperStyled = styled('div')({\n margin: `0 -${modalXPadding}`,\n paddingBottom: '0.2rem',\n})\n","import React from 'react'\nimport type { Selection } from '@mobi/betslip/types'\nimport { isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ } from '../../driver'\nimport { Swiper } from '@core/Components/Swiper'\nimport { Keypad } from '@core/Components/Keypad'\nimport { KeypadModes } from '@core/Components/Keypad/KeyPress'\nimport { isToteSportsSelection } from '@core/Data/Betting/selections'\nimport { QuickbetKeypadWrapperStyled } from './Keypad.styles'\nimport { modalXPadding } from '../../Quickbet.styles'\nimport { useFeature } from '@core/Utils/hooks'\n\ninterface QuickbetKeypadComponentProps {\n canChangeInvestment: boolean\n isBusy: boolean\n selection: Selection\n is50cIncrementActive: boolean\n}\n\nexport function QuickbetKeypadComponent({\n canChangeInvestment,\n isBusy,\n selection,\n is50cIncrementActive,\n}: QuickbetKeypadComponentProps): JSX.Element | null {\n const isTote = isToteSelection(selection) || isToteSportsSelection(selection)\n const allowDecimals = isTote ? true : is50cIncrementActive\n return (\n <>\n {canChangeInvestment && (\n \n \n \n \n \n \n )}\n \n )\n}\n\nexport const QuickbetKeypad: React.ComponentClass = observeImmutable(state$, ({ record }) => {\n const is50cIncrementActive = useFeature('CENTS_INCREMENTS_BET')\n\n return \n})\n\nQuickbetKeypad.displayName = 'QuickbetKeypad'\n","import { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { Signal, attachDriver } from 'rwwa-rx-state-machine/dist/stream-driver'\nimport type { BetSlipResponse, FobBetReceiptResponse } from '@mobi/betslip/types'\nimport { ConfirmBetslipBetsSucceeded, ConfirmBetSucceeded } from '../../signals'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\n\nexport interface QuickbetReceiptState {\n accountBalance: number | null\n ticketNumber: number | null\n betPlacedTime: Date | null\n campaignActivatedInd: boolean | null\n campaignId: number | null\n campaignType: 'BonusBetReward' | 'BonusCashReward' | 'CashReward' | 'Reward' | null\n bonusBet: number | null\n amountPaid: number | null\n numberOfCombinations: number | null\n // Fixed Odds betting\n projectedPlacePayout: number | null\n projectedWinPayout: number | null\n placeInvestment: number | null\n winInvestment: number | null\n hasSpecialOffer: boolean | null\n specialOffers: BetSpecialOffer[]\n formulaResponse: FobBetReceiptResponse['formulaResponse'] | null\n // Tote betting\n betCost: number | null\n divXAnnotations: string | null\n selectionAnnotations: string | null\n // Betslip API bets\n betslipReceipt: BetSlipResponse[] | null\n}\n\nconst defaultQuickbetReceiptState: QuickbetReceiptState = {\n accountBalance: null,\n ticketNumber: null,\n betPlacedTime: null,\n campaignActivatedInd: null,\n campaignId: null,\n campaignType: null,\n bonusBet: null,\n amountPaid: null,\n numberOfCombinations: null,\n // Fixed Odds betting\n projectedPlacePayout: null,\n projectedWinPayout: null,\n placeInvestment: null,\n winInvestment: null,\n hasSpecialOffer: false,\n specialOffers: [],\n // Tote betting\n betCost: null,\n divXAnnotations: null,\n selectionAnnotations: null,\n formulaResponse: null,\n betslipReceipt: null,\n}\n\nexport interface QuickbetReceiptStateRecord\n extends TypedRecord,\n QuickbetReceiptState {}\n\nexport const QuickbetReceiptStateFactory = makeTypedFactory<\n QuickbetReceiptState,\n QuickbetReceiptStateRecord\n>(defaultQuickbetReceiptState)\n\nexport function driver(\n state = QuickbetReceiptStateFactory(),\n signal: Signal\n): QuickbetReceiptStateRecord {\n switch (signal.tag) {\n case ConfirmBetSucceeded: {\n return state.merge({\n ...defaultQuickbetReceiptState,\n ...signal.data,\n })\n }\n case ConfirmBetslipBetsSucceeded: {\n return state.merge({\n ...defaultQuickbetReceiptState,\n betslipReceipt: signal.data,\n })\n }\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'quickbet-receipt',\n driver,\n}).map(state => state.toJS() as Immutable)\n","import React from 'react'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { trackOptimoveEvent } from '../optimove'\n\nexport const useOptimoveTrackingEvents = () => {\n useTrackAppOpen()\n}\n\n// Local Hooks\n\nconst useTrackAppOpen = () => {\n React.useEffect(() => {\n if (!isReactNativeApp) return\n trackOptimoveEvent({ eventName: 'session_betting_view_loaded' })\n }, [])\n}\n","import React from 'react'\nimport { QuickbetReceiptState } from './driver'\nimport { Money } from '@core/Components/Text/Money'\nimport {\n ReceiptListItemTextStyled,\n ReceiptListItemStyled,\n ReceiptListStyled,\n ReceiptSpecialIndicator,\n ReceiptCampaignTextStyled,\n ReceiptListRowStyled,\n} from './Receipt.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { useTrackOptimoveEvent } from '@core/Services/Optimove/hooks'\n\nexport type QuickbetReceiptProps = {\n isToteBet: boolean\n isMysteryBet: boolean\n isMysteryCombo: boolean\n isNoveltyBet: boolean\n itemSelectionTag?: string\n showBalance: boolean\n} & Pick<\n Immutable,\n | 'accountBalance'\n | 'ticketNumber'\n | 'betCost'\n | 'winInvestment'\n | 'placeInvestment'\n | 'projectedWinPayout'\n | 'projectedPlacePayout'\n | 'specialOffers'\n | 'divXAnnotations'\n | 'campaignActivatedInd'\n | 'campaignType'\n | 'bonusBet'\n | 'amountPaid'\n>\n\nexport function QuickbetReceipt({ ...props }: QuickbetReceiptProps): JSX.Element {\n useTrackOptimoveEvent({ eventName: 'bet_placed', data: { type: 'quick_bet' } })\n return (\n \n \n
      \n )\n}\n\nexport function QuickbetReceiptDetails({\n isToteBet,\n isMysteryBet,\n isMysteryCombo,\n isNoveltyBet,\n accountBalance,\n ticketNumber,\n betCost,\n winInvestment,\n placeInvestment,\n projectedWinPayout,\n projectedPlacePayout,\n specialOffers,\n divXAnnotations,\n campaignActivatedInd,\n campaignType,\n bonusBet = 0,\n amountPaid,\n showBalance,\n itemSelectionTag,\n}: QuickbetReceiptProps): JSX.Element {\n const derivedBetCost: number =\n isToteBet || isMysteryBet ? (betCost ?? 0) : (winInvestment ?? 0) + (placeInvestment ?? 0)\n const shouldDisplayFlexi = (isMysteryBet && !isMysteryCombo) || (isToteBet && isNoveltyBet)\n const projectedPay = (projectedWinPayout ?? 0) + (projectedPlacePayout ?? 0)\n const betCostMessage =\n itemSelectionTag && itemSelectionTag !== '' ? `Bet Cost (${itemSelectionTag})` : 'Bet Cost'\n const wasCampaignActivated = campaignActivatedInd && !!bonusBet\n const isBonusBet = campaignType == 'BonusBetReward'\n\n return (\n \n {shouldDisplayFlexi && (\n \n Flexi\n {divXAnnotations}\n \n )}\n\n {!(isToteBet || isMysteryBet) && projectedPay > 0 && (\n \n Projected Return\n \n \n \n \n )}\n\n \n {betCostMessage}\n \n \n \n \n\n {!!wasCampaignActivated && (\n \n \n \n {isBonusBet ? 'Bonus Bet' : 'Bonus Cash'}\n \n \n \n \n \n \n \n \n )}\n\n {!!wasCampaignActivated && (\n \n Amount Paid\n \n \n \n \n )}\n\n {showBalance && (\n \n Balance\n \n \n \n \n )}\n\n \n Ticket\n {ticketNumber}\n \n\n {specialOffers\n ? specialOffers.map((special, i) => {\n return (\n \n {special.title}\n \n \n \n \n )\n })\n : null}\n \n )\n}\n","import React from 'react'\nimport type { Contract } from '@mobi/web-native-comms'\nimport { trackOptimoveEvent } from '../optimove'\n\nexport function useTrackOptimoveEvent(event: Contract['OPTIMOVE_TRACK']) {\n const capturedEventRef = React.useRef(event)\n React.useEffect(() => {\n trackOptimoveEvent(capturedEventRef.current)\n }, [])\n}\n","import React from 'react'\nimport type { BetSlipResponse } from '@mobi/betslip/types'\nimport { Money } from '@core/Components/Text/Money'\nimport {\n ReceiptListItemTextStyled,\n ReceiptListItemStyled,\n ReceiptListStyled,\n ReceiptListRowStyled,\n} from './Receipt.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nexport type BetslipReceiptProps = {\n responses: Immutable\n}\n\nexport function BetslipReceipt({ responses }: BetslipReceiptProps): JSX.Element {\n const successfulBets = responses.filter(bet => bet.success)\n const unsuccessfulBets = responses.filter(bet => !bet.success)\n const allSuccess = successfulBets.length > 0 && unsuccessfulBets.length == 0\n\n const pluralization = successfulBets.length > 1 ? 'bets have been' : 'bet has been'\n\n return (\n \n \n \n )\n}\n\nfunction BetslipReceiptDetails({ responses }: BetslipReceiptProps): JSX.Element {\n const successfulBets = responses.filter(bet => bet.success)\n const unsuccessfulBets = responses.filter(bet => !bet.success)\n const totalCost = successfulBets.reduce(\n (total, bet) => (total += bet?.receipt?.amountPaid ?? 0),\n 0\n )\n const ticketNumber =\n responses.length == 1 && successfulBets.length == 1\n ? successfulBets[0].receipt?.ticketNumber\n : false\n\n return (\n \n \n Bets Placed\n {successfulBets.length}\n \n {unsuccessfulBets.length > 0 && (\n \n Failed Bets\n {unsuccessfulBets.length}\n \n )}\n \n Bet Cost\n \n \n \n \n {ticketNumber && (\n \n Ticket\n \n {successfulBets[0].receipt?.ticketNumber}\n \n \n )}\n {!ticketNumber && (\n Please check Pending Bets for details\n )}\n \n )\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport type { Selection, ToteSelection } from '@mobi/betslip/types'\nimport {\n isMysteryComboBetType,\n isMysterySelection,\n isNoveltyBetType,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { state$ as receiptState$ } from './driver'\nimport { immutableState$ as quickbetState$ } from '@core/Areas/Quickbet/driver'\nimport { observe } from '@core/Components/HOCs'\nimport { QuickbetReceipt } from './QuickbetReceipt'\nimport { BetslipReceipt } from './BetslipReceipt'\n\nconst quickbetAndReceiptState$ = Observable.combineLatest(\n quickbetState$,\n receiptState$,\n (quickbetState, receiptState) => ({\n betPlaced: quickbetState.betPlaced,\n selection: quickbetState.selection,\n receiptState,\n })\n)\n\nexport const Receipt: React.ComponentClass = observe(\n quickbetAndReceiptState$,\n ({ betPlaced, selection, receiptState }) => {\n if (!betPlaced) {\n return null\n }\n\n if (receiptState.betslipReceipt) {\n return \n }\n\n const isMysteryBet = isMysterySelection(selection as Selection)\n return (\n \n )\n }\n)\n\nReceipt.displayName = 'Receipt'\n","import styled from '@emotion/styled'\nimport { ButtonStyled } from '@mobi/component-library/Common/Buttons'\nimport { Money } from '@core/Components/Text/Money'\n\nexport const QuickbetButtonStyled = styled(ButtonStyled)({\n width: '100%',\n height: '4rem',\n paddingTop: '0.5rem',\n paddingBottom: '0.5rem',\n whiteSpace: 'pre-line',\n})\n\nexport const QuickbetBetButtonStyled = styled(QuickbetButtonStyled)({\n fontSize: '1.3rem',\n})\n\nexport const QuickbetButtonMoneyStyled = styled(Money)({\n fontSize: '1.5rem',\n})\n\nexport const QuickbetAddToBetSlipButtonStyled = styled(QuickbetBetButtonStyled)<{\n isInQuickbet?: boolean\n}>(\n ({ isInQuickbet = true }) =>\n !isInQuickbet && {\n fontSize: '1.2rem',\n }\n)\n","import React from 'react'\nimport { state$ } from '../../driver'\nimport { observeImmutable } from '../../../../Components/HOCs'\nimport { BusyIndicator as BusyIndicatorComponent } from '@mobi/component-library/Feedback/BusyIndicator'\n\nexport const BusyIndicator = observeImmutable(state$, ({ record }) => (\n \n))\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { hexColors } from '@mobi/settings'\n\nexport const CampaignStyled = styled('div')({\n background: colors.campaigns.panel.background,\n color: colors.campaigns.panel.text,\n padding: '0.5rem 1.5rem',\n})\nexport const CampaignTitleStyled = styled('p')({\n fontSize: '1.2rem',\n margin: 0,\n})\n\nexport const RemoveCampaignButtonStyled = styled('button')({\n width: '2rem',\n height: '2rem',\n margin: 0,\n padding: 0,\n border: 0,\n backgroundColor: 'transparent',\n fontSize: 0,\n color: hexColors.white,\n})\n","import React, { ReactNode } from 'react'\nimport { useDispatch } from 'react-redux'\nimport {\n QuickbetAddToBetSlipButtonStyled,\n QuickbetBetButtonStyled,\n QuickbetButtonMoneyStyled,\n QuickbetButtonStyled,\n} from './QuickbetButton.styles'\nimport { BusyIndicator } from '../BusyIndicator/BusyIndicator'\nimport { navigateToPendingBets } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { QUICKBET_MODAL_ID } from '../../constants'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { closeModal } from '@core/Components/Modal'\nimport { RemoveCampaignButtonStyled } from '../Campaigns/Campaigns.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { ButtonTypes } from '@mobi/component-library/Common/Buttons'\n\nexport function LoginButtonComponent() {\n return (\n showLogin()} data-tid-quickbet-login-button>\n Log in to place bet\n \n )\n}\n\ninterface BettingButtonProps {\n onClick: () => void\n betCost: number\n isDisabled: boolean\n label: string\n}\n\nexport function BettingButtonComponent({\n onClick,\n label,\n betCost,\n isDisabled,\n}: BettingButtonProps) {\n return (\n \n {label} \n \n )\n}\n\nexport function BusyButtonComponent() {\n return (\n \n \n \n )\n}\n\ntype EditBetButtonProps = {\n isDisabled?: boolean\n onClick: VoidFunction\n}\n\nexport function EditBetButtonComponent({ isDisabled = false, onClick }: EditBetButtonProps) {\n return (\n \n Edit your Bet\n \n )\n}\n\nexport function PendingBetsButtonComponent() {\n const dispatch = useDispatch()\n\n const pendingBetsButtonClick = () => {\n dispatch(closeModal({ id: QUICKBET_MODAL_ID }))\n navigateToPendingBets()\n }\n\n return (\n \n Pending Bets\n \n )\n}\n\nexport function NextEventButtonComponent({ onClick }: { onClick: () => void }) {\n return (\n \n Next Events\n \n )\n}\n\nexport function KeepBetsButtonComponent({\n theRef,\n onClick,\n}: {\n theRef: React.RefObject\n onClick: () => void\n}) {\n return (\n <>\n
      \n \n Keep Bets\n \n
      \n \n )\n}\n\nexport function CloseButtonComponent() {\n const dispatch = useDispatch()\n return (\n dispatch(closeModal({ id: QUICKBET_MODAL_ID }))}\n data-tid-quickbet-close-btn\n >\n Close\n \n )\n}\n\ntype DepositButtonProps = {\n color?: Extract\n children: ReactNode\n onClick?: () => void\n isDisabled?: boolean\n}\n\nexport function DepositButtonComponent({\n isDisabled = false,\n children,\n color = 'primary',\n onClick,\n}: DepositButtonProps) {\n return (\n \n {children}\n \n )\n}\n\ninterface BetslipButtonProps {\n onClick: () => void\n isDisabled: boolean\n}\n\nexport function AddToBetslipButtonComponent({ onClick, isDisabled }: BetslipButtonProps) {\n return (\n \n Add to Betslip\n \n )\n}\n\nexport function UpdateBetslipItemButtonComponent({ onClick, isDisabled }: BetslipButtonProps) {\n return (\n \n Done\n \n )\n}\n\nexport function RemoveCampaignButtonComponent({ onClick, isDisabled }: BetslipButtonProps) {\n return (\n \n \n \n )\n}\n","import type { BetSlipResponse } from '@mobi/betslip/types'\nimport {\n BetRequest,\n proposeBet,\n confirmBet,\n isMysteryCommitResponse,\n MysteryCommitResponse,\n ToteBetResponse,\n FobCommitResponse,\n FobSingleErrorResponse,\n} from '@core/Data/betting'\nimport {\n ConfirmBetFailed,\n ConfirmBetSucceeded,\n ProposeBetFailed,\n ProposeBetSucceeded,\n ProposeBet,\n ConfirmBet,\n ConfirmBetslipBetsFailed,\n ConfirmBetslipBetsSucceeded,\n ProposeBetslipBetsSucceeded,\n SetBonusBet,\n ToggleBonusBetUsage,\n} from './signals'\nimport { UpdateAccountBalance } from '@core/State/UserAccount/userAccountDriver'\nimport { fetchCampaignsAsync } from '@core/State/UserAccount/async-signals'\nimport { isBetslipResponses } from '@core/Data/betslip'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\n\n/**\n * Propose the given bet. If successful\n */\nexport async function proposeBetAsync(request: BetRequest): Promise {\n ProposeBet()\n try {\n const response = await proposeBet(request)\n\n if (!response) {\n return undefined\n }\n\n if (Array.isArray(response)) {\n return handleBetslipProposeResponses(response)\n }\n\n if (response.accountBalance) UpdateAccountBalance({ balance: response.accountBalance })\n ProposeBetSucceeded(response)\n\n return response.accountBalance\n } catch (error) {\n ProposeBetFailed(error as FobSingleErrorResponse)\n throw error\n }\n}\n\nexport async function confirmBetAsync(request: BetRequest): Promise {\n ConfirmBet()\n try {\n const response = await confirmBet(request)\n if (response) {\n if (isBetslipResponses(response)) {\n handleBetslipCommitResponses(response)\n } else {\n handleQuickbetResponse(response)\n }\n }\n } catch (err) {\n const error = err as FobSingleErrorResponse\n if (error.response && error.response.accountBalance) {\n UpdateAccountBalance({ balance: error.response.accountBalance })\n }\n ConfirmBetFailed(error)\n }\n}\n\nfunction handleBetslipProposeResponses(response: BetSlipResponse[]) {\n const accountBalance = response[0]?.accountBalance\n\n if (accountBalance) {\n UpdateAccountBalance({ balance: accountBalance })\n }\n\n ProposeBetslipBetsSucceeded()\n\n return accountBalance\n}\n\nfunction handleBetslipCommitResponses(response: BetSlipResponse[]) {\n const successfulResponses = response.filter(r => r.success)\n\n // all failed\n if (successfulResponses.length === 0) {\n const errorResponses = response.flatMap(r => (r.error ? [r.error] : []))\n ConfirmBetslipBetsFailed(errorResponses)\n return\n }\n\n const successfulResponsesByDateDescending = successfulResponses.sort(\n (a, b) =>\n new Date(b.receipt?.betPlacedTime ?? 0).getTime() -\n new Date(a.receipt?.betPlacedTime ?? 0).getTime()\n )\n\n const lastReceipt = successfulResponsesByDateDescending[0].receipt\n if (lastReceipt) {\n UpdateAccountBalance({\n balance: lastReceipt.accountBalance,\n })\n if (lastReceipt.campaignActivatedInd) {\n fetchCampaignsAsync()\n\n trackOptimoveEvent({\n eventName: 'redeemed_bonus_offer',\n })\n }\n }\n\n ConfirmBetslipBetsSucceeded(response)\n}\n\nfunction handleQuickbetResponse(\n response: ToteBetResponse | MysteryCommitResponse | FobCommitResponse\n) {\n if (response.accountBalance !== undefined) {\n UpdateAccountBalance({ balance: response.accountBalance })\n }\n\n if (isMysteryCommitResponse(response)) {\n response = buildMysteryConfirmBetSucceededResponse(response as MysteryCommitResponse)\n }\n\n ConfirmBetSucceeded(response)\n if (response.campaignActivatedInd) {\n fetchCampaignsAsync()\n\n trackOptimoveEvent({\n eventName: 'redeemed_bonus_offer',\n })\n }\n\n SetBonusBet(null)\n ToggleBonusBetUsage(false)\n}\n\nfunction buildMysteryConfirmBetSucceededResponse(\n mysteryResponse: MysteryCommitResponse\n): ToteBetResponse {\n const bet = mysteryResponse.bets[0]\n bet.accountBalance = mysteryResponse.accountBalance\n bet.campaignActivatedInd = mysteryResponse.campaignActivatedInd\n\n return bet\n}\n","import { PlanSeq } from '@mobi/api-types'\nimport type { RacingBetType } from '../types'\n\nexport function getToteProductPlanSequence(\n betType: RacingBetType,\n isRefreshing: boolean,\n isRovingBanker = false,\n hasWinInvestment = false,\n hasPlaceInvestment = false\n): number {\n switch (betType) {\n case 'Win & Place': {\n if (isRefreshing) {\n return PlanSeq.Win\n }\n if (hasWinInvestment && hasPlaceInvestment) {\n return PlanSeq.WinAndPlace\n }\n if (hasWinInvestment) {\n return PlanSeq.Win\n }\n if (hasPlaceInvestment) {\n return PlanSeq.Place\n }\n break\n }\n case 'Exacta': {\n return isRovingBanker ? PlanSeq.ExactaWithRovingBanker : PlanSeq.Exacta\n }\n case 'Quinella': {\n return PlanSeq.Quinella\n }\n case 'Trifecta': {\n return isRovingBanker ? PlanSeq.TrifectaWithRovingBanker : PlanSeq.Trifecta\n }\n case 'First 4': {\n return isRovingBanker ? PlanSeq.First4WithRovingBanker : PlanSeq.First4\n }\n case 'Double': {\n return PlanSeq.Double\n }\n case 'Quaddie': {\n return PlanSeq.Quaddie\n }\n case 'All Up': {\n return PlanSeq.AllUp\n }\n }\n throw new Error('Unsupported bet type')\n}\n","import type {\n Selection,\n AllUpSelection,\n MysterySelection,\n RacingBetType,\n BetSlipBetRequest,\n BetLegType,\n} from '@mobi/betslip/types'\nimport {\n isMysterySelection,\n isToteSelection,\n isAllUpSelection,\n isFobPropositionSelection,\n isStartingPriceSelection,\n isStartingPriceMatchedSelection,\n isFobSportsSelection,\n isFobMatchedSelection,\n isSameRaceMultiSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { getToteProductPlanSequence } from '@mobi/betslip/helpers/betting'\nimport {\n ToteRequest,\n AllUpRequest,\n FobSingleRacingRequest,\n RacingSingleRequest,\n MysteryProposeRequest,\n MysteryCommitRequest,\n SameRaceMultiRequest,\n FobSingleSportsRequest,\n FobSingleRequest,\n} from '@core/Data/betting'\nimport { isFavouriteNumbersSelection, isToteSportsSelection } from '@core/Data/Betting/selections'\nimport { BetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { determineLegTypeFromInvestments } from './calculator'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\n\n// Create Betting API Request Object\nexport function createBetRequest(\n selection: Selection | null,\n id: string,\n investmentWin: number,\n investmentPlace: number,\n isEachWay: boolean,\n selectedSuperPickOffer: BetSpecialOffer,\n campaign: Campaign | undefined,\n formulas: AllUpSelection['formulas'],\n useBonusCash?: boolean,\n isBonusCashImprovementsActive?: boolean\n):\n | ToteRequest\n | AllUpRequest\n | FobSingleRequest\n | RacingSingleRequest\n | MysteryProposeRequest\n | MysteryCommitRequest\n | BetSlipBetRequest\n | SameRaceMultiRequest\n | null {\n if (isFavouriteNumbersSelection(selection)) {\n if (selection.bets) {\n return {\n favouriteNumbersBets: selection.bets.map((bet, index) => {\n return {\n fixtureDate: bet.fixtureDate,\n selectionsGameOne: bet.game1Selections.join('.'),\n selectionsGameTwo: bet.game2Selections?.join('.'),\n betTransactionId: id,\n position: index + 1,\n }\n }),\n toteBets: [],\n fixedOddsBets: [],\n allUpBets: [],\n toteSportsBets: [],\n }\n }\n } else if (isToteSportsSelection(selection)) {\n return {\n toteSportsBets: [\n {\n poolSeq: selection.poolSequence,\n selections: selection.betSelections,\n investment: investmentWin,\n betTransactionId: id,\n position: 1,\n },\n ],\n toteBets: [],\n fixedOddsBets: [],\n allUpBets: [],\n favouriteNumbersBets: [],\n }\n } else if (isMysterySelection(selection)) {\n // TODO replace actuallyUseBonusCash with useBonusCash when removing BONUS_CASH_IMPROVEMENTS/bonus-cash-improvements flag\n const actuallyUseBonusCash = isBonusCashImprovementsActive ? useBonusCash : undefined\n if (selection.bets) {\n // If we have bets, then we are confirming, otherwise we are proposing.\n return createMysteryCommitRequest(selection, actuallyUseBonusCash)\n }\n\n const mysteryInvestWin = selection.mysteryType === 'Combo' ? 1 : investmentWin\n const mysteryInvestWPlace = 0\n\n return createMysteryProposeRequest(\n selection.fixtureId,\n selection.fixtureDate,\n selection.raceNumber,\n selection.productCode,\n selection.mysteryOption,\n 1,\n mysteryInvestWin,\n mysteryInvestWPlace,\n actuallyUseBonusCash\n )\n } else if (isToteSelection(selection)) {\n if (isAllUpSelection(selection)) {\n return createAllUpRequest(\n id,\n selection.fixtureId,\n selection.fixtureDate,\n selection.betType,\n selection,\n investmentWin,\n formulas\n )\n } else {\n return createToteRequest(\n id,\n selection.fixtureId,\n selection.fixtureDate,\n selection.raceNumber,\n selection.selectionString,\n selection.isRovingBanker,\n selection.betType,\n investmentWin,\n investmentPlace,\n useBonusCash\n )\n }\n }\n\n if (isFobPropositionSelection(selection)) {\n return createFobRequest(\n id,\n selection.propositionSeq.toString(),\n selection.variantSeq as string,\n isEachWay,\n selection.winPrice,\n selection.placePrice as number,\n selection.handicap as number,\n investmentWin,\n investmentPlace,\n selectedSuperPickOffer,\n campaign,\n isStartingPriceSelection(selection)\n )\n }\n\n if (isFobSportsSelection(selection) && selection.externalBetId) {\n return createFobSportsRequest(\n selection.externalBetId,\n id,\n selection.winPrice,\n investmentWin,\n selectedSuperPickOffer,\n campaign\n )\n }\n\n if (isStartingPriceMatchedSelection(selection)) {\n const request = createRacingRequest(\n id,\n selection.fixtureId,\n selection.fixtureDate,\n selection.raceNumber,\n null,\n null,\n investmentWin,\n investmentPlace,\n selection.acceptorNumber,\n selectedSuperPickOffer,\n campaign\n )\n request.legType = 'SP'\n return request\n }\n\n if (isFobMatchedSelection(selection)) {\n return createRacingRequest(\n id,\n selection.fixtureId,\n selection.fixtureDate,\n selection.raceNumber,\n selection.winPrice,\n selection.placePrice as number,\n investmentWin,\n investmentPlace,\n selection.acceptorNumber,\n selectedSuperPickOffer,\n campaign\n )\n }\n\n if (isSameRaceMultiSelection(selection)) {\n return {\n responseVersion: 2,\n betTransactionId: id,\n fixtureDate: selection.fixtureDate,\n fixtureId: selection.fixtureId,\n raceNumber: selection.raceNumber,\n\n selectionPrice: selection.winPrice,\n selections: selection.acceptors.map(acceptor => ({\n starter: acceptor.acceptorNumber,\n position: acceptor.legNumber + 1,\n })),\n\n investment: investmentWin,\n specialSeq: selectedSuperPickOffer ? selectedSuperPickOffer.specialSeq : null,\n selectedCampaign: campaign,\n } as SameRaceMultiRequest\n }\n\n return null\n}\n\n// ==========================\n// FOB Racing Matched Request\n// ==========================\nfunction createRacingRequest(\n betTransactionId: string,\n fixtureId: string,\n fixtureDate: string,\n raceNumber: number,\n winPrice: number | null,\n placePrice: number | null,\n investmentWin: number,\n investmentPlace: number,\n starterNumber?: number,\n selectedSuperPickOffer?: BetSpecialOffer,\n campaign?: Campaign\n): RacingSingleRequest {\n return {\n responseVersion: 2,\n betTransactionId,\n fixtureDate,\n fixtureId,\n raceNumber,\n legType: determineLegTypeFromInvestments(investmentWin, investmentPlace),\n priceWin: winPrice,\n pricePlace: placePrice,\n investmentWin: (investmentWin === 0 ? null : investmentWin) as number,\n investmentPlace: (investmentPlace === 0 ? null : investmentPlace) as number,\n starterNumber,\n specialSeq: selectedSuperPickOffer ? selectedSuperPickOffer.specialSeq : null,\n selectedCampaign: campaign,\n }\n}\n\n// =========================\n// FOB Sports/Racing Request\n// =========================\nfunction createFobRequest(\n betTransactionId: string,\n propositionSeq: string,\n variantSeq: string,\n isEachWay: boolean,\n priceWin: number,\n pricePlace: number,\n handicap: number,\n winInvestment: number,\n placeInvestment: number,\n selectedSuperPickOffer: BetSpecialOffer | undefined,\n selectedCampaign: Campaign | undefined,\n isStartingPrice: boolean\n): FobSingleRacingRequest {\n const legType: BetLegType = isStartingPrice\n ? 'SP'\n : isEachWay\n ? 'EW'\n : determineLegTypeFromInvestments(winInvestment, placeInvestment)\n const investmentPlace = isEachWay ? winInvestment : placeInvestment || null\n const investmentWin = winInvestment === 0 ? null : winInvestment\n\n return {\n responseVersion: 2,\n betTransactionId,\n propositionSeq,\n variantSeq,\n legType,\n priceWin,\n pricePlace,\n handicap,\n investmentWin,\n investmentPlace,\n specialSeq: selectedSuperPickOffer ? selectedSuperPickOffer.specialSeq : null,\n selectedCampaign,\n }\n}\n\nexport function createFobSportsRequest(\n externalBetId: string,\n betTransactionId: string,\n priceWin: number,\n winInvestment: number,\n selectedSuperPickOffer: BetSpecialOffer | undefined,\n selectedCampaign: Campaign | undefined\n): FobSingleSportsRequest {\n const investmentPlace = null\n const investmentWin = winInvestment === 0 ? null : winInvestment\n\n return {\n responseVersion: 2,\n betTransactionId,\n priceWin,\n investmentWin,\n investmentPlace,\n specialSeq: selectedSuperPickOffer ? selectedSuperPickOffer.specialSeq : null,\n selectedCampaign,\n externalBetId,\n }\n}\n\n// ==========================\n// Tote Racing All-up Request\n// ==========================\nexport function createAllUpRequest(\n betTransactionId: string,\n fixtureId: string,\n fixtureDate: string,\n betType: RacingBetType,\n selection: AllUpSelection,\n investmentWin: number,\n formulas: AllUpSelection['formulas']\n): AllUpRequest {\n const productPlanSeq = getToteProductPlanSequence(betType, false)\n const raceDetails: AllUpSelection['details'] = []\n selection.details.forEach(selectionDetail => {\n if (selectionDetail.poolType === 'EW') {\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: 'W',\n betSelections: selectionDetail.betSelections,\n })\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: 'P',\n betSelections: selectionDetail.betSelections,\n })\n } else {\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: selectionDetail.poolType,\n betSelections: selectionDetail.betSelections,\n })\n }\n })\n return {\n betTransactionId,\n productPlanSeq,\n fixtureId,\n fixtureDate,\n raceDetails,\n formulas: formulas.filter(formula => formula.isSelected),\n investment: (investmentWin === 0 ? null : investmentWin) as number,\n }\n}\n\n// ===================\n// Tote Racing Request\n// ===================\nfunction createToteRequest(\n betTransactionId: string,\n fixtureId: string,\n fixtureDate: string,\n raceNumber: number,\n selections: string,\n isRovingBanker: boolean,\n betType: RacingBetType,\n investmentWin?: number,\n investmentPlace?: number,\n useBonusCash?: boolean\n): ToteRequest {\n const hasWinInvestment = !!(investmentWin && investmentWin > 0)\n const hasPlaceInvestment = !!(investmentPlace && investmentPlace > 0)\n const productPlanSeq = getToteProductPlanSequence(\n betType,\n false,\n isRovingBanker,\n hasWinInvestment,\n hasPlaceInvestment\n )\n\n return {\n betTransactionId,\n productPlanSeq,\n fixtureId,\n fixtureDate,\n raceNumber,\n selections,\n investmentWin: (investmentWin === 0 ? null : investmentWin) as number,\n investmentPlace: (investmentPlace === 0 ? null : investmentPlace) as number,\n useBonusCash,\n }\n}\n\nfunction createMysteryProposeRequest(\n fixtureId: string,\n fixtureDate: string,\n raceNumber: number,\n productCode: string,\n option: number,\n numberOfBets: number,\n investmentWin?: number,\n investmentPlace?: number,\n useBonusCash?: boolean\n): MysteryProposeRequest {\n return {\n fixtureId,\n fixtureDate,\n raceNumber,\n productCode,\n option,\n numberOfBets,\n investmentWin: investmentWin === 0 ? undefined : investmentWin,\n investmentPlace: investmentPlace === 0 ? undefined : investmentPlace,\n useBonusCash,\n }\n}\n\nfunction createMysteryCommitRequest(\n selection: MysterySelection,\n useBonusCash?: boolean\n): MysteryCommitRequest {\n const proposalIds: number[] = []\n\n selection.bets?.forEach(bet => {\n proposalIds.push(bet.id)\n })\n\n return {\n proposalIds,\n metaData: selection.metaData as string,\n useBonusCash,\n }\n}\n","export function calculateBetCostShortfall(\n betCostInDollars: number,\n accountBalanceInDollars: number,\n isUsingBonusCash: boolean,\n bonusCashBalanceInDollars: number\n): number {\n const betAmountInCents = Math.round(betCostInDollars * 100)\n const accountBalanceInCents = Math.round(accountBalanceInDollars * 100)\n\n // This will always be 0 when the user is not using bonus cash\n const bonusCashBalanceInCents = isUsingBonusCash ? Math.round(bonusCashBalanceInDollars * 100) : 0\n const availableBalance = accountBalanceInCents + bonusCashBalanceInCents\n\n return Math.max(0, (betAmountInCents - availableBalance) / 100)\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Observable } from 'rx'\nimport Decimal from 'decimal.js'\nimport type {\n ToteSelection,\n AllUpSelection,\n FobSelection,\n BettingType,\n Selection,\n} from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isFobSelection,\n isFobSportsSelection,\n isNoveltyBetType,\n isSameRaceMultiSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\nimport { calculateBetCost, calculateFlexiAmount } from '../../helpers/calculator'\nimport { FobSingleRequest } from '@core/Data/betting'\nimport { isFavouriteNumbersSelection, isToteSportsSelection } from '@core/Data/Betting/selections'\nimport { Stake } from '@classic/Specials/Model/Stake'\nimport { BetSpecialOffer, IBetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { navigateToNextEvents } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { trackBonusBetEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport { QuickbetState, state$ as quickbetState$ } from '../../driver'\nimport {\n Campaign,\n state$ as userAccountState$,\n UserAccountState,\n} from '@core/State/UserAccount/userAccountDriver'\nimport {\n defaultInvestmentState,\n InvestmentState,\n state$ as investmentState$,\n} from '../BetInvestment/betInvestmentDriver'\nimport { state$ as superPickState$, SuperPickState } from '@core/Components/SuperPick/driver'\nimport { FormulaState, state$ as formulaState$ } from '../Formula/driver'\nimport {\n AddingToBetslip,\n ChangeInvestment,\n DepositFundsDisplayed,\n InsufficientFundsForBet,\n SetInvalidInvestmentNotification,\n} from '../../signals'\nimport { AddSingleToBetslip, UpdateItemInBetslip } from '@core/Areas/Betslip/signals'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport {\n AddToBetslipButtonComponent,\n BettingButtonComponent,\n BusyButtonComponent,\n CloseButtonComponent,\n DepositButtonComponent,\n EditBetButtonComponent,\n KeepBetsButtonComponent,\n LoginButtonComponent,\n NextEventButtonComponent,\n PendingBetsButtonComponent,\n UpdateBetslipItemButtonComponent,\n} from './Buttons'\nimport { confirmBetAsync, proposeBetAsync } from '../../async-signals'\nimport { createBetRequest } from '../../helpers/request'\nimport { QUICKBET_MODAL_ID } from '../../constants'\nimport { NotificationType } from '../Notifications/NotificationTypes'\nimport { checkSuperPickEligible } from '@classic/Specials/Store/PyosRewardCalculator'\nimport { PyosExtensions } from '@classic/Specials/Store/PyosExtensions'\nimport { calculateCombinations as favouriteNumbersCombinations } from '@core/Areas/FavouriteNumbers/calculator'\nimport { calculateCombinations as tippingCombinations } from '@core/Areas/Tipping/helpers/calculator'\nimport { closeModal } from '@core/Components/Modal'\nimport { useFeature } from '@core/Utils/hooks'\nimport { calculateBetCostShortfall } from '@core/Areas/QuickDeposit/Utils/helpers'\nimport { openDepositModal } from '@core/Areas/Deposit'\nimport { selectIsBusy } from '@core/Areas/QuickDeposit/Store/selectors'\n\nfunction setInvalidSuperPickSelectionNotification(selectedSuperPickOffer: BetSpecialOffer): void {\n SetInvalidInvestmentNotification({\n type: NotificationType.InvalidSuperPickSelection,\n subtitle: new PyosExtensions().getLegTypeIneligibilityDisplay(selectedSuperPickOffer) || '',\n })\n}\n\nexport type ButtonsContainerComponentProps = Pick<\n QuickbetState,\n | 'id'\n | 'isBusy'\n | 'canProposeBet'\n | 'canConfirmBet'\n | 'canBet'\n | 'notificationType'\n | 'selection'\n | 'selectionDetails'\n | 'isEachWayAvailable'\n | 'isEachWay'\n | 'bettingType'\n | 'isBetslipItem'\n | 'shouldAllowPlaceInvestment'\n | 'promptForInvestment'\n | 'keepSelections'\n | 'tags'\n | 'betSource'\n> & {\n investmentWin: number\n investmentPlace: number\n isSuperPickAvailable?: boolean\n isSuperPickSelectionInvalid?: boolean\n selectedSuperPickOffer?: BetSpecialOffer\n selectedCampaign?: Campaign\n specialOffers: BetSpecialOffer[]\n formulas: AllUpSelection['formulas']\n numberOfCombinationsSelected: number\n isLoggedIn: boolean\n accountNumber: number | null\n accountBalance: number | null\n bonusBetBalance: number | null\n bonusCashBalance: number | null\n isUsingBonusCash?: boolean\n isUsingBonusBet?: boolean\n}\n\nexport function ButtonsContainerComponent({\n id,\n isBusy,\n canBet,\n canProposeBet,\n canConfirmBet,\n notificationType,\n isEachWayAvailable,\n isEachWay,\n selection,\n selectionDetails,\n bettingType,\n investmentWin,\n investmentPlace,\n isLoggedIn,\n selectedSuperPickOffer,\n selectedCampaign,\n isSuperPickAvailable,\n isSuperPickSelectionInvalid,\n isBetslipItem,\n formulas,\n numberOfCombinationsSelected,\n shouldAllowPlaceInvestment,\n specialOffers,\n promptForInvestment,\n accountNumber,\n accountBalance,\n bonusBetBalance,\n bonusCashBalance,\n isUsingBonusCash,\n keepSelections,\n isUsingBonusBet,\n tags,\n betSource,\n}: ButtonsContainerComponentProps): JSX.Element {\n const isBonusCashImprovementsActive = useFeature('BONUS_CASH_IMPROVEMENTS')\n const isNewBetSlipFeatureActive = useFeature('NEW_BET_SLIP_DESIGN')\n\n const dispatch = useDispatch()\n\n const isTote = isToteSelection(selection)\n const isAllowedInMulti = !isTote && !isStartingPriceSelection(selection)\n\n const numberOfCombinations = isAllUpSelection(selection)\n ? numberOfCombinationsSelected\n : isTote\n ? (selection as ToteSelection).numberOfCombinations\n : isFavouriteNumbersSelection(selection)\n ? favouriteNumbersCombinations(selection.bets)\n : isToteSportsSelection(selection)\n ? tippingCombinations(selection.betSelections)\n : 1\n\n const betType = isTote ? (selection as ToteSelection).betType : undefined\n\n const betCost = calculateBetCost(\n bettingType as BettingType,\n investmentWin,\n investmentPlace,\n isEachWay,\n betType,\n numberOfCombinations\n )\n\n const isFlexiWithInsufficientInvestment =\n isTote &&\n isNoveltyBetType((selection as ToteSelection).betType) &&\n numberOfCombinations > 1 &&\n calculateFlexiAmount(investmentWin, numberOfCombinations) < 1\n\n const hasSuperPickOrFlexiError = (): boolean => {\n const stake: Stake | undefined = selectedSuperPickOffer\n ? Stake.normalise({\n Win: Decimal(investmentWin || 0),\n Place: Decimal(investmentPlace || 0),\n })\n : undefined\n if (isFlexiWithInsufficientInvestment && investmentWin > 0) {\n SetInvalidInvestmentNotification({\n type: NotificationType.InsufficientInvestmentForCombinations,\n })\n return true\n } else if (\n !!selectedSuperPickOffer &&\n !checkSuperPickEligible(selectedSuperPickOffer as IBetSpecialOffer, stake as Stake)\n ) {\n setInvalidSuperPickSelectionNotification(selectedSuperPickOffer)\n return true\n } else {\n return false\n }\n }\n\n const handleAddToBetslipClick = () => {\n if (hasSuperPickOrFlexiError()) return\n\n if (isNewBetSlipFeatureActive) {\n handleBetSelection({\n betFlow: { location: 'Betslip' },\n selection: {\n bettingType: bettingType as BettingType,\n selection: selection as Selection,\n selectionDetails,\n isEachWayAvailable,\n shouldAllowPlaceInvestment,\n tags,\n betSource: betSource as string,\n },\n investmentWin,\n investmentPlace,\n isEachWay,\n })\n } else {\n const betslipItem = createBetSlipItem()\n if (tags) {\n betslipItem.tags = tags\n }\n if (!isEachWayAvailable && (betslipItem.selection as FobSelection)?.placePrice) {\n betslipItem.shouldAllowPlaceInvestment = true\n }\n AddingToBetslip()\n AddSingleToBetslip(betslipItem)\n }\n\n dispatch(\n closeModal({ id: QUICKBET_MODAL_ID as Lowercase, exitAnimation: 'addToBetslip' })\n )\n\n trackBonusBet(keys.quickbetBonusBetAddedToBetslip)\n }\n\n const handleUpdateBetslipClick = () => {\n if (!hasSuperPickOrFlexiError()) {\n UpdateItemInBetslip(createBetSlipItem())\n dispatch(closeModal({ id: QUICKBET_MODAL_ID as Lowercase }))\n }\n\n trackBonusBet(keys.betslipBonusBetChosen)\n }\n\n const trackBonusBet = (eventKey: Parameters[0]) => {\n if (selectedCampaign?.rewardType === 'BonusBetReward') {\n trackBonusBetEvent(eventKey, {\n name: selectedCampaign.title,\n accountNumber: accountNumber ?? '',\n accountBalance,\n bonusBetBalance,\n bonusCashBalance,\n })\n }\n }\n\n const handleProposeBetClick = async () => {\n if (!hasSuperPickOrFlexiError()) {\n const betRequest = createBetRequest(\n selection,\n id as string,\n investmentWin,\n investmentPlace,\n isEachWay,\n selectedSuperPickOffer as BetSpecialOffer,\n selectedCampaign,\n formulas,\n // bonusCashBalance is also checked to workaround a bug/feature where isUsingBonusCash is true even for accounts that don't have any bonus cash available!\n isUsingBonusCash && !!bonusCashBalance && bonusCashBalance > 0,\n // TODO remove this when removing BONUS_CASH_IMPROVEMENTS/bonus-cash-improvements flag\n isBonusCashImprovementsActive\n )\n\n if (betRequest) {\n if (isFobSelection(selection) && !isSameRaceMultiSelection(selection) && tags) {\n ;(betRequest as FobSingleRequest).tags = tags\n }\n proposeBetAsync(betRequest).then(newAccountBalance => {\n // After proposing the bet and getting a successful response, we will try to\n // use the account balance returned from the API call. If the balance was\n // not returned, we will use the current known account balance instead.\n const shortfall = calculateBetCostShortfall(\n betCost,\n newAccountBalance ?? accountBalance ?? 0,\n isUsingBonusCash ?? false,\n bonusCashBalance ?? 0\n )\n if (shortfall > 0) {\n InsufficientFundsForBet({\n betCost,\n shortfall,\n })\n }\n })\n }\n trackBonusBet(keys.quickbetBonusBetProposed)\n }\n }\n\n const handleConfirmBetClick = () => {\n const betRequest = createBetRequest(\n selection,\n id as string,\n investmentWin,\n investmentPlace,\n isEachWay,\n selectedSuperPickOffer as BetSpecialOffer,\n selectedCampaign,\n formulas,\n // bonusCashBalance is also checked to workaround a bug/feature where isUsingBonusCash is true even for accounts that don't have any bonus cash available!\n isUsingBonusCash && !!bonusCashBalance && bonusCashBalance > 0,\n // TODO remove this when removing BONUS_CASH_IMPROVEMENTS/bonus-cash-improvements flag\n isBonusCashImprovementsActive\n )\n\n if (betRequest) {\n if (isFobSelection(selection) && tags) {\n ;(betRequest as FobSingleRequest).tags = tags\n }\n confirmBetAsync(betRequest)\n }\n\n trackBonusBet(keys.betslipBonusBetConfirmed)\n }\n\n const handleNextEventsClick = () => {\n dispatch(closeModal({ id: QUICKBET_MODAL_ID as Lowercase }))\n navigateToNextEvents()\n }\n\n const handleKeepButtonClick = (keepSelections: (_: boolean) => void) => {\n keepSelections(true)\n dispatch(closeModal({ id: QUICKBET_MODAL_ID as Lowercase }))\n }\n\n const createBetSlipItem: () => BetslipItem = () => ({\n id,\n bettingType,\n isEachWay,\n isEachWayAvailable,\n investment: {\n win: {\n ...defaultInvestmentState.win,\n isBonusBet:\n selectedCampaign && selectedCampaign.rewardType === 'BonusBetReward' && !!investmentWin,\n value: investmentWin,\n },\n place: {\n ...defaultInvestmentState.place,\n isBonusBet:\n selectedCampaign && selectedCampaign.rewardType === 'BonusBetReward' && !!investmentPlace,\n value: investmentPlace,\n },\n bonusBet:\n selectedCampaign && selectedCampaign.rewardType === 'BonusBetReward'\n ? { campaignId: selectedCampaign.id, value: selectedCampaign.remainingAmount }\n : undefined,\n },\n isSuperPickAvailable,\n selection: isAllUpSelection(selection) ? { ...selection, formulas } : selection,\n selectionDetails,\n shouldAllowPlaceInvestment,\n numberOfCombinations,\n errorMessage: '',\n hasNonHandledErrorOccurred: false,\n selectedSuperPickOffer,\n isInMulti: isAllowedInMulti,\n multiLegBetType: isAllowedInMulti ? 'W' : undefined,\n multiBetLegError: null,\n specialOffers,\n hasIotSubscription: false,\n campaign: selectedCampaign,\n isUsingBonusCash,\n })\n\n const isInvestmentError =\n NotificationType.InsufficientFunds === notificationType ||\n NotificationType.InvalidSuperPickSelection === notificationType ||\n NotificationType.InsufficientInvestmentForCombinations === notificationType\n const isMysteryQuickPick = bettingType === 'mystery-quick-pick'\n const isToteSports = bettingType === 'tote-sports-tipping'\n const isKambiSportsBet =\n isFobSportsSelection(selection) && selection.externalBetId?.startsWith('KAMBI_')\n\n const isSameRaceMulti = isSameRaceMultiSelection(selection)\n const showAddToBetslipButton =\n !isInvestmentError &&\n !canConfirmBet &&\n canProposeBet &&\n canBet &&\n !isBetslipItem &&\n !isMysteryQuickPick &&\n !isToteSports &&\n !isSameRaceMulti &&\n !isKambiSportsBet\n\n const showUpdateBetslipButton = isBetslipItem && !canConfirmBet && canBet\n const showBusyButton = (canProposeBet || canConfirmBet) && isBusy\n const showEditButton =\n ((isInvestmentError || canConfirmBet) && isLoggedIn && promptForInvestment) ||\n (isBetslipItem && isInvestmentError)\n const showProposeButton = !isBetslipItem && canProposeBet && isLoggedIn && !isBusy\n const showConfirmButton = canConfirmBet && isLoggedIn && !isBusy\n const showLoginButton =\n !isBetslipItem && !isLoggedIn && !isBusy && !(notificationType === NotificationType.RaceClosed)\n const showPendingBetsButton = !canBet && isLoggedIn\n const showDepositButton = notificationType === NotificationType.InsufficientFunds\n\n const shouldDisableBetButton =\n isInvestmentError ||\n betCost <= 0 ||\n (isBonusCashImprovementsActive && isMysteryQuickPick && !!isUsingBonusBet)\n\n const keepBetsRef = React.useRef(null)\n\n return (\n \n {showAddToBetslipButton && (\n \n \n \n )}\n\n {showEditButton && (\n \n \n \n )}\n\n {showBusyButton && (\n \n \n \n )}\n\n {showProposeButton && (\n \n \n \n )}\n\n {showConfirmButton && (\n \n \n \n )}\n\n {showLoginButton && (\n \n \n \n )}\n {showDepositButton && (\n \n {\n openDepositModal('quick-deposit')\n DepositFundsDisplayed()\n }}\n >\n Deposit\n \n \n )}\n {showPendingBetsButton && (\n \n \n \n )}\n {!canBet && (\n \n {keepSelections && keepSelections() === true ? (\n handleKeepButtonClick(keepSelections)}\n />\n ) : (\n \n )}\n \n )}\n {!canBet && (\n \n \n \n )}\n\n {showUpdateBetslipButton && (\n \n \n \n )}\n \n )\n}\n\nconst buttonsState$ = Observable.combineLatest(\n quickbetState$,\n investmentState$,\n userAccountState$,\n superPickState$,\n formulaState$,\n (\n quickbetRecord,\n investmentRecord,\n userAccountRecord,\n superPickRecord,\n formulaRecord\n ): Omit => {\n const quickbet: QuickbetState = quickbetRecord.toJS()\n const investment: InvestmentState = investmentRecord.toJS()\n const superPick: SuperPickState = superPickRecord.toJS()\n const formula: FormulaState = formulaRecord.toJS()\n const user: UserAccountState = userAccountRecord.toJS()\n const specialOffers = superPick.specialOffers\n const selectedSuperPickOffer = specialOffers\n ? specialOffers.find(offer => offer.specialSeq === superPick.selectedSuperPickSeq)\n : undefined\n if (quickbet.isEachWayAvailable) {\n investment.place.value = quickbet.isEachWay\n ? investment.win.value\n : quickbet.shouldAllowPlaceInvestment\n ? investment.place.value\n : 0\n }\n let campaign = user.campaigns?.find(x => x.id == investment.bonusBet?.campaignId)\n\n if (!quickbet.isUsingBonusCash && !campaign) {\n // To disable bonus cash, we must remove the ID\n const bonusCashCampaign = user.campaigns?.find(x => x.rewardType === 'BonusCashReward')\n campaign = bonusCashCampaign && { ...bonusCashCampaign, id: 0 }\n }\n\n return {\n id: quickbet.id,\n isBusy: quickbet.isBusy,\n canBet: quickbet.canBet,\n canProposeBet: quickbet.canProposeBet,\n canConfirmBet: quickbet.canConfirmBet,\n notificationType: quickbet.notificationType,\n isEachWayAvailable: quickbet.isEachWayAvailable,\n isEachWay: quickbet.isEachWay,\n bettingType: quickbet.bettingType,\n investmentWin: investment.win.value,\n investmentPlace: investment.place.value,\n isLoggedIn: !!userAccountRecord.isLoggedIn,\n selection: quickbet.selection,\n selectionDetails: quickbet.selectionDetails,\n isSuperPickSelectionInvalid: !!superPick.invalidSelectionMessage,\n selectedSuperPickOffer,\n isSuperPickAvailable: specialOffers && specialOffers.length > 0,\n isBetslipItem: quickbetRecord.isBetslipItem,\n formulas: formula.formulas,\n numberOfCombinationsSelected: formula.numberOfCombinationsSelected,\n shouldAllowPlaceInvestment: quickbet.shouldAllowPlaceInvestment,\n specialOffers,\n selectedCampaign: campaign,\n promptForInvestment: quickbet.promptForInvestment,\n accountNumber: user.accountNumber,\n accountBalance: user.accountBalance,\n bonusBetBalance: user.bonusBetBalance,\n bonusCashBalance: user.bonusCashBalance,\n isUsingBonusCash: quickbet.isUsingBonusCash,\n isUsingBonusBet: quickbet.isUsingBonusBet,\n keepSelections: quickbet.keepSelections,\n tags: quickbet.tags,\n betSource: quickbet.betSource,\n }\n }\n)\n\nexport const ButtonsContainer: React.ComponentClass = observeImmutable(\n buttonsState$,\n ({ record }) => {\n const quickDepositIsBusy = useSelector(selectIsBusy)\n return \n }\n)\n\nButtonsContainer.displayName = 'ButtonsContainer'\n","import styled from '@emotion/styled'\nimport { hideVisually } from 'polished'\nimport { hexColors } from '@mobi/settings'\nimport { Button } from '@mobi/component-library/Common/Buttons'\n\nconst rewardTextHeight = '2.4rem'\n\nexport const SuperPickStyled = styled('div')({\n background: hexColors.whiteSmoke,\n})\n\nexport const HeaderStyled = styled('strong')({\n textAlign: 'center',\n fontSize: '1.2rem',\n lineHeight: 1.6,\n position: 'relative',\n paddingBottom: '0.7rem',\n display: 'block',\n\n '&::after': {\n borderTop: `1px solid ${hexColors.veryLightGrey}`,\n content: '\" \"',\n display: 'block',\n position: 'relative',\n top: '-0.8em',\n width: '100%',\n zIndex: 0,\n },\n})\n\nexport const HeaderBg = styled('span')({\n background: hexColors.whiteSmoke,\n position: 'relative',\n zIndex: 1,\n padding: '0 1rem',\n})\n\nexport const HeaderIconStyled = styled('span')({\n marginRight: '0.5rem',\n color: hexColors.orange,\n})\n\nexport const SuperPickButtonsContainer = styled('div')({\n display: 'flex',\n justifyContent: 'space-between',\n margin: '-0.2rem',\n flexWrap: 'wrap',\n\n '& > :first-of-type': {\n width: '100%',\n },\n\n '& > :not(:first-of-type)': {\n flex: '1',\n },\n})\n\nexport const SuperButtonCellStyled = styled('div')({\n textAlign: 'left',\n padding: '0.2rem',\n})\n\ninterface SuperPickButtonStyledProps {\n isSelected?: boolean\n shouldDisplayReward?: boolean\n isInsuranceOffer?: boolean\n}\n\nexport const SuperPickButtonStyled = styled(Button)(\n {\n backgroundColor: hexColors.white,\n height: '4.5rem',\n padding: '0 0.5rem',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n textAlign: 'center',\n\n '&:focus': {\n outline: 'none',\n },\n\n '&::before': {\n background: hexColors.orange,\n content: '\" \"',\n height: '100%',\n left: 0,\n right: 0,\n bottom: 0,\n position: 'absolute',\n zIndex: 0,\n transform: 'translateY(100%)',\n },\n },\n\n ({ isSelected, shouldDisplayReward, isInsuranceOffer }) => ({\n marginBottom: shouldDisplayReward ? 0 : rewardTextHeight,\n borderColor: isInsuranceOffer ? hexColors.orange : undefined,\n\n '&::before': {\n transform: isSelected ? 'translateY(0%)' : 'translateY(100%)',\n transitionDuration: isSelected ? '800ms' : '0s',\n },\n })\n)\n\nconst gradientColorStop1 = hexColors.orange\nconst gradientColorStop2 = hexColors.alizarin\n\nexport const SuperBoostButtonStyled = styled(Button)(\n {\n backgroundColor: hexColors.white,\n height: '4.5rem',\n padding: '0 0.5rem',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n textAlign: 'center',\n border: `1px solid ${gradientColorStop1}`,\n\n '&:focus': {\n outline: 'none',\n },\n\n '&::before': {\n backgroundImage: `linear-gradient(to right,\n ${gradientColorStop1},\n ${gradientColorStop1},\n ${gradientColorStop2})`,\n content: '\" \"',\n height: '100%',\n left: 0,\n right: 0,\n bottom: 0,\n position: 'absolute',\n zIndex: 0,\n transform: 'translateY(100%)',\n },\n },\n\n ({ isSelected, shouldDisplayReward, isInsuranceOffer }) => ({\n marginBottom: shouldDisplayReward ? 0 : rewardTextHeight,\n borderColor: isInsuranceOffer ? hexColors.orange : undefined,\n\n '&::before': {\n transform: isSelected ? 'translateY(0%)' : 'translateY(100%)',\n transitionDuration: isSelected ? '800ms' : '0s',\n },\n })\n)\n\nexport const SuperPickButtonTextStyled = styled('strong')({\n display: 'block',\n position: 'relative',\n zIndex: 1,\n})\n\nexport const SuperPickButtonSubTextStyled = SuperPickButtonTextStyled.withComponent('span')\n\nexport const SuperPickButtonSelectedTextStyled = styled('em')({\n ...hideVisually(),\n})\n\ninterface RewardStyledProps {\n isSelected?: boolean\n}\n\nexport const RewardStyled = styled.div(\n {\n fontSize: '1.2rem',\n lineHeight: 1.2,\n alignItems: 'center',\n display: 'flex',\n height: rewardTextHeight,\n },\n\n ({ isSelected }) => ({\n color: isSelected ? hexColors.black : hexColors.grey,\n })\n)\n\nexport const RewardInnerStyled = styled.div({\n margin: '0 auto',\n textAlign: 'center',\n})\n","import React from 'react'\nimport { observeImmutable } from '../../Components/HOCs'\nimport { state$ as superPickState$, SuperPickStateRecord } from './driver'\nimport {\n SuperPickButtonStyled,\n RewardStyled,\n SuperPickButtonTextStyled,\n SuperPickButtonSubTextStyled,\n RewardInnerStyled,\n SuperPickButtonSelectedTextStyled,\n SuperBoostButtonStyled,\n} from './SuperPick.styles'\nimport { ChangeSelectedSuperPick } from './signals'\nimport { BetSpecialOffer, BetSpecialOfferElement } from '@classic/Specials/Model/BetSpecialOffer'\nimport { useFeature } from '@core/Utils/hooks'\n\ninterface SuperPickButtonProps {\n selectedSuperPickSeq?: number | null\n specialOffer: BetSpecialOffer\n projectedReward: number\n isDisabled: boolean\n}\n\nconst checkDisplayReward = (\n specialOffer: BetSpecialOffer,\n selectedSuperPickSeq?: number | null\n): boolean => {\n if (specialOffer.specialTypeCode === 'BST') {\n return false\n }\n if (!selectedSuperPickSeq) {\n return true\n }\n return selectedSuperPickSeq === specialOffer.specialSeq\n}\n\nconst getMaxReward = (specialOffer: BetSpecialOffer): string => {\n if (!specialOffer.elements) {\n return ''\n }\n\n const nonBoostElement = specialOffer.elements.find(\n (element: BetSpecialOfferElement) => !element.isBoost\n )\n if (!nonBoostElement) {\n return ''\n }\n return nonBoostElement.maxReward ? ` up to $${nonBoostElement.maxReward}` : ''\n}\n\nexport function SuperPickButtonComponent({\n specialOffer,\n projectedReward,\n selectedSuperPickSeq,\n isDisabled,\n}: SuperPickButtonProps): JSX.Element {\n const isSelected = specialOffer.specialSeq === selectedSuperPickSeq\n const isInsuranceOffer = specialOffer.specialTypeCode === 'WBI'\n const shouldDisplayReward = checkDisplayReward(specialOffer, selectedSuperPickSeq)\n const maxReward = getMaxReward(specialOffer)\n const title = specialOffer.title?.split('-')\n\n const DisplayReward = () => {\n return (\n \n \n {isInsuranceOffer && Money Back:} ${projectedReward}\n {maxReward}\n \n \n )\n }\n\n return (\n
      \n \n {title?.[0]}\n {title?.[1] ? (\n {title[1]}\n ) : null}\n {isSelected ? (\n (selected)\n ) : null}\n \n {shouldDisplayReward && }\n
      \n )\n}\n\nconst SuperBoostButtonComponent = ({\n specialOffer,\n projectedReward,\n selectedSuperPickSeq,\n isDisabled,\n}: SuperPickButtonProps): JSX.Element => {\n const isSelected = specialOffer.specialSeq === selectedSuperPickSeq\n const isInsuranceOffer = specialOffer.specialTypeCode === 'WBI'\n const shouldDisplayReward = checkDisplayReward(specialOffer, selectedSuperPickSeq)\n const maxReward = getMaxReward(specialOffer)\n const title = specialOffer.title?.split('-')\n\n const DisplayReward = () => {\n return (\n \n \n {isInsuranceOffer && Money Back:} ${projectedReward}\n {maxReward}\n \n \n )\n }\n\n return (\n
      \n \n {title?.[0]}\n {title?.[1] ? (\n {title[1]}\n ) : null}\n {isSelected ? (\n (selected)\n ) : null}\n \n {shouldDisplayReward && }\n
      \n )\n}\n\nexport const SuperPickButton = observeImmutable<\n SuperPickStateRecord,\n { specialOffer: BetSpecialOffer; projectedReward: number; isDisabled: boolean }\n>(\n superPickState$,\n ({ record: { selectedSuperPickSeq }, specialOffer, projectedReward, isDisabled }) => {\n const isSuperBoostFeatureActive = !!useFeature('HOMEPAGE_SUPERPICKS')\n\n return isSuperBoostFeatureActive && specialOffer.isSuperBoost ? (\n \n ) : (\n \n )\n }\n)\n","import React from 'react'\nimport Decimal from 'decimal.js'\nimport {\n SuperPickStyled,\n HeaderStyled,\n HeaderBg,\n HeaderIconStyled,\n SuperPickButtonsContainer,\n SuperButtonCellStyled,\n} from './SuperPick.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { SuperPickButton } from './SuperPickButton'\nimport { observeImmutable } from '../HOCs'\nimport { BetSpecialOffer, IBetSpecialOffer } from '@classic/Specials/Model/BetSpecialOffer'\nimport { Stake } from '@classic/Specials/Model/Stake'\nimport { PriceDetails } from '@classic/Specials/Model/PriceDetails'\nimport { state$ as superPickState$, SuperPickState, SuperPickStateRecord } from './driver'\nimport { LoadSuperPicks } from './signals'\nimport { calculateProjectedReward } from '@classic/Specials/Store/PyosRewardCalculator'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { useFeature } from '@core/Utils/hooks'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\n\ninterface SuperPickProps {\n investmentWin: number\n investmentPlace: number\n winPrice: number\n placePrice: number\n isDisabled: boolean\n isVisible: boolean\n}\n\nexport function SuperPickComponent({\n specialOffers,\n investmentWin,\n investmentPlace,\n winPrice,\n placePrice,\n isVisible,\n isDisabled,\n}: Pick & SuperPickProps): JSX.Element | null {\n if (!specialOffers || !specialOffers.length || !isVisible) {\n return null\n }\n\n const stakeObj: Stake = Stake.normalise({\n Win: new Decimal(investmentWin || 0),\n Place: new Decimal(investmentPlace || 0),\n })\n const priceDetails: PriceDetails = PriceDetails.normalise({\n Win: { DollarReturn: new Decimal(winPrice || 0) },\n Place: { DollarReturn: new Decimal(placePrice || 0) },\n })\n\n return (\n \n \n \n \n \n \n SuperPick\n \n \n \n {specialOffers.map(specialOffer => {\n const newSpecialOffer = BetSpecialOffer.normalise(specialOffer)\n const projectedReward = calculateProjectedReward(\n newSpecialOffer as IBetSpecialOffer,\n stakeObj,\n priceDetails\n ).toNumber()\n return (\n \n \n \n )\n })}\n \n \n )\n}\n\nfunction SuperPickWithSuperBoostsComponent({\n specialOffers,\n investmentWin,\n investmentPlace,\n winPrice,\n placePrice,\n isVisible,\n isDisabled,\n}: Pick & SuperPickProps): JSX.Element | null {\n if (!specialOffers || !specialOffers.length || !isVisible) {\n return null\n }\n\n const stakeObj: Stake = Stake.normalise({\n Win: new Decimal(investmentWin || 0),\n Place: new Decimal(investmentPlace || 0),\n })\n const priceDetails: PriceDetails = PriceDetails.normalise({\n Win: { DollarReturn: new Decimal(winPrice || 0) },\n Place: { DollarReturn: new Decimal(placePrice || 0) },\n })\n\n return (\n \n \n \n \n \n \n SuperPick\n \n \n \n {specialOffers.sort().map(specialOffer => {\n const newSpecialOffer = BetSpecialOffer.normalise(specialOffer)\n const projectedReward = calculateProjectedReward(\n newSpecialOffer as IBetSpecialOffer,\n stakeObj,\n priceDetails\n ).toNumber()\n return (\n \n \n \n )\n })}\n \n \n )\n}\n\nconst SuperPickObserver = observeImmutable(\n superPickState$,\n ({ record, investmentWin, investmentPlace, winPrice, placePrice, isVisible, isDisabled }) => {\n React.useEffect(() => {\n LoadSuperPicks()\n }, [])\n\n const specialOffers = (record.toJS() as SuperPickState).specialOffers\n const isSuperBoostFeatureActive = !!useFeature('HOMEPAGE_SUPERPICKS')\n const isSuperBoostIncluded = specialOffers.some(offer => offer.isSuperBoost)\n\n return isSuperBoostFeatureActive && isSuperBoostIncluded ? (\n \n ) : (\n \n )\n }\n)\n\nexport const SuperPickWithInducementCheck: React.FC = ({\n investmentWin,\n investmentPlace,\n winPrice,\n placePrice,\n isDisabled,\n isVisible,\n}) => {\n const canShowInducements = useInducementService()\n return canShowInducements ? (\n \n ) : null\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport type { BettingType } from '@mobi/betslip/types'\nimport { state$ as quickbetState$, QuickbetState } from '../../driver'\nimport { state$ as investmentState$ } from '../BetInvestment/betInvestmentDriver'\nimport { state$ as superPickState$, SuperPickState } from '@core/Components/SuperPick/driver'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { SuperPickWithInducementCheck } from '@core/Components/SuperPick'\n\nexport function shouldRenderSuperPick(bettingType: BettingType | null) {\n return bettingType === 'fixed-odds-racing'\n}\n\nexport interface QuickbetSuperPickProps {\n winPrice: number\n placePrice: number\n investmentWin: number\n investmentPlace: number\n selectedSuperPickSeq?: number\n canBet: boolean\n canConfirmBet: boolean\n isBusy: boolean\n shouldRender: boolean\n}\n\nconst state$ = Observable.combineLatest(\n quickbetState$,\n investmentState$,\n superPickState$,\n (quickbetState, investmentState, superpickState) => {\n const quickbet: QuickbetState = quickbetState.toJS()\n const {\n win: { value: investmentWin },\n place: { value: investmentPlace },\n } = investmentState.toJS()\n const superPick: SuperPickState = superpickState.toJS()\n const winPrice = quickbet.selection ? (quickbet.selection as { winPrice: number }).winPrice : 0\n const placePrice = quickbet.selection\n ? (quickbet.selection as { placePrice: number }).placePrice\n : 0\n return {\n bettingType: quickbet.bettingType,\n winPrice,\n placePrice,\n investmentWin,\n investmentPlace,\n selectedSuperPickSeq: superPick.selectedSuperPickSeq,\n canBet: quickbet.canBet,\n canConfirmBet: quickbet.canConfirmBet,\n isBusy: quickbet.isBusy,\n shouldRender: shouldRenderSuperPick(quickbet.bettingType),\n }\n }\n)\n\nexport function QuickbetSuperPickComponent({\n shouldRender,\n winPrice,\n placePrice,\n investmentWin,\n investmentPlace,\n selectedSuperPickSeq,\n canBet,\n canConfirmBet,\n isBusy,\n}: QuickbetSuperPickProps) {\n if (!shouldRender) {\n return null\n }\n const isVisible = !selectedSuperPickSeq && canConfirmBet ? false : canBet\n return (\n \n )\n}\n\nexport const QuickbetSuperPick: React.ComponentClass = observeImmutable(state$, ({ record }) => {\n return (\n
      \n \n
      \n )\n})\nQuickbetSuperPick.displayName = 'QuickbetSuperPick'\n","import colors from '@core/Settings/colors'\nimport { hexColors } from '@mobi/settings'\n\ninterface ThemeSettings {\n background?: string\n text: {\n color?: string\n fontWeight?:\n | number\n | '-moz-initial'\n | 'inherit'\n | 'initial'\n | 'revert'\n | 'unset'\n | 'bold'\n | 'normal'\n | 'bolder'\n | 'lighter'\n | undefined\n }\n boxShadow?: string\n specialIcon?: string\n borderTop?: string\n borderLeft?: string\n borderRight?: string\n borderBottom?: string\n hasPadding?: boolean\n hasMargin?: boolean\n}\n\nexport enum ExpandablePanelThemes {\n dark = 'dark',\n light = 'light',\n white = 'white',\n whiteNested = 'whiteNested',\n purple = 'purple',\n greyWhite = 'greyWhite',\n lavender = 'lavender',\n yellow = 'yellow',\n}\n\nexport interface ExpandablePanelComponentTheme {\n content: ThemeSettings\n header: ThemeSettings\n toggle: ThemeSettings\n}\n\nexport const darkTheme: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.dark.content.background,\n text: {\n color: colors.expandablePanel.dark.content.text,\n },\n boxShadow: colors.expandablePanel.dark.content.boxShadow,\n },\n header: {\n background: colors.expandablePanel.dark.header.background,\n text: {\n color: colors.expandablePanel.dark.header.text,\n fontWeight: 'bold',\n },\n hasPadding: true,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.dark.toggle.text,\n },\n },\n}\n\nconst lightTheme: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.light.content.background,\n text: {\n color: colors.expandablePanel.light.content.text,\n },\n boxShadow: colors.expandablePanel.light.content.boxShadow,\n },\n header: {\n text: {\n color: colors.expandablePanel.light.header.text,\n fontWeight: 'bold',\n },\n background: colors.expandablePanel.light.header.background,\n hasPadding: true,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.light.toggle.text,\n },\n },\n}\n\nconst whiteTheme: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.white.content.background,\n text: {\n color: colors.expandablePanel.white.content.text,\n },\n boxShadow: colors.expandablePanel.white.content.boxShadow,\n },\n header: {\n text: {\n color: colors.expandablePanel.white.header.text,\n fontWeight: 'bold',\n },\n background: colors.expandablePanel.white.header.background,\n borderBottom: `1px solid ${colors.expandablePanel.white.header.border}`,\n borderTop: `1px solid ${colors.expandablePanel.white.header.border}`,\n hasPadding: true,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.white.toggle.text,\n },\n },\n}\n\nconst whiteNestedTheme: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.white.content.background,\n text: {\n color: colors.expandablePanel.white.content.text,\n },\n boxShadow: colors.expandablePanel.white.content.boxShadow,\n },\n header: {\n text: {\n color: colors.expandablePanel.white.header.text,\n fontWeight: 'bold',\n },\n background: colors.expandablePanel.white.header.background,\n hasMargin: false,\n hasPadding: false,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.white.toggle.text,\n },\n },\n}\n\nconst purpleTheme: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.purple.content.background,\n text: {\n color: colors.expandablePanel.purple.content.text,\n },\n boxShadow: colors.expandablePanel.purple.content.boxShadow,\n },\n header: {\n text: {\n color: colors.expandablePanel.purple.header.text,\n fontWeight: 'bold',\n },\n specialIcon: colors.expandablePanel.purple.header.specialIcon,\n background: colors.expandablePanel.purple.header.background,\n hasPadding: true,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.purple.toggle.text,\n },\n },\n}\n\nconst greyWhite: ExpandablePanelComponentTheme = {\n content: {\n background: colors.expandablePanel.greyWhite.content.background,\n text: {\n color: colors.expandablePanel.greyWhite.content.text,\n },\n boxShadow: colors.expandablePanel.greyWhite.content.boxShadow,\n },\n header: {\n text: {\n color: colors.expandablePanel.greyWhite.header.text,\n },\n background: colors.expandablePanel.greyWhite.header.background,\n hasMargin: false,\n hasPadding: true,\n },\n toggle: {\n text: {\n color: colors.expandablePanel.greyWhite.toggle.text,\n },\n },\n}\n\nconst lavender: ExpandablePanelComponentTheme = {\n content: {\n text: {\n color: hexColors.black,\n },\n background: hexColors.lavenderBlue,\n },\n header: {\n text: {\n color: hexColors.black,\n },\n background: hexColors.lavenderBlue,\n },\n toggle: {\n text: {\n color: hexColors.black,\n },\n },\n}\n\nconst yellow: ExpandablePanelComponentTheme = {\n content: {\n text: {\n color: hexColors.black,\n },\n background: hexColors.capeHoney,\n },\n header: {\n text: {\n color: hexColors.black,\n },\n background: hexColors.capeHoney,\n },\n toggle: {\n text: {\n color: hexColors.black,\n },\n },\n}\n\nexport function getExpandablePanelTheme(\n theme: ExpandablePanelThemes | undefined\n): ExpandablePanelComponentTheme {\n switch (theme) {\n case ExpandablePanelThemes.dark:\n return darkTheme\n case ExpandablePanelThemes.light:\n return lightTheme\n case ExpandablePanelThemes.white:\n return whiteTheme\n case ExpandablePanelThemes.whiteNested:\n return whiteNestedTheme\n case ExpandablePanelThemes.purple:\n return purpleTheme\n case ExpandablePanelThemes.greyWhite:\n return greyWhite\n case ExpandablePanelThemes.lavender:\n return lavender\n case ExpandablePanelThemes.yellow:\n return yellow\n default:\n return darkTheme\n }\n}\n","export function isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0\n}\n","import styled from '@emotion/styled'\nimport { ExpandablePanelComponentTheme } from './themes'\nimport { isEmpty } from '@core/Utils/object/object'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\ninterface Theme {\n theme?: ExpandablePanelComponentTheme\n}\n\nexport const ExpandablePanelStyled = styled('div')(\n {\n position: 'relative',\n width: '100%',\n },\n ({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n color: theme.header.text.color,\n }\n)\n\ninterface ExpandablePanelHeaderStyled extends Theme {\n hideHeaderTap?: boolean\n customHeader?: boolean\n}\n\nexport const ExpandablePanelHeaderStyled = styled('header')(\n {\n cursor: 'pointer',\n padding: '1rem 0.8rem',\n borderWidth: '1px',\n },\n ({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n background: theme.header.background,\n color: theme.header.text.color,\n margin: theme.header.hasMargin ? '0.5rem' : '0',\n padding: theme.header.hasPadding ? '1rem 0.8rem' : '1rem 0rem',\n borderTop: theme.header.borderTop,\n borderBottom: theme.header.borderBottom,\n },\n ({ hideHeaderTap }) =>\n hideHeaderTap !== true\n ? {}\n : {\n WebkitTapHighlightColor: 'transparent',\n },\n ({ customHeader }) =>\n customHeader && {\n padding: 0,\n }\n)\n\nexport const ExpandablePanelTitleStyled = styled('div')(\n {\n paddingRight: '2rem',\n fontSize: '1.4rem',\n },\n ({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n fontWeight: theme.header.text.fontWeight,\n }\n)\n\nexport const IconStyled = styled(Icon)(({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n color: theme.toggle.text.color,\n }\n)\n\nexport const HiddenContentStyled = styled('div')({\n height: '1px',\n})\n\nexport const FormulaHeader = styled('header')(\n {\n cursor: 'pointer',\n borderWidth: '1px',\n fontSize: '1.4rem',\n },\n ({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n padding: theme.header.hasPadding ? '1rem 0.8rem' : '1rem 0rem',\n fontWeight: theme.header.text.fontWeight,\n }\n)\n","import styled from '@emotion/styled'\nimport { isEmpty } from '@core/Utils/object/object'\nimport { ExpandablePanelComponentTheme } from './themes'\n\nexport const ExpandableSectionStyled = styled('div')({\n overflow: 'hidden',\n position: 'relative',\n transition: 'height 0.3s linear',\n boxSizing: 'border-box',\n})\n\nexport const ExpandablePanelContentStyled = styled('div')<{\n theme?: ExpandablePanelComponentTheme\n}>(({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n color: theme.content.text.color,\n }\n)\n","import React from 'react'\nimport { ExpandableSectionStyled } from './ExpandablePanelContent.styles'\n\ninterface ExpandableSectionProps {\n expanded: boolean\n transitionTime?: number\n transitionCloseTime?: number\n easing?: 'ease-in' | 'ease-out' | 'ease-in-out' | 'none'\n scrollIntoViewWhenOpened: boolean\n useSmartScroll?: boolean\n children?: React.ReactNode\n}\ninterface ExpandableSectionState {\n expanded: boolean\n height: string | number\n transition: string\n hasBeenOpened: boolean\n shouldSwitchAutoOnNextCycle: boolean\n shouldOpenOnNextCycle: boolean\n overflow: React.CSSProperties['overflow']\n}\n\nexport class ExpandableSection extends React.Component<\n ExpandableSectionProps,\n ExpandableSectionState\n> {\n public static defaultProps = {\n transitionTime: 200,\n transitionCloseTime: 100,\n easing: 'ease-in-out',\n }\n\n private innerRef: HTMLElement | undefined\n private childrenRenderedTimeoutHandle: number | undefined\n private scrollIntoViewWhenOpened\n private useSmartScroll\n\n constructor(props: ExpandableSectionProps) {\n super(props)\n\n if (props.expanded) {\n this.state = {\n expanded: true,\n height: 'auto',\n transition: 'none',\n hasBeenOpened: true,\n shouldSwitchAutoOnNextCycle: false,\n shouldOpenOnNextCycle: false,\n overflow: 'visible',\n }\n } else {\n this.state = {\n expanded: false,\n height: 0,\n transition: `height ${props.transitionTime}ms ${props.easing}`,\n hasBeenOpened: false,\n shouldSwitchAutoOnNextCycle: false,\n shouldOpenOnNextCycle: false,\n overflow: 'hidden',\n }\n\n this.scrollIntoViewWhenOpened = props.scrollIntoViewWhenOpened\n this.useSmartScroll = props.useSmartScroll\n }\n }\n\n public render() {\n const styles = {\n height: this.state.height,\n WebkitTransition: this.state.transition,\n msTransition: this.state.transition,\n transition: this.state.transition,\n overflow: this.state.overflow,\n }\n return (\n \n
      {this.props.children}
      \n
      \n )\n }\n\n public componentDidUpdate(prevProps: ExpandableSectionProps, prevState: ExpandableSectionState) {\n if (this.state.shouldOpenOnNextCycle) {\n this.continueOpenCollapsible()\n }\n\n if (prevState.height !== 0 && this.state.shouldSwitchAutoOnNextCycle) {\n this.cleanUpTimeout()\n this.childrenRenderedTimeoutHandle = window.setTimeout(() => {\n // Set timeout to ensure children have rendered\n this.setState({\n height: 0,\n overflow: 'hidden',\n expanded: false,\n shouldSwitchAutoOnNextCycle: false,\n })\n }, 10)\n } else if (this.scrollIntoViewWhenOpened && this.state.shouldOpenOnNextCycle) {\n this.cleanUpTimeout()\n this.childrenRenderedTimeoutHandle = window.setTimeout(() => {\n // Set timeout to ensure children have rendered\n if (this.useSmartScroll) {\n // @ts-expect-error This component needs work\n const currentElementTop = this.innerRef.offsetParent.offsetParent.offsetTop\n // @ts-expect-error This component needs work\n const elementContentHeight = this.innerRef.offsetParent.offsetParent.offsetHeight\n if (currentElementTop && elementContentHeight) {\n // if the height of content panel is more than window height, then scroll to top to show both header panel and content\n // if the current offset position plus content panel height is greater than window height, then scrollIntoView(false) to show the content (for better user experience)\n // if the current view can show the content of the panel or can't determine the Top position and Height of content then no need to use scrollIntoView\n if (elementContentHeight > window.innerHeight) {\n this.innerRef?.scrollIntoView(true)\n } else if (\n currentElementTop + elementContentHeight >\n window.innerHeight + document.documentElement.scrollTop\n ) {\n this.innerRef?.scrollIntoView(false)\n }\n }\n } else {\n this.innerRef?.scrollIntoView()\n }\n }, this.props.transitionTime)\n }\n\n if (prevProps.expanded !== this.props.expanded) {\n if (this.props.expanded) {\n this.openCollapsible()\n } else {\n this.closeCollapsible()\n }\n }\n }\n\n public componentWillUnmount() {\n this.cleanUpTimeout()\n }\n\n private cleanUpTimeout() {\n if (this.childrenRenderedTimeoutHandle) {\n clearTimeout(this.childrenRenderedTimeoutHandle)\n }\n }\n\n private closeCollapsible() {\n this.setState({\n height: this.innerRef?.offsetHeight as number,\n })\n\n // Set timeout so that height is applied before applying transition,\n // some browser implementations are not able to handle transition with height: auto resulting\n this.cleanUpTimeout()\n this.childrenRenderedTimeoutHandle = window.setTimeout(() => {\n this.setState({\n shouldSwitchAutoOnNextCycle: true,\n transition: `height ${\n this.props.transitionCloseTime\n ? this.props.transitionCloseTime\n : this.props.transitionTime\n }ms ${this.props.easing}`,\n })\n }, 10)\n }\n\n private openCollapsible() {\n this.setState({\n shouldOpenOnNextCycle: true,\n })\n }\n\n private continueOpenCollapsible = () => {\n this.setState({\n height: this.innerRef?.offsetHeight as number,\n transition: `height ${this.props.transitionTime}ms ${this.props.easing}`,\n expanded: true,\n hasBeenOpened: true,\n shouldOpenOnNextCycle: false,\n })\n }\n\n private setInnerRef: React.LegacyRef = (ref: HTMLDivElement) => {\n this.innerRef = ref\n }\n\n private handleTransitionEnd = () => {\n if (this.state.expanded) {\n // set transition to none to cater for browsers that do not handle transitions for height 'auto'\n this.setState({ height: 'auto', overflow: this.state.overflow, transition: 'none' })\n }\n }\n}\n","import React from 'react'\nimport { ExpandablePanelContentStyled } from './ExpandablePanelContent.styles'\nimport { ExpandableSection } from './ExpandableSection'\n\ninterface ExpandablePanelContentProps {\n expanded: boolean\n children: React.ReactNode\n scrollIntoViewWhenOpened: boolean\n useSmartScroll?: boolean\n transitionTime?: number\n transitionCloseTime?: number\n}\n\nexport function ExpandablePanelContent({\n expanded,\n children,\n scrollIntoViewWhenOpened,\n useSmartScroll,\n transitionTime = 200,\n transitionCloseTime = 100,\n}: ExpandablePanelContentProps): JSX.Element {\n return (\n \n {children}\n \n )\n}\n","import React from 'react'\nimport { ThemeProvider } from '@emotion/react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n ExpandablePanelStyled,\n ExpandablePanelHeaderStyled,\n ExpandablePanelTitleStyled,\n IconStyled,\n HiddenContentStyled,\n FormulaHeader,\n} from './ExpandablePanel.styles'\nimport { ExpandablePanelContent } from './ExpandablePanelContent'\nimport { ExpandablePanelThemes, getExpandablePanelTheme } from './themes'\n\nexport interface ExpandablePanelProps {\n title: string\n themeName?: ExpandablePanelThemes\n leftIcon?: React.ReactChild | null\n rightIcon?: React.ReactChild | null\n expanded?: boolean\n headerClicked?: (() => void) | React.MouseEventHandler\n children?: React.ReactNode\n scrollIntoViewWhenOpened?: boolean\n deferRenderingContentOnExpand?: boolean\n hideHeaderTap?: boolean\n dataTidValue?: string\n headerComponent?: React.ReactElement\n useSmartScroll?: boolean\n}\n\nexport function ExpandablePanel({\n title,\n leftIcon,\n rightIcon,\n expanded,\n headerClicked,\n themeName,\n children,\n scrollIntoViewWhenOpened = false,\n deferRenderingContentOnExpand = false,\n hideHeaderTap = false,\n dataTidValue = '',\n headerComponent: HeaderProp,\n useSmartScroll = false,\n}: ExpandablePanelProps): JSX.Element {\n const theme = getExpandablePanelTheme(themeName)\n\n return (\n \n \n \n {HeaderProp || (\n \n \n {leftIcon && leftIcon}\n \n {title || 'Please enter a title'}\n \n \n \n {rightIcon}\n \n \n \n \n \n )}\n
      \n \n {deferRenderingContentOnExpand ? expanded ? children : : children}\n \n \n \n )\n}\n\nexport function FormulaExpandablePanelHeaderComponent() {\n const theme = getExpandablePanelTheme(ExpandablePanelThemes.whiteNested)\n\n return (\n \n \n \n Formula\n \n \n \n )\n}\n","import styled, { CSSObject } from '@emotion/styled'\nimport React, { type PropsWithChildren, type SVGProps } from 'react'\n\ninterface SvgIconStyledProps {\n color?: string\n size: string\n transformation?: string\n valign?: string\n height?: string | number\n width?: string | number\n}\n\nexport const SvgIconStyled = styled.svg(\n ({\n color,\n size,\n transformation,\n valign = 'bottom',\n height = '1em',\n width = '1em',\n }: SvgIconStyledProps) => {\n // height and width are done in a separate object, so it doesn't update 110 snapshots\n const sizes: CSSObject = {}\n\n if (typeof width === 'string') {\n sizes.width = width\n }\n\n if (typeof height === 'string') {\n sizes.height = height\n }\n\n const style: CSSObject = {\n display: 'inline-block',\n fill: color || 'currentColor',\n fontSize: size,\n ...sizes,\n verticalAlign: valign,\n transform: transformation,\n }\n\n return style\n }\n)\n\ntype SvgWidth = SVGProps['width']\n\ntype SvgRaceCardIconProps = {\n size: SvgWidth\n}\n\nexport const SvgRaceCardIcon = ({ size, children }: PropsWithChildren) => (\n \n {children}\n \n)\n","import React from 'react'\nimport { SvgIconStyled } from './Icons.styles'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { hexColors } from '@mobi/settings'\nimport { Chat, ChevronDown, ChevronUp, SpecialsNew, Tips, Video } from '@core/Components/Icons'\n\ninterface DirectionalIconProps {\n direction?: 'up' | 'down' | 'right' | 'left'\n size?: string\n color?: string\n valign?: string\n}\n\nexport function DirectionalIcon({ size, color, direction, valign }: DirectionalIconProps) {\n let rotations\n\n switch (direction) {\n case 'up':\n rotations = '90deg'\n break\n case 'down':\n rotations = '-90deg'\n break\n case 'right':\n rotations = '180deg'\n break\n case 'left':\n default:\n rotations = '0deg'\n }\n\n return (\n \n \n \n )\n}\n\n/** @depcreated Use DirectionalIcon */\nexport function RightArrowIcon({ size = '2rem' }: { size?: string }) {\n return (\n \n \n \n )\n}\n\nexport function RefreshIcon() {\n return (\n \n \n \n )\n}\n\ntype RaceCardIconName = 'chevronUp' | 'chevronDown' | 'tips' | 'chat' | 'specialsNew' | 'video'\n\ntype RaceCardIconProps = {\n icon: RaceCardIconName\n size?: number\n}\n\nexport function RaceCardIcon({ icon, size = 20 }: RaceCardIconProps) {\n return icon == 'chat' ? (\n \n ) : icon === 'chevronUp' ? (\n \n ) : icon === 'chevronDown' ? (\n \n ) : icon === 'specialsNew' ? (\n \n ) : icon === 'tips' ? (\n \n ) : (\n
      \n )}\n\n
      \n
      \n
      \n {multiItems.length}\n
      \n\n
      \n Multi\n {multiReturn}\n
      \n
      \n\n {\n hostHelpers.toggleBetSlipDrawer?.(true)\n removeToast({ id: MULTI_BUILDER_TOAST_ID })\n dispatch(setDesiredBettingSection('Multi'))\n }}\n >\n Bet Now\n \n
      \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n fontFamily: font.family.primary,\n\n [`.${LocalConstants.BackdropClass}`]: {\n position: 'absolute',\n bottom: '100%',\n left: 0,\n right: 0,\n zIndex: 1,\n display: 'flex',\n alignItems: 'flex-start',\n gap: spacing.smx1,\n padding: `0 ${spacing.md} ${spacing.bigx2}`,\n color: colors.white,\n backgroundColor: colors.mariner[500],\n borderRadius: radius.lgx2,\n transform: `translateY(${spacing.bigx2})`,\n animation: 'bounce-up 0.3s ease forwards',\n\n [`&.${LocalConstants.BackdropAnimateOutClass}`]: {\n animation: 'fade-down 0.3s ease forwards',\n },\n\n '@keyframes bounce-up': {\n '0%': { transform: 'translateY(100%)' },\n '60%': { transform: 'translateY(35%)' },\n '100%': { transform: `translateY(${spacing.bigx2})` },\n },\n\n '@keyframes fade-down': {\n '0%': { transform: 'translateY(40%)' },\n '100%': { transform: 'translateY(100%)', opacity: 0 },\n },\n\n '> div': {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx1,\n padding: '0.6rem 0',\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.lavender[50],\n textOverflow: 'ellipsis',\n },\n },\n\n [`.${LocalConstants.ToastContainerClass}`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.smx1,\n position: 'relative',\n zIndex: 2,\n width: '100%',\n padding: `${spacing.sm} ${spacing.sm}`,\n borderRadius: radius.lgx2,\n boxShadow: shadow.md,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n border: `1px solid ${colors.studio[800]}`,\n backgroundColor: colors.studio[900],\n color: colors.white,\n\n '> div': {\n display: 'flex',\n gap: spacing.smx1,\n\n // Badge Count\n '> div:nth-of-type(1)': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '2.4rem',\n width: '2.4rem',\n backgroundColor: colors.white,\n color: colors.studio[900],\n borderRadius: '100%',\n\n '> span': {\n fontWeight: font.weight.semibold,\n fontSize: font.size.xl.fontSize,\n lineHeight: font.size.xl.lineHeight,\n letterSpacing: font.size.xl.letterSpacing,\n },\n },\n\n // Text\n '> div:nth-of-type(2)': {\n display: 'flex',\n gap: spacing.smx2,\n alignItems: 'center',\n fontWeight: font.weight.semibold,\n fontSize: font.size.lg.fontSize,\n\n '> span:nth-of-type(2)': {\n fontWeight: font.weight.regular,\n },\n },\n },\n },\n})\n","import React from 'react'\nimport { store } from '@core/Store'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport {\n MULTI_BUILDER_TOAST_ID,\n MultiBuilderToastContent,\n} from '@mobi/betslip/Components/MultiBuilderToastContent/MultiBuilderToastContent'\nimport { addToast, removeToast, ToastContent } from '@mobi/component-library/Feedback/Toast'\nimport type { BetSlipItem } from '@mobi/betslip/types'\n\nexport const showMultiBuilderToast = (item: BetSlipItem) => {\n addToast({\n theme: 'none',\n isFullWidth: true,\n timeoutMs: 4000,\n id: MULTI_BUILDER_TOAST_ID,\n content: ,\n })\n}\n\nexport const showBetSlipClearedToast = () => {\n const toastText = 'Bet Slip Cleared'\n addToast({\n id: toastText,\n content: ,\n })\n}\n\nexport const showAddedToBetSlipToast = () => {\n const toastText = 'Added To Bet Slip'\n\n const onBetNowClick = () => {\n removeToast({ id: toastText })\n store.dispatch(setBetSlipNewIsOpen(true))\n }\n\n addToast({\n id: toastText,\n content: (\n \n ),\n })\n}\n","import { BetSlipItem, FobPropositionSelection, ToteSelection } from '@mobi/betslip/types'\nimport { trackBetSlipAdd } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { isRaceDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { isMysteryDetails } from '@core/Data/Betting/selectionDetails'\n\nexport const trackAddToBetslip = (addedItem: BetSlipItem) => {\n const { selection, selectionDetails, betSource } = addedItem\n\n if (betSource && selection && selectionDetails) {\n const betType =\n (selection as ToteSelection).betType || (selection as FobPropositionSelection).type\n\n const race = isRaceDetails(selectionDetails)\n ? selectionDetails.races[0]\n : isMysteryDetails(selectionDetails)\n ? selectionDetails.race\n : null\n\n const { meetingCode: raceCode, meetingName } = race || {\n meetingName: null,\n meetingCode: null,\n }\n\n trackBetSlipAdd({ source: betSource, raceCode, meetingName, betType })\n }\n}\n","import type { BetSelection, EventDetails } from '@mobi/betslip/types'\nimport type { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport type { Race, RaceDetails, FobDetails } from '@mobi/betslip/types'\nimport { getRaceLink } from '@core/Areas/Racing/helpers'\n\nexport function convertToBetSelection(selection: QuickbetSelection): BetSelection {\n const selectionDetails = selection.selectionDetails || {}\n\n if (selectionDetails) {\n if ('races' in selectionDetails) {\n const raceDetails = selectionDetails as RaceDetails\n if (Array.isArray(raceDetails.races) && raceDetails.races.length > 0) {\n const { meetingId, raceNumber, raceTime } = raceDetails.races[0] as Race\n selection.selectionDetails = {\n ...raceDetails,\n urlPath: getRaceLink({\n isFOO: false,\n meetingId,\n raceNumber,\n meetingDate: raceTime,\n }),\n acceptors: raceDetails.acceptors,\n }\n }\n } else if ('meetingSeq' in selectionDetails) {\n const fobDetails = selectionDetails as FobDetails\n selection.selectionDetails = {\n ...fobDetails,\n urlPath: getRaceLink({\n isFOO: true,\n product: 'foo',\n code: fobDetails.sportIconCode,\n raceSeq: fobDetails.event,\n meetingDate: fobDetails.eventStartTime.toString(),\n meetingSeq: fobDetails.meetingSeq,\n }),\n }\n }\n }\n return {\n bettingType: selection.bettingType,\n selection: selection.selection,\n selectionDetails: selection.selectionDetails as EventDetails,\n isEachWayAvailable: selection.isEachWayAvailable,\n shouldAllowPlaceInvestment: selection.shouldAllowPlaceInvestment,\n tags: selection.tags,\n betSource: selection.betSource,\n }\n}\n","import anime from 'animejs'\nimport { BET_SLIP_BUTTON_ID } from '@core/Areas/AppHeader/Components/MyBetsButtons/Components/BetSlipButton/constants'\n\n/**\n * Make sure to call this in a setTimeout if calling during a react render loop otherwise it will render last loop's dom\n * @param element\n * @returns\n */\nexport async function animateSelectionButtonToBetslip(element: HTMLButtonElement) {\n const targetEl = document.getElementById(BET_SLIP_BUTTON_ID)\n if (!targetEl || !element) return\n\n const elementBox = element.getBoundingClientRect()\n const elementCenter = {\n x: elementBox.left + elementBox.width / 2,\n y: elementBox.top + elementBox.height / 2,\n }\n\n const targetBox = targetEl.getBoundingClientRect()\n const targetCenter = {\n x: targetBox.left + targetBox.width / 2,\n y: targetBox.top + targetBox.height / 2,\n }\n\n const clonedButton = element.cloneNode(true) as HTMLButtonElement\n document.body.appendChild(clonedButton)\n\n anime.set(clonedButton, {\n position: 'fixed',\n zIndex: 2,\n top: `${elementBox.top}px`,\n left: `${elementBox.left}px`,\n width: `${element.clientWidth}px`,\n height: `${element.clientHeight}px`,\n })\n\n anime({\n targets: clonedButton,\n translateY: [0, targetCenter.y - elementCenter.y],\n translateX: [0, targetCenter.x - elementCenter.x],\n rotate: [0, 45],\n scale: [1, 0.1],\n opacity: { value: [1, 0.1], delay: 100 },\n easing: 'easeInQuart',\n duration: 500,\n complete: () => clonedButton.remove(),\n })\n}\n","import { FeatureFlags } from '@mobi/settings'\nimport { createBetSlipItem } from '@mobi/betslip/helpers/createBetSlipItem'\nimport { isFobSportsSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { addItemsToBetSlip } from '@mobi/betslip/Store/Bets'\nimport { store } from '@core/Store'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { createItemForLegacyBetslip } from '@core/Areas/Betslip/helpers/addToBetslip'\nimport { AddSingleToBetslip } from '@core/Areas/Betslip/signals'\nimport { QUICKBET_MODAL_ID } from '@core/Areas/Quickbet/constants'\nimport { Quickbet, type QuickbetExternalProps } from '@core/Areas/Quickbet/Quickbet'\nimport {\n QuickbetClosed,\n QuickbetLoadSelection,\n QuickbetSelection,\n} from '@core/Areas/Quickbet/signals'\nimport { openModal } from '@core/Components/Modal/store'\nimport { triggerHapticFeedback } from '@core/Utils/hapticFeedback/hapticFeedback'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport { selectBetSlipMultiLegCount } from '@mobi/betslip/Store/Bets/selectors'\nimport {\n showAddedToBetSlipToast,\n showMultiBuilderToast,\n} from '@core/Areas/BetSlipNew/helpers/toasts'\nimport {\n getEnhancedBetslipSetting,\n getNewBetSlipSetting,\n} from '@core/Areas/Settings/Store/selectors'\nimport { trackAddToBetslip } from '@core/Areas/BetSlipNew/analytics'\nimport { isSelectionAllowedInMulti } from '@mobi/betslip/helpers/state'\nimport { convertToBetSelection } from './helpers/convertToBetSelection'\nimport { animateSelectionButtonToBetslip } from './helpers/animateSelectionButtonToBetslip'\n\nexport async function handleBetSelection({\n betFlow,\n selection,\n investmentWin,\n investmentPlace,\n isEachWay,\n}: {\n betFlow: BetFlow\n selection: QuickbetSelection\n investmentWin?: number\n investmentPlace?: number\n isEachWay?: boolean\n}) {\n featureState$.take(1).subscribe(featureState => {\n const isNewBetSlipActive =\n featureState.features.get(FeatureFlags.NEW_BET_SLIP_DESIGN.key) &&\n getNewBetSlipSetting(store.getState())\n // ============\n // New Bet Slip\n // ============\n if (\n isNewBetSlipActive &&\n (betFlow.location === 'Betslip' || betFlow.location === 'BetSlipNew')\n ) {\n const isDirectToBetSlip = betFlow.options?.isDirectToBetSlip ?? true\n const clickedElement = betFlow.options?.clickedElement\n\n const currentMultiLegCount = selectBetSlipMultiLegCount(store.getState())\n\n const item = createBetSlipItem(convertToBetSelection(selection), {\n investmentWin,\n investmentPlace,\n isEachWay,\n })\n\n trackAddToBetslip(item)\n\n store.dispatch(addItemsToBetSlip([item]))\n\n triggerHapticFeedback('impact-light')\n\n if (clickedElement && (currentMultiLegCount > 0 || isDirectToBetSlip)) {\n setTimeout(() => {\n animateSelectionButtonToBetslip(clickedElement)\n })\n }\n\n if (\n currentMultiLegCount > 0 &&\n (isFobSportsSelection(item.selection) ||\n (getEnhancedBetslipSetting(store.getState()) &&\n isSelectionAllowedInMulti(item.selection)))\n ) {\n showMultiBuilderToast(item)\n return\n }\n\n if (!isDirectToBetSlip && betFlow.location === 'BetSlipNew') {\n store.dispatch(setBetSlipNewIsOpen(true))\n }\n showAddedToBetSlipToast()\n return\n }\n\n // ==============\n // Legacy Betslip\n // ==============\n if (betFlow.location === 'Betslip') {\n AddSingleToBetslip(createItemForLegacyBetslip(selection))\n return\n }\n\n // ========\n // Quickbet\n // ========\n // Note: isFobSportsSelection only used to allow new sports w/ kambi data\n if (betFlow.location === 'Quickbet') {\n QuickbetLoadSelection(selection)\n\n if (betFlow.options?.setUp) betFlow.options.setUp()\n\n store.dispatch(\n openModal({\n id: QUICKBET_MODAL_ID,\n modalComponent: Quickbet,\n color: 'dark',\n onCloseCallback: QuickbetClosed,\n modalComponentProps: betFlow.options?.quickbetProps as Record,\n })\n )\n }\n })\n}\n\n// =====\n// Types\n// =====\n\ntype BetFlow =\n | { location: 'Betslip'; options?: never }\n | {\n location: 'BetSlipNew'\n options?: {\n /** @default true */\n isDirectToBetSlip?: boolean\n clickedElement?: HTMLButtonElement\n }\n }\n | { location: 'Quickbet'; options?: { setUp?(): void; quickbetProps?: QuickbetExternalProps } }\n","import { inject, injectable } from 'inversify'\nimport * as ko from 'knockout'\nimport Rx from 'rx'\nimport type { ToteSelection, RaceDetails, Acceptor, Race } from '@mobi/betslip/types'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport { PyosStore } from '@classic/Specials/Store/PyosStore'\nimport { FormGiddyUpRaceInformation } from '@classic/Betting-v2/Components/Form/FormGiddyUpRaceInformation'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport type { ILegacyBetAdapter } from '@classic/Betting-v2/Model/ILegacyBetAdapter'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { BetSelectionBuilder } from '@classic/Betting-v2/Model/BetSelectionBuilder'\nimport type { IErrorHandler } from '@classic/Betting-v2/Utils/IErrorHandler'\nimport SelectionProcessor from '@classic/Betting-v2/Components/Core/Processors/Processor'\nimport { CheckBoxSelection } from '@classic/Betting-v2/Components/Core/UIElements/CheckboxSelection'\nimport { ButtonSelectionType } from '@classic/Betting-v2/Components/Core/UIElements/ButtonSelectionType'\nimport * as buttons from '@classic/Betting-v2/Components/Core/UIElements/ButtonsSelection'\nimport { giddyUpViewed } from '@classic/Foundation/Analytics/Analytics'\nimport ObservableFixedOddsStarterInfo from '@classic/Betting-v2/Model/Observables/ObservableFixedOddsStarterInfo'\nimport { getRacePushDataTopics } from './helpers/getRacePushDataTopics'\nimport { BettingDrawer } from '@core/Components/BettingDrawer/BettingDrawer'\nimport { SameRaceMultiBettingDrawer } from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiBettingDrawer'\nimport { NotificationType } from '@core/Areas/Quickbet/Components/Notifications/NotificationTypes'\nimport { QuickbetState, state$ as quickbetState$ } from '@core/Areas/Quickbet/driver'\nimport { IUseGiddyUp } from './IUseGiddyUp'\nimport { IStartersPageViewModel } from './IStartersPageViewModel'\nimport {\n AddingToBetslip,\n QuickbetClosed,\n RaceClosedEventReceived,\n} from '@core/Areas/Quickbet/signals'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport {\n iotSubscribeTopics as subscribeToRaceEvents,\n iotUnsubscribeTopics as unsubscribeFromRaceEvents,\n EventData,\n FobPriceChangedPushEvent,\n TotePriceChangedPushEvent,\n ToteAcceptorScratchedPushEvent,\n ToteAcceptorUnscratchedPushEvent,\n ToteRaceStatusChangedPushEvent,\n} from '@core/State/PushData'\nimport { RemoveToast } from '@core/Components/Toast/ToastDriver'\nimport { debounceFn } from '@mobi/utils'\nimport { CHANGE_BET_TYPE_EVENT } from '@core/Areas/RaceCard/constants'\nimport { setCurrentBetType, setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { ClearRaceBettingPageMysterySelection } from '@core/Areas/Racing/Components/Mystery/MysteryRaceBettingPageWrapperDriver'\nimport { getTypeAndStartersFromRaceUri, RaceHashParameters } from '@core/Areas/Racing/helpers'\nimport { store } from '@core/Store'\nimport {\n getSelectionPrice,\n SameRaceMultiPriceResponse,\n} from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPrice'\nimport RaceTime from '@core/Areas/Racing/Components/RaceTime'\nimport { SrmGridPriceChangedPushEvent } from 'tabtouch-push-contract'\nimport { StartersKeyValue } from '@classic/Betting-v2/Model/Observables/ObservableRaceStarters'\nimport {\n pushTotePriceChanged,\n pushFobPriceChanged,\n pushSameRaceMultiPriceChanged,\n pushToteAcceptorScratched,\n pushToteAcceptorUnscratched,\n pushToteRaceStatusChanged,\n} from './helpers'\nimport LegSelectionContext from '../../Core/Processors/LegSelectionContext'\nimport { ISelectionMadeCommand } from '../../Core/Processors/ISelectionMadeContext'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nconst GiddyUpModalTitle = 'Giddy-Up'\n\n@injectable()\nexport class StartersPageViewModel extends Disposable implements IStartersPageViewModel {\n private giddyUp: FormGiddyUpRaceInformation\n private selectionProcessor!: SelectionProcessor\n private legacyBetAdapter: ILegacyBetAdapter\n private pyosStore: PyosStore\n private selectedRaceNumberChangedSubscription!: ko.Subscription\n private selectedBetTypeSubscription!: ko.Subscription\n public isValid!: ko.PureComputed\n private isValidSubscriptionGiddyUp: ko.Subscription | undefined\n public raceInformation!: ObservableRacePage\n public bettingInformation!: BettingInformation\n public selectedRaceStarters!: ko.Observable\n // all race starters with their selections (if any)\n public starterSelections!: ko.PureComputed\n public mergeDone!: ko.PureComputed\n public isAllUp!: ko.PureComputed\n public hasGiddyUpRaceKey!: ko.PureComputed\n public raceStatus: ko.Observable = ko.observable('')\n private errorHandler: IErrorHandler\n private quickbetCloseSubscription!: Rx.Disposable\n private quickbetAddingToBetslipSubscription!: Rx.Disposable\n private isSelectingQuaddieStarters = false\n public BettingDrawer: typeof BettingDrawer\n public SameRaceMultiBettingDrawer: typeof SameRaceMultiBettingDrawer\n public PLACE_QUICKBET: string\n public PLACE_BETSLIP: string\n private isRaceCloseFeatureActive = false\n private isPriceChangeFeatureActive = false\n private raceEventSubscription!: Rx.IDisposable | null\n private ldSubscription!: Rx.IDisposable\n private currentSubscribedRaceNumber!: number | null\n private currentSubscribedTopics!: string[]\n private RACE_CLOSED_TOAST_ID: string | null\n public STARTER_ID_PREFIX: string\n public useGiddyUp?: IUseGiddyUp\n public RaceTime = RaceTime\n private isQuickbetKeepSelectionsFeatureActive = false\n private doKeepSelections = false\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('ILegacyBetAdapter') legacyBetAdapter: ILegacyBetAdapter,\n @inject('PyosStore') pyosStore: PyosStore,\n @inject('FormGiddyUpRaceInformation') giddyUp: FormGiddyUpRaceInformation,\n @inject('IErrorHandler') errorHandler: IErrorHandler\n ) {\n super(eventAggregator)\n this.legacyBetAdapter = legacyBetAdapter\n this.pyosStore = pyosStore\n this.giddyUp = giddyUp\n this.errorHandler = errorHandler\n this.BettingDrawer = BettingDrawer\n this.SameRaceMultiBettingDrawer = SameRaceMultiBettingDrawer\n this.PLACE_QUICKBET = 'QUICKBET'\n this.PLACE_BETSLIP = 'BETSLIP'\n this.RACE_CLOSED_TOAST_ID = null\n this.STARTER_ID_PREFIX = 'starter_'\n }\n\n public init(params: {\n raceInformation: ObservableRacePage\n bettingInformation: BettingInformation\n }): void {\n Guard.notNull(params)\n Guard.notNull(params.raceInformation)\n Guard.notNull(params.bettingInformation)\n\n this.bettingInformation = params.bettingInformation\n\n // Sync Initial Value w/ RaceCard Redux Store\n store.dispatch(setCurrentBetType(this.bettingInformation.selectedBetType().betType()))\n\n this.raceInformation = params.raceInformation\n this.raceStatus = this.raceInformation.meetingInformation.selectedRace.raceStatus\n this.bettingInformation.meetingInformation = this.raceInformation.meetingInformation\n\n this.selectedRaceStarters = ko.observable()\n this.updateSelectedRaceStarters()\n this.mergeDone = ko.pureComputed(\n () => this.bettingInformation.mergeDone() && this.raceInformation.mergeDone()\n )\n\n this.selectionProcessor = new SelectionProcessor(\n this.evtAggregator,\n this.bettingInformation,\n this.raceInformation\n )\n this.mergeDisposables(this.selectionProcessor.callBacksForDisposal())\n this.isValid = ko.pureComputed(\n () => this.validateSelections() && this.raceStatus() !== 'Closed'\n )\n this.starterSelections = ko.pureComputed(() => this.getStarterSelections())\n\n this.configureDisposal()\n this.monitorLaunchDarkly()\n this.registerHandlers()\n\n this.pyosStore.clear()\n this.isAllUp = ko.pureComputed(() =>\n this.bettingInformation.selectedBetType().isAllUp()\n )\n\n this.hasGiddyUpRaceKey = ko.pureComputed(() => !!this.raceInformation.giddyUpRaceKey())\n\n this.useGiddyUp = {\n openGiddyUp: this.openGiddyUp.bind(this),\n showGiddyUpInTopPanel: this.showGiddyUpInTopPanel.bind(this),\n showGiddyUpInInformationPanel: this.showGiddyUpInfoPanel.bind(this),\n }\n\n this.evtAggregator.subscribe('last-starter-initialised', this.quickbetOnHighlightedStarter)\n }\n\n monitorLaunchDarkly() {\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const isRaceCloseFeatureActive = record.features.get(\n FeatureFlags.PUSHDATA_RACECLOSE.key\n ) as boolean\n const isPriceChangeFeatureActive = record.features.get(\n FeatureFlags.PUSHDATA_PRICECHANGE.key\n ) as boolean\n const isQuickbetKeepSelectionsFeatureActive = record.features.get(\n FeatureFlags.QUICKBET_KEEP_SELECTIONS.key\n ) as boolean\n\n let isSubscriptionChanged = false\n\n if (this.isRaceCloseFeatureActive != isRaceCloseFeatureActive) {\n this.isRaceCloseFeatureActive = isRaceCloseFeatureActive\n isSubscriptionChanged = true\n }\n\n if (this.isPriceChangeFeatureActive != isPriceChangeFeatureActive) {\n this.isPriceChangeFeatureActive = isPriceChangeFeatureActive\n isSubscriptionChanged = true\n }\n\n if (this.isQuickbetKeepSelectionsFeatureActive != isQuickbetKeepSelectionsFeatureActive) {\n this.isQuickbetKeepSelectionsFeatureActive = isQuickbetKeepSelectionsFeatureActive\n isSubscriptionChanged = true\n }\n\n if (isSubscriptionChanged) {\n if (this.raceEventSubscription) {\n this.unsubscribeFromRaceEvent()\n }\n this.subscribeToRaceEvent()\n }\n })\n }\n\n private showGiddyUpInfoPanel = (raceNumber: number): boolean => {\n return this.showGiddyUpInTopPanel(raceNumber)\n }\n\n private showGiddyUpInTopPanel = (raceNumber: number) => {\n if (\n !this.raceInformation ||\n !this.raceInformation.meetingInformation ||\n !this.raceInformation.meetingInformation.races()\n )\n return false\n\n const foundRace = this.raceInformation.meetingInformation\n .races()\n .find(item => raceNumber === item.raceNumber())\n if (!foundRace) return false\n\n return foundRace.key() === this.raceInformation.giddyUpRaceKey()\n }\n\n private registerHandlers() {\n this.selectedRaceNumberChangedSubscription = this.raceInformation.mergeDone.subscribe(\n finished => {\n if (finished) {\n const updatedStarters = this.raceInformation.getStartersForRace(\n this.bettingInformation.raceNumber\n )\n this.bettingInformation.updateSelectionsForCurrentRace(updatedStarters())\n this.updateSelectedRaceStarters()\n }\n }\n )\n\n this.selectedBetTypeSubscription = this.bettingInformation.selectedBetType.subscribe(betType =>\n store.dispatch(setCurrentBetType(betType.betType()))\n )\n\n this.evtAggregator.subscribe('nav.nav', this.navigationTracking, this)\n\n // On Quickbet Close - Refresh Starters if Bet Complete or Error\n this.quickbetCloseSubscription = QuickbetClosed.signal$\n .withLatestFrom(quickbetState$, (_: unknown, quickbetState) => ({ quickbetState }))\n .subscribe(({ quickbetState }) => {\n const quickbetStateJs: QuickbetState = quickbetState.toJS()\n const hasAnErrorOccurred =\n quickbetStateJs.notificationType === NotificationType.NonHandledError ||\n quickbetStateJs.notificationType === NotificationType.RaceClosed ||\n quickbetStateJs.notificationType === NotificationType.PriceChange ||\n quickbetStateJs.notificationType === NotificationType.HandicapChanged ||\n quickbetStateJs.notificationType === NotificationType.Unauthorized\n const isBetComplete = quickbetStateJs.betPlaced\n\n if (!this.isPriceChangeFeatureActive && hasAnErrorOccurred) {\n // only refresh if push data isn't available\n this.refreshSelectionPage(isBetComplete)\n } else if (\n // clear selections if they're no longer required\n this.isPriceChangeFeatureActive &&\n !this.doKeepSelections &&\n isBetComplete\n ) {\n this.clearAllSelections()\n }\n this.doKeepSelections = false\n })\n\n this.quickbetAddingToBetslipSubscription = AddingToBetslip.signal$.subscribe(() => {\n if (this.isPriceChangeFeatureActive && !this.doKeepSelections) {\n this.clearAllSelections()\n this.doKeepSelections = false\n }\n })\n }\n\n private configureDisposal() {\n this.registerDisposals(() => {\n this.handleRemovingRaceClosedToast()\n this.selectedRaceNumberChangedSubscription.dispose()\n this.selectedBetTypeSubscription.dispose()\n this.quickbetCloseSubscription.dispose()\n this.quickbetAddingToBetslipSubscription.dispose()\n this.unsubscribeFromRaceEvent()\n this.ldSubscription?.dispose()\n this.evtAggregator.unsubscribe('nav.nav', this.navigationTracking)\n this.subscribeToRaceEventDebounced.cancel()\n })\n }\n\n private updateSelectedRaceStarters() {\n const currentRaceStatus =\n this.raceInformation.meetingInformation\n .races()\n .find(x => x.key() === this.raceInformation.meetingInformation.selectedRace.key())\n ?.raceStatus() || null\n\n if (currentRaceStatus && currentRaceStatus !== 'Closed') {\n this.raceStatus(currentRaceStatus)\n this.handleRemovingRaceClosedToast()\n }\n\n const raceStartersLocal = this.raceInformation.raceStarters\n .starters()\n .find(\n raceStarter =>\n raceStarter.Key.raceNumber() ===\n this.raceInformation.meetingInformation.selectedRace.raceNumber()\n )\n if (raceStartersLocal) this.selectedRaceStarters(raceStartersLocal)\n\n if (\n (this.isPriceChangeFeatureActive || this.isRaceCloseFeatureActive) &&\n this.bettingInformation.raceNumber !== this.currentSubscribedRaceNumber\n ) {\n if (this.raceEventSubscription) {\n this.unsubscribeFromRaceEvent()\n }\n this.subscribeToRaceEventDebounced()\n }\n }\n\n public validateSelections(): boolean {\n // guard against race/meeting that is undergoing a merge\n if (!this.mergeDone()) {\n return false\n }\n\n return this.bettingInformation.selectedBetType().validator.isValid(this.bettingInformation)\n }\n\n public getStarterSelections(): boolean[][] {\n // don't attempt to retrieve starter selections if it's not valid, e.g. starters not fully initialised, insufficient starters, etc.\n if (!this.validateSelections()) return []\n\n return this.bettingInformation\n .selectedBetType()\n .processor.getStarterSelections(\n this.raceInformation.getStartersForRace(this.bettingInformation.raceNumber)()\n )\n }\n\n public openGiddyUp = () => {\n // subscribe isValid changes to automatically open quickbet if/when any valid selection\n // combinations are made (corresponds to when toast is normally displayed)\n this.subscribeIsValidGiddyUp()\n // unsubscribe isValid changes when giddyup modal is closed\n const modalClosed = (data: { title: string }) => {\n if (data.title == GiddyUpModalTitle) {\n this.evtAggregator.unsubscribe('modal.did_close', modalClosed)\n this.unsubscribeIsValidGiddyUp()\n }\n }\n this.evtAggregator.subscribe('modal.did_close', modalClosed, this)\n // Set Giddy Up in the data layer\n giddyUpViewed()\n // show giddyup modal\n this.giddyUp.openGiddyUp(\n this.raceInformation.giddyUpRaceKey(),\n this.raceInformation.giddyUpFixtureKey(),\n starterNumber =>\n this.raceInformation.raceStarters.getStarter(\n this.bettingInformation.raceNumber,\n starterNumber\n ),\n () =>\n this.raceInformation.meetingInformation.getRaceForGiddyUp(\n this.bettingInformation.raceNumber\n ),\n (starterNumber: number, isFixed: boolean) =>\n this.selectBetType(BetType.WinPlace, () =>\n this.selectWinAndPlaceStarters(starterNumber, isFixed)\n ),\n () => this.evtAggregator.publish('clear-all-selections-command'),\n (raceNumbers, acceptorNumbers) => {\n this.selectBetType(BetType.Quaddie, () => {\n this.selectQuaddieStarters(raceNumbers, acceptorNumbers)\n })\n }\n )\n }\n\n private selectBetType(betType: BetType, callback: () => void): void {\n if (this.bettingInformation.selectedBetType().betType() != betType) {\n // change bet type and invoke the callback, e.g. make selections\n const betTypeChangedCallback = () => {\n this.evtAggregator.unsubscribe('process-bet-type-completed', betTypeChangedCallback)\n callback()\n }\n this.evtAggregator.subscribe('process-bet-type-completed', betTypeChangedCallback)\n this.bettingInformation.selectedBetType().betType(betType)\n this.evtAggregator.publish(CHANGE_BET_TYPE_EVENT, { betType })\n } else {\n this.evtAggregator.publish('clear-all-selections-command')\n callback()\n }\n }\n\n private selectSameRaceMultiStarters(params: RaceHashParameters): void {\n if (!params || !params.starters) return\n\n const selection: string[] = []\n\n params.starters.forEach(starterParam => {\n const starter = this.raceInformation.raceStarters.getStarter(\n this.bettingInformation.raceNumber,\n starterParam.starterNumber\n )\n\n if (\n starter === null ||\n starter.isFixedScratchedOrSuspended() ||\n (!starter.fixedOddsStarterInfo.isScratched() &&\n starter.fixedOddsStarterInfo.isSuspended()) ||\n starter.fixedOddsStarterInfo.sameRaceMultiPrices.isSuspended() != false\n )\n return\n\n // adapted from makeLegSelection in SelectionViewModel\n const starterSelection = starter.selection() as buttons.ButtonsSelection\n const legNumber = starterParam.legNumber // 1 to 4\n if (legNumber === undefined) return\n\n // starterSelection uses 0-based indexing, so subtract 1\n const selectedValue = starterSelection.values()[legNumber - 1]\n\n if (!selectedValue) {\n return\n }\n\n selectedValue(\n selectedValue() == ButtonSelectionType.None\n ? ButtonSelectionType.Fob\n : ButtonSelectionType.None\n )\n\n selection.push(`${starterParam.starterNumber}-${starterParam.legNumber}`)\n\n this.evtAggregator.publish('selection-made-command', {\n raceNumber: this.bettingInformation.raceNumber,\n starter: starter,\n context: new LegSelectionContext(legNumber, ButtonSelectionType.Fob),\n } as ISelectionMadeCommand)\n })\n\n if (selection.length === params.starters.length) {\n // potential improvement; reuse call by SameRaceMultiPrice's useQuery, instead of separate one\n getSelectionPrice(\n this.raceInformation.meetingInformation.meetingDate(),\n this.raceInformation.meetingInformation.meetingId(),\n this.bettingInformation.raceNumber,\n selection.map(item => `selection=${item}`).join('&')\n ).then(price => this.placeSelection(this.PLACE_QUICKBET, price, params.source))\n }\n }\n\n private selectWinAndPlaceStarters(\n starterNumber: number,\n isFixed: boolean,\n source?: string\n ): void {\n // find acceptor\n const starter = this.raceInformation.raceStarters.getStarter(\n this.bettingInformation.raceNumber,\n starterNumber\n )\n\n if (starter === null) return\n\n // scroll to starter\n const elementId = `${this.STARTER_ID_PREFIX}${starterNumber}`\n const element = document.getElementById(elementId)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n\n const selection = starter.selection() as buttons.ButtonsSelection\n\n // select acceptor\n selection.value(isFixed ? ButtonSelectionType.Fob : ButtonSelectionType.Tote)\n\n this.evtAggregator.publish('selection-made-command', {\n raceNumber: this.bettingInformation.raceNumber,\n starter: starter,\n context: new LegSelectionContext(0, selection.value()),\n source,\n } as ISelectionMadeCommand)\n\n // show quickbet - not required for enhanced betslip as this will trigger automatically after the publishing 'selection-made-command'\n this.placeSelection(this.PLACE_QUICKBET, undefined, source)\n }\n\n private selectQuaddieStarters(raceNumbers: number[], acceptorNumbers: number[][]) {\n // guard against multiple invocations\n if (this.isSelectingQuaddieStarters) return\n this.isSelectingQuaddieStarters = true\n\n let raceIndex = 0\n let scratchedAcceptorCount = 0\n\n const startersInitialisedCallback = () => {\n // select starters\n acceptorNumbers[raceIndex].forEach(acceptor => {\n const starter = this.raceInformation.raceStarters.getStarter(\n raceNumbers[raceIndex],\n acceptor\n )\n\n if ((starter as IObservableStarter).isScratched()) {\n scratchedAcceptorCount++\n } else {\n const selection = (starter as IObservableStarter).selection() as CheckBoxSelection\n selection.values()[0].checked(true)\n }\n })\n\n if (++raceIndex == raceNumbers.length) {\n // all selections have been made so we can bail out\n this.evtAggregator.unsubscribe('last-starter-initialised', startersInitialisedCallback)\n this.bettingInformation.legVisible(-1)\n\n if (scratchedAcceptorCount > 0) {\n // disable auto quickbet until after the user has acknowledged the scratched modal\n this.unsubscribeIsValidGiddyUp()\n\n this.errorHandler.showWarningMessage(\n `Acceptor${scratchedAcceptorCount > 1 ? 's' : ''} Scratched`,\n 'Please check your selections before proceeding.',\n () => {\n // re-enable auto quickbet & explicitly invoke quickbet as we would miss it whilst waiting for the scratched modal to close\n this.subscribeIsValidGiddyUp()\n this.placeSelection(this.PLACE_QUICKBET)\n }\n )\n }\n // clear the guard now that all the quaddie selections have been made\n this.isSelectingQuaddieStarters = false\n } else {\n // process next quaddie leg\n this.bettingInformation.legVisible(this.getLegNumber(raceNumbers[raceIndex]))\n }\n }\n this.evtAggregator.subscribe('last-starter-initialised', startersInitialisedCallback)\n\n // select leg (race) - this will result in last-starter-initialised firing\n const targetLeg = this.getLegNumber(raceNumbers[raceIndex])\n if (this.bettingInformation.legVisible() === targetLeg) {\n // this view is already rendered/initialised by ko, therefore we can immediately trigger the selection callback\n this.evtAggregator.publish('last-starter-initialised')\n } else {\n this.bettingInformation.legVisible(targetLeg)\n }\n }\n\n private canKeepSelections(type: string) {\n if (!this.isQuickbetKeepSelectionsFeatureActive) {\n return false\n }\n\n if (type !== this.PLACE_QUICKBET) {\n return false\n }\n\n return this.bettingInformation.isFixed()\n ? this.bettingInformation.selectedBetType().betType() === BetType.SameRaceMulti\n : this.bettingInformation.selectedBetType().canKeepSelections()\n }\n\n public placeSelection(\n type: string,\n priceResponse?: SameRaceMultiPriceResponse,\n betSource?: string,\n winPlaceStarterOverride?: number\n ): void {\n this.evtAggregator.publish('stop-all-race-replay')\n if (!this.validateSelections()) return\n\n if (!betSource) betSource = isOnSkyPage() ? 'sky-page' : 'race-card'\n\n const bettingInfo = this.bettingInformation\n\n bettingInfo.assignMeetingInfo(this.raceInformation.meetingInformation)\n\n const keepSelections = (doKeep?: boolean): boolean | undefined => {\n if (doKeep === undefined) return this.canKeepSelections(type)\n\n this.doKeepSelections = doKeep\n return doKeep\n }\n\n if (bettingInfo.isFixed()) {\n const selectionDetails = this.getRaceSelectionDetails(\n bettingInfo.isFixed(),\n undefined,\n winPlaceStarterOverride\n )\n\n const selection = BetSelectionBuilder.build({\n bettingInformation: bettingInfo,\n numberOfCombinations: 1,\n allUpFormulas: undefined,\n priceResponse,\n winPlaceStarterOverride,\n })\n\n if (type === this.PLACE_BETSLIP) {\n handleBetSelection({\n betFlow: { location: 'Betslip' },\n selection: { ...selection, selectionDetails, betSource },\n })\n this.clearAllSelectionsAndRefresh(true)\n }\n if (type === this.PLACE_QUICKBET) {\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: { ...selection, selectionDetails, betSource, keepSelections },\n })\n }\n } else {\n // potential future optimisation would be to remove the bet enquiry when using enhancedBetslip since it's n/a for W&P bets\n this.legacyBetAdapter.doBetEnquiry(bettingInfo, result => {\n const selection = BetSelectionBuilder.build({\n bettingInformation: bettingInfo,\n numberOfCombinations: result.TotalCombinations,\n allUpFormulas: result.AllUpFormulas,\n winPlaceStarterOverride,\n })\n\n const toteSelection = selection.selection as ToteSelection\n\n // override the win & place selection if a starter is provided, e.g. when enhancedBetslip is active where multiple starter selections can be present\n if (winPlaceStarterOverride) {\n toteSelection.numberOfCombinations = 1\n toteSelection.selectionString = winPlaceStarterOverride.toString()\n }\n\n const selectionString = toteSelection.selectionString // OK if it's undefined because of a bad cast\n const selectionDetails = this.getRaceSelectionDetails(\n bettingInfo.isFixed(),\n selectionString,\n winPlaceStarterOverride\n )\n\n if (type === this.PLACE_BETSLIP) {\n handleBetSelection({\n betFlow: { location: 'Betslip' },\n selection: { ...selection, selectionDetails, betSource },\n })\n this.clearAllSelectionsAndRefresh(true)\n }\n if (type === this.PLACE_QUICKBET) {\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: { ...selection, selectionDetails, betSource, keepSelections },\n })\n }\n })\n }\n }\n\n private clearAllSelectionsAndRefresh(refreshPage: boolean) {\n // always clear selections with an optional refresh page which acts as an optimisation to avoid unnecessary backend api calls\n if (refreshPage) this.refreshSelectionPage(true)\n else this.clearAllSelections()\n }\n\n private refreshSelectionPage(clearSelections: boolean): void {\n let raceNumbersToRefresh = [this.raceInformation.meetingInformation.selectedRace.raceNumber()]\n if (this.bettingInformation != null) {\n if (this.bettingInformation.selectedBetType().isDouble()) {\n raceNumbersToRefresh = this.raceInformation.getDoubleRaceNumbers()\n }\n if (this.bettingInformation.selectedBetType().isQuaddie()) {\n raceNumbersToRefresh = this.raceInformation.getQuaddieRaceNumbers()\n }\n if (this.bettingInformation.selectedBetType().isAllUp()) {\n raceNumbersToRefresh = [] //don't refresh for allUp bettype for performance reason as we don't in other parts of page\n }\n }\n this.evtAggregator.publish('race-refresh-command', raceNumbersToRefresh, clearSelections)\n }\n\n private clearAllSelections() {\n store.dispatch(setSelectedProposition(null))\n ClearRaceBettingPageMysterySelection()\n this.evtAggregator.publish('clear-all-selections-command')\n }\n\n private navigationTracking(): void {\n this.giddyUp.close()\n }\n\n private subscribeIsValidGiddyUp() {\n this.unsubscribeIsValidGiddyUp()\n\n this.isValidSubscriptionGiddyUp = this.isValid.subscribe(isValid => {\n if (isValid) this.placeSelection(this.PLACE_QUICKBET)\n })\n }\n\n private unsubscribeIsValidGiddyUp(): void {\n if (this.isValidSubscriptionGiddyUp != undefined) {\n this.isValidSubscriptionGiddyUp.dispose()\n this.isValidSubscriptionGiddyUp = undefined\n }\n }\n\n private createAcceptor(\n raceKey: string,\n observableStarter: IObservableStarter,\n isFixed: boolean\n ): Acceptor {\n const serializedSilks = JSON.stringify(observableStarter.silkImages())\n const imageUrlWithSizes = JSON.parse(serializedSilks)\n return {\n key: `${raceKey}-${observableStarter.number()}`,\n name: observableStarter.name(),\n number: observableStarter.number(),\n type: observableStarter.type(),\n imageUrl: observableStarter.silkImages().large.url,\n imageUrlWithSizes,\n meetingName: this.raceInformation.meetingInformation.meetingName(),\n fixedOdds: {\n win: '',\n place: '',\n isSuspended: observableStarter.fixedOddsStarterInfo.isSuspended(),\n },\n toteOdds: { win: '', place: '' },\n isScratched: isFixed\n ? observableStarter.isFixedScratchedOrSuspended()\n : observableStarter.isScratched(),\n scratchType: isFixed ? null : observableStarter.scratchType(),\n } as Acceptor\n }\n\n private getRaceSelectionDetails(\n isFixed: boolean,\n selectionString = '',\n preferredStarter?: number\n ): RaceDetails {\n const raceDetails: RaceDetails = { races: [], acceptors: [] }\n\n if (this.bettingInformation.selectedBetType().isNoveltyBet()) {\n raceDetails.races = [\n {\n key: this.raceInformation.meetingInformation.selectedRace.key(),\n raceNumber: this.raceInformation.meetingInformation.selectedRace.raceNumber(),\n meetingName: this.raceInformation.meetingInformation.meetingName(),\n meetingCode: this.raceInformation.meetingInformation.meetingCode(),\n meetingId: this.raceInformation.meetingInformation.meetingId(),\n meetingDate: this.raceInformation.meetingInformation.meetingDate().toString(),\n distance: this.raceInformation.meetingInformation.selectedRace.distance(),\n raceTime: this.raceInformation.meetingInformation.selectedRace.raceTime().toString(),\n type: this.raceInformation.meetingInformation.selectedRace.raceType(),\n acceptorKeys: [],\n },\n ]\n\n // novelty bet types have multiple selections for the same leg,\n // so look at the selection string to figure out which ones we need\n const singleStarterKeys = selectionString\n .split('/')\n .flatMap(starter => (starter.includes('.') ? starter.split('.') : starter))\n const raceKey = this.raceInformation.meetingInformation.selectedRace.key()\n raceDetails.acceptors = this.raceInformation.raceStarters\n .starters()\n .flatMap(rs => rs.Value())\n .filter(rs => singleStarterKeys.includes(rs.number().toString()))\n .map(rs => this.createAcceptor(raceKey, rs, isFixed))\n raceDetails.races[0].acceptorKeys = raceDetails.acceptors.map(a => a.key)\n\n return raceDetails\n }\n\n this.bettingInformation.getLegsForProcessing().forEach(leg => {\n const thisRaceKey = this.getRaceKeyByRaceNumber(leg.raceKey().raceNumber()) || ''\n const race: Race = {\n key: thisRaceKey,\n raceNumber: leg.raceKey().raceNumber(),\n meetingName: this.raceInformation.meetingInformation.meetingName(),\n meetingCode: this.raceInformation.meetingInformation.meetingCode(),\n meetingId: this.raceInformation.meetingInformation.meetingId(),\n meetingDate: this.raceInformation.meetingInformation.meetingDate().toString(),\n distance: parseInt(leg.raceKey().distance()),\n raceTime: leg.raceKey().startTime().toString(),\n type: this.raceInformation.meetingInformation.selectedRace.raceType(),\n acceptorKeys: [],\n }\n\n // if novelty, race.acceptorKeys will not contain all keys in selection\n // - only one acceptor is needed for name display/icon type (i.e. Trots, Dogs etc.)\n // - use the supplied starter number if available, else default to the first selection\n // - n/a for W&P fixed because WinPlaceFobProcessor.process() only maintains the last single starter selection, i.e. no need to pick through the collection of starters\n let starterOffset = 0\n if (preferredStarter) {\n const index = leg.starters().findIndex(starter => starter.number() == preferredStarter)\n if (index != -1) starterOffset = index\n }\n\n const betType = this.bettingInformation.selectedBetType().betType()\n let acceptors: Acceptor[]\n\n if (\n [BetType.AllUp, BetType.Double, BetType.Quaddie, BetType.SameRaceMulti].includes(betType)\n ) {\n acceptors = leg\n .starters()\n .map(starter => this.createAcceptor(thisRaceKey, starter, isFixed))\n } else {\n acceptors = [this.createAcceptor(thisRaceKey, leg.starters()[starterOffset], isFixed)]\n }\n\n raceDetails.acceptors = raceDetails.acceptors.concat(acceptors)\n\n race.acceptorKeys = raceDetails.acceptors\n .filter(a => a.key.indexOf(race.key + '-') === 0)\n .map(a => a.key)\n\n raceDetails.races.push(race)\n })\n\n return raceDetails\n }\n\n private getRaceKey(): string | null {\n return this.raceInformation?.meetingInformation?.selectedRace?.key?.() || null\n }\n\n private getRaceKeyByRaceNumber(raceNumber: number): string | null {\n if (\n this.raceInformation &&\n this.raceInformation.meetingInformation &&\n this.raceInformation.meetingInformation.races\n ) {\n const race = this.raceInformation.meetingInformation\n .races()\n .find(x => x.raceNumber() === raceNumber)\n return race ? race.key() : null\n }\n return null\n }\n\n private getLegNumber(raceNumber: number) {\n const startersKeyValue = this.raceInformation.raceStarters\n .starters()\n .find(raceStarter => raceStarter.Key.raceNumber() === raceNumber)\n return startersKeyValue != undefined ? startersKeyValue.Key.leg() : 0\n }\n\n private subscribeToRaceEvent() {\n if (this.raceEventSubscription) {\n this.unsubscribeFromRaceEvent()\n }\n const hasSameRaceMulti = this.raceInformation\n .availableBetTypes()\n .some(bt => bt.betType() === BetType.SameRaceMulti)\n\n this.currentSubscribedTopics = this.isPriceChangeFeatureActive\n ? getRacePushDataTopics({\n raceId: this.getRaceKey(),\n raceInformation: this.raceInformation,\n hasSameRaceMulti,\n })\n : []\n this.currentSubscribedRaceNumber = this.bettingInformation.raceNumber\n\n const pushEventSubscriptions = subscribeToRaceEvents(this.currentSubscribedTopics)\n this.raceEventSubscription = pushEventSubscriptions.subscribe(this.pushEventReceived.bind(this))\n }\n\n private subscribeToRaceEventDebounced = debounceFn(this.subscribeToRaceEvent, 3000)\n\n private unsubscribeFromRaceEvent() {\n if (this.raceEventSubscription) {\n this.raceEventSubscription.dispose()\n this.raceEventSubscription = null\n this.currentSubscribedRaceNumber = null\n\n if (this.currentSubscribedTopics) {\n unsubscribeFromRaceEvents(this.currentSubscribedTopics)\n this.currentSubscribedTopics.length = 0\n }\n\n ClearRaceBettingPageMysterySelection()\n }\n }\n\n public static resetFobFavourite(starters: IObservableStarter[]) {\n const lowestPriceStarters = starters.reduce(\n (accu: ObservableFixedOddsStarterInfo[], starter) => {\n const fobInfo = starter.fixedOddsStarterInfo\n\n if (!fobInfo) {\n return accu\n }\n\n if (fobInfo.isFavourite()) {\n fobInfo.isFavourite(false)\n }\n\n if (fobInfo.isScratched() || fobInfo.isSuspended()) {\n return accu\n }\n\n if (accu.length === 0) {\n return [fobInfo]\n }\n\n const currentLowestPrice = Number.parseFloat(accu[0].displayWinDividend())\n const currentPrice = Number.parseFloat(fobInfo.displayWinDividend())\n\n if (currentPrice < currentLowestPrice) {\n return [fobInfo]\n } else if (currentPrice === currentLowestPrice) {\n accu.push(fobInfo)\n }\n return accu\n },\n []\n )\n\n if (lowestPriceStarters.length === 1) {\n lowestPriceStarters[0].isFavourite(true)\n }\n }\n\n private pushToteRaceStatusChanged(event: ToteRaceStatusChangedPushEvent) {\n if (event.status !== 'closed') return\n\n this.RACE_CLOSED_TOAST_ID = `race-closed-${this.currentSubscribedRaceNumber}`\n\n RaceClosedEventReceived({ event, toastId: this.RACE_CLOSED_TOAST_ID })\n\n const { meetingId, meetingDate, raceNumber } = this.bettingInformation\n\n pushToteRaceStatusChanged({\n event,\n meetingId,\n meetingDate,\n raceNumber,\n })\n\n this.selectBetType(BetType.WinPlace, () => {\n setTimeout(() => {\n this.raceInformation.meetingInformation.selectedRace.raceStatus('Closed')\n\n // Giddyup doesn't read value from selectedRace, update the race directly\n const race = this.raceInformation.meetingInformation\n .races()\n .find(x => x.key() === this.raceInformation.meetingInformation.selectedRace.key())\n if (race) race.raceStatus('Closed')\n }, 500)\n })\n }\n\n private pushEventReceived(event: EventData) {\n if (!event || !event.payload) {\n return\n }\n\n switch (event.payload.eventType) {\n case 'ToteRaceStatusChanged':\n this.pushToteRaceStatusChanged(event.payload as ToteRaceStatusChangedPushEvent)\n break\n case 'FobPriceChanged': {\n const { meetingId, meetingDate, raceNumber } = this.bettingInformation\n pushFobPriceChanged({\n event: event.payload as FobPriceChangedPushEvent,\n raceInformation: this.raceInformation,\n meetingId,\n meetingDate,\n raceNumber,\n resetFobFavourite: StartersPageViewModel.resetFobFavourite,\n })\n break\n }\n case 'TotePriceChanged': {\n const { meetingId, meetingDate, raceNumber } = this.bettingInformation\n pushTotePriceChanged({\n event: event.payload as TotePriceChangedPushEvent,\n meetingId,\n meetingDate,\n raceNumber,\n raceInformation: this.raceInformation,\n })\n break\n }\n case 'ToteAcceptorScratched': {\n const { meetingId, meetingDate, raceNumber } = this.bettingInformation\n pushToteAcceptorScratched(\n event.payload as ToteAcceptorScratchedPushEvent,\n meetingId,\n meetingDate,\n raceNumber,\n this.getRaceKey(),\n this.raceInformation\n )\n break\n }\n case 'ToteAcceptorUnscratched': {\n const { meetingId, meetingDate, raceNumber } = this.bettingInformation\n pushToteAcceptorUnscratched(\n event.payload as ToteAcceptorUnscratchedPushEvent,\n meetingId,\n meetingDate,\n raceNumber,\n this.getRaceKey(),\n this.raceInformation\n )\n break\n }\n case 'SrmGridPriceChanged':\n pushSameRaceMultiPriceChanged({\n event: event.payload as SrmGridPriceChangedPushEvent,\n raceInformation: this.raceInformation,\n })\n break\n }\n }\n\n private handleRemovingRaceClosedToast() {\n if (this.RACE_CLOSED_TOAST_ID) {\n RemoveToast(this.RACE_CLOSED_TOAST_ID)\n this.RACE_CLOSED_TOAST_ID = null\n }\n }\n\n public quickbetOnHighlightedStarter = () => {\n this.evtAggregator.unsubscribe('last-starter-initialised', this.quickbetOnHighlightedStarter)\n\n const params = getTypeAndStartersFromRaceUri(window.location.hash)\n if (!params || !params.isValidUri) return\n\n this.selectBetType(params.betType, () => {\n setTimeout(() => {\n if (params.betType === BetType.SameRaceMulti) {\n this.selectSameRaceMultiStarters(params)\n } else if (params.starters.length === 1) {\n this.selectWinAndPlaceStarters(params.starters[0].starterNumber, true, params.source)\n }\n }, 0)\n })\n }\n}\n\nfunction isOnSkyPage() {\n const skyPageRoute = AppRoutes.RaceCardSky.replace('/', '')\n const hashRoute = window.location.hash.replace('#', '')\n\n return hashRoute === skyPageRoute\n}\n","import dayjs from 'dayjs'\nimport queryString from 'query-string'\nimport type { MysteryBetTypes } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { getEventAggregator } from '@core/Utils/events'\n\ninterface BuildToteRaceUriProps {\n meetingId: string\n raceNumber: number\n meetingDate: string\n starter?: number\n source?: string\n}\n\ninterface RaceStarter {\n starterNumber: number\n place?: number\n legNumber?: number\n}\nexport interface RaceHashParameters {\n betType: BetType\n starters: RaceStarter[]\n isValidUri: boolean\n source?: string\n}\n\nexport function getTypeAndStartersFromRaceUri(uri: string): RaceHashParameters {\n const qs = queryString.parse(uri)\n\n const hasValidBetType = !!qs.betType && typeof qs.betType === 'string'\n const betType: BetType = hasValidBetType\n ? BetType[qs.betType as MysteryBetTypes] || BetType.WinPlace\n : BetType.WinPlace\n\n const starters =\n betType === BetType.SameRaceMulti\n ? parseSrmStartersFromToteRaceUri(qs)\n : parseWinAndPlaceStarterFromToteRaceUri(qs)\n\n const isValidUri = hasValidBetType || (!!starters && starters.length > 0)\n\n return {\n source: qs.source,\n betType,\n isValidUri,\n starters,\n }\n}\n\nfunction parseWinAndPlaceStarterFromToteRaceUri(parsedQueryString: {\n starter: number\n}): RaceStarter[] {\n if (!parsedQueryString.starter || isNaN(Number(parsedQueryString.starter))) return []\n return [\n {\n starterNumber: Number(parsedQueryString.starter),\n place: 1,\n },\n ]\n}\n\nfunction parseSrmStartersFromToteRaceUri(parsedQueryString: { starters?: string }): RaceStarter[] {\n if (!parsedQueryString.starters) return []\n\n const pairs = parsedQueryString.starters.split(',')\n const pairRegex = /^(?\\d+)-(?\\d+)$/\n\n return pairs.reduce((existing, newPair) => {\n const splits = newPair.match(pairRegex)\n if (splits && splits.groups) {\n existing.push({\n starterNumber: parseInt(splits.groups['starter']),\n legNumber: parseInt(splits.groups['leg']),\n } as RaceStarter)\n }\n return existing\n }, [] as RaceStarter[])\n}\n\nexport function buildToteRaceUri({\n meetingId,\n raceNumber,\n meetingDate,\n starter,\n source,\n}: BuildToteRaceUriProps) {\n const formattedMeetingDate = dayjs(meetingDate).format('YYYY-MM-DD')\n let url = `/#tote/meetings/${meetingId.toLowerCase()}/${raceNumber}?date=${formattedMeetingDate}`\n if (starter) url += `&betType=WinPlace&starter=${starter}`\n if (source) url += `&source=${source}`\n return url\n}\n\nexport function buildSameRaceMultiRaceUri({\n meetingId,\n raceNumber,\n meetingDate,\n starters,\n source,\n}: {\n meetingId: string\n raceNumber: number\n meetingDate: string\n starters?: string\n source?: string\n}): string {\n const formattedMeetingDate = dayjs(meetingDate).format('YYYY-MM-DD')\n let url = `/#tote/meetings/${meetingId.toLowerCase()}/${raceNumber}?date=${formattedMeetingDate}&betType=SameRaceMulti`\n if (starters) url += `&starters=${starters}`\n if (source) url += `&source=${source}`\n return url\n}\n\nexport function setSelectedRace(raceNumber: number): void {\n getEventAggregator().publish('race-navigate-command', {\n raceNumber,\n })\n}\n\nexport const getPayIndicatorText = (payIndicator?: number): string | null => {\n if (!payIndicator) return null\n\n if (payIndicator === 1) return 'Pay Win Only'\n\n let text = 'Pay '\n\n for (let i = 1; i <= payIndicator; i++) {\n text += i + ','\n }\n\n return text.slice(0, -1)\n}\n","import { getFobPriceChangeTopic, getToteRaceTopic } from '@core/State/PushData'\nimport dayjs from 'dayjs'\nimport { getSrmPriceChangedEventTopic } from 'tabtouch-push-contract'\nimport ObservableRacePage from '../../../../Model/Observables/ObservableRacePage'\n\ninterface GetRacePushDataTopics {\n raceId: string | null\n raceInformation: ObservableRacePage\n hasSameRaceMulti: boolean\n}\n\nexport function getRacePushDataTopics({\n raceId,\n raceInformation,\n hasSameRaceMulti,\n}: GetRacePushDataTopics) {\n const topics: string[] = []\n\n const { meetingId, meetingDate, selectedRace } = raceInformation.meetingInformation\n\n // Fixed Odds Win Place\n const marketSeq = selectedRace.fixedOddsInfo?.marketSequence?.()\n if (marketSeq) {\n topics.push(getFobPriceChangeTopic(marketSeq.toString()))\n }\n\n // Tote Price & Acceptor Change\n if (raceId) {\n const priceChangedTopic = getToteRaceTopic(raceId, { type: 'priceChanged' })\n topics.push(priceChangedTopic)\n\n const acceptorChangedTopic = getToteRaceTopic(raceId, { type: 'acceptorChanged' })\n topics.push(acceptorChangedTopic)\n }\n\n if (hasSameRaceMulti) {\n const sameRaceMultiChangedTopic = getSrmPriceChangedEventTopic(\n dayjs(meetingDate()).format('YYYY-MM-DD'),\n meetingId(),\n selectedRace.raceNumber()\n )\n topics.push(sameRaceMultiChangedTopic)\n }\n\n return topics\n}\n","import produce from 'immer'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { FobPriceChangedPushEvent } from '@core/State/PushData'\nimport { toDisplayPrice } from '@mobi/utils/money'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ninterface PushFobPriceChanged {\n event: FobPriceChangedPushEvent\n meetingId: string\n meetingDate: Date\n raceInformation: ObservableRacePage\n raceNumber: number\n resetFobFavourite: (starters: IObservableStarter[]) => void\n}\n\nexport function pushFobPriceChanged({\n event,\n raceInformation,\n meetingId,\n meetingDate,\n raceNumber,\n resetFobFavourite,\n}: PushFobPriceChanged) {\n const { winPrice, placePrice, marketId, propositionId } = event\n\n const queryKey = queryKeys.racePageComplete(meetingId, meetingDate, raceNumber)\n\n // Update ReactQuery state\n queryClient.setQueryData(queryKey, current => {\n if (!current) return undefined // key not found\n if (!isRacePageDto(current)) return undefined // only update open races\n return produce(current, draft => {\n // Extra Fixed Odds Markets\n const fixedOddsMarketMatch = draft.FixedOddsMarkets?.find(\n ({ MarketSequence }) => MarketSequence === marketId\n )\n if (fixedOddsMarketMatch) {\n const fixedPropositionWithChange = fixedOddsMarketMatch.Propositions.find(\n ({ PropositionSequence }) => PropositionSequence === propositionId\n )\n if (!fixedPropositionWithChange) return\n fixedPropositionWithChange.Price = winPrice\n fixedPropositionWithChange.PriceToDisplay = toDisplayPrice(winPrice)\n return\n }\n\n // Win / Place Fixed\n const starters = draft.RaceStarters.flatMap(rs =>\n rs.RaceKey.RaceNumber === raceNumber ? rs.Starters : []\n )\n for (const starter of starters) {\n if (starter.FixedOddsStarterInfo?.PropositionSequence === propositionId) {\n starter.FixedOddsStarterInfo.DisplayWinDividend = toDisplayPrice(winPrice)\n starter.FixedOddsStarterInfo.DisplayPlaceDividend = toDisplayPrice(placePrice)\n starter.FixedOddsStarterInfo.IsSuspended = !winPrice\n break\n }\n }\n })\n })\n\n // Update KO View Model state\n const starter = raceInformation.raceStarters.getStartersByPropSeq(propositionId)\n\n if (starter?.fixedOddsStarterInfo && !starter.fixedOddsStarterInfo.isScratched()) {\n if (placePrice !== undefined) {\n starter.fixedOddsStarterInfo.displayPlaceDividend(toDisplayPrice(placePrice))\n }\n\n if (winPrice !== undefined) {\n const starters = raceInformation.getStartersForRace(raceNumber)()\n\n const { isSuspended, displayWinDividend, hasWinDividend } = starter.fixedOddsStarterInfo\n\n if (isSuspended() && !hasWinDividend()) {\n isSuspended(false)\n }\n\n displayWinDividend(toDisplayPrice(winPrice))\n hasWinDividend(winPrice !== null)\n resetFobFavourite(starters)\n }\n }\n}\n","import produce from 'immer'\nimport ObservableRacePage from '../../../../Model/Observables/ObservableRacePage'\nimport { TotePriceChangedPushEvent } from '@core/State/PushData'\nimport { toDisplayPrice } from '@mobi/utils/money'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ninterface PushTotePriceChanged {\n event: TotePriceChangedPushEvent\n meetingId: string\n meetingDate: Date\n raceNumber: number\n raceInformation: ObservableRacePage\n}\n\nexport function pushTotePriceChanged({\n event,\n meetingId,\n meetingDate,\n raceNumber,\n raceInformation,\n}: PushTotePriceChanged) {\n const queryKey = queryKeys.racePageComplete(meetingId, meetingDate, raceNumber)\n\n // Update ReactQuery state\n queryClient.setQueryData(queryKey, current => {\n if (!current) return undefined // key not found\n if (!isRacePageDto(current)) return undefined // only update open races\n return produce(current, draft => {\n const acceptorLookup = new Map(event.acceptorTotePools.map(p => [p.acceptorNumber, p]))\n draft.RaceStarters.flatMap(rs =>\n rs.RaceKey.RaceNumber === raceNumber ? rs.Starters : []\n ).forEach(starter => {\n const update = acceptorLookup.get(starter.Number)\n if (update) {\n starter.DisplayWinDividend = toDisplayPrice(update.winPrice)\n starter.DisplayPlaceDividend = toDisplayPrice(update.placePrice)\n }\n starter.IsFavourite = event.raceFavourite === starter.Number\n })\n })\n })\n\n // Update KO View Model state\n const starters = raceInformation.getStartersForRace(raceNumber)()\n\n event.acceptorTotePools.forEach(({ acceptorNumber, winPrice, placePrice }) => {\n const starter = starters.find(starter => starter.number() === acceptorNumber)\n if (starter) {\n if (winPrice !== null && winPrice !== undefined) {\n starter.displayWinDividend(toDisplayPrice(winPrice))\n }\n if (placePrice !== null && placePrice != undefined) {\n starter.displayPlaceDividend(toDisplayPrice(placePrice))\n }\n starter.isFavourite(starter.number() === event.raceFavourite)\n }\n })\n}\n","import ObservableRacePage from '../../../../Model/Observables/ObservableRacePage'\nimport { SrmGridPriceChangedPushEvent } from 'tabtouch-push-contract'\nimport dayjs from 'dayjs'\n\ninterface PushSameRaceMultiPriceChanged {\n event: SrmGridPriceChangedPushEvent\n raceInformation: ObservableRacePage\n}\n\nexport function pushSameRaceMultiPriceChanged({\n event,\n raceInformation,\n}: PushSameRaceMultiPriceChanged) {\n const { runners } = event\n\n const eventDate = dayjs(event.fixtureDate).format('YYYY-MM-DD')\n\n const raceMatchedToEvent = raceInformation.meetingInformation\n .races()\n .filter(\n race =>\n event.raceNumber === race.raceNumber() &&\n event.fixtureId === race.meetingId() &&\n eventDate === dayjs(raceInformation.meetingInformation.meetingDate()).format('YYYY-MM-DD')\n )\n\n if (!event.raceNumber || !event.runners || !raceMatchedToEvent.length) {\n return\n }\n\n const starters = raceInformation.getStartersForRace(raceMatchedToEvent[0].raceNumber())()\n\n runners.forEach(({ runnerNumber, winPrice, top2Price, top3Price, top4Price, isFavourite }) => {\n const starter = starters.find(starter => starter.number() === runnerNumber)\n if (!starter) return\n const {\n fixedOddsStarterInfo: { sameRaceMultiPrices },\n } = starter\n sameRaceMultiPrices.win(winPrice)\n sameRaceMultiPrices.top2(top2Price)\n sameRaceMultiPrices.top3(top3Price)\n sameRaceMultiPrices.top4(top4Price)\n sameRaceMultiPrices.isFavourite(isFavourite)\n sameRaceMultiPrices.isSuspended(!winPrice)\n })\n}\n","export enum RaceStatus {\n Open = 'Open',\n Abandoned = 'Abandoned',\n Released = 'Released',\n Interim = 'Interim',\n Closed = 'Closed',\n}\n","import { RacePromotions } from '@core/Areas/Racing/Hooks/RacePromotion/types'\n\nexport async function loadPromotions(): Promise {\n const response = await fetch('/api/contentful/race-card-promotion')\n\n if (response.ok) {\n return (await response.json()) as RacePromotions\n }\n\n throw new Error('Could not fetch race card promotions')\n}\n","import { useMemo } from 'react'\nimport { useQuery } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { loadPromotions } from '@core/Areas/Racing/Hooks/RacePromotion/api'\nimport type { Promotion } from '@core/Areas/Racing/Hooks/RacePromotion/types'\nimport { makeRaceIdentifier } from '@core/Areas/Racing/Hooks/RacePromotion/helpers'\nimport { ONE_MINUTE } from '@mobi/utils'\nimport type { IdentifiableRace } from '@core/Areas/Racing/Types'\n\nexport function useRacePromotions(selectedRace: IdentifiableRace) {\n const { data, isError, isLoading } = useQuery([queryKeys.raceCardPromotion], loadPromotions, {\n staleTime: ONE_MINUTE * 15,\n })\n\n const promotions = useMemo(() => {\n if (!data) {\n return []\n }\n\n const { races, promotions } = data\n\n const raceKey = makeRaceIdentifier(selectedRace)\n const promotionKeys = races[raceKey] ?? []\n\n return promotionKeys.map(key => promotions[key])\n }, [data, selectedRace])\n\n return {\n isLoading,\n isError,\n promotions,\n }\n}\n","import type { RaceIdentifierString } from './types'\nimport { formatDate } from '@mobi/utils'\nimport type { IdentifiableRace } from '@core/Areas/Racing/Types'\n\nexport function makeRaceIdentifier({\n meetingDate,\n meetingId,\n raceNumber,\n}: IdentifiableRace): RaceIdentifierString {\n return `${formatDate(meetingDate, 'YYYYMMDD')}/${meetingId}/${raceNumber}`\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { ButtonBlockStyled, type ButtonProps } from '@mobi/component-library/Common/Buttons'\n\nexport const LinkStyled = styled('a')({\n color: hexColors.black,\n textDecoration: 'none',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n})\n\nexport const LinkBlockStyled = styled(ButtonBlockStyled)({\n lineHeight: 2,\n textDecoration: 'none',\n}).withComponent('a')\n","import styled from '@emotion/styled'\nimport { LinkStyled } from '@core/Components/Links/Links.styles'\nimport { hexColors } from '@mobi/settings'\nimport { Text } from '@core/Components/Text'\nimport { tap } from '@mobi/utils'\n\nexport const RacePromotionTextStyled = tap(\n styled(Text)({\n lineHeight: 1.1818,\n margin: 0,\n }),\n component => {\n component.defaultProps = {\n as: 'p',\n size: 'sm',\n }\n }\n)\n\nexport const ExternalLinkStyled = styled(LinkStyled)({\n alignItems: 'center',\n color: hexColors.studio,\n display: 'inline-flex',\n marginTop: '0.5em',\n\n '> svg': {\n marginLeft: '0.25em',\n },\n})\n","import { useRef, useCallback, useEffect } from 'react'\n\n/**\n * Ensure given function can only run once until dependencies change\n *\n * @param {Function} fn The function that should run only once\n * @param {Array} deps An undefined amount of dependencies. If any of these change, the function can be called again\n *\n * @return {Function} The function passed in fn that can only be called once until any of deps change\n */\nexport function useOnce(fn: VoidFunction, ...deps: unknown[]): VoidFunction {\n const wasCalled = useRef(false)\n\n useEffect(() => {\n wasCalled.current = false\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fn, ...deps])\n\n return useCallback(() => {\n if (!wasCalled.current) fn()\n wasCalled.current = true\n }, [fn])\n}\n","import { RaceCardIcon } from '@core/Components/Icons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport React, { useEffect } from 'react'\nimport { CompactExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { RacePromotionTextStyled, ExternalLinkStyled } from './RacePromotion.styles'\nimport {\n trackRacePromotionClosed,\n trackRacePromotionLoaded,\n trackRacePromotionOpened,\n trackRacePromotionTermsAndConditionsClicked,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useOnce } from '@core/Utils/hooks/useOnce'\nimport type { Promotion } from '@core/Areas/Racing/Hooks/RacePromotion/types'\n\nconst RacePromotion = ({ text, title, termsAndConditionsUrl }: Promotion): JSX.Element | null => {\n const onLoaded = useOnce(trackRacePromotionLoaded, text, title, termsAndConditionsUrl)\n const onOpened = useOnce(trackRacePromotionOpened, text, title, termsAndConditionsUrl)\n const onClosed = useOnce(trackRacePromotionClosed, text, title, termsAndConditionsUrl)\n const onLinkClicked = useOnce(\n trackRacePromotionTermsAndConditionsClicked,\n text,\n title,\n termsAndConditionsUrl\n )\n\n function onExpansionChanged(expanded: boolean): void {\n const trackingFunction = expanded ? onOpened : onClosed\n trackingFunction()\n }\n\n useEffect(() => {\n onLoaded()\n }, [onLoaded])\n\n return (\n }\n headerText={title}\n themeName={ExpandablePanelThemes.yellow}\n onExpansionChanged={onExpansionChanged}\n >\n \n {text}\n
      \n {termsAndConditionsUrl ? (\n \n Terms and Conditions \n \n ) : null}\n
      \n \n )\n}\n\nexport default RacePromotion\n","import type { Promotion } from '@core/Areas/Racing/Hooks/RacePromotion/types'\n\nexport function filterRacePromotionsByEntitlement(\n promotions: Promotion[],\n isEntitled: boolean\n): Promotion[] {\n if (isEntitled) {\n return promotions\n }\n\n return promotions.filter(promotion => !promotion.useInducement)\n}\n","import React, { useMemo } from 'react'\nimport { useRacePromotions } from '@core/Areas/Racing/Hooks/RacePromotion'\nimport RacePromotion from '@core/Areas/Racing/Components/RacePromotion/RacePromotion'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { filterRacePromotionsByEntitlement } from '@core/Utils/race-promotions'\nimport type { IdentifiableRace } from '@core/Areas/Racing/Types'\n\nexport const RacePromotions = (props: IdentifiableRace): Nullable => {\n const { promotions, isLoading, isError } = useRacePromotions(props)\n const isEntitled = useInducementService()\n\n const entitledPromotions = useMemo(\n () => filterRacePromotionsByEntitlement(promotions, isEntitled),\n [promotions, isEntitled]\n )\n\n const shouldRender = !isLoading && !isError && entitledPromotions.length > 0\n\n if (!shouldRender) {\n return null\n }\n\n return (\n <>\n {entitledPromotions.map((promotion, i) => {\n return \n })}\n \n )\n}\n","import type { Button, ToggleButton } from '../Types'\nimport {\n ToggleShowAllForm,\n ToggleFixedFlucs,\n ToggleMarketMovers,\n ToggleDoubleProvDiv,\n ToggleQuaddieProvDiv,\n ToggleStewardsCommentsVisible,\n ToggleTipsVisible,\n ToggleResultsVisible,\n ToggleFieldVisible,\n ToggleRaceReplayVisible,\n ToggleRacePreviewVisible,\n} from '@classic/Betting-v2/Components/Commands/driver'\nimport { useCommandState } from './useCommandState'\nimport { useCallback } from 'react'\n\ntype UseBetInformers = {\n buttons: Record\n toggleButton: ToggleButton\n}\n\nconst actions: Record void> = {\n showDoubleProvDiv: ToggleDoubleProvDiv,\n showFixedFlucs: ToggleFixedFlucs,\n showAllForm: ToggleShowAllForm,\n showMarketMovers: ToggleMarketMovers,\n showQuaddieProvDiv: ToggleQuaddieProvDiv,\n commentsVisible: ToggleStewardsCommentsVisible,\n tipsVisible: ToggleTipsVisible,\n resultsVisible: ToggleResultsVisible,\n fieldVisible: ToggleFieldVisible,\n replayVisible: ToggleRaceReplayVisible,\n previewVisible: ToggleRacePreviewVisible,\n}\n\nexport function useBetInformers(): UseBetInformers {\n const toggleButton = useCallback((button: Button): void => {\n actions[button as Button]()\n }, [])\n\n const commandState = useCommandState()\n\n return {\n buttons: commandState,\n toggleButton,\n }\n}\n","import {\n state$,\n bettingV2CommandStateDefaultState,\n BettingV2CommandStateRecord,\n} from '@classic/Betting-v2/Components/Commands/driver'\nimport { useObservable } from '@core/Utils/hooks'\n\nexport function useCommandState(): BettingV2CommandStateRecord {\n return useObservable(state$, bettingV2CommandStateDefaultState)\n}\n","import type {\n DogsRunnerForm,\n FormRaceResponse,\n DogsFormRaceResponse,\n RacesFormRaceResponse,\n TrotsFormRaceResponse,\n RacesRunnerForm,\n TrotsRunnerForm,\n} from './api'\n\n// Type Narrowing - Response\n\nexport function isDogsFormData(formData: FormRaceResponse): formData is DogsFormRaceResponse {\n return formData.StarterType === 'Dogs'\n}\n\nexport function isRacesFormData(formData: FormRaceResponse): formData is RacesFormRaceResponse {\n return formData.StarterType === 'Races'\n}\n\nexport function isTrotsFormData(formData: FormRaceResponse): formData is TrotsFormRaceResponse {\n return formData.StarterType === 'Trots'\n}\n\n// Type Narrowing - Forms\n\nexport function isDogsRunnerForm(\n formData?: FormRaceResponse['Forms']\n): formData is DogsRunnerForm[] {\n if (!formData?.length) return false\n const historyProperty: keyof DogsRunnerForm = 'Histories'\n return historyProperty in formData[0]\n}\n\nexport function isRacesRunnerForm(\n formData?: FormRaceResponse['Forms']\n): formData is RacesRunnerForm[] {\n if (!formData?.length) return false\n const historyProperty: keyof RacesRunnerForm = 'RaceHistories'\n return historyProperty in formData[0]\n}\n\nexport function isTrotsRunnerForm(\n formData?: FormRaceResponse['Forms']\n): formData is TrotsRunnerForm[] {\n if (!formData?.length) return false\n const historyProperty: keyof TrotsRunnerForm = 'TrotHistories'\n return historyProperty in formData[0]\n}\n","import { useMemo } from 'react'\nimport {\n RacePageDataTransferObject,\n ResultsPageDataTransferObject,\n isRacePageDto,\n} from '@mobi/api-types'\nimport { StewardsComment } from '@core/Areas/Racing/Components/StewardsComments/types'\nimport { useRacePageData } from '../useRacePageData'\nimport { formatStewardsComments } from './helpers/formatStewardsComments'\n\nexport const useStewardsComments = ({\n meetingId,\n meetingDate,\n raceNumber,\n}: {\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}): Return => {\n const { isLoading, isError, race, form } = useRacePageData({\n meetingId,\n meetingDate,\n raceNumber,\n withForm: true,\n })\n\n const names = useMemo(\n () => raceNumber && race && getRaceStarterNames(raceNumber, race),\n [raceNumber, race]\n )\n\n if (isLoading || isError || !race || !form || !names) {\n return {\n hasValidStewardsComments: false,\n stewardsComments: [],\n }\n }\n\n const stewardsComments = formatStewardsComments(form.Forms, names)\n\n return {\n hasValidStewardsComments: stewardsComments?.length > 0,\n stewardsComments,\n }\n}\n\n// Local Helpers\n\nconst getRaceStarterNames = (\n raceNumber: number,\n race: RacePageDataTransferObject | ResultsPageDataTransferObject\n): string[] => {\n const names: string[] = []\n if (isRacePageDto(race)) {\n const starters = race.RaceStarters\n starters\n .find(s => s.RaceKey.RaceNumber === raceNumber)\n ?.Starters.forEach(s => names.push(s.Name))\n } else {\n race.Finishers.forEach(s => names.push(s.Name))\n }\n return names\n}\n\n// Types\n\ntype Return = {\n hasValidStewardsComments: boolean\n stewardsComments: StewardsComment[]\n}\n","import { StewardsComment } from '@core/Areas/Racing/Components/StewardsComments/types'\nimport { FormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport {\n isDogsRunnerForm,\n isRacesRunnerForm,\n isTrotsRunnerForm,\n} from '@core/Areas/Racing/Hooks/useRaceFormData/helpers'\n\nexport function formatStewardsComments(\n formData: FormRaceResponse['Forms'],\n names: string[]\n): StewardsComment[] {\n if (isDogsRunnerForm(formData))\n return formData.flatMap((form, index) => {\n const lastRace = form.Histories[0]\n const acceptorName = names[index] || undefined\n\n if (!lastRace?.StewardsComments || !acceptorName) return []\n\n return {\n acceptorName,\n comment: lastRace.StewardsComments,\n timestamp: lastRace.FixtureDate,\n }\n })\n\n if (isRacesRunnerForm(formData))\n return formData.flatMap((form, index) => {\n const lastRace = form.RaceHistories[0]\n const acceptorName = names[index] || undefined\n\n if (!lastRace?.StewardsComments || !acceptorName) return []\n\n return {\n acceptorName,\n comment: lastRace.StewardsComments,\n timestamp: lastRace.FixtureDate,\n }\n })\n\n if (isTrotsRunnerForm(formData))\n return formData.flatMap((form, index) => {\n const lastRace = form.TrotHistories[0]\n const acceptorName = names[index] || undefined\n\n if (!lastRace?.StewardsComments || !acceptorName) return []\n\n return {\n acceptorName,\n comment: lastRace.StewardsComments,\n timestamp: lastRace.FixtureDate,\n }\n })\n\n return []\n}\n","import { Text } from '@core/Components/Text'\nimport styled from '@emotion/styled'\nimport { tap } from '@mobi/utils'\nimport { GapY } from '@core/Components/Gap'\n\nexport const StewardsCommentsStyled = tap(\n styled(GapY)({\n listStyle: 'none',\n margin: 0,\n padding: 0,\n }),\n component => {\n component.defaultProps = {\n as: 'ul',\n gutterSize: '0.3rem',\n }\n }\n)\n\nexport const StewardsCommentTextStyled = tap(\n styled(Text)({\n lineHeight: 'inherit',\n margin: 0,\n }),\n component => {\n component.defaultProps = {\n as: 'p',\n size: 'sm',\n }\n }\n)\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { RaceCardIcon } from '@core/Components/Icons'\nimport { CompactPanel } from '@core/Components/Panel'\nimport { useStewardsComments } from '@core/Areas/Racing/Hooks/useStewardsComments'\nimport { StewardsCommentsStyled, StewardsCommentTextStyled } from './StewardsComments.styles'\n\ntype Props = {\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}\n\nconst StewardsComments = ({ meetingId, meetingDate, raceNumber }: Props): JSX.Element | null => {\n const { hasValidStewardsComments, stewardsComments: comments } = useStewardsComments({\n meetingId,\n meetingDate,\n raceNumber,\n })\n\n if (!hasValidStewardsComments) return null\n\n return (\n }\n headerText='Stewards Comments'\n themeName={ExpandablePanelThemes.lavender}\n >\n \n {comments.map(({ acceptorName, comment, timestamp }, i) => (\n
    • \n \n {acceptorName}: {comment}{' '}\n \n \n
    • \n ))}\n
      \n \n )\n}\n\nexport default StewardsComments\n","import styled from '@emotion/styled'\nimport { Text } from '@core/Components/Text'\nimport { PillStyled } from '@core/Components/Pill'\nimport { tap } from '@mobi/utils'\nimport { hexColors } from '@mobi/settings'\nimport { GapX } from '@core/Components/Gap'\n\nexport const RaceContentTextStyled = tap(\n styled(Text)({\n lineHeight: 'inherit',\n margin: 0,\n }),\n component => {\n component.defaultProps = {\n as: 'p',\n size: 'sm',\n }\n }\n)\n\nexport const RaceContentBadgeStyled = styled(PillStyled)(() => ({\n background: hexColors.black,\n color: hexColors.white,\n padding: '0.1rem 0.8rem',\n marginLeft: '0.5rem',\n}))\n\nexport const RaceContentContainerStyled = styled(GapX)({\n display: 'flex',\n})\n","import dayjs from 'dayjs'\nimport { MeetingPreview, RacePreview, VideoPreviewResponse } from './types'\n\nexport type RaceContent = Omit & {\n racePreviews: Map\n}\n\nexport async function getRacePreviews(meetingDate: Date, meetingId: string): Promise {\n const response = await fetch(\n `/api/contentful/meeting-preview/${dayjs(meetingDate).format('YYYY-MM-DD')}/${meetingId}`\n )\n if (response.ok) {\n const meetingPreview: MeetingPreview = await response.json()\n return {\n title: meetingPreview.title,\n racePreviews: new Map(\n meetingPreview.racePreviews?.map(preview => [preview.raceNumber, preview])\n ),\n tipsterProfilePictureUrl: meetingPreview.tipsterProfilePictureUrl,\n }\n }\n throw new Error()\n}\n\nexport async function getVideoPreviews(\n meetingDate: Date,\n meetingId: string\n): Promise {\n const response = await fetch(\n `/api/video-streams/${dayjs(meetingDate).format('YYYY-MM-DD')}/${meetingId}.json`\n )\n if (response.ok) {\n return (await response.json()) as VideoPreviewResponse\n }\n throw new Error()\n}\n","import { useQuery, UseQueryResult } from 'react-query'\nimport { RacePreview } from '@core/Areas/Racing/Hooks/RaceContent/types'\nimport { getRacePreviews, RaceContent } from './api'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ntype UseRaceContent = Pick & {\n content?: {\n title: string\n racePreview: RacePreview\n tipsterProfilePictureUrl: MaybeDefined\n }\n}\n\nexport function useRaceContent(\n meetingId: string,\n meetingDate: Date,\n raceNumber: number\n): UseRaceContent {\n const queryKey = [queryKeys.meetingPreview, meetingDate, meetingId]\n const queryFn = () => getRacePreviews(meetingDate, meetingId)\n const { isLoading, isError, data } = useQuery(queryKey, queryFn, {\n staleTime: 1000 * 60 * 60, // 1hr\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n retryOnMount: false, // prevent retry of failed responses\n })\n const racePreview = data?.racePreviews.get(raceNumber)\n\n return {\n isLoading,\n isError,\n content: unpackData(data, racePreview),\n }\n}\n\nfunction unpackData(\n raceContentData: MaybeDefined,\n racePreview: MaybeDefined\n): MaybeDefined {\n if (raceContentData === undefined || racePreview === undefined) {\n return undefined\n }\n\n return {\n title: raceContentData.title,\n racePreview,\n tipsterProfilePictureUrl: raceContentData.tipsterProfilePictureUrl,\n }\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const TipsterImageStyled = styled.img({\n height: '5rem',\n width: '5rem',\n\n backgroundColor: hexColors.amethyst,\n borderRadius: '50%',\n})\n","import { useMemo } from 'react'\nimport {\n MeetingInformationDataTransferObject,\n RacePageDTO,\n AcceptorDTO,\n FixedOddsAcceptorInfoDTO,\n isResultsPageDto,\n} from '@mobi/api-types'\nimport type { Acceptor as BaseAcceptor } from '@mobi/betslip/types'\n\n// TODO: Merge this into the BaseAcceptor\nexport type Acceptor = SetOptional\n\nexport type AcceptorMap = Map\n\nfunction priceAvailable(price: string): boolean {\n return !['', '0.00'].includes(price)\n}\n\nfunction getToteWinPrice(acceptorDTO: AcceptorDTO): string {\n if ('ToteWinProvDiv' in acceptorDTO) {\n return acceptorDTO.ToteWinProvDiv.toFixed(2)\n }\n\n return acceptorDTO.DisplayWinDividend\n}\n\nfunction getTotePlacePrice(acceptorDto: AcceptorDTO): string {\n if ('TotePlaceProvDiv' in acceptorDto) {\n return acceptorDto.TotePlaceProvDiv.toFixed(2)\n }\n\n return acceptorDto.DisplayPlaceDividend\n}\n\nfunction getFixedWinPrice(fixedOddsInfo: FixedOddsAcceptorInfoDTO): string {\n if ('WinDiv' in fixedOddsInfo) {\n return fixedOddsInfo.WinDiv.toFixed(2)\n }\n\n return fixedOddsInfo.DisplayWinDividend\n}\n\nfunction getFixedPlacePrice(fixedOddsInfo: FixedOddsAcceptorInfoDTO): string {\n if ('PlaceDiv' in fixedOddsInfo) {\n return fixedOddsInfo.PlaceDiv.toFixed(2)\n }\n\n return fixedOddsInfo.DisplayPlaceDividend\n}\n\nfunction mapAcceptor(\n meetingDTO: MeetingInformationDataTransferObject,\n acceptorDTO: AcceptorDTO\n): Acceptor {\n const acceptor: Acceptor = {\n name: acceptorDTO.Name,\n number: acceptorDTO.Number,\n key: `${meetingDTO.SelectedRace.Key}-${acceptorDTO.Number}`,\n imageUrl: acceptorDTO.SilkImages?.small?.url,\n imageUrlWithSizes: acceptorDTO.SilkImages,\n type: acceptorDTO.Type,\n meetingName: meetingDTO.MeetingName,\n isScratched: acceptorDTO.IsScratched,\n scratchType: acceptorDTO.ScratchType,\n toteOdds: {\n win: getToteWinPrice(acceptorDTO),\n place: getTotePlacePrice(acceptorDTO),\n },\n }\n\n if (\n acceptorDTO.HasFixedOdds &&\n acceptorDTO.FixedOddsInfo &&\n priceAvailable(acceptorDTO.FixedOddsInfo.DisplayWinDividend)\n ) {\n const fixedOddsInfo = acceptorDTO.FixedOddsInfo\n acceptor.fixedOdds = {\n win: getFixedWinPrice(fixedOddsInfo),\n place: getFixedPlacePrice(fixedOddsInfo),\n isScratched: fixedOddsInfo.IsScratched,\n isSuspended: fixedOddsInfo.IsSuspended,\n propositionSeq: fixedOddsInfo.PropositionSequence,\n }\n }\n\n return acceptor\n}\n\nfunction extractAcceptors(race: RacePageDTO): Acceptor[] {\n if (isResultsPageDto(race)) {\n return race.Finishers.map(finisher => mapAcceptor(race.MeetingInformation, finisher))\n }\n\n const { RaceNumber: raceNumber } = race.MeetingInformation.SelectedRace\n const starters = race.RaceStarters.find(({ RaceKey }) => RaceKey.RaceNumber === raceNumber)\n\n if (!starters) {\n return []\n }\n\n return starters.Starters.map(starter => mapAcceptor(race.MeetingInformation, starter))\n}\n\nexport function useAcceptors(race: MaybeDefined): MaybeDefined {\n return useMemo(() => {\n if (!race) {\n return undefined\n }\n\n const acceptors = extractAcceptors(race).map<[number, Acceptor]>(acceptor => [\n acceptor.number,\n acceptor,\n ])\n\n return new Map(acceptors)\n }, [race])\n}\n","import { CSSObject } from '@emotion/styled'\n\nexport function columnGap(gap: string): CSSObject {\n return {\n columnGap: gap,\n\n [`@supports not (column-gap: ${gap})`]: {\n '> *:not(:last-child)': {\n marginRight: gap,\n },\n },\n }\n}\n","import styled from '@emotion/styled'\nimport { columnGap } from '@core/Utils/emotion'\n\nexport const TipButtonsContainerStyled = styled.div({\n display: 'grid',\n gridTemplateColumns: 'repeat(4, 1fr)',\n ...columnGap('0.5rem'),\n})\n","import type { ToteSelection, FobMatchedSelection, BettingType } from '@mobi/betslip/types'\nimport type { MeetingInformationDataTransferObject } from '@mobi/api-types'\nimport type { Acceptor, AcceptorMap } from '@core/Areas/Racing/Hooks/useAcceptors'\nimport { type PriceSources } from '@core/Data/Betting/selections'\nimport { toISODate } from '@mobi/utils'\nimport type { ScratchType } from '@core/Areas/Racing/Types'\nimport type { Props as TipButtonProps } from '@core/Areas/Racing/Components/BettableTips/TipButton'\nimport type { Odds } from '@core/Data/Racing'\nimport type { RawTips } from '@core/Areas/Racing/Components/BettableTips/types'\n\ntype FixedOddsAcceptor = SetRequired\n\nexport type TipPriceAndScratchingsProps = Pick<\n TipButtonProps,\n 'isScratched' | 'toteScratchType' | 'isSuspended' | 'price'\n> & {\n isFixedOdds: boolean\n priceSource: PriceSources\n}\n\nfunction formatTips(tips: RawTips): number[] {\n if (typeof tips === 'string') {\n return tips.split(',').map(tip => +tip.trim())\n }\n\n return tips\n}\n\nexport function getAcceptorsFromTips(tips: RawTips, acceptors: AcceptorMap): Acceptor[] {\n return formatTips(tips)\n .filter(tipNumber => !Number.isNaN(tipNumber) && acceptors.has(tipNumber))\n .map(tipNumber => acceptors.get(tipNumber) as Acceptor)\n}\n\nexport function makeToteSelection(\n meeting: MeetingInformationDataTransferObject,\n acceptor: Acceptor | number\n): ToteSelection {\n return {\n betType: 'Win & Place',\n fixtureDate: toISODate(new Date(meeting.MeetingDate)),\n fixtureId: meeting.MeetingId,\n raceNumber: meeting.SelectedRace.RaceNumber,\n selectionString:\n typeof acceptor === 'number' ? acceptor.toString() : acceptor.number.toString(),\n numberOfCombinations: 1,\n isRovingBanker: false,\n isLegIn: false,\n isAllways: false,\n }\n}\n\nfunction parsePrice(value: string): number {\n const price = parseFloat(value)\n return Number.isNaN(price) ? 0 : price\n}\n\nfunction makeFobMatchedSelection(\n meeting: MeetingInformationDataTransferObject,\n acceptor: FixedOddsAcceptor,\n priceSource: PriceSources\n): FobMatchedSelection {\n const winPrice = parsePrice(acceptor.fixedOdds.win)\n const placePrice = parsePrice(acceptor.fixedOdds.place)\n\n return {\n type: 'fob-matched',\n fixtureDate: toISODate(new Date(meeting.MeetingDate)),\n fixtureId: meeting.MeetingId,\n raceNumber: meeting.SelectedRace.RaceNumber,\n acceptorNumber: acceptor.number,\n priceSource,\n propositionSeq: '',\n winPrice,\n winPriceLastSeen: null,\n placePrice,\n placePriceLastSeen: null,\n }\n}\n\nexport function makeSelection(\n meeting: MeetingInformationDataTransferObject,\n acceptor: Acceptor,\n isFixedOdds: boolean,\n priceSource: PriceSources\n): [BettingType, ToteSelection | FobMatchedSelection] {\n if (isFixedOdds) {\n return [\n 'fixed-odds-racing',\n makeFobMatchedSelection(meeting, acceptor as FixedOddsAcceptor, priceSource),\n ]\n }\n\n return ['tote-racing', makeToteSelection(meeting, acceptor)]\n}\n\nfunction extractPrice(odds: Odds): string {\n return odds.win || odds.place || '0.00'\n}\n\nexport function getPriceAndScratchings(acceptor: Acceptor): TipPriceAndScratchingsProps {\n if (acceptor.fixedOdds) {\n return {\n isSuspended: acceptor.fixedOdds.isSuspended,\n isScratched: !!acceptor.fixedOdds.isScratched,\n toteScratchType: 'Standard',\n price: extractPrice(acceptor.fixedOdds),\n priceSource: 'api',\n isFixedOdds: true,\n }\n }\n\n return {\n isScratched: acceptor.isScratched,\n toteScratchType: acceptor.scratchType as ScratchType,\n isSuspended: false,\n price: extractPrice(acceptor.toteOdds),\n priceSource: 'api',\n isFixedOdds: false,\n }\n}\n\nexport const hasTips = (tips: string, tipster: MaybeDefined): boolean =>\n !['', 'no tips'].includes(tips.toLowerCase()) && !!tipster\n","import styled from '@emotion/styled'\nimport { ButtonSelectionStyled } from '@mobi/component-library/Common/Buttons'\nimport { greaterThan } from '@mobi/component-library/Utils/media'\nimport { hexColors } from '@mobi/settings'\nimport { Text } from '@core/Components/Text'\nimport { columnGap } from '@core/Utils/emotion'\n\nexport const TipButtonStyled = styled(ButtonSelectionStyled)(props => ({\n alignItems: 'center',\n boxSizing: 'border-box',\n ...columnGap('0.4rem'),\n cursor: `${props.isDisabled ? 'default' : 'pointer'}`,\n display: 'inline-flex',\n fontSize: '1.4rem',\n height: '5rem',\n justifyContent: 'center',\n margin: 0,\n overflow: 'hidden',\n padding: '1rem 0.5rem',\n width: '100%',\n\n [`${greaterThan('px350')}`]: {\n ...columnGap('0.7rem'),\n padding: '1rem 0.7rem',\n },\n}))\n\nexport const TipInformationStyled = styled.div({\n alignItems: 'center',\n borderRadius: '0.5rem',\n display: 'inline-flex',\n flexDirection: 'column',\n flexGrow: 1,\n fontWeight: 400,\n height: '100%',\n justifyContent: 'space-between',\n padding: '0 0.25rem',\n width: '3.8rem',\n})\n\nexport const ScratchedTextStyled = styled(Text)({\n color: hexColors.red,\n textTransform: 'uppercase',\n})\n","import styled from '@emotion/styled'\nimport type { CSSProperties } from 'react'\nimport { colors } from '@core/Settings'\nimport { ArrowDirection } from './PriceChangeDisplay'\n\nconst {\n default: { color: defaultColor, secondary: secondaryColor },\n priceChange: {\n background: priceChangeBG,\n selected: { background: priceChangeSelectedBG },\n arrow: { borderColor: arrowBorderColor },\n background: lightArrowBorderColor,\n },\n} = colors.starters.buttonSelection\n\nexport const PriceChangeContainerStyled = styled('span')<{\n isInline?: boolean\n containerStyle?: CSSProperties\n}>(\n {\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'flex-end',\n\n width: '100%',\n padding: '0 0.3rem',\n margin: 0,\n\n fontFamily: 'inherit',\n fontSize: '1.2rem',\n lineHeight: 1,\n textAlign: 'right',\n },\n ({ isInline = false, containerStyle = {} }) => ({\n height: (isInline && '3rem') || undefined,\n alignItems: (isInline && 'center') || undefined,\n ...containerStyle,\n })\n)\n\ninterface PriceWrapperStyled {\n isPriceChanging: boolean\n isSelected?: boolean\n isInline?: boolean\n isWidthDynamic?: boolean\n}\nexport const PriceWrapperStyled = styled('span')(\n {\n boxSizing: 'border-box',\n display: 'flex',\n position: 'relative',\n padding: '0.2rem',\n },\n ({ isWidthDynamic }) => ({\n flexDirection: isWidthDynamic ? 'row' : 'column',\n justifyContent: isWidthDynamic ? 'space-between' : 'center',\n alignItems: isWidthDynamic ? 'center' : undefined,\n height: isWidthDynamic ? '2rem' : undefined,\n paddingRight: isWidthDynamic ? '0.5rem' : undefined,\n }),\n ({ isPriceChanging, isSelected = false, isInline = false, isWidthDynamic }) => ({\n width: isInline ? '6.5rem' : '100%',\n\n '&:not(:only-of-type):first-of-type': {\n marginBottom: (!isInline && '0.2rem') || undefined,\n marginRight: (isInline && '0.2rem') || undefined,\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 0,\n transition: 'opacity 0.2s ease-in-out',\n opacity: isPriceChanging ? 1 : 0,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: '0.3rem',\n background: isSelected ? priceChangeSelectedBG : priceChangeBG,\n height: isWidthDynamic ? '2rem' : 'auto',\n paddingRight: isWidthDynamic ? '0.5rem' : 'auto',\n },\n })\n)\n\nexport const PriceInnerStyled = styled('span')<{\n shouldForceColor?: boolean\n centerContent?: boolean\n}>(\n {\n position: 'relative',\n zIndex: 1,\n },\n // Force color to fix inherited style\n ({ shouldForceColor = false, centerContent = false }) => ({\n textAlign: centerContent ? 'center' : 'right',\n color: (shouldForceColor && `${defaultColor} !important`) || undefined,\n })\n)\n\nexport const PriceLableStyled = styled('span')({\n display: 'inline-block',\n width: '1.2rem',\n color: `${secondaryColor} !important`,\n})\n\nconst PriceChangeIndicatorsStyled = styled('div')<{\n arrowDirection: ArrowDirection\n light?: boolean\n}>(\n {\n display: 'flex',\n justifyContent: 'center',\n\n '&::before, &::after': {\n content: '\"\"',\n borderStyle: 'solid',\n borderColor: 'transparent',\n borderWidth: 0,\n transitionProperty: 'transform, opacity',\n transitionTimingFunction: 'ease-in',\n transitionDuration: '0.2s',\n opacity: 0,\n },\n\n '&::before': {\n transform: 'translateY(3px)',\n },\n '&::after': {\n transform: 'translateY(-3px)',\n },\n },\n ({ arrowDirection, light = false }) => ({\n opacity: arrowDirection ? 1 : 0,\n ...getArrowStyles(arrowDirection, light),\n })\n)\n\nconst getArrowStyles = (arrowDirection: ArrowDirection, light: boolean) => {\n const borderColor = light ? lightArrowBorderColor : arrowBorderColor\n const up = {\n '&::before': {\n borderWidth: '0 0.5rem 0.5rem 0.5rem',\n borderColor: `transparent transparent ${borderColor} transparent`,\n transform: 'translateY(0)',\n opacity: 1,\n },\n }\n const down = {\n '&::after': {\n borderWidth: '0.5rem 0.5rem 0 0.5rem',\n borderColor: `${borderColor} transparent transparent transparent`,\n transform: 'translateY(0)',\n opacity: 1,\n },\n }\n\n if (arrowDirection === 'UP') {\n return up\n }\n if (arrowDirection === 'DOWN') {\n return down\n }\n\n if (arrowDirection === 'BOTH') {\n return { ...up, ...down }\n }\n\n return {}\n}\n\nexport const PriceChangeIndicatorInsideStyled = styled(PriceChangeIndicatorsStyled)<{\n isWidthDynamic?: boolean\n}>(\n {\n zIndex: 1,\n },\n ({ isWidthDynamic }) => ({\n minWidth: isWidthDynamic ? '1.8rem' : undefined,\n position: isWidthDynamic ? undefined : 'absolute',\n left: isWidthDynamic ? undefined : '0.2rem',\n top: isWidthDynamic ? undefined : '50%',\n transform: isWidthDynamic ? undefined : 'translateY(-50%)',\n })\n)\n\nexport const PriceChangeIndicatorAboveStyled = styled(PriceChangeIndicatorsStyled)({\n position: 'absolute',\n top: '-0.9rem',\n left: '50%',\n transform: 'translateX(-50%)',\n})\n","import { RootState } from '@core/Store'\n\nexport const getSelectedProposition = ({ raceCard }: RootState) => raceCard.selectedProposition\n\nexport const getCurrentBetType = ({ raceCard }: RootState) => raceCard.currentBetType\n\nexport const getToteSwapOptions = ({ raceCard }: RootState) => raceCard.toteSwapState[0]\nexport const getActiveToteSwap = ({ raceCard }: RootState) => raceCard.toteSwapState[1] || null\n\nexport const getCurrentRacePageQueryKey = ({ raceCard }: RootState) =>\n raceCard.currentRacePageQueryKey\n","import { ImageUrlWithSizes, ImageUrlWithSize, ImageSize } from '@core/Data/Racing'\nimport { formatDateStringWithoutChangingTimezone } from '@mobi/utils'\n\ntype Sizes = 'small' | 'large' | 'larger' | 'largest'\n\nexport interface BuildFOOImageUrlWithSizesProps {\n meetingDate: string\n racecourseSeq?: number | null\n raceNumber: number | null\n isTrots: boolean\n isDogs: boolean\n starterNumber: number\n meetingCode?: string\n}\n\nexport interface BuildFOOImageUrlWithSizeProps extends BuildFOOImageUrlWithSizesProps {\n imageSize: Sizes\n}\n\nexport const RaceSmall: ImageSize = { width: 25, height: 30, y: 0 }\nexport const RaceLarge: ImageSize = { width: 35, height: 42, y: 0 }\nexport const RaceLarger: ImageSize = { width: 45, height: 54, y: 0 }\nexport const RaceLargest: ImageSize = { width: 55, height: 77, y: 0 }\nexport const DogSmall: ImageSize = { width: 25, height: 25, y: 0 }\nexport const DogLarge: ImageSize = { width: 35, height: 35, y: 0 }\nexport const DogLarger: ImageSize = { width: 45, height: 45, y: 0 }\nexport const DogLargest: ImageSize = { width: 55, height: 55, y: 0 }\nexport const TrotSmall: ImageSize = { width: 24, height: 18, y: -1 }\nexport const TrotLarge: ImageSize = { width: 36, height: 36, y: -1 }\nexport const TrotLarger: ImageSize = { width: 48, height: 48, y: -1 }\nexport const TrotLargest: ImageSize = { width: 60, height: 60, y: -1 }\n\nexport function getSize(isTrots: boolean, isDogs: boolean, imageSize: Sizes): ImageSize {\n const sizes: Record = {\n RaceSmall,\n RaceLarge,\n RaceLarger,\n RaceLargest,\n DogSmall,\n DogLarge,\n DogLarger,\n DogLargest,\n TrotSmall,\n TrotLarge,\n TrotLarger,\n TrotLargest,\n }\n\n return (\n sizes[\n `${isTrots ? 'Trot' : 'Race'}${imageSize.charAt(0).toUpperCase() + imageSize.slice(1)}` ||\n `${isDogs ? 'Dog' : 'Race'}${imageSize.charAt(0).toUpperCase() + imageSize.slice(1)}`\n ] || RaceSmall\n )\n}\n\nexport function getImageUrlWithSize({\n meetingDate,\n racecourseSeq,\n raceNumber,\n isTrots,\n isDogs,\n imageSize,\n starterNumber,\n meetingCode,\n}: BuildFOOImageUrlWithSizeProps): ImageUrlWithSize {\n return {\n url: getImageSizeUrl({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize,\n starterNumber,\n meetingCode,\n }),\n size: getSize(isTrots, isDogs, imageSize),\n }\n}\n\nexport function getImageUrlWithSizes({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n starterNumber,\n meetingCode,\n}: BuildFOOImageUrlWithSizesProps): ImageUrlWithSizes {\n return {\n small: getImageUrlWithSize({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize: 'small',\n starterNumber,\n meetingCode,\n }),\n large: getImageUrlWithSize({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize: 'large',\n starterNumber,\n meetingCode,\n }),\n larger: getImageUrlWithSize({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize: 'larger',\n starterNumber,\n meetingCode,\n }),\n largest: getImageUrlWithSize({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize: 'largest',\n starterNumber,\n meetingCode,\n }),\n }\n}\n\nexport function getImageSizeUrl({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n imageSize,\n starterNumber,\n meetingCode,\n}: BuildFOOImageUrlWithSizeProps): string {\n const urlDate = encodeURIComponent(\n formatDateStringWithoutChangingTimezone(meetingDate, 'MM/DD/YYYY')\n )\n return `/Image/GetSingleSilkWithSizes?racecourseSeq=${racecourseSeq}&meetingDate=${urlDate}&raceNo=${raceNumber}&isTrots=${isTrots}&isDogs=${isDogs}&size=${imageSize}&starterNumber=${starterNumber}&meetingCode=${meetingCode}`\n}\n","import { getImageUrlWithSizes } from '@core/Areas/RaceCardFixedOnly/Hooks/Silks/silkImage'\n\nexport function getSingleSilkImageUri({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n starterNumber,\n isFieldSummaryPopulated,\n meetingCode,\n}: {\n racecourseSeq?: number | null\n meetingDate: string\n raceNumber: number | null\n isTrots: boolean\n isDogs: boolean\n starterNumber: number\n isFieldSummaryPopulated: boolean\n meetingCode?: string\n}) {\n if (!isFieldSummaryPopulated) {\n return null\n }\n if (!racecourseSeq || !raceNumber) {\n return null\n }\n return getImageUrlWithSizes({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n starterNumber,\n meetingCode,\n })\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport interface SingleSilkImageProps {\n isDogsSilk: boolean\n}\n\nexport const SingleSilkImageStyled = styled.img(({ isDogsSilk }) => {\n return {\n maxWidth: '2.5rem',\n height: 'fit-content',\n boxSizing: 'border-box',\n border: (isDogsSilk && `1px solid ${hexColors.nero}`) || undefined,\n }\n})\n","import { useAppSelector } from '@core/Store/hooks'\nimport { getCurrentRacePageQueryKey } from '@core/Areas/RaceCard/Store/selectors'\nimport { useQuery } from 'react-query'\nimport { RacePageDataTransferObject } from '@mobi/api-types'\nimport React from 'react'\nimport { getSingleSilkImageUri } from '@core/Areas/RaceCardFixedOnly/Hooks/Silks/api'\nimport styled from '@emotion/styled'\nimport { SingleSilkImageStyled } from '@core/Components/SilkImage/SingleSilkImage.styles'\n\nexport const MatchedSilkImage: React.FC<{ starterNumber: number }> = ({ starterNumber }) => {\n const racePageQueryKey = useAppSelector(getCurrentRacePageQueryKey)\n const { data } = useQuery({\n queryKey: racePageQueryKey || [],\n enabled: !!racePageQueryKey,\n staleTime: Infinity,\n })\n\n if (data == undefined || data.MeetingInformation == undefined) return null\n\n const singleSilkImageUri = getSingleSilkImageUri({\n racecourseSeq: data?.RacecourseSeq,\n meetingDate: data?.MeetingInformation?.MeetingDate,\n raceNumber: data?.MeetingInformation?.SelectedRace.RaceNumber,\n isTrots: data?.MeetingInformation.MeetingCode === 'Trots',\n isDogs: data?.MeetingInformation.MeetingCode === 'Dogs',\n starterNumber,\n isFieldSummaryPopulated: true,\n meetingCode: data?.MeetingInformation.MeetingCode,\n })\n\n if (singleSilkImageUri == null) return null\n\n return (\n \n \n \n )\n}\n\nconst SilkWrapperStyled = styled.div({\n display: 'block',\n marginTop: '0.4rem',\n marginLeft: '-0.2rem',\n})\n","import styled, { CSSObject } from '@emotion/styled'\nimport { calculateRem } from '@core/Utils/calculateRem/calculateRem'\nimport { hexColors } from '@mobi/settings'\nimport { type BreakpointKey, greaterOrEqualThan } from '@mobi/component-library/Utils/media'\n\ntype Breakpoint = {\n breakpoint?: BreakpointKey\n baseWidth: number\n}\n\nexport interface SilkImageProps {\n width: number\n height: number\n url: string\n xOffset: number\n isDogsSilk: boolean\n baseWidth?: number\n breakpoints?: Breakpoint[]\n}\n\nconst BASE_WIDTH = 25\n\ntype Rem = ReturnType\n\ntype ImageSize = {\n imageWidth: Rem\n imageHeight: Rem\n}\n\nfunction calculateSize(baseWidth: number, width: number, height: number): ImageSize {\n const ratioToFitContainer = baseWidth / width\n const imageHeight = calculateRem(ratioToFitContainer * height, {\n roundSizeBeforeCalc: false,\n })\n const imageWidth = calculateRem(baseWidth, {\n roundSizeBeforeCalc: false,\n })\n\n return {\n imageHeight,\n imageWidth,\n }\n}\n\nfunction makeCSSObject(\n imageWidth: Rem,\n imageHeight: Rem,\n url: string,\n xOffset: number,\n isDogsSilk: boolean\n): CSSObject {\n return {\n width: imageWidth,\n height: isDogsSilk ? imageWidth : imageHeight,\n boxSizing: 'border-box',\n background: `url(${url})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: `auto ${imageHeight}`,\n backgroundPosition: `calc(${imageWidth} * ${-xOffset}) center`,\n border: (isDogsSilk && `1px solid ${hexColors.nero}`) || undefined,\n }\n}\n\nexport const SilkImageStyled = styled('div')(({\n xOffset,\n url,\n width,\n height,\n baseWidth = BASE_WIDTH,\n isDogsSilk,\n breakpoints,\n}) => {\n if (breakpoints === undefined) {\n breakpoints = [{ baseWidth }]\n }\n\n return breakpoints.reduce((css, { breakpoint, baseWidth }) => {\n const { imageWidth, imageHeight } = calculateSize(baseWidth, width, height)\n\n const cssObject = makeCSSObject(imageWidth, imageHeight, url, xOffset, isDogsSilk)\n\n if (breakpoint === undefined) {\n return {\n ...css,\n ...cssObject,\n }\n }\n\n return {\n ...css,\n [greaterOrEqualThan(breakpoint)]: cssObject,\n }\n }, {})\n})\n","import React from 'react'\nimport { SilkImageStyled, SilkImageProps } from './SilkImage.styles'\n\nexport function SilkImage({\n width,\n height,\n url,\n xOffset,\n isDogsSilk,\n baseWidth,\n breakpoints,\n}: SilkImageProps) {\n return (\n \n )\n}\n","import React, { type ReactFragment } from 'react'\nimport { Text } from '@core/Components/Text'\nimport { ScratchedTextStyled, TipButtonStyled, TipInformationStyled } from './TipButton.styles'\nimport type { ScratchType } from '@mobi/api-types'\nimport { useFeature, usePriceChangeAnimation } from '@core/Utils/hooks'\nimport {\n PriceChangeIndicatorInsideStyled,\n PriceInnerStyled,\n PriceWrapperStyled,\n} from '@core/Components/PriceChangeDisplay/PriceChangeDisplay.styles'\nimport { MatchedSilkImage } from '@core/Areas/Racing/Components/SilkImage/MatchedSilkImage'\nimport { SilkImage } from '@core/Components/SilkImage/SilkImage'\nimport type { ImageSize } from '@core/Data/Racing'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport type Props = {\n number: number\n price: string\n isScratched: boolean\n toteScratchType: ScratchType | string\n isSuspended: boolean\n meetingCode: RaceCodesLowerCase\n imageUrl: string\n imageSize: ImageSize\n isRaceOpen: boolean\n onClick: () => void\n}\n\nexport const TipButton = ({\n number,\n price,\n isScratched,\n toteScratchType,\n isSuspended,\n meetingCode,\n imageUrl,\n imageSize,\n isRaceOpen,\n onClick,\n}: Props): JSX.Element => {\n const [state] = usePriceChangeAnimation(price)\n const disabled = !isRaceOpen || isScratched || isSuspended\n const isFieldSummaryV2Active = useFeature('FIELD_SUMMARY_V2')\n\n return (\n \n
      \n {isFieldSummaryV2Active ? (\n \n ) : (\n \n )}\n
      \n\n \n {number}\n\n \n {isScratched ? (\n {getScratchedText(toteScratchType)}\n ) : (\n \n {isRaceOpen && (\n \n )}\n \n {price}\n \n
      \n )}\n \n \n \n )\n}\n\nfunction getScratchedText(toteScratchType: ScratchType | string): ReactFragment | string {\n return toteScratchType === 'Late' ? 'LATE' : 'SCR'\n}\n","import type { RacingBetType } from '@mobi/betslip/types'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nconst trackTipsBetClickedEvent = (\n key: typeof keys.tipsBetClicked | typeof keys.racePreviewBetClicked,\n meetingCode: string,\n meetingName: string,\n buttonPosition: number,\n betType: RacingBetType\n) =>\n trackEvent(key, {\n meetingCode,\n meetingName,\n buttonPosition,\n betType,\n })\n\nexport const trackTipsBetClicked = (\n meetingCode: string,\n meetingName: string,\n buttonPosition: number,\n betType: RacingBetType\n) =>\n trackTipsBetClickedEvent(keys.tipsBetClicked, meetingCode, meetingName, buttonPosition, betType)\n\nexport const trackRacePreviewBetClicked = (\n meetingCode: string,\n meetingName: string,\n buttonPosition: number,\n betType: RacingBetType\n) =>\n trackTipsBetClickedEvent(\n keys.racePreviewBetClicked,\n meetingCode,\n meetingName,\n buttonPosition,\n betType\n )\n","import { useCallback } from 'react'\nimport type { RaceDetails } from '@mobi/betslip/types'\nimport type { MeetingInformationDataTransferObject } from '@mobi/api-types'\nimport {\n trackRacePreviewBetClicked,\n trackTipsBetClicked,\n} from '@core/Areas/Racing/Components/BettableTips/analytics'\nimport { makeSelection } from '@core/Areas/Racing/Components/BettableTips/helpers'\nimport { PriceSources } from '@core/Data/Betting/selections'\nimport type { Acceptor } from '@core/Areas/Racing/Hooks/useAcceptors'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nexport type TipSource = 'tips' | 'race-preview'\n\ntype Props = {\n meeting: MeetingInformationDataTransferObject\n acceptor: Acceptor\n isFixedOdds: boolean\n priceSource: PriceSources\n buttonPosition: number\n tipSource: TipSource\n}\n\nexport function useBettableTipQuickBetting({\n meeting,\n acceptor,\n isFixedOdds,\n priceSource,\n buttonPosition,\n tipSource,\n}: Props) {\n const loadQuickBet = useCallback(() => {\n const selectedRace = meeting.SelectedRace\n\n const [bettingType, selection] = makeSelection(meeting, acceptor, isFixedOdds, priceSource)\n\n const shouldAllowPlaceInvestment = isFixedOdds\n ? (meeting.SelectedRace.FixedOddsInfo?.IsPlaceAvailable ?? false)\n : meeting.SelectedRace.HasPlacePool\n\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: {\n shouldAllowPlaceInvestment,\n isEachWayAvailable: false,\n bettingType,\n selection,\n selectionDetails: {\n acceptors: [acceptor],\n races: [\n {\n meetingDate: meeting.MeetingDate,\n raceTime: selectedRace.RaceTime,\n acceptorKeys: [acceptor.key],\n raceNumber: selectedRace.RaceNumber,\n key: selectedRace.Key,\n type: selectedRace.RaceType,\n distance: selectedRace.Distance,\n isFixedOddsRace: selectedRace.IsFixedOddsRace,\n meetingCode: meeting.MeetingCode,\n meetingId: meeting.MeetingId,\n meetingName: meeting.MeetingName,\n },\n ],\n } as RaceDetails,\n betSource: tipSource,\n },\n })\n\n const trackFn = tipSource === 'tips' ? trackTipsBetClicked : trackRacePreviewBetClicked\n\n trackFn(meeting.MeetingCode, meeting.MeetingName, buttonPosition, 'Win & Place')\n }, [meeting, acceptor, isFixedOdds, priceSource, buttonPosition, tipSource])\n\n return {\n loadQuickBet,\n }\n}\n","import React from 'react'\nimport { TipButton } from './TipButton'\nimport type { Acceptor } from '@core/Areas/Racing/Hooks/useAcceptors'\nimport type { MeetingInformationDataTransferObject } from '@mobi/api-types'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { TipPriceAndScratchingsProps } from '@core/Areas/Racing/Components/BettableTips/helpers'\nimport {\n type TipSource,\n useBettableTipQuickBetting,\n} from '@core/Areas/Racing/Components/BettableTips/Hooks/useBettableTipQuickBetting'\n\ntype Props = TipPriceAndScratchingsProps & {\n meeting: MeetingInformationDataTransferObject\n acceptor: Acceptor\n buttonPosition: number\n isRaceOpen: boolean\n tipSource: TipSource\n}\n\nexport const BettableTip = ({\n meeting,\n acceptor,\n isFixedOdds,\n price,\n priceSource,\n isScratched,\n toteScratchType,\n isSuspended,\n buttonPosition,\n isRaceOpen,\n tipSource,\n}: Props) => {\n const { loadQuickBet } = useBettableTipQuickBetting({\n meeting,\n acceptor,\n isFixedOdds,\n priceSource,\n buttonPosition,\n tipSource,\n })\n\n return (\n \n )\n}\n","import React, { useMemo } from 'react'\nimport type { RacePageDTO } from '@mobi/api-types'\nimport { useAcceptors } from '@core/Areas/Racing/Hooks/useAcceptors'\nimport { TipButtonsContainerStyled } from './BettableTips.styles'\nimport {\n getAcceptorsFromTips,\n getPriceAndScratchings,\n} from '@core/Areas/Racing/Components/BettableTips/helpers'\nimport { BettableTip } from '@core/Areas/Racing/Components/BettableTips/BettableTip'\nimport type { RawTips } from '@core/Areas/Racing/Components/BettableTips/types'\nimport type { TipSource } from '@core/Areas/Racing/Components/BettableTips/Hooks/useBettableTipQuickBetting'\n\nexport type Props = {\n tips: RawTips\n raceKey: string\n isRaceOpen: boolean\n tipSource: TipSource\n race?: RacePageDTO\n}\n\nexport const BettableTips = ({\n tips,\n isRaceOpen,\n race,\n tipSource,\n}: Props): Nullable => {\n const acceptors = useAcceptors(race)\n\n const selectedAcceptors = useMemo(\n () => getAcceptorsFromTips(tips, acceptors ?? new Map()),\n [tips, acceptors]\n )\n\n if (race === undefined || selectedAcceptors.length < 1) {\n return null\n }\n\n return (\n \n {selectedAcceptors.map((acceptor, i) => (\n \n ))}\n \n )\n}\n","import React, { useEffect } from 'react'\nimport type { RacePageDTO } from '@mobi/api-types'\nimport { CompactExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { RaceCardIcon } from '@core/Components/Icons'\nimport {\n RaceContentBadgeStyled,\n RaceContentContainerStyled,\n RaceContentTextStyled,\n} from './RaceContentPanel.styles'\nimport {\n trackRacePreviewClosed,\n trackRacePreviewLoaded,\n trackRacePreviewOpened,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useOnce } from '@core/Utils/hooks/useOnce'\nimport { Provider } from 'react-redux'\nimport { store } from '@core/Store'\nimport { useRaceContent } from '@core/Areas/Racing/Hooks/RaceContent'\nimport type { IdentifiableRace } from '@core/Areas/Racing/Types'\nimport { TipsterImage } from '@core/Components/TipsterImage'\nimport { BettableTips } from '@core/Areas/Racing/Components/BettableTips/BettableTips'\n\ntype Props = IdentifiableRace & {\n raceKey: string\n isRaceOpen: boolean\n race?: RacePageDTO\n}\n\ntype SuggestedBetProps = {\n text?: string\n badge?: string\n}\n\nexport const RaceContentPanel = (props: Props): Nullable => {\n const onLoaded = useOnce(trackRacePreviewLoaded, props)\n const onOpened = useOnce(trackRacePreviewOpened, props)\n const onClosed = useOnce(trackRacePreviewClosed, props)\n const { isRaceOpen, raceKey, meetingId, meetingDate, raceNumber, race } = props\n const { isLoading, isError, content } = useRaceContent(meetingId, meetingDate, raceNumber)\n\n useEffect(() => {\n if (content?.racePreview) {\n onLoaded()\n }\n }, [content?.racePreview, onLoaded])\n\n if (isLoading || isError || !content?.racePreview) {\n return null\n }\n\n const onExpansionChanged = (expanded: boolean): void => {\n const trackingFunction = expanded ? onOpened : onClosed\n trackingFunction()\n }\n\n const expertTips = (content.racePreview.numbers ?? []).length > 0\n\n return (\n \n }\n data-testid={`race-preview`}\n onExpansionChanged={onExpansionChanged}\n >\n \n {!!content.tipsterProfilePictureUrl && (\n \n )}\n\n {content.racePreview.previewText}\n \n\n {expertTips && (\n <>\n
      \n \n \n )}\n\n \n \n
      \n )\n}\n\nconst SuggestedBet = ({ text, badge }: SuggestedBetProps): Nullable => {\n if (!text) {\n return null\n }\n\n return (\n <>\n
      \n \n Suggested Bet: {text}\n {badge ? {badge} : ''}\n \n \n )\n}\n","import { useQuery, UseQueryResult } from 'react-query'\nimport { VideoPreview, VideoPreviewResponse } from '@core/Areas/Racing/Hooks/RaceContent/types'\nimport { getVideoPreviews } from './api'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ntype UseRaceContent = Pick & {\n content?: VideoPreview\n}\n\nexport function useVideoPreview(\n meetingId: string,\n meetingDate: Date,\n raceNumber: number\n): UseRaceContent {\n const queryKey = [queryKeys.videoPreview, meetingDate, meetingId]\n const queryFn = () => getVideoPreviews(meetingDate, meetingId)\n const { isLoading, isError, data } = useQuery(queryKey, queryFn, {\n staleTime: 1000 * 60 * 60, // 1hr\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n retryOnMount: false, // prevent retry of failed responses\n })\n\n const content = data && new Map(Object.entries(data))\n\n return {\n isLoading,\n isError,\n content: content?.get(raceNumber.toString()),\n }\n}\n","import styled from '@emotion/styled'\n\n/**\n * A video container with aspect ratio fallback support\n *\n * To check if the fallback is required, @supports is used. This query is widely supported\n * Fallback uses a padding that results from (9 / 16) * 100\n *\n * @link https://caniuse.com/?search=supports\n * @link https://usefulangle.com/post/142/css-video-aspect-ratio\n */\nexport const VideoContainerStyled = styled.div({\n width: '100%',\n\n '@supports not (aspect-ratio: 16/9)': {\n height: '0px',\n paddingTop: '56.25%',\n position: 'relative',\n\n '& > video': {\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n },\n },\n})\n\nexport const VideoStyled = styled.video({\n aspectRatio: '16 / 9',\n width: '100%',\n})\n","import { type RefObject, useEffect, useRef, useState } from 'react'\nimport Hls, { type HlsConfig } from 'hls.js'\nimport { isReactNativeIos } from '@mobi/web-native-comms/web'\nimport { isInIosBrowser } from '@classic/Foundation/Services/Device/DeviceIdentificationService'\nimport type { ErrorCallbackArgs } from '@core/Utils/hooks/Video/errors'\n\nconst defaultFallbackOptions: Partial = {\n liveSyncDurationCount: 6,\n liveMaxLatencyDurationCount: 10,\n liveBackBufferLength: 1,\n startFragPrefetch: true,\n}\n\ntype ErrorCallback = (error: ErrorCallbackArgs, hlsInstance?: Hls) => void\n\ntype Props = {\n videoRef: RefObject\n streamUrl: MaybeDefined\n fallbackOptions?: Partial\n onError: ErrorCallback\n isStream?: boolean\n}\n\ntype PlaybackSupportStatus =\n | 'pending' // Playback support status is yet to be determined\n | 'supported' // Playback is supported, be it natively or through hls\n | 'unsupported' // Playback is not supported, be it natively or through hls\n\nconst initUsingHLS = (\n videoElement: HTMLVideoElement,\n options: Partial = {},\n onError?: ErrorCallback\n): Maybe => {\n if (!Hls.isSupported()) {\n return null\n }\n\n const videoSource = videoElement.src\n\n const hls = new Hls({\n ...defaultFallbackOptions,\n ...options,\n })\n\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(videoSource)\n })\n\n hls.on(Hls.Events.ERROR, (event, error) => {\n if (error.fatal && error.type === Hls.ErrorTypes.OTHER_ERROR) {\n hls.recoverMediaError()\n }\n\n onError?.(\n {\n type: 'hlsError',\n error,\n },\n hls\n )\n })\n\n hls.attachMedia(videoElement)\n\n return hls\n}\n\nexport function useVideoStream({\n videoRef,\n streamUrl,\n fallbackOptions,\n onError: onErrorCallback,\n isStream = true,\n}: Props) {\n const hlsRef = useRef()\n const [playbackSupportStatus, setPlaybackSupportStatus] =\n useState('pending')\n\n useEffect(() => {\n const { current: videoEl } = videoRef\n\n if (!videoEl || !streamUrl) {\n return undefined\n }\n\n setPlaybackSupportStatus('pending')\n\n const initHls = (videoElement: HTMLVideoElement, onError?: ErrorCallback): boolean => {\n const hlsInstance = isStream && initUsingHLS(videoElement, fallbackOptions, onError)\n\n if (hlsInstance) {\n setPlaybackSupportStatus('supported')\n hlsRef.current = hlsInstance\n\n return true\n }\n\n setPlaybackSupportStatus('unsupported')\n\n return false\n }\n\n const onError = (error: ErrorEvent) => {\n const videoPlayer = error.target as HTMLVideoElement\n const mediaError = videoPlayer.error\n\n // If the media isn't supported and HLS cannot be initialized (such as on iPhones)\n // then we report the error back to the developer\n if (\n mediaError?.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED &&\n !initHls(videoPlayer, onErrorCallback)\n ) {\n onErrorCallback?.({\n type: 'unsupported',\n error: mediaError,\n })\n }\n }\n\n const onCanPlay = () => {\n setPlaybackSupportStatus('supported')\n }\n\n // Set up the streaming source, so it's ready for the native load or Hls to pick it up\n const forceReload = videoEl.src !== streamUrl\n\n // TO BE REMOVED once sure it is no longer necessary. As part of MOBI-2777 (the new replay) work,\n // we saw that when switching between various streams (Sky/Replay 1/Sky/Replay 2 etc)\n // sometimes an error was thrown in console saying that playback was already in progress\n if (!videoEl.paused) {\n videoEl.pause()\n }\n\n videoEl.src = streamUrl\n videoEl.setAttribute('src', streamUrl)\n\n videoEl.addEventListener('canplay', onCanPlay)\n\n const isIOS = isReactNativeIos || isInIosBrowser()\n\n /**\n * Android Native has an issue that causes videos to have extremely poor performance\n * As a workaround we only attempt to use the native implementation on iOS\n * and load the video as is, falling back as needed\n *\n * @link https://rwwa.atlassian.net/browse/MOBI-1580\n */\n if (isIOS) {\n videoEl.addEventListener('error', onError)\n videoEl.load()\n } else {\n if (initHls(videoEl, onErrorCallback)) {\n if (forceReload) {\n videoEl.load()\n }\n } else {\n onErrorCallback?.({\n type: 'unsupported',\n })\n }\n }\n\n return () => {\n videoEl.removeEventListener('error', onError)\n videoEl.removeEventListener('canplay', onCanPlay)\n hlsRef.current?.destroy()\n }\n }, [videoRef, fallbackOptions, streamUrl, onErrorCallback, isStream])\n\n return {\n playbackSupportStatus,\n hlsRef,\n }\n}\n\nexport { Hls }\n","import React, { memo, useCallback, useEffect, useRef } from 'react'\nimport { CompactExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { RaceCardIcon } from '@core/Components/Icons'\nimport { useVideoPreview } from '@core/Areas/Racing/Hooks/RaceContent/useVideoPreview'\nimport { useOnce } from '@core/Utils/hooks/useOnce'\nimport {\n trackVideoPreviewClosed,\n trackVideoPreviewLoaded,\n trackVideoPreviewNotSupported,\n trackVideoPreviewOpened,\n trackVideoPreviewPlayed,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Text } from '@core/Components/Text'\nimport { toISODate } from '@mobi/utils'\nimport { VideoContainerStyled, VideoStyled } from './Preview.styles'\nimport { useVideoStream } from '@core/Utils/hooks/Video/useVideoStream'\nimport Hls from 'hls.js'\n\ntype PreviewProps = {\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}\n\nconst Preview = memo(({ meetingId, meetingDate, raceNumber }): JSX.Element | null => {\n const videoRef = useRef(null)\n\n const { isLoading, isError, content } = useVideoPreview(meetingId, meetingDate, raceNumber)\n\n const onVideoPanelLoaded = useOnce(trackVideoPreviewLoaded, meetingId, meetingDate, raceNumber)\n const onVideoPanelOpened = useOnce(trackVideoPreviewOpened, meetingId, meetingDate, raceNumber)\n const onVideoPanelClosed = useOnce(trackVideoPreviewClosed, meetingId, meetingDate, raceNumber)\n const onVideoPlayed = useOnce(trackVideoPreviewPlayed, meetingId, meetingDate, raceNumber)\n\n // TODO: Refactor useOnce to allow support for arguments\n const trackPreviewNotSupported = useCallback(() => {\n if (content) {\n trackVideoPreviewNotSupported(content.streamUrl, content.contentType)\n }\n }, [content])\n const onNotSupported = useOnce(trackPreviewNotSupported, content)\n\n const { playbackSupportStatus } = useVideoStream({\n videoRef,\n streamUrl: content?.streamUrl,\n onError: useCallback(\n ({ type }) => {\n if (type === 'unsupported' || !Hls.isSupported()) {\n onNotSupported()\n }\n },\n [onNotSupported]\n ),\n })\n\n const canPlay = !isLoading && !isError && !!content\n\n function onExpansionChanged(expanded: boolean): void {\n if (videoRef.current) {\n const player = videoRef.current\n\n if (expanded) {\n onVideoPanelOpened()\n\n player.setAttribute('autoplay', '')\n player.play().then(onVideoPlayed).catch(onNotSupported)\n } else if (!expanded) {\n player.removeAttribute('autoplay')\n onVideoPanelClosed()\n\n player.pause()\n }\n }\n }\n\n // When the component is unmounted, exit fullscreen\n // TODO: Refactor to use existing useFullscreen hook (which needs refactoring to be more generic)\n useEffect(\n () => () => {\n ;(async () => {\n if (document.fullscreenElement) {\n await document.exitFullscreen()\n }\n })()\n },\n [videoRef]\n )\n\n useEffect(() => {\n if (videoRef.current && canPlay) {\n onVideoPanelLoaded()\n }\n }, [videoRef, canPlay, onVideoPanelLoaded])\n\n if (!canPlay) {\n return null\n }\n\n return (\n }\n data-testid='race-preview'\n onExpansionChanged={onExpansionChanged}\n >\n {playbackSupportStatus === 'unsupported' ? (\n \n Video playback is currently not supported on this device\n \n ) : (\n \n \n \n )}\n \n )\n})\n\nexport default Preview\n","import React from 'react'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ as launchDarklyState$, FeatureFlags } from '@core/State/LaunchDarklyFeatures/driver'\nimport type { FeatureFlagKeyName } from '@mobi/settings'\n\ninterface FeatureFlagProp {\n flag: FeatureFlagKeyName | ({} & string)\n children: React.ReactNode\n showWhen?: string | boolean\n}\n\nexport const FeatureFlag: React.ComponentClass = observeImmutable(\n launchDarklyState$,\n ({ record: { features }, flag, showWhen, children }) => {\n return (\n \n {children}\n \n )\n }\n)\n\ninterface FeatureFlagComponentProp {\n flag: string\n features: FeatureFlags\n children: React.ReactNode\n showWhen?: string | boolean\n}\n\nexport const FeatureFlagComponent: React.FC = props => {\n const shouldRender = checkConditions(props)\n\n return <>{shouldRender ? props.children : null}\n}\n\n// Local Helpers\n\nfunction checkConditions({ flag, features, showWhen = true }: FeatureFlagComponentProp): boolean {\n return flag ? features[flag] === showWhen : false\n}\n\nFeatureFlag.displayName = 'FeatureFlag'\n","import { RaceStatus } from '@mobi/api-types'\nimport { useMemo } from 'react'\n\nexport function useRaceStatus(status: MaybeDefined) {\n const isOpenMemo = useMemo(() => isOpen(status), [status])\n const hasResultedMemo = useMemo(() => hasResulted(status), [status])\n const hasResultsMemo = useMemo(() => hasResults(status), [status])\n return {\n isOpen: isOpenMemo,\n hasResulted: hasResultedMemo,\n hasResults: hasResultsMemo,\n }\n}\n\nconst isOpen = (status: MaybeDefined): boolean => status === RaceStatus.Open\n\nexport const hasResulted = (status: MaybeDefined): boolean =>\n status !== undefined &&\n [RaceStatus.Released, RaceStatus.Interim, RaceStatus.Abandoned].includes(status)\n\nexport const hasResults = (status: MaybeDefined): boolean =>\n status !== undefined && [RaceStatus.Released, RaceStatus.Interim].includes(status)\n","import React from 'react'\nimport {\n BettableTips,\n type Props as BettableTipsProps,\n} from '@core/Areas/Racing/Components/BettableTips/BettableTips'\nimport { useTipsterDisplay } from '@core/Areas/Racing/Hooks/useTipsterDisplay'\nimport { Provider } from 'react-redux'\nimport { store } from '@core/Store'\nimport { RaceCardIcon } from '@core/Components/Icons'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { CompactPanel } from '@core/Components/Panel'\nimport { Text } from '@core/Components/Text'\n\ntype Props = BettableTipsProps & {\n tipster: string\n}\n\nexport const BettableTipsPanel = ({\n tipster,\n tips,\n isRaceOpen,\n raceKey,\n race,\n}: Props): JSX.Element => {\n const tipsterDisplay = useTipsterDisplay(tipster)\n\n return (\n \n {tipsterDisplay} Tips}\n headerIcon={}\n >\n \n \n \n )\n}\n","export function useTipsterDisplay(tipsterName: string) {\n if (tipsterName.toLowerCase().endsWith('s')) {\n return `${tipsterName}'`\n }\n return `${tipsterName}'s`\n}\n","import React from 'react'\nimport { PanelsContainerStyled } from '.'\nimport { RacePromotions } from '@core/Areas/Racing/Components/RacePromotion'\nimport { useBetInformers } from '@core/Areas/Racing/Components/BetInformers/Hooks/useBetInformers'\nimport StewardsComments from '@core/Areas/Racing/Components/StewardsComments/StewardsComments'\nimport { RaceContentPanel } from '@core/Areas/Racing/Components/RaceContent/RaceContentPanel'\nimport Preview from '@core/Areas/Racing/Components/Preview/Preview'\nimport { FeatureFlag } from '@core/State/LaunchDarklyFeatures/Components/FeatureFlag'\nimport { useRaceStatus } from '@core/Areas/Racing/Hooks/useRaceStatus'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks'\nimport { BettableTipsPanel, hasTips } from '@core/Areas/Racing/Components/BettableTips'\nimport { type IdentifiableRace, RaceStatus } from '@core/Areas/Racing/Types'\n\nexport const RacePanels = (props: IdentifiableRace): JSX.Element | null => {\n const { meetingDate, meetingId, raceNumber } = props\n const { buttons } = useBetInformers()\n const { isLoading, isError, race } = useRacePageData({ meetingId, meetingDate, raceNumber })\n\n const raceStatus = race?.MeetingInformation.SelectedRace.RaceStatus as MaybeDefined\n\n const { hasResults, isOpen: isRaceOpen } = useRaceStatus(raceStatus)\n\n if (isLoading || isError || !race) return null\n\n const {\n SelectedRace: { Tips: tips, Tipster: tipster, Key: raceKey },\n } = race.MeetingInformation\n\n return (\n \n {!hasResults && (\n \n )}\n\n \n \n \n\n \n\n {buttons.tipsVisible && hasTips(tips, tipster) && (\n \n )}\n\n {buttons.commentsVisible && }\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const PanelsContainerStyled = styled.div({\n '> div:not(:last-child)': {\n marginBottom: '2px',\n },\n})\n","import { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport container from '@classic/AppUtils/Framework/IOC/inversify.config'\n\ntype UseEventAggregator = IEventAggregator\n\nexport function useEventAggregator(): UseEventAggregator {\n return container.get('IEventAggregator')\n}\n","import type { TrackableButton } from './Types'\n\nexport const buttonText: Readonly> = {\n showDoubleProvDiv: 'Double Prov Div',\n showFixedFlucs: 'Fixed Flucs',\n showAllForm: 'Form',\n showMarketMovers: 'Market Movers',\n showQuaddieProvDiv: 'Quaddie Prov Div',\n commentsVisible: 'Stewards Comments',\n tipsVisible: 'Tips',\n resultsVisible: 'Results',\n fieldVisible: 'Field',\n replayVisible: 'Replay',\n previewVisible: 'Preview',\n giddyUp: 'Giddy Up',\n}\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useOnce } from '@core/Utils/hooks/useOnce'\nimport type { TrackableButton } from '@core/Areas/Racing/Components/BetInformers/Types'\nimport { buttonText } from '../constants'\n\nexport const useBetInformerAnalytics: UseBetInformerAnalytics = (\n meetingId,\n meetingDate,\n raceNumber\n) => ({\n trackShowFixedFlucs: useOnce(track('showFixedFlucs'), meetingId, meetingDate, raceNumber),\n trackShowAllForm: useOnce(track('showAllForm'), meetingId, meetingDate, raceNumber),\n trackShowMarketMovers: useOnce(track('showMarketMovers'), meetingId, meetingDate, raceNumber),\n trackShowDoubleProvDiv: useOnce(track('showDoubleProvDiv'), meetingId, meetingDate, raceNumber),\n trackShowQuaddieProvDiv: useOnce(track('showQuaddieProvDiv'), meetingId, meetingDate, raceNumber),\n trackCommentsVisible: useOnce(track('commentsVisible'), meetingId, meetingDate, raceNumber),\n trackTipsVisible: useOnce(track('tipsVisible'), meetingId, meetingDate, raceNumber),\n trackResultsVisible: useOnce(track('resultsVisible'), meetingId, meetingDate, raceNumber),\n trackFieldVisible: useOnce(track('fieldVisible'), meetingId, meetingDate, raceNumber),\n trackReplayVisible: useOnce(track('replayVisible'), meetingId, meetingDate, raceNumber),\n trackPreviewVisible: useOnce(track('previewVisible'), meetingId, meetingDate, raceNumber),\n trackGiddyUp: useOnce(track('giddyUp'), meetingId, meetingDate, raceNumber),\n})\n\n// Local Helpers\nconst track = (key: TrackableButton) => () =>\n trackEvent('bet-informer-button-pressed', { buttonText: buttonText[key] })\n\n// Types\ntype UseBetInformerAnalytics = (\n meetingId: string,\n meetingDate: Date,\n raceNumber: number\n) => Record<`track${Capitalize}`, () => void>\n","import React, { useEffect, useMemo } from 'react'\nimport styled from '@emotion/styled'\nimport { isRacePageDto, isResultsPageDto } from '@mobi/api-types'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { useEventAggregator } from '@core/Utils/hooks/useEventAggregator'\nimport { useBetInformerAnalytics } from '@core/Areas/Racing/Components/BetInformers/Hooks/useBetInformerAnalytics'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { useBetInformers } from './Hooks/useBetInformers'\nimport { hasTips } from '@core/Areas/Racing/Components/BettableTips'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport { useStewardsComments } from '@core/Areas/Racing/Hooks/useStewardsComments'\nimport { RaceStatus } from '../../Types'\nimport { hasResulted, hasResults } from '@core/Areas/Racing/Hooks/useRaceStatus'\nimport { buttonText } from './constants'\nimport { useFeature } from '@core/Utils/hooks'\n\nconst enum LocalConstants {\n BetInformerActiveClassName = 'js-bet-informer-btn--active',\n SkyRaceCardClassname = 'js-bet-informer--sky-race',\n ReplayBtnClassName = 'js-bet-informer-bnt__replay',\n}\n\nexport const BetInformers: React.FC<{\n meetingId: string\n meetingDate: Date\n raceNumber: number\n isGiddyUpDisabled: boolean\n toggleGiddyUp: () => void\n raceReplayId?: string\n}> = ({\n meetingId,\n meetingDate,\n raceNumber,\n isGiddyUpDisabled,\n toggleGiddyUp,\n raceReplayId = '',\n}) => {\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n\n const { isLoading, isError, race } = useRacePageData({ meetingId, meetingDate, raceNumber })\n\n const { buttons, toggleButton } = useBetInformers()\n const {\n trackFieldVisible,\n trackCommentsVisible,\n trackResultsVisible,\n trackReplayVisible,\n trackShowMarketMovers,\n trackShowFixedFlucs,\n trackShowDoubleProvDiv,\n trackShowQuaddieProvDiv,\n trackTipsVisible,\n trackShowAllForm,\n trackGiddyUp,\n } = useBetInformerAnalytics(meetingId, meetingDate, raceNumber)\n const eventAggregator = useEventAggregator()\n const isFormDisabled = useMemo(() => race && isResultsPageDto(race), [race])\n const hasRaceReplayVideo = useMemo(\n () =>\n (race &&\n isResultsPageDto(race) &&\n hasResults(RaceStatus[race.RaceStatus]) &&\n race?.RaceReplay?.HasVideo) ??\n false,\n [race]\n )\n\n const meetingHasResults = useMemo(\n () => race && isResultsPageDto(race) && hasResulted(RaceStatus[race.RaceStatus]),\n [race]\n )\n\n const { hasValidStewardsComments } = useStewardsComments({ meetingId, meetingDate, raceNumber })\n\n // On initial render, ensure that results are shown\n // This may need to change as we move away from KO\n useEffect(() => {\n if (meetingHasResults) {\n toggleButton('resultsVisible')\n }\n }, [toggleButton, meetingHasResults])\n\n useEffect(\n () => () => {\n eventAggregator.publish('stop-all-race-replay')\n },\n [eventAggregator]\n )\n\n useEffect(() => {\n const toggle = () => toggleButton('replayVisible')\n const toggleOff = () => buttons.replayVisible && toggleButton('replayVisible')\n if (hasRaceReplayVideo) {\n eventAggregator.subscribe(`race-replay-started-for-${raceReplayId}`, toggle)\n eventAggregator.subscribe(`race-replay-stopped-for-${raceReplayId}`, toggleOff)\n }\n return () => {\n if (hasRaceReplayVideo) {\n eventAggregator.unsubscribe(`race-replay-started-for-${raceReplayId}`, toggle)\n eventAggregator.unsubscribe(`race-replay-stopped-for-${raceReplayId}`, toggleOff)\n }\n }\n }, [buttons.replayVisible, eventAggregator, hasRaceReplayVideo, raceReplayId, toggleButton])\n\n if (isLoading || isError || !race) return null\n\n let isFixedFlucsDisabled = true\n let isMarketMoversDisabled = true\n let isDoubleProvDivDisabled = true\n let isQuaddieProvDivDisabled = true\n\n if (isRacePageDto(race)) {\n const startersForRace = race.RaceStarters.find(s => s.RaceKey.RaceNumber === raceNumber)\n if (startersForRace) {\n isFixedFlucsDisabled = !startersForRace.Starters.some(s => s.HasFixedOdds)\n isMarketMoversDisabled = !startersForRace.Starters.some(s => s.HasMarketMovers)\n }\n isDoubleProvDivDisabled = !(race.BetType === 'WinPlace' && race.HasDoubleProvDivs)\n isQuaddieProvDivDisabled = !(race.BetType === 'WinPlace' && race.HasQuaddieProvDivs)\n }\n\n const tips = race.MeetingInformation.SelectedRace.Tips\n const tipster = race.MeetingInformation.SelectedRace.Tipster\n const hasValidTips = hasTips(tips, tipster)\n\n const dontShowBetInformersPanel =\n !meetingHasResults &&\n !hasRaceReplayVideo &&\n isFormDisabled &&\n isGiddyUpDisabled &&\n !hasValidTips &&\n !hasValidStewardsComments &&\n isFixedFlucsDisabled &&\n isMarketMoversDisabled &&\n isDoubleProvDivDisabled &&\n isQuaddieProvDivDisabled\n\n if (dontShowBetInformersPanel) {\n return null\n }\n\n const isOnSkyRacePage = window.location.hash === AppRoutes.RaceCardSky.replace('/', '#')\n\n return (\n \n {meetingHasResults && (\n <>\n
    • \n {\n if (buttons.replayVisible) {\n eventAggregator.publish('stop-all-race-replay')\n }\n toggleButton('resultsVisible')\n trackResultsVisible()\n }}\n >\n {buttonText['resultsVisible']}\n \n
    • \n\n
    • \n {\n if (buttons.replayVisible) {\n eventAggregator.publish(`stop-all-race-replay`)\n }\n toggleButton('fieldVisible')\n trackFieldVisible()\n }}\n >\n {buttonText['fieldVisible']}\n \n
    • \n \n )}\n\n {!hasRaceReplayImprovements && hasRaceReplayVideo && (\n
    • \n {\n eventAggregator.publish(`toggle-race-replay-for-${raceReplayId}`)\n trackReplayVisible()\n }}\n >\n {' '}\n {buttonText['replayVisible']}\n \n
    • \n )}\n\n {!isGiddyUpDisabled && (\n
    • \n {\n toggleGiddyUp()\n trackGiddyUp()\n }}\n >\n \n \n
    • \n )}\n\n {hasValidTips && (\n
    • \n {\n toggleButton('tipsVisible')\n trackTipsVisible()\n }}\n >\n {buttonText['tipsVisible']}\n \n
    • \n )}\n\n {hasValidStewardsComments && (\n
    • \n {\n toggleButton('commentsVisible')\n trackCommentsVisible()\n }}\n >\n {buttonText['commentsVisible']}\n \n
    • \n )}\n\n {!isFixedFlucsDisabled && (\n
    • \n {\n toggleButton('showFixedFlucs')\n trackShowFixedFlucs()\n }}\n >\n {buttonText['showFixedFlucs']}\n \n
    • \n )}\n\n {!isMarketMoversDisabled && (\n
    • \n {\n toggleButton('showMarketMovers')\n trackShowMarketMovers()\n }}\n >\n {buttonText['showMarketMovers']}\n \n
    • \n )}\n\n {!isDoubleProvDivDisabled && (\n
    • \n {\n toggleButton('showDoubleProvDiv')\n trackShowDoubleProvDiv()\n }}\n >\n {buttonText['showDoubleProvDiv']}\n \n
    • \n )}\n\n {!isQuaddieProvDivDisabled && (\n
    • \n {\n toggleButton('showQuaddieProvDiv')\n trackShowQuaddieProvDiv()\n }}\n >\n {buttonText['showQuaddieProvDiv']}\n \n
    • \n )}\n\n {!isFormDisabled && (\n
    • \n {\n toggleButton('showAllForm')\n trackShowAllForm()\n }}\n >\n {buttonText['showAllForm']}\n \n
    • \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst BetInformersContainerStyled = styled.ul({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n minHeight: '5rem',\n maxWidth: '100vw',\n margin: 0,\n padding: 0,\n paddingLeft: spacing.md,\n boxSizing: 'border-box',\n backgroundColor: colors.white,\n borderBottom: '0.05rem solid ' + colors.neutral[200],\n overflowX: 'auto',\n whiteSpace: 'nowrap',\n\n listStyle: 'none',\n\n scrollbarWidth: 'thin',\n scrollBehavior: 'smooth',\n scrollbarColor: colors.neutral[300] + ' ' + colors.surface[50],\n\n '@media (pointer: coarse)': {\n scrollbarWidth: 'none',\n '::-webkit-scrollbar': { display: 'none' },\n },\n\n '> *:last-child': { marginRight: '1rem' },\n\n '> li': {\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n minHeight: '5rem',\n },\n\n 'li > button': {\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '3.2rem',\n padding: '0 1rem',\n border: `0.1rem solid ${colors.neutral[200]}`,\n borderRadius: radius.lgx2,\n WebkitTapHighlightColor: 'transparent',\n\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n fontFamily: font.family.primary,\n\n backgroundColor: colors.white,\n color: colors.black,\n transition: 'all 0.2s ease',\n\n '> span': {\n marginRight: '0.5rem',\n\n '> svg': {\n color: colors.studio[500],\n fontSize: '1.4rem',\n },\n },\n\n [`&.${LocalConstants.ReplayBtnClassName}`]: {\n '> span > svg': {\n color: colors.bondi[500],\n },\n },\n\n [`&.${LocalConstants.BetInformerActiveClassName}`]: {\n backgroundColor: colors.studio[500],\n color: colors.white,\n borderColor: colors.studio[500],\n\n '> span > svg': { color: colors.white },\n },\n\n [`&.${LocalConstants.BetInformerActiveClassName}.${LocalConstants.ReplayBtnClassName}`]: {\n borderColor: colors.bondi[500],\n backgroundColor: colors.bondi[500],\n },\n },\n\n [`&.${LocalConstants.SkyRaceCardClassname}`]: {\n paddingLeft: spacing.smx1,\n },\n})\n","import * as ko from 'knockout'\nimport { v4 } from 'uuid'\nimport { inject, injectable } from 'inversify'\nimport { RaceStatus } from '@core/Areas/Racing/Types'\nimport { RacePanels } from '@core/Areas/Racing/Components/Panels'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { BetInformers } from '@core/Areas/Racing/Components/BetInformers/BetInformers'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport ObservableResultsPage from '@classic/Betting-v2/Model/Observables/ObservableResultsPage'\nimport { FormGiddyUpRaceInformation } from '@classic/Betting-v2/Components/Form/FormGiddyUpRaceInformation'\nimport { state$ as bettingV2CommandDriver$ } from '@classic/Betting-v2/Components/Commands/driver'\nimport type { IObservableFinisher } from '@classic/Betting-v2/Model/Observables/IObservableFinisher'\nimport type { IResultsPageViewModel } from './IResultsPageViewModel'\n\ntype ViewName = 'View Field' | 'View Results'\n\n@injectable()\nexport class ResultsPageViewModel extends Disposable implements IResultsPageViewModel {\n private giddyUp: FormGiddyUpRaceInformation\n\n public showProtest!: ko.PureComputed\n public raceInformation!: ObservableResultsPage\n public simplePlacings!: ko.Observable\n public showField!: ko.PureComputed\n public isRaceClosed!: ko.PureComputed\n public viewName!: ko.Observable\n public isRaceReplayOn!: ko.Observable\n public hasGiddyUpRaceKey!: ko.PureComputed\n public raceReplayId!: string\n public BetInformers = BetInformers\n public RacePanels = RacePanels\n private ldSubscription!: Rx.IDisposable\n private displayTypeSubscription!: Rx.IDisposable\n public fieldVisibleState!: ko.Observable\n public status!: ko.PureComputed\n public finishers!: ko.ObservableArray\n public hasVideoReplay!: ko.PureComputed\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('FormGiddyUpRaceInformation') giddyUp: FormGiddyUpRaceInformation\n ) {\n super(eventAggregator)\n this.giddyUp = giddyUp\n }\n\n public init(params: { raceInformation: ObservableResultsPage }) {\n Guard.notNull(params)\n Guard.notNull(params.raceInformation)\n\n this.raceReplayId = `id-${v4()}`\n\n this.raceInformation = params.raceInformation\n\n this.simplePlacings = this.raceInformation.simplePlacings as ko.Observable\n this.viewName = ko.observable('View Field')\n this.showProtest = ko.pureComputed(() => {\n const protestStatus = this.raceInformation.protestStatus()\n\n return protestStatus !== undefined && protestStatus.length > 0\n })\n this.isRaceClosed = ko.pureComputed(() => {\n return this.status() === RaceStatus.Closed\n })\n this.showField = ko.pureComputed(() => {\n return this.isRaceClosed() || this.fieldVisibleState()\n })\n this.status = ko.pureComputed(() => {\n return this.raceInformation.raceStatus() as RaceStatus\n })\n\n this.isRaceReplayOn = ko.observable(false)\n\n this.hasVideoReplay = ko.pureComputed(\n () =>\n this.raceInformation.raceReplay.hasVideo() &&\n [RaceStatus.Released, RaceStatus.Interim].includes(this.status())\n )\n\n this.fieldVisibleState = ko.observable(false)\n\n this.registerDisposals(() => {\n this.showProtest.dispose()\n this.isRaceClosed.dispose()\n this.showField.dispose()\n })\n\n this.registerHandlers()\n\n this.hasGiddyUpRaceKey = ko.pureComputed(() => !!this.raceInformation.giddyUpRaceKey())\n\n this.displayTypeSubscription = bettingV2CommandDriver$\n .map(record => {\n return {\n fieldVisible: record.fieldVisible,\n }\n })\n .distinctUntilChanged()\n .subscribe(result => {\n this.fieldVisibleState(result.fieldVisible)\n })\n\n this.registerDisposals(() => {\n this.ldSubscription?.dispose()\n this.displayTypeSubscription?.dispose()\n })\n }\n\n private registerHandlers() {\n if (this.raceInformation.raceReplay.hasVideo()) {\n this.subscribeToRaceReplay(this.raceReplayId)\n }\n }\n\n private subscribeToRaceReplay(id: string): void {\n this.safeSubscribe(`race-replay-started-for-${id}`, () => {\n this.isRaceReplayOn(true)\n })\n\n this.safeSubscribe(`race-replay-stopped-for-${id}`, () => {\n this.isRaceReplayOn(false)\n })\n }\n\n public changeView() {\n this.evtAggregator.publish(`stop-all-race-replay`)\n\n if (this.viewName() === 'View Results') {\n this.viewName('View Field')\n } else {\n this.viewName('View Results')\n }\n }\n\n public toggleRaceReplay() {\n this.evtAggregator.publish(`toggle-race-replay-for-${this.raceReplayId}`)\n }\n\n public openGiddyUp() {\n this.giddyUp.openGiddyUp(\n this.raceInformation.giddyUpRaceKey() as string,\n this.raceInformation.giddyUpFixtureKey() as string,\n finisherNumber => {\n return this.raceInformation.raceFinishers.getFinisher(finisherNumber)\n },\n () => {\n return {\n raceCourse: this.raceInformation.meetingInformation.meetingName(),\n raceNumber: this.raceInformation.raceNumber(),\n distance: this.raceInformation.meetingInformation.selectedRace.distance(),\n trackCondition: null,\n weatherClass: null,\n raceStatus: this.raceInformation.raceStatus(),\n raceTimeLocal: null,\n raceResults: this.simplePlacings(),\n }\n },\n // placeSelection is n/a for results,\n () => {\n //\n },\n () => {\n //\n },\n () => {\n //\n }\n )\n }\n}\n","export class Projection {\n constructor(title: string, data: string) {\n this.title = title\n this.data = data\n }\n\n title: string\n data: string\n}\n\nexport class RegularProjection extends Projection {\n constructor(index: number, data: string) {\n let _title: string\n switch (index) {\n case 1:\n _title = '1st'\n break\n case 2:\n _title = '2nd'\n break\n case 3:\n _title = '3rd'\n break\n case 4:\n _title = '4th'\n break\n default:\n _title = ''\n }\n super(_title, data)\n }\n}\n\nexport class RovingBankerProjection extends Projection {\n constructor(index: number, data: string) {\n const _title = index === 1 ? 'RB' : 'WITH'\n super(_title, data)\n }\n}\n\nexport class AllwaysProjection extends Projection {\n constructor(index: number, data: string) {\n const _title = index === 1 ? 'ALLWAYS' : ''\n super(_title, data)\n }\n}\n\nexport class LegInProjection extends Projection {\n constructor(index: number, data: string) {\n const _title = index === 1 ? 'LEG-IN' : 'WITH'\n super(_title, data)\n }\n}\n","import { injectable } from 'inversify'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { Projection } from '../MultiSelectionProjections'\nimport { IMultiLegSelectionsViewModel } from './IMultiLegSelectionsViewModel'\n\n@injectable()\nexport class MultiLegSelectionsViewModel implements IMultiLegSelectionsViewModel {\n public bettingContext!: BettingInformation\n public betTypeName!: string\n public selectionStringRaws!: Projection[]\n\n public init(params: { bettingContext: BettingInformation }): void {\n this.bettingContext = params.bettingContext\n this.betTypeName = this.bettingContext.selectedBetType().name()\n\n this.selectionStringRaws = []\n for (const legSelection of this.bettingContext.getLegsForProcessing()) {\n const selectionRaw = new Projection(\n 'Race ' + legSelection.raceKey().raceNumber(),\n this.bettingContext.resultsForLeg(legSelection.raceKey().leg()).selectionStrings[0]\n )\n //if only one starter selected for a leg than add starter name to selection string\n const selectionNumber = Number(selectionRaw.data)\n if (Number.isInteger(selectionNumber)) {\n const selectedStarters = legSelection.starters()\n selectionRaw.data =\n selectionRaw.data +\n ' - ' +\n (selectedStarters.find(s => s.number() === selectionNumber) as IObservableStarter).name()\n }\n\n selectionRaw.data = selectionRaw.data.split('.').join('.\\u200B') //\\u200B is a zero-width space so the string will break over multiple lines\n\n if (this.bettingContext.selectedBetType().betType() === BetType.AllUp) {\n selectionRaw.data =\n '(' + legSelection.raceKey().poolInfo.selectedPool().name() + ') ' + selectionRaw.data\n }\n\n this.selectionStringRaws.push(selectionRaw)\n }\n }\n}\n","import styled, { CSSObject } from '@emotion/styled'\nimport { Grid } from '@mobi/component-library/Common/Grid'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\n\nexport const FormDataStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n wordBreak: 'break-word',\n fontSize: '1.2rem',\n lineHeight: 1.4,\n color: hexColors.nero,\n\n strong: {\n display: 'inline-block',\n minWidth: '9rem',\n },\n\n '& > div': {\n paddingBottom: '1rem',\n marginBottom: '1rem',\n borderBottom: '0.1rem solid ' + hexColors.veryLightGrey,\n\n '&:empty': {\n padding: 0,\n },\n\n '&:last-of-type': {\n border: 0,\n paddingBottom: 0,\n },\n },\n})\n\nexport const BaseStyledCss: CSSObject = {\n color: colors.neutral['800'],\n fontSize: '1.1rem',\n margin: '8px 0 0 8px',\n padding: '2px 0 2px 6px',\n}\n\nexport const BaseStyled = styled('div')(BaseStyledCss)\n\nexport const HighlightStyledCss: CSSObject = {\n color: hexColors.black,\n backgroundColor: colors.success['50'],\n borderLeftColor: colors.success['600'],\n borderLeftStyle: 'solid',\n borderLeftWidth: '1px',\n}\n\nexport const HighlightStyled = styled(BaseStyled)(HighlightStyledCss)\n\nexport const FormGridStyled = styled(Grid)({\n backgroundColor: colors.surface['100'],\n borderRadius: 5,\n borderBottom: 'none !important',\n})\n","import React from 'react'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\nexport const FormHistories: React.FC<{ children: React.ReactNode[] }> = ({ children }) => {\n const [isHistoriesTruncated, setIsHistoriesTruncated] = React.useState(() => children.length > 5)\n\n const historiesToRender = isHistoriesTruncated ? children.slice(0, 5) : children\n\n return (\n
      \n {historiesToRender}\n\n {isHistoriesTruncated && (\n setIsHistoriesTruncated(curr => !curr)}\n data-testid='form-histories-show-more'\n >\n Show More\n \n )}\n
      \n )\n}\n","import { post } from '@classic/Foundation/Services/ApiService'\nimport { getRacePageDataFromApi } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport type { ReplayInfo, VideoEntitlementDto } from './types'\n\nexport async function getReplayInfoFromApi(\n fixtureId: string,\n fixtureDate: string,\n raceNumber: number\n) {\n const raceReplay = await getRaceReplayDataFromApi(fixtureId, fixtureDate, raceNumber)\n\n if (!raceReplay || !raceReplay.HasVideo) {\n return null\n }\n\n const entitlement = await getEntitlementUrlFromApi(raceReplay.VideoKey)\n\n if (!entitlement) {\n return null\n }\n\n const result: ReplayInfo = {\n raceLocation: raceReplay.RaceLocation,\n raceDate: raceReplay.Date,\n videoSource: entitlement.VideoKey,\n }\n\n return result\n}\n\nexport function getEntitlementUrlFromApi(videoKey: string) {\n return post({\n url: '/api/videoentitlement',\n body: { encrpytedVideoKey: videoKey },\n })\n}\n\nfunction getRaceReplayDataFromApi(fixtureId: string, fixtureDate: string, raceNumber: number) {\n if (!fixtureId) {\n return Promise.resolve(null)\n }\n\n return getRacePageDataFromApi(fixtureId, fixtureDate, raceNumber).then(meeting => {\n if ('RaceReplay' in meeting) {\n return meeting.RaceReplay\n } else {\n return null\n }\n })\n}\n","import { debounceFn } from '@mobi/utils'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { toggleIsHamburgerMenuOpen } from '@core/Areas/AppHeader/Store'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { store } from '@core/Store'\nimport { navigateToSkyRacePage } from '@core/Areas/RaceCardSky/helpers/navigateToSkyRacePage'\nimport { setCloseSkyVideoPlayer, setSkyVideoPlayerStatus, SkyVideoPlayerState } from '../Store'\nimport { trackVisionOpened } from '../analytics'\nimport { selectIsSkyVideoPlayerOpen } from '../Store/selectors'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { getEntitlementUrlFromApi } from '@core/Areas/Racing/Components/RaceReplay/api'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { logError } from '@classic/Foundation/Services/LoggingService'\nimport { displayVisionNotEntitledMessage } from '../Components/VideoPlayer/helpers/useEntitlement'\n\nexport function toggleSkyVideoPlayer({\n selectedChannel,\n playerStatus,\n isPlayerOpen,\n analyticsData,\n raceReplayKey,\n raceReplayUrl,\n raceReplayTitle,\n raceReplayMeetingDate,\n}: StartSkyVideoPlayerOptions = {}): void {\n if (\n isPlayerOpen === false ||\n (isPlayerOpen === undefined && selectIsSkyVideoPlayerOpen(store.getState()))\n ) {\n store.dispatch(setCloseSkyVideoPlayer())\n return\n }\n\n store.dispatch(toggleIsHamburgerMenuOpen(false))\n\n userAccountState$.take(1).subscribe(({ isLoggedIn }) => {\n const openSkyVideoPlayer = async () => {\n if (raceReplayKey && selectedChannel && selectedChannel === 'Replay') {\n try {\n const entitlementData = await queryClient.fetchQuery({\n queryKey: queryKeys.videoEntitlementRequest(raceReplayKey),\n queryFn: () => getEntitlementUrlFromApi(raceReplayKey),\n staleTime: 30_000,\n })\n if (!entitlementData.IsEntitled) {\n store.dispatch(setCloseSkyVideoPlayer())\n\n const notEntitledMessage = entitlementData.ReasonText\n ? entitlementData.ReasonText\n : raceReplayKey\n ? 'You are not authorised to view this race replay'\n : 'You are not authorised to view SKY Racing vision'\n\n displayVisionNotEntitledMessage(notEntitledMessage)\n return\n }\n if (!entitlementData.VideoKey) {\n logError(\n `getEntitlementUrlFromApi: url is empty: raceReplayKey=${raceReplayKey}, entitlementData=${JSON.stringify(entitlementData)}`\n )\n return\n }\n raceReplayUrl = entitlementData.VideoKey\n } catch (e) {\n logError(\n e as Error,\n `getEntitlementUrlFromApi: failed to retrieve: raceReplayKey=${raceReplayKey}`\n )\n return\n }\n }\n\n store.dispatch(\n setSkyVideoPlayerStatus({\n playerStatus: playerStatus || 'floating',\n selectedChannel,\n raceReplayKey,\n raceReplayUrl,\n raceReplayTitle,\n raceReplayMeetingDate,\n })\n )\n }\n\n if (isLoggedIn) {\n openSkyVideoPlayer()\n if (analyticsData) trackVisionOpened(analyticsData)\n } else {\n const handleOnLoginSuccess = () => {\n if (analyticsData?.openLocation === 'bottom-navigation') {\n navigateToSkyRacePage()\n } else openSkyVideoPlayer()\n }\n showLogin({ onLoginSuccessCallback: debounceFn(handleOnLoginSuccess, 500) })\n }\n })\n}\n\n// =====\n// Types\n// =====\n\ntype StartSkyVideoPlayerOptions = {\n analyticsData?: Parameters[0]\n} & Partial<\n Pick<\n SkyVideoPlayerState,\n | 'selectedChannel'\n | 'playerStatus'\n | 'isPlayerOpen'\n | 'raceReplayKey'\n | 'raceReplayUrl'\n | 'raceReplayTitle'\n | 'raceReplayMeetingDate'\n >\n>\n","export function getOrdinalSuffix(input: number | string, isUpperCase = false): string {\n const intNumber = Math.floor(typeof input === 'string' ? parseInt(input, 10) : input)\n\n if (!isFinite(intNumber)) {\n throw new Error('Input must be a finite number or numeric string')\n }\n\n let suffix = ''\n // Handling special cases for 11th, 12th, 13th which do not follow the general rule\n if (intNumber % 100 >= 11 && intNumber % 100 <= 13) {\n suffix = 'th'\n } else {\n switch (intNumber % 10) {\n case 1:\n suffix = 'st'\n break\n case 2:\n suffix = 'nd'\n break\n case 3:\n suffix = 'rd'\n break\n default:\n suffix = 'th'\n break\n }\n }\n\n if (isUpperCase) {\n suffix = suffix.toUpperCase()\n }\n\n return suffix\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { useFeature, useObservableProperties } from '@core/Utils/hooks'\nimport { type RaceStatus } from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport {\n getVisionChannelForDisplay,\n isMatchingVideoPlaying,\n} from '@core/Areas/SkyVideoPlayer/helpers'\nimport { SkyTvButton } from '@mobi/component-library/Racing/SkyTvIndicator'\nimport { toggleSkyVideoPlayer } from '@core/Areas/SkyVideoPlayer/helpers/toggleSkyVideoPlayer'\nimport {\n selectIsSkyVideoPlayerOpen,\n selectRaceReplay,\n selectVideoPlayerChannel,\n selectVideoPlayerStatus,\n} from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { getOrdinalSuffix } from '@mobi/utils/number/ordinal'\nimport { displayVisionNotEntitledMessage } from '@core/Areas/SkyVideoPlayer/Components/VideoPlayer/helpers/useEntitlement'\nimport { useBetAccount } from '@mobi/account/Areas/Deposit/Hooks'\nimport { BetAccountKey, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { getFromRepo } from '@core/Utils/repository'\nimport { state$ } from '@core/State/UserAccount/userAccountDriver'\n\nconst RACE_NOT_FINISHED_STATUSES: RaceStatus[] = ['Open', 'Closed', 'Pending']\n\nexport interface SkyVideoButtonRace {\n raceReplay?: {\n raceNumber: number\n trackName: string\n raceReplayKey: string\n raceCode: RaceCodesLowerCase\n meetingDate: string\n formReplay?: {\n starterName: string\n starterNumber?: number // Only used for dogs\n racePosition: string\n }\n }\n advertisedStartTime: string\n raceStatus: RaceStatus\n skyTvChannelId?: string\n}\n\nexport const SkyVideoButton: React.FC<{\n race: SkyVideoButtonRace\n isHeaderPinned: boolean\n isRacingWA?: boolean\n openLocation: 'form' | 'race-card' | 'sky-page'\n}> = ({ race, isHeaderPinned, isRacingWA, openLocation }) => {\n const [showLiveIcon, setShowLiveIcon] = React.useState(false)\n\n const isSkyVideoPlayerOpen = useAppSelector(selectIsSkyVideoPlayerOpen)\n const activeRaceReplay = useAppSelector(selectRaceReplay)\n const activeChannel = useAppSelector(selectVideoPlayerChannel)\n const playerStatus = useAppSelector(selectVideoPlayerStatus)\n\n // deliberately not using the videoKey since it is not a constant\n const isSameRaceReplay =\n race.raceReplay?.trackName === activeRaceReplay.trackName &&\n race.raceReplay?.raceNumber === activeRaceReplay.raceNumber &&\n race.raceReplay?.meetingDate === activeRaceReplay.meetingDate\n\n const isRacingWAFeatureActive = useFeature('RACING_WA_VISION_CHANNEL')\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n\n const { isLoggedIn } = useObservableProperties(state$, ['isLoggedIn'], {\n isLoggedIn: false,\n })\n\n const { data: betAccount } = useBetAccount({\n enabled: isLoggedIn ?? false,\n queryFn: () => getFromRepo(BetAccountRepo, BetAccountKey),\n })\n\n React.useEffect(() => {\n if (!race) return\n\n const checkRaceStartTime = () => {\n const ast = race.advertisedStartTime\n const now = dayjs()\n const lessThanMinute = dayjs(ast).isBefore(now.add(1, 'minute'))\n // Check to remove live button if race isn't settled after race completed\n // Only really an edge case in the Test Envs\n const isPastAstBuffer = dayjs(race?.advertisedStartTime).isBefore(now.subtract(1, 'hour'))\n setShowLiveIcon(lessThanMinute && !isPastAstBuffer)\n }\n checkRaceStartTime()\n const timerId = setInterval(checkRaceStartTime, 1000)\n return () => clearInterval(timerId)\n }, [race])\n\n const shouldDisplayRacingWA = isRacingWA && isRacingWAFeatureActive\n\n const channel = getVisionChannelForDisplay(\n race.skyTvChannelId as string,\n !!shouldDisplayRacingWA,\n hasRaceReplayImprovements && !!race.raceReplay?.raceReplayKey\n )\n\n const handleButtonClick = async () => {\n if (isLoggedIn && betAccount && !betAccount?.IsIDVerified) {\n displayVisionNotEntitledMessage(\n 'To view replays, your TABtouch account identification must be completed. For assistance please call Customer Service on 1300 36 36 88.'\n )\n return\n }\n\n // close the video if the current video matches the button, for example:\n // - replay button clicked and the same race replay is showing\n // - sky1 button clicked and sky1 video showing\n if (isMatchingVideoPlaying(isSkyVideoPlayerOpen, activeChannel, channel, isSameRaceReplay)) {\n return toggleSkyVideoPlayer({ isPlayerOpen: false })\n }\n\n const headerState = isHeaderPinned ? 'sticky' : 'default'\n\n // if a video is already playing, then re-use the current state (docked, floating, fullscreen)\n const desiredPlayerStatus = isSkyVideoPlayerOpen ? playerStatus : 'docked'\n\n toggleSkyVideoPlayer({\n isPlayerOpen: true,\n playerStatus: desiredPlayerStatus,\n selectedChannel: channel,\n analyticsData: {\n openLocation,\n headerState,\n channel,\n raceCode: race.raceReplay?.raceCode,\n },\n raceReplayKey: race.raceReplay?.raceReplayKey,\n ...(race.raceReplay && {\n raceReplayTitle: {\n raceNumber: race.raceReplay.raceNumber,\n trackName: race.raceReplay.trackName,\n ...(race.raceReplay.formReplay && {\n position:\n // This check is required for dogs as their position data already includes the suffix\n race.raceReplay.raceCode === 'dogs'\n ? race.raceReplay.formReplay.racePosition\n : race.raceReplay.formReplay.racePosition +\n getOrdinalSuffix(race.raceReplay.formReplay.racePosition),\n starterName: race.raceReplay.formReplay.starterName,\n starterNumber: race.raceReplay.formReplay.starterNumber,\n }),\n },\n }),\n raceReplayMeetingDate: race.raceReplay?.meetingDate,\n })\n }\n\n const isPlaying = isMatchingVideoPlaying(\n isSkyVideoPlayerOpen,\n activeChannel,\n channel,\n isSameRaceReplay\n )\n\n const shouldShowLive = showLiveIcon && RACE_NOT_FINISHED_STATUSES.includes(race.raceStatus)\n\n return (\n \n )\n}\n","import ko from 'knockout'\nimport React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { getEventAggregator } from '@core/Utils/events'\nimport { IRaceReplayViewModel } from '@classic/Betting-v2/Components/General/RaceReplay/IRaceReplayViewModel'\nimport ObservableRaceReplay from '@classic/Betting-v2/Model/Observables/ObservableRaceReplay'\nimport type { RacesFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { useFeature } from '@core/Utils/hooks'\nimport {\n SkyVideoButton,\n SkyVideoButtonRace,\n} from '@core/Areas/Racing/Components/Navigation/Components/RaceInfoHeader/Components/SkyVideoButton'\nimport { Provider } from 'react-redux'\nimport { store } from '@core/Store'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport const RaceReplayKnockout: React.FC<{\n RaceReplay: RacesFormRaceResponse['Forms'][0]['RaceHistories'][0]['RaceReplay']\n RaceOverlay?: Pick<\n RacesFormRaceResponse['Forms'][0]['RaceHistories'][0],\n 'Place' | 'RaceNumber' | 'TrackName' | 'StarterName' | 'StarterNumber' | 'FixtureDate'\n >\n RaceCode: RaceCodesLowerCase\n StarterName?: string | undefined\n}> = ({ RaceReplay, RaceOverlay, RaceCode }) => {\n const koElementRef = React.useRef(null)\n const [isVideoPlaying, setIsVideoPlaying] = React.useState(false)\n\n React.useEffect(() => {\n if (!koElementRef.current || !RaceReplay.HasVideo) return undefined\n const el = koElementRef.current\n const { HasVideo, VideoKey, RaceLocation, Date } = RaceReplay\n\n const raceReplayData = new ObservableRaceReplay()\n raceReplayData.hasVideo(HasVideo)\n raceReplayData.videoKey(VideoKey)\n raceReplayData.raceLocation(RaceLocation)\n raceReplayData.date(Date)\n\n const params: Parameters[0] = {\n id: VideoKey,\n raceReplayData,\n }\n\n const isKoComponentBound = !!ko.dataFor(el)\n if (isKoComponentBound) ko.cleanNode(el)\n\n ko.applyBindings({ model: params }, el)\n return () => {\n ko.cleanNode(el)\n }\n }, [RaceReplay])\n\n React.useEffect(() => {\n if (!RaceReplay.HasVideo) return undefined\n\n const key = RaceReplay.VideoKey\n const setIsOn = () => setIsVideoPlaying(true)\n const setIsOff = () => setIsVideoPlaying(false)\n getEventAggregator().subscribe(`race-replay-started-for-${key}`, setIsOn)\n getEventAggregator().subscribe(`race-replay-stopped-for-${key}`, setIsOff)\n\n return () => {\n getEventAggregator().unsubscribe(`race-replay-started-for-${key}`, setIsOn)\n getEventAggregator().unsubscribe(`race-replay-stopped-for-${key}`, setIsOff)\n }\n }, [RaceReplay])\n\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n\n const raceProp: SkyVideoButtonRace = {\n ...(RaceReplay.HasVideo &&\n RaceOverlay && {\n raceReplay: {\n raceNumber: Number(RaceOverlay.RaceNumber.slice(1)),\n trackName: RaceOverlay.TrackName,\n raceReplayKey: RaceReplay.VideoKey,\n raceCode: RaceCode,\n meetingDate: RaceOverlay.FixtureDate,\n formReplay: {\n starterName: RaceOverlay.StarterName ?? '',\n starterNumber: RaceOverlay.StarterNumber,\n racePosition: RaceOverlay.Place,\n },\n },\n }),\n advertisedStartTime: '',\n raceStatus: 'Released',\n }\n\n return (\n <>\n {RaceReplay.HasVideo && (\n
      \n {hasRaceReplayImprovements ? (\n \n \n \n ) : (\n \n getEventAggregator().publish(`toggle-race-replay-for-${RaceReplay.VideoKey}`)\n }\n >\n Replay\n \n )}\n
      \n {/* @ts-expect-error KNOCKOUT element */}\n \n
      \n
      \n )}\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { font } from '@mobi/component-library/Theme/Common'\nimport type { RacesFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { RaceReplayKnockout } from './RaceReplayKnockout'\nimport { useFeature } from '@core/Utils/hooks'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport const HistoryHeader: React.FC<\n {\n onClick: () => void\n isExpanded: boolean\n } & Pick<\n RacesFormRaceResponse['Forms'][0]['RaceHistories'][0],\n | 'Place'\n | 'RaceNumber'\n | 'TrackName'\n | 'FixtureDate'\n | 'Distance'\n | 'RaceReplay'\n | 'StarterName'\n | 'StarterNumber'\n > &\n Partial> & {\n RaceCode: RaceCodesLowerCase\n }\n> = ({\n onClick,\n isExpanded,\n Place,\n FieldSize,\n RaceNumber,\n TrackName,\n FixtureDate,\n Distance,\n RaceReplay,\n StarterName,\n StarterNumber,\n RaceCode,\n}) => {\n const stopClickBubblingUp = (event: React.MouseEvent) => {\n event.stopPropagation()\n }\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n return (\n \n \n {Place}\n {FieldSize ? `/${FieldSize}` : ''}\n \n \n {RaceNumber} {TrackName}\n \n {FixtureDate}\n {Distance}\n
      \n {hasRaceReplayImprovements && RaceReplay.HasVideo && (\n \n )}\n
      \n \n
      \n )\n}\n\nconst HistoryHeaderStyled = styled.h6({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '4rem',\n background: 'white',\n boxShadow: '0rem 0.1rem 0.2rem rgba(26, 14, 35, 0.05)',\n borderLeft: '0.1rem solid hexColors.nero',\n borderRight: '0.1rem solid hexColors.nero',\n borderBottom: '0.05rem solid hexColors.nero',\n margin: 0,\n padding: '0 1rem',\n fontSize: font.size.sm.fontSize,\n fontFamily: font.family.primary,\n lineHeight: font.size.sm.lineHeight,\n border: '0.1rem solid ' + hexColors.grey3,\n borderTop: 0,\n\n span: {\n textAlign: 'left',\n '&.place': {\n flexBasis: '10%',\n },\n '&.track-name': {\n textOverflow: 'ellipsis',\n maxWidth: '20%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flexBasis: '30%',\n },\n },\n '.place, .track-name': {\n color: 'black',\n fontSize: font.size.sm.fontSize,\n fontWeight: font.weight.semibold,\n lineHeight: font.size.sm.lineHeight,\n wordWrap: 'break-word',\n },\n '.replay-button': {\n display: 'flex',\n flexBasis: '20%',\n justifyContent: 'flex-end',\n },\n '&:first-of-type': {\n borderTop: '0.1rem solid ' + hexColors.grey3,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport { HistoryHeader } from '../Common/HistoryHeader'\nimport { FormDataStyled } from '../Common/Common.styles'\nimport { RaceReplayKnockout } from '../Common/RaceReplayKnockout'\nimport { useFeature } from '@core/Utils/hooks'\n\nconst enum LocalConstants {\n animationTiming = 400,\n}\n\nexport const HistoryExpandable: React.FC<\n React.ComponentProps &\n Omit, 'isExpanded' | 'onClick'> & {\n children: React.ReactChild\n }\n> = ({\n Place,\n FixtureDate,\n FieldSize,\n RaceNumber,\n TrackName,\n Distance,\n RaceReplay,\n StarterName,\n StarterNumber,\n children,\n RaceCode,\n}) => {\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: LocalConstants.animationTiming,\n })\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n\n return (\n <>\n \n\n {(isExpanded || shouldRender) && (\n \n {children}\n {!hasRaceReplayImprovements && RaceReplay.HasVideo && (\n \n )}\n \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n boxShadow: 'border-box',\n position: 'relative',\n overflow: 'hidden',\n height: 0,\n transition: 'height ' + LocalConstants.animationTiming + 'ms ease',\n willChange: 'height',\n border: '0.1rem solid ' + hexColors.grey3,\n borderTop: 0,\n\n '& > div': {\n padding: '1rem 0.5rem',\n },\n\n // Placings\n ol: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n\n li: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: '3rem',\n border: 0,\n fontSize: '1.2rem',\n borderBottom: '0.1rem solid ' + hexColors.gainsboro,\n\n '&:last-of-type': {\n border: 0,\n },\n\n strong: {\n margin: 0,\n minWidth: '4rem',\n },\n\n div: {\n position: 'absolute',\n right: 0,\n top: 0,\n width: '3rem',\n transform: 'translateY(-50%)',\n textAlign: 'center',\n padding: '0.2rem 0.5rem',\n background: hexColors.whiteSmoke,\n },\n },\n },\n})\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { DogsFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { HistoryExpandable } from '../Common/HistoryExpandable'\n\nexport const DogsHistorySingle: React.FC<{\n history: DogsFormRaceResponse['Forms'][0]['Histories'][0]\n StarterName?: string\n}> = ({\n history: {\n Place,\n RaceNumber,\n BarrierBox,\n TrackName,\n FixtureDate,\n Distance,\n StewardsComments,\n RaceClass,\n StartingPrice,\n Margin,\n RaceTime,\n WinnerTime,\n BestOfNight,\n BodyWeight,\n Placings,\n RaceReplay,\n },\n StarterName,\n}) => {\n return (\n \n <>\n {StewardsComments && (\n
      \n Stewards Comments\n
      \n {StewardsComments}\n
      \n )}\n\n \n \n
      \n Class {RaceClass}\n
      \n
      \n Box {BarrierBox}\n
      \n
      \n Dist {Distance}\n
      \n
      \n RT {RaceTime}\n
      \n
      \n Start Price {StartingPrice}\n
      \n
      \n\n \n
      \n WT {WinnerTime}\n
      \n
      \n Best {BestOfNight}\n
      \n
      \n Weight {BodyWeight}\n
      \n
      \n Margin {Margin}\n
      \n
      \n
      \n\n {Placings.length && (\n
      \n
        \n {Placings.map(({ Place, StarterName, Margin }) => (\n
      1. \n {Place}\n {StarterName}\n {Margin &&
        {Margin}
        }\n
      2. \n ))}\n
      \n
      \n )}\n \n \n )\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { DogsFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { FormDataStyled } from '../Common/Common.styles'\nimport { FormHistories } from '../Common/Histories'\nimport { DogsHistorySingle } from './DogsHistorySingle'\n\nexport const Dogs: React.FC<{\n form?: DogsFormRaceResponse['Forms'][0]\n starterName?: string\n}> = ({ form, starterName }) => {\n if (!form) return null\n\n return (\n <>\n \n \n \n
      \n Last Starts {form.LastTenStarts}\n
      \n
      \n Career {form.Career}\n
      \n
      \n Prize {form.PrizeMoneyWon}\n
      \n
      \n Rating {form.RatingDry}\n
      \n
      \n Rec. Price {form.RecommendedPrice}\n
      \n
      \n Best Time {form.BestTime}\n
      \n
      \n Last Time {form.LastTime}\n
      \n
      \n\n \n
      \n Sex {form.Sex}\n
      \n
      \n Age {form.Age}\n
      \n
      \n Colour {form.Color}\n
      \n
      \n Sire {form.SireName}\n
      \n
      \n Dam {form.DamName}\n
      \n
      \n Trk/Dist {form.TrackDistance}\n
      \n
      \n\n
      \n Owners {form.OwnerName}\n
      \n
      \n
      \n\n \n {form.Histories.map(history => (\n \n ))}\n \n \n )\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport type { RacesFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { HistoryExpandable } from '../Common/HistoryExpandable'\n\nexport const RacesHistorySingle: React.FC<{\n history: RacesFormRaceResponse['Forms'][0]['RaceHistories'][0]\n StarterName?: string\n}> = ({\n history: {\n Place,\n FieldSize,\n RaceNumber,\n TrackName,\n FixtureDate,\n Distance,\n StewardsComments,\n RaceClass,\n TrackCondition,\n RaceTime,\n StartPrice,\n Position800,\n JockeyName,\n Weight,\n Barrier,\n Margin,\n Position400,\n Placings,\n RaceReplay,\n },\n StarterName,\n}) => {\n return (\n \n <>\n {StewardsComments && (\n
      \n Stewards Comments\n
      \n {StewardsComments}\n
      \n )}\n\n \n \n
      \n Class {RaceClass}\n
      \n
      \n Cond {TrackCondition}\n
      \n
      \n Time {RaceTime}\n
      \n
      \n Start Price {StartPrice}\n
      \n
      \n 800m {Position800}\n
      \n
      \n\n \n
      \n Jockey {JockeyName}\n
      \n
      \n Weight {Weight}\n
      \n
      \n Barrier {Barrier}\n
      \n
      \n Margin {Margin}\n
      \n
      \n 400m {Position400}\n
      \n
      \n
      \n\n {Placings.length && (\n
      \n
        \n {Placings.map(({ Place, StarterName, JockeyName, Weight, Barrier, Margin }) => (\n
      1. \n {Place}\n \n {StarterName + ' / ' + JockeyName + ' (' + Weight + ', ' + Barrier + ')'}\n \n {Margin &&
        {Margin}
        }\n
      2. \n ))}\n
      \n
      \n )}\n \n \n )\n}\n","import React from 'react'\nimport { BaseStyled, HighlightStyled } from './Common.styles'\nimport { useFeature } from '@core/Utils/hooks/useFeature'\n\nexport const HighlightStat: React.FC<{\n title: string\n value: unknown\n highlightOn: boolean\n}> = ({ title, value, highlightOn, ...props }) => {\n const isFeatureActive = useFeature('INTELLIGENT_FORM_DISPLAY')\n\n const elm = (\n <>\n {title} {value}\n \n )\n\n if (!isFeatureActive || !highlightOn) {\n return {elm}\n }\n\n return {elm}\n}\n","// The distanceRule, trackNameRule, and trackDistanceRule are all valid if we have a value\n// other than hyphen (which typically denotes no form data available)\nexport const distanceRule = (distance?: string) => (distance ?? '').length > 0 && distance !== '-'\nexport const trackNameRule = (trackName?: string) =>\n (trackName ?? '').length > 0 && trackName !== '-'\nexport const trackDistanceRule = (trackDistance?: string) =>\n (trackDistance ?? '').length > 0 && trackDistance !== '-'\n\n// If this is the runner's first start following a spell (displayed by an x in last starts)\n// AND the runner has statistics in the 1st Up field (i.e. not hyphen), THEN return true\nexport const firstUpRule = (lastTenStarts: string, firstUp?: string) =>\n lastTenStarts?.endsWith('x') && (firstUp || '').length > 0 && firstUp != '-'\n\n// If this is the runner's second start following a spell (one number following the x in last starts)\n// AND the runner has statistics in the 2nd Up field (i.e. not hyphen), THEN return true\nexport const secondUpRule = (lastTenStarts: string, secondUp?: string) =>\n lastTenStarts.length > 1 &&\n lastTenStarts.charAt(lastTenStarts.length - 2) === 'x' &&\n (secondUp || '').length > 0 &&\n secondUp !== '-'\n\nexport const courseConditionRule = (\n courseCondition: string | undefined,\n name: string,\n stats: string | null\n) => {\n // For this rule to be true, we want the current course condition to be equal to that of the name\n // of the form data key we are given (name), as well have some form data (stats) defined\n return (\n (courseCondition || '').toLowerCase().startsWith(name.toLowerCase()) && (stats ?? '').length > 0\n )\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport type { RacesFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { FormDataStyled, FormGridStyled } from '../Common/Common.styles'\nimport { FormHistories } from '../Common/Histories'\nimport { RacesHistorySingle } from './RacesHistorySingle'\nimport { HighlightStat } from '../Common/HighlightStat'\nimport {\n distanceRule,\n firstUpRule,\n secondUpRule,\n trackDistanceRule,\n trackNameRule,\n courseConditionRule,\n} from '../Common/HighlightStatRules'\n\nexport const Races: React.FC<{\n form?: RacesFormRaceResponse['Forms'][0]\n courseCondition?: string\n starterName?: string\n}> = ({ form, courseCondition, starterName }) => {\n if (!form) return null\n return (\n <>\n \n {form.Comments && (\n <>\n
      \n
      {form.Comments}
      \n \n )}\n\n \n \n
      \n Career {form.Career}\n
      \n
      \n Prize {form.PrizeMoneyWon}\n
      \n
      \n\n \n
      \n Last Starts {form.LastTenStarts}\n
      \n
      \n Trainer {form.TrainerName}\n
      \n
      \n
      \n\n \n \n \n \n \n \n \n \n\n \n {form.TrackConditions?.map(({ Name, Stats }) => (\n \n ))}\n \n \n\n \n \n
      \n Age / Sex {form.Age} / {form.Sex}\n
      \n
      \n \n
      \n Colour {form.Color}\n
      \n
      \n
      \n Sire / Dam {form.SireName} / {form.DamName}\n
      \n
      \n\n {form.GearChanges && (\n
      \n Gear Changes {form.GearChanges}\n
      \n )}\n \n\n \n {form.RaceHistories.map(history => (\n \n ))}\n \n \n )\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport type { TrotsFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { HistoryExpandable } from '../Common/HistoryExpandable'\n\nexport const TrotsHistorySingle: React.FC<{\n history: TrotsFormRaceResponse['Forms'][0]['TrotHistories'][0]\n StarterName?: string\n}> = ({\n history: {\n Place,\n FieldSize,\n RaceNumber,\n DriverName,\n TrackName,\n FixtureDate,\n Distance,\n StewardsComments,\n RaceClass,\n Handicap,\n MileRate,\n StartType,\n StartPrice,\n Margin,\n Placings,\n RaceReplay,\n },\n StarterName,\n}) => {\n return (\n \n <>\n {StewardsComments && (\n
      \n Stewards Comments\n
      \n {StewardsComments}\n
      \n )}\n\n \n \n
      \n Class {RaceClass}\n
      \n
      \n Start Type {StartType}\n
      \n
      \n Mile Rate {MileRate}\n
      \n
      \n Start Price {StartPrice}\n
      \n
      \n\n \n
      \n Driver {DriverName}\n
      \n
      \n Handicap {Handicap}\n
      \n
      \n Margin {Margin}\n
      \n
      \n
      \n\n {Placings.length && (\n
      \n
        \n {Placings.map(({ Place, StarterName, Handicap, Margin }) => (\n
      1. \n {Place}\n {StarterName + ' (' + Handicap + ')'}\n {Margin &&
        {Margin}
        }\n
      2. \n ))}\n
      \n
      \n )}\n \n \n )\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport type { TrotsFormRaceResponse } from '@core/Areas/Racing/Hooks/useRaceFormData/api'\nimport { FormDataStyled } from '../Common/Common.styles'\nimport { FormHistories } from '../Common/Histories'\nimport { TrotsHistorySingle } from './TrotsHistorySingle'\n\nexport const Trots: React.FC<{\n form?: TrotsFormRaceResponse['Forms'][0]\n starterName?: string\n}> = ({ form, starterName }) => {\n if (!form) return null\n\n return (\n <>\n \n {form.Comments && (\n <>\n
      \n
      {form.Comments}
      \n \n )}\n\n \n \n
      \n Career {form.Career}\n
      \n
      \n Prize {form.PrizeMoneyWon}\n
      \n
      \n\n \n
      \n Last Starts {form.LastTenStarts}\n
      \n
      \n Trainer {form.TrainerName}\n
      \n
      \n
      \n\n \n \n
      \n Distance {form.Distance}\n
      \n
      \n Trk/Dist {form.TrackDistance}\n
      \n
      \n\n \n
      \n Track {form.TrackName}\n
      \n
      \n Start Type {form.StartType}\n
      \n
      \n
      \n\n \n \n
      \n Age / Sex {form.Age} / {form.Sex}\n
      \n
      \n \n
      \n Colour {form.Color}\n
      \n
      \n
      \n Sire / Dam {form.SireName} / {form.DamName}\n
      \n
      \n \n\n \n {form.TrotHistories.map(history => (\n \n ))}\n \n \n )\n}\n","import React from 'react'\nimport {\n useRaceFormData,\n isRacesFormData,\n isTrotsFormData,\n isDogsFormData,\n} from '@core/Areas/Racing/Hooks/useRaceFormData'\nimport { Races, Trots, Dogs } from './Components'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nexport const Form = React.memo<{\n meetingId: string\n meetingDate: Date\n raceNumber: number\n starterNumber: number\n starterName?: string\n courseCondition?: string\n}>(({ meetingId, meetingDate, raceNumber, starterNumber, starterName, courseCondition }) => {\n const { isLoading, isError, data } = useRaceFormData({ meetingDate, meetingId, raceNumber })\n if (isLoading)\n return \n\n if (!data || isError) return null\n\n if (isRacesFormData(data)) {\n return (\n form.StarterNumber === starterNumber)}\n courseCondition={courseCondition}\n starterName={starterName}\n />\n )\n }\n\n if (isTrotsFormData(data)) {\n return (\n form.StarterNumber === starterNumber)}\n starterName={starterName}\n />\n )\n }\n\n if (isDogsFormData(data)) {\n return (\n form.StarterNumber === starterNumber)}\n starterName={starterName}\n />\n )\n }\n\n return null\n})\n","import { useQuery } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRaceFormDataFromApi } from './api'\n\nexport const useRaceFormData = ({\n meetingId,\n meetingDate,\n raceNumber,\n}: {\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}) =>\n useQuery(\n queryKeys.racePageForm(meetingId, meetingDate, raceNumber),\n () => getRaceFormDataFromApi(meetingId, meetingDate, raceNumber),\n {\n staleTime: Infinity,\n }\n )\n","import { dayjs } from '@mobi/utils'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { FormRaceResponse } from '../useRaceFormData/api'\n\nexport const getRaceFieldFormDataFromApi = async ({\n racecourseSeq,\n meetingDate,\n raceNumber,\n}: GetRaceFieldFormDataParams) => {\n const url = getFieldFormForRaceApiUrl(racecourseSeq, meetingDate, raceNumber)\n return await get({ url })\n}\n\nfunction getFieldFormForRaceApiUrl(\n racecourseSeq?: number,\n meetingDate?: string,\n raceNumber?: number\n) {\n const formattedDate = dayjs(meetingDate).format('YYYY-MM-DD')\n return `/api/meetings/${racecourseSeq}/${formattedDate}/${raceNumber}/form`.toLowerCase()\n}\n\nexport type GetRaceFieldFormDataParams = {\n racecourseSeq?: number\n meetingDate?: string\n raceNumber?: number\n}\n","import { useQuery } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRaceFieldFormDataFromApi, GetRaceFieldFormDataParams } from './api'\n\nexport const useRaceFieldFOOFormData = (raceFieldFOOFormData: GetRaceFieldFormDataParams) =>\n useQuery(\n [\n queryKeys.racePageFieldFOOForm(\n raceFieldFOOFormData.racecourseSeq,\n raceFieldFOOFormData.meetingDate,\n raceFieldFOOFormData.raceNumber\n ),\n ],\n () => getRaceFieldFormDataFromApi(raceFieldFOOFormData),\n {\n staleTime: Infinity,\n cacheTime: 0,\n refetchOnWindowFocus: false,\n keepPreviousData: true,\n enabled: !!raceFieldFOOFormData.racecourseSeq,\n }\n )\n","import React from 'react'\nimport { useRaceFieldFOOFormData } from '@core/Areas/Racing/Hooks/useRaceFieldFormData'\nimport {\n isRacesFormData,\n isTrotsFormData,\n isDogsFormData,\n} from '@core/Areas/Racing/Hooks/useRaceFormData'\nimport { Races, Trots, Dogs } from './Components'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nexport const FOOForm = React.memo<{\n racecourseSeq?: number\n meetingDate?: string\n raceNumber: number\n starterNumber: number\n}>(({ racecourseSeq, meetingDate, raceNumber, starterNumber }) => {\n const { isLoading, isError, data } = useRaceFieldFOOFormData({\n racecourseSeq,\n meetingDate,\n raceNumber,\n })\n\n if (isLoading)\n return \n\n if (!data || isError) return null\n\n if (isRacesFormData(data))\n return form.StarterNumber === starterNumber)} />\n\n if (isTrotsFormData(data))\n return form.StarterNumber === starterNumber)} />\n\n if (isDogsFormData(data))\n return form.StarterNumber === starterNumber)} />\n\n return null\n})\n","import { deleteAsync, get, post } from '@classic/Foundation/Services/ApiService'\nimport type {\n BlackbookComment,\n BlackbookControlProps,\n BlackbookDetailsResponse,\n BlackbookEntryRacingToday,\n BlackbookPreferencesRequestBody,\n BlackbookRunner,\n} from '@core/Areas/Blackbook/types'\n\nconst enum LocalConstants {\n apiBase = '/api/blackbook/',\n}\n\nexport function getAllJockeyRacesRunningSoon(starterName: string) {\n return get<{ Entries: BlackbookEntryRacingToday[] }>({\n url: `${LocalConstants.apiBase}details/jockey/${encodeURIComponent(starterName)}`,\n })\n .then(data => data.Entries.filter(runner => !!runner.RacingTodayDetails))\n .catch(() => [] as BlackbookEntryRacingToday[])\n}\n\nexport const postAddRunnerToBlackbook = ({\n starterName,\n starterType: fixType,\n}: Pick) =>\n post<{\n success: boolean\n errorCode: number\n errorMessage: string\n }>({ url: LocalConstants.apiBase + 'add', body: { starterName, fixType } })\n\nexport const getBlackbookDetails = () =>\n get({ url: LocalConstants.apiBase + 'details' })\n\nexport const postBlackbookAlertPreferences = (preferences: BlackbookPreferencesRequestBody) =>\n post({ url: LocalConstants.apiBase + 'preferences', body: preferences })\n\nexport const deleteBlackbookEntry = (id: number) =>\n deleteAsync({ url: LocalConstants.apiBase + id })\n\n/** Lightwight call to only retrieve list of runner names in BB */\nexport const postGetBlackbookRunners = () =>\n post<{\n success: boolean\n errorCode: number\n errorMessage: string\n data?: BlackbookRunner[]\n }>({ url: LocalConstants.apiBase + 'getblackbookrunners' })\n\n// ========\n// Comments\n// ========\n\nexport const postBlackbookComment = ({\n id,\n noteID,\n comment,\n}: {\n id: number\n noteID?: number\n comment: string\n}) =>\n post({\n url: LocalConstants.apiBase + 'AddOrUpdateNote',\n body: { BlackBookNotesSeq: noteID, BlackbookSeq: id, Comment: comment },\n })\n\nexport const getBlackbookComments = (blackbookSeq: number) =>\n get({ url: LocalConstants.apiBase + `GetNotes?blackbookSeq=${blackbookSeq}` })\n\nexport const deleteBlackbookComment = (blackbookSeq: number, blackbookNotesSeq: number) =>\n post({\n url:\n LocalConstants.apiBase +\n `DeleteNote?blackbookSeq=${blackbookSeq}&blackbookNotesSeq=${blackbookNotesSeq}`,\n })\n","import { useEffect, MutableRefObject, useRef } from 'react'\n\ntype Event = MouseEvent | TouchEvent\ntype Ref = MutableRefObject\ntype Callback = (event: Event) => void\n\nconst events = ['click', 'touchstart'] as const\n\nexport function useClickOutside(target: Ref, callback: Callback): void {\n const calledRecently = useRef(false)\n\n // The time between a touchstart and a click is 300ms\n // so setting the time a little further will make\n // sure that the callback is not called twice\n const callTimeout = 350\n\n useEffect(() => {\n function onClickOutside(e: Event): void {\n const dropdown = target.current\n\n if (!dropdown) {\n return\n }\n\n if (!dropdown.contains(e.target as HTMLElement)) {\n if (calledRecently.current) {\n return\n }\n\n callback(e)\n\n calledRecently.current = true\n\n window.setTimeout(() => {\n calledRecently.current = false\n }, callTimeout)\n }\n }\n\n events.forEach(event => {\n window.addEventListener(event, onClickOutside)\n })\n\n return () => {\n events.forEach(event => {\n window.removeEventListener(event, onClickOutside)\n })\n }\n }, [target, callback])\n}\n","import { BetAccountHolder } from '@mobi/api-types'\nimport { get } from '@classic/Foundation/Services/ApiService'\n\nexport const getContactDetails = () => get({ url: '/api/contactDetails' })\n","import React from 'react'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport type { PromptForUserDecisionProps } from './helpers'\n\nexport const PromptForUserDecision: React.FC = ({\n handleSelection,\n testId,\n buttons,\n title,\n subtitle,\n}) => {\n return (\n
      \n \n \n \n {buttons.map(({ label, color }) => (\n \n handleSelection(label)} color={color}>\n {label}\n \n \n ))}\n \n \n
      \n )\n}\n","import { store } from '@core/Store'\nimport { closeModal, openModal } from '@core/Components/Modal'\nimport type { Button } from '@mobi/component-library/Common/Buttons'\nimport { PromptForUserDecision } from '../PromptForUserDecision'\n\nexport function promptUserAndReturnDecision
      \n \n )}\n\n \n \n Tote\n \n
      \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst ColumnHeaderItemStyled = styled.div({\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'center',\n height: '2rem',\n justifyContent: 'center',\n\n '> div': {\n display: 'inline-flex',\n flexWrap: 'nowrap',\n alignItems: 'center',\n gap: '0.2rem',\n fontFamily: font.family.primary,\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.black,\n\n [`&.${LocalConstants.ActiveSortClassName}`]: {\n fontWeight: font.weight.semibold,\n svg: { color: colors.black },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\nexport type SortLabels = 'Fixed' | 'Tote' | 'Number'\nexport type SortDirection = 'Asc' | 'Desc'\n","import ko from 'knockout'\nimport { inject, injectable } from 'inversify'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport ObservableResultsPage from '@classic/Betting-v2/Model/Observables/ObservableResultsPage'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IObservableFinisher } from '@classic/Betting-v2/Model/Observables/IObservableFinisher'\nimport type { IResultsFieldViewModel } from './IResultsFieldViewModel'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport {\n FinishersColumnHeader,\n type FinisherSortOptions,\n type SortLabels,\n type SortDirection,\n} from '@core/Areas/Racing/Components/RunnersColumnHeader/FinishersColumnHeader'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n@injectable()\nexport class ResultsFieldViewModel extends Disposable implements IResultsFieldViewModel {\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n }\n\n public raceInformation!: ObservableResultsPage\n public shouldDisplayFixed!: ko.Observable\n public sortedFinishers!: ko.Computed\n public FinishersColumnHeader!: typeof FinishersColumnHeader\n private currentSortOption = ko.observable('Number.Asc')\n private raceStatus: string | undefined\n\n public init(params: { raceInformation: ObservableResultsPage }) {\n Guard.notNull(params)\n Guard.notNull(params.raceInformation)\n\n this.FinishersColumnHeader = FinishersColumnHeader\n this.shouldDisplayFixed = params.raceInformation.meetingInformation.selectedRace.isFixedOddsRace\n this.raceInformation = params.raceInformation\n this.raceStatus = params.raceInformation.raceStatus()\n\n this.sortedFinishers = ko.pureComputed(() => {\n const sortOption = this.currentSortOption()\n return params.raceInformation.raceFinishers.finishers().sort(getSortFunction(sortOption))\n })\n\n this.subscribeToSortChanges(this.raceStatus)\n }\n protected subscribeToSortChanges(raceStatus: string | undefined): void {\n this.safeSubscribe('sort-finishers', ({ newSort }: { newSort: FinisherSortOptions }) => {\n this.currentSortOption(newSort)\n trackRaceCardSorting(newSort, raceStatus)\n })\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst mappedSortTypes: Record = {\n Number: 'runner',\n Tote: 'tote',\n Fixed: 'fixed',\n}\n\nfunction trackRaceCardSorting(\n finisherSortOption: FinisherSortOptions,\n raceStatus: string | undefined\n) {\n const [currentSortItem, currentSortOrder] = finisherSortOption.split('.') as [\n SortLabels,\n SortDirection,\n ]\n const sortOrder = currentSortOrder === 'Asc' ? 'ascending' : 'descending'\n const currentRaceStatus = raceStatus ? raceStatus.toLowerCase() : ''\n\n trackEvent(analyticsKeys.raceCardSorting, {\n sortItem: mappedSortTypes[currentSortItem],\n sortOrder,\n raceStatus: currentRaceStatus,\n })\n}\n\nfunction getSortFunction(sortOption: FinisherSortOptions) {\n switch (sortOption) {\n case 'Fixed.Asc':\n case 'Fixed.Desc': {\n const direction = sortOption === 'Fixed.Asc' ? 1 : -1\n return (a: IObservableFinisher, b: IObservableFinisher) => {\n if (a.isScratched() && !b.isScratched()) return 1\n if (!a.isScratched() && b.isScratched()) return -1\n if (a.fixedOddsFinisherInfo.winDiv() > b.fixedOddsFinisherInfo.winDiv())\n return 1 * direction\n if (a.fixedOddsFinisherInfo.winDiv() < b.fixedOddsFinisherInfo.winDiv())\n return -1 * direction\n return 0\n }\n }\n case 'Number.Asc':\n case 'Number.Desc': {\n const direction = sortOption === 'Number.Asc' ? 1 : -1\n return (a: IObservableFinisher, b: IObservableFinisher) => {\n if (a.number() > b.number()) return 1 * direction\n if (a.number() < b.number()) return -1 * direction\n return 0\n }\n }\n case 'Tote.Asc':\n case 'Tote.Desc': {\n const direction = sortOption === 'Tote.Asc' ? 1 : -1\n return (a: IObservableFinisher, b: IObservableFinisher) => {\n if (a.isScratched() && !b.isScratched()) return 1\n if (!a.isScratched() && b.isScratched()) return -1\n if (a.toteWinProvDiv() > b.toteWinProvDiv()) return 1 * direction\n if (a.toteWinProvDiv() < b.toteWinProvDiv()) return -1 * direction\n return 0\n }\n }\n }\n}\n","import { ObservableFinisher } from '../../../Model/Observables/ObservableFinisher'\nimport * as ko from 'knockout'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport { injectable } from 'inversify'\nimport { IFieldFinisherPricesViewModel } from './IFieldFinisherPricesViewModel'\n\n@injectable()\nexport class FieldFinisherPricesViewModel implements IFieldFinisherPricesViewModel {\n public finisher!: ObservableFinisher\n public displayToteWinDividend!: ko.Computed\n public displayFobWinDividend!: ko.Computed\n public displayTotePlaceDividend!: ko.Computed\n public displayFobPlaceDividend!: ko.Computed\n public showFixedOdds!: ko.Computed\n public showScratchedFixedOdds!: ko.Computed\n public showSuspendedFixedOdds!: ko.Computed\n public shouldShowFixedFavourite!: ko.Computed\n\n init(params: { finisher: ObservableFinisher }) {\n Guard.notNull(params.finisher)\n\n this.finisher = params.finisher\n\n this.displayToteWinDividend = ko.pureComputed(() => {\n return this.finisher.toteWinProvDiv().toFixed(2)\n })\n\n this.displayTotePlaceDividend = ko.pureComputed(() => {\n return this.finisher.totePlaceProvDiv().toFixed(2)\n })\n\n this.displayFobWinDividend = ko.pureComputed(() => {\n if (this.finisher.fixedOddsFinisherInfo.winDiv() != undefined) {\n return this.finisher.fixedOddsFinisherInfo.winDiv().toFixed(2)\n }\n return ''\n })\n\n this.displayFobPlaceDividend = ko.pureComputed(() => {\n if (this.finisher.fixedOddsFinisherInfo.placeDiv() != undefined) {\n return this.finisher.fixedOddsFinisherInfo.placeDiv().toFixed(2)\n }\n return ''\n })\n\n this.showFixedOdds = ko.pureComputed(\n () =>\n this.finisher.hasFixedOdds() &&\n !this.finisher.fixedOddsFinisherInfo.isScratched() &&\n !this.finisher.fixedOddsFinisherInfo.isSuspended()\n )\n\n this.showScratchedFixedOdds = ko.pureComputed(\n () => this.finisher.hasFixedOdds() && this.finisher.fixedOddsFinisherInfo.isScratched()\n )\n\n this.showSuspendedFixedOdds = ko.pureComputed(\n () =>\n this.finisher.hasFixedOdds() &&\n this.finisher.fixedOddsFinisherInfo.isSuspended() &&\n !this.finisher.fixedOddsFinisherInfo.isScratched()\n )\n\n this.shouldShowFixedFavourite = ko.pureComputed(\n () => this.finisher.hasFixedOdds() && this.finisher.fixedOddsFinisherInfo.isFavourite()\n )\n }\n}\n","import * as ko from 'knockout'\nimport { injectable } from 'inversify'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport { IAllUpViewModel } from './IAllUpViewModel'\nimport { IDisposable } from '@classic/AppUtils/Framework/Disposable/IDisposable'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport StartersMapper from '@classic/Betting-v2/Mapping/StartersMapper'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { isRacePageDto } from '@mobi/api-types'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRacePageDataFromApi } from '@core/Areas/Racing/Hooks/useRacePageData'\n\n@injectable()\nexport class AllUpViewModel implements IAllUpViewModel, IDisposable {\n private legVisibleSubscriptions!: ko.Subscription\n\n public data!: ObservableRacePage\n public bettingContext!: BettingInformation\n public selections!: ko.ObservableArray\n public legVisible!: ko.Observable\n public doubleProvDivAllowed!: ko.PureComputed\n public quaddieProvDivAllowed!: ko.PureComputed\n public useGiddyUp!: IUseGiddyUp\n\n public init(params: {\n data: ObservableRacePage\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n Guard.notNull(params.data)\n Guard.notNull(params.context.bettingContext)\n\n this.data = params.data\n this.bettingContext = params.context.bettingContext\n this.selections = params.selections\n\n this.legVisible = ko.observable(null)\n this.useGiddyUp = params.useGiddyUp\n\n this.doubleProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.data.hasDoubleProvDivs()\n )\n })\n\n this.quaddieProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.data.hasQuaddieProvDivs()\n )\n })\n\n this.registerHandlers()\n }\n\n public dispose() {\n this.legVisibleSubscriptions.dispose()\n }\n\n private registerHandlers() {\n this.legVisibleSubscriptions = this.legVisible.subscribe(() => {\n this.loadStartersForLeg()\n })\n }\n\n private loadStartersForLeg(): void {\n const legVisible = this.legVisible()\n if (legVisible && legVisible >= 0) {\n const raceKeyForLeg = this.data.getRaceKeyForLeg(legVisible)\n if (raceKeyForLeg) {\n this.loadStartersForRace(raceKeyForLeg)\n }\n }\n }\n\n private async loadStartersForRace(raceKey: ObservableRaceKey) {\n if (raceKey == null) return\n\n const raceNumber = raceKey.raceNumber()\n const { meetingId, meetingDate } = this.bettingContext\n\n try {\n const pageDto = await getRacePageDataFromApi(meetingId, meetingDate, raceNumber)\n\n queryClient.setQueryData(\n queryKeys.racePageComplete(meetingId, meetingDate, raceNumber),\n pageDto\n )\n\n if (isRacePageDto(pageDto)) {\n const raceStarters = pageDto.RaceStarters.find(s => s.RaceKey.RaceNumber === raceNumber)\n const starters = raceStarters?.Starters ?? []\n this.data.mergeStartersForRaceKey(raceKey, StartersMapper.mapStarters(starters))\n }\n } catch {\n this.data.addStartersForRace(raceKey, [])\n }\n }\n}\n","import * as ko from 'knockout'\nimport { injectable } from 'inversify'\nimport { FeatureFlags } from '@mobi/settings'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { IDisposable } from '@classic/AppUtils/Framework/Disposable/IDisposable'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { IMultiLegViewModel } from './IMultiLegViewModel'\nimport { IProvDiv } from '../BaseBetType/IBaseBetType'\nimport {\n iotSubscribeTopics as subscribeRaceEvent,\n iotUnsubscribeTopics as unsubscribeRaceEvent,\n getFobPriceChangeTopic,\n getToteRaceTopic,\n} from '@core/State/PushData'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport StartersMapper from '@classic/Betting-v2/Mapping/StartersMapper'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { isRacePageDto } from '@mobi/api-types'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getRacePageDataFromApi } from '@core/Areas/Racing/Hooks/useRacePageData'\n\n@injectable()\nexport class MultiLegViewModel implements IMultiLegViewModel, IDisposable, IProvDiv {\n private legVisibleSubscriptions!: ko.Subscription\n private subscribedTopics: string[] = []\n private ldSubscription!: Rx.Disposable\n private isPriceChangeFeatureActive = false\n\n public data!: ObservableRacePage\n public bettingContext!: BettingInformation\n public selections!: ko.ObservableArray\n public legVisible!: ko.Observable\n public doubleProvDivAllowed!: ko.PureComputed\n public quaddieProvDivAllowed!: ko.PureComputed\n public useGiddyUp?: IUseGiddyUp\n\n public init(params: {\n data: ObservableRacePage\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n Guard.notNull(params.data)\n Guard.notNull(params.context.bettingContext)\n\n this.data = params.data\n this.useGiddyUp = params.useGiddyUp\n\n this.bettingContext = params.context.bettingContext\n this.selections = params.selections\n\n this.legVisible = ko.observable(null)\n this.bettingContext.legVisible = this.legVisible\n\n this.doubleProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.data.hasDoubleProvDivs()\n )\n })\n\n this.quaddieProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.data.hasQuaddieProvDivs()\n )\n })\n\n this.registerHandlers()\n }\n\n public isValidMultiLeg(raceKey: ObservableRaceKey): boolean {\n if (this.bettingContext.selectedBetType().betType() === BetType.Double) {\n return raceKey.isDoubleLeg()\n } else if (this.bettingContext.selectedBetType().betType() === BetType.Quaddie) {\n return raceKey.isQuaddieLeg()\n }\n return false\n }\n\n public dispose() {\n this.unsubscribeFromPushData()\n this.legVisibleSubscriptions.dispose()\n if (this.ldSubscription) this.ldSubscription.dispose()\n }\n\n private registerHandlers() {\n this.legVisibleSubscriptions = this.legVisible.subscribe(() => {\n this.loadStartersForLeg()\n })\n\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const isPriceChangeFeatureActive = record.features.get(FeatureFlags.PUSHDATA_PRICECHANGE.key)\n\n if (this.isPriceChangeFeatureActive != isPriceChangeFeatureActive) {\n this.isPriceChangeFeatureActive = isPriceChangeFeatureActive\n if (this.isPriceChangeFeatureActive) this.subscribeToPushData()\n else this.unsubscribeFromPushData()\n }\n })\n }\n\n private loadStartersForLeg(): void {\n //Only load starters for leg if not loaded previously\n const legVisible = this.legVisible()\n if (legVisible && legVisible >= 0) {\n const startersForLeg = this.data.getStartersForLeg(legVisible)\n if (startersForLeg().length <= 0) {\n const raceKeyForLeg = this.data.getRaceKeyForLeg(legVisible)\n\n if (raceKeyForLeg) {\n this.loadStartersForRace(raceKeyForLeg)\n }\n } else {\n if (this.isPriceChangeFeatureActive) this.subscribeToPushData()\n }\n }\n }\n\n private subscribeToPushData() {\n try {\n const legVisible = this.legVisible()\n if (legVisible) {\n const newTopics: string[] = []\n const raceKeyForLeg = this.data.getRaceKeyForLeg(legVisible)\n\n if (!raceKeyForLeg) {\n return\n }\n\n const currLegRaceNumber = raceKeyForLeg.raceNumber()\n const currLegRace = this.data.meetingInformation\n .races()\n .filter(race => race.raceNumber() === currLegRaceNumber)[0]\n\n if (\n !!currLegRace &&\n currLegRace.fixedOddsInfo &&\n currLegRace.fixedOddsInfo.marketSequence &&\n currLegRace.fixedOddsInfo.marketSequence()\n ) {\n const marketId = currLegRace.fixedOddsInfo.marketSequence().toString()\n // FOB Price Change\n newTopics.push(getFobPriceChangeTopic(marketId))\n }\n if (!!currLegRace && currLegRace.key) {\n // TOTE Price Change\n newTopics.push(getToteRaceTopic(currLegRace.key(), { type: 'priceChanged' }))\n }\n subscribeRaceEvent(newTopics)\n this.subscribedTopics = this.subscribedTopics.concat(newTopics)\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error Subscribing', e)\n }\n }\n\n private unsubscribeFromPushData() {\n unsubscribeRaceEvent(this.subscribedTopics)\n this.subscribedTopics.length = 0\n }\n\n private async loadStartersForRace(raceKey: ObservableRaceKey) {\n if (raceKey == null) return\n\n const raceNumber = raceKey.raceNumber()\n const { meetingId, meetingDate } = this.bettingContext\n\n try {\n const pageDto = await getRacePageDataFromApi(meetingId, meetingDate, raceNumber)\n\n queryClient.setQueryData(\n queryKeys.racePageComplete(meetingId, meetingDate, raceNumber),\n pageDto\n )\n\n if (isRacePageDto(pageDto)) {\n const raceStarters = pageDto.RaceStarters.find(s => s.RaceKey.RaceNumber === raceNumber)\n const starters = raceStarters?.Starters ?? []\n\n this.data.addStartersForRace(raceKey, StartersMapper.mapStarters(starters))\n\n if (this.isPriceChangeFeatureActive) {\n this.subscribeToPushData()\n }\n }\n } catch {\n this.data.addStartersForRace(raceKey, [])\n }\n }\n}\n","import { injectable } from 'inversify'\nimport { INoveltyDividendsViewModel } from './INoveltyDividendsViewModel'\nimport NoveltyDividend from '../../../Model/NoveltyDividend'\n\n@injectable()\nexport class NoveltyDividendsViewModel implements INoveltyDividendsViewModel {\n public noveltyDividends!: ko.ObservableArray\n\n public init(params: { noveltyDividends: ko.ObservableArray }) {\n this.noveltyDividends = params.noveltyDividends\n }\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport ObservableProvDivPool from '@classic/Betting-v2/Model/Observables/ObservableProvDivPool'\nimport { state$ as bettingV2CommandDriver$ } from '../../Commands/driver'\n\ninterface ProvDivsViewModelParams {\n provDivPools: ko.ObservableArray\n doubleProvDivAllowed: ko.Observable\n quaddieProvDivAllowed: ko.Observable\n}\n\n@injectable()\nexport class ProvDivsViewModel extends Disposable {\n public doubleProvDivAllowed: ko.Observable\n public quaddieProvDivAllowed: ko.Observable\n public isDoubleSelected: ko.Observable\n public isQuaddieSelected: ko.Observable\n private isDoubleVisible: ko.PureComputed\n private isQuaddieVisible: ko.PureComputed\n private doubleProvDivSub: Rx.Disposable\n private quaddieProvDivSub: Rx.Disposable\n\n public pools: ko.ObservableArray\n\n constructor(\n @inject('$params') params: ProvDivsViewModelParams,\n @inject('IEventAggregator') eventAggregator: IEventAggregator\n ) {\n super(eventAggregator)\n\n this.pools = params.provDivPools\n this.doubleProvDivAllowed = params.doubleProvDivAllowed\n this.quaddieProvDivAllowed = params.quaddieProvDivAllowed\n\n this.isDoubleSelected = ko.observable(false)\n this.isQuaddieSelected = ko.observable(false)\n\n this.isDoubleVisible = ko.pureComputed(() => {\n return this.isDoubleSelected() && this.doubleProvDivAllowed()\n })\n\n this.isQuaddieVisible = ko.pureComputed(() => {\n return this.isQuaddieSelected() && this.quaddieProvDivAllowed()\n })\n\n this.doubleProvDivSub = bettingV2CommandDriver$\n .map(record => {\n return {\n selected: record.showDoubleProvDiv,\n }\n })\n .distinctUntilChanged()\n .subscribe(result => {\n // This is where the subscription to the driver state is resolved. Put logic here, not in toggleFixedFlucs.\n this.isDoubleSelected(result.selected)\n //this.evtAggregator.publish(\"toggle-double-prov-div\", result.selected);\n })\n\n this.quaddieProvDivSub = bettingV2CommandDriver$\n .map(record => {\n return {\n selected: record.showQuaddieProvDiv,\n }\n })\n .distinctUntilChanged()\n .subscribe(result => {\n // This is where the subscription to the driver state is resolved. Put logic here, not in toggleFixedFlucs.\n this.isQuaddieSelected(result.selected)\n // this.evtAggregator.publish(\"toggle-quaddie-prov-div\", result.selected);\n })\n\n this.configureDisposal()\n }\n\n private configureDisposal() {\n this.registerDisposals(() => {\n this.doubleProvDivSub.dispose()\n this.quaddieProvDivSub.dispose()\n })\n }\n\n public isVisible(pool: { name: string }): boolean {\n switch (pool.name) {\n case 'Double':\n return this.isDoubleVisible()\n case 'Quaddie':\n return this.isQuaddieVisible()\n default:\n // eslint-disable-next-line no-console\n console.warn('Prov div pool has no name')\n return false\n }\n }\n}\n","import { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport const trackRaceReplayVideoLaunched = (replayLocation: string, replayAvailable: boolean) =>\n trackEvent(keys.raceReplayLaunched, {\n replayLocation: replayLocation,\n replayAvailable: replayAvailable,\n })\n\nexport const trackRaceReplayVideoFullScreen = (isFullScreen: boolean) =>\n trackEvent(keys.raceReplayFullScreen, { isFullScreen: isFullScreen })\n\nexport const trackRaceReplayVideoMute = (isMuted: boolean) =>\n trackEvent(keys.raceReplayMute, { isMuted: isMuted })\n\nexport const trackRaceReplayVideoClosed = () => trackEvent(keys.raceReplayClosed, {})\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { IRaceReplayViewModel } from './IRaceReplayViewModel'\nimport ObservableRaceReplay from '@classic/Betting-v2/Model/Observables/ObservableRaceReplay'\nimport { LogInHelper } from '@classic/AppUtils/Framework/Utils/LogInHelper'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IApiService } from '@classic/Foundation/Services/ApiServiceInjectable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport {\n trackRaceReplayVideoClosed,\n trackRaceReplayVideoLaunched,\n trackRaceReplayVideoMute,\n} from '@core/Areas/Racing/Components/RaceReplay/analytics'\n\n@injectable()\nexport class RaceReplayViewModel extends Disposable implements IRaceReplayViewModel {\n public id!: string\n public videoSource!: ko.Observable\n public message!: ko.Observable\n public raceReplayData!: ObservableRaceReplay\n\n private apiService: IApiService\n private isMuted = false\n private source = ''\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('IApiService') apiService: IApiService\n ) {\n super(eventAggregator)\n this.apiService = apiService\n }\n\n public init = (params: {\n id: string\n raceReplayData: ObservableRaceReplay\n source: string\n }): void => {\n this.id = params.id\n this.raceReplayData = params.raceReplayData\n this.source = params.source\n this.videoSource = ko.observable('')\n this.message = ko.observable('')\n\n this.safeSubscribe(`toggle-race-replay-for-${this.id}`, () => {\n this.toggleVideo()\n })\n this.safeSubscribe(`stop-race-replay-for-${this.id}`, () => {\n if (this.isVideoOn()) {\n this.closeVideo()\n }\n })\n this.safeSubscribe(`stop-all-race-replay`, () => {\n if (this.isVideoOn()) {\n this.closeVideo()\n }\n })\n }\n\n public visible = (): boolean => {\n return this.isVideoOn() || this.shouldDisplayMessage()\n }\n\n public isVideoOn = (): boolean => {\n return this.videoSource() != null && this.videoSource().length > 0\n }\n\n public shouldDisplayMessage = (): boolean => {\n return this.message() != null && this.message().length > 0\n }\n\n public closeVideo = (): void => {\n this.message('')\n this.videoSource('')\n this.evtAggregator.publish(`race-replay-stopped-for-${this.id}`)\n trackRaceReplayVideoClosed()\n }\n\n public trackVideoPlay = (): void => {\n const replayLocation = this.source\n trackRaceReplayVideoLaunched(replayLocation, true)\n }\n\n public trackVolumeChange = (_: unknown, event: Event): void => {\n const target = event.currentTarget as HTMLVideoElement\n\n const isMutedNew = target.volume <= 0.1 || target.muted\n if (this.isMuted != isMutedNew) trackRaceReplayVideoMute(isMutedNew)\n this.isMuted = isMutedNew\n }\n\n public toggleVideo = (): void => {\n if (this.isVideoOn()) {\n this.closeVideo()\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const promise = this.apiService.post({\n url: '/api/videoentitlement',\n body: { encrpytedVideoKey: this.raceReplayData.videoKey() },\n })\n\n promise\n .then(model => {\n if (model.IsEntitled) {\n this.evtAggregator.publish(`stop-all-race-replay`)\n this.message('')\n this.videoSource(model.VideoKey)\n this.evtAggregator.publish(`race-replay-started-for-${this.id}`)\n } else {\n if (model.CallToActionLoginRequired) {\n new LogInHelper().presentLogIn()\n } else {\n this.message(model.ReasonText)\n }\n }\n })\n .catch(() => {\n this.videoSource('')\n this.message('Error checking entitlement to replay.')\n })\n }\n }\n}\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { registerBodyScrollLock, deregisterBodyScrollLock } from '@mobi/utils/functions'\nimport {\n GiddyUpTabChanged,\n QuaddieValueChanged,\n} from '@classic/AppUtils/Framework/Intent/giddyUpSignals'\nimport { setGiddyUpTab, setGiddyUpQuaddieValue } from '@classic/Foundation/Analytics/Analytics'\nimport { MainContainer } from '@core/Components/Containers'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport {\n OverlayCloseButtonStyled,\n OverlayHeaderStyled,\n OverlayHeadingStyled,\n} from '@core/Components/Overlay/Overlay.styles'\n\nconst GiddyUpSliceLazy = React.lazy(() => import('@rwwa/racing-form/WebClient/dist/giddyUp'))\n\nconst Loading = () => null\n\nexport const GiddyUpSlice: React.FC> = ({\n raceInfo,\n}) => {\n const containerElementRef = React.useRef(null)\n\n React.useEffect(() => {\n if (!containerElementRef.current) return\n\n const containerElement = containerElementRef.current\n registerBodyScrollLock(containerElement)\n\n return () => deregisterBodyScrollLock(containerElement)\n }, [])\n\n React.useEffect(() => {\n const tabChangeSubscription = GiddyUpTabChanged.signal$.subscribe(x => {\n setGiddyUpTab(x.data)\n })\n const quaddieChangeSubscription = QuaddieValueChanged.signal$.subscribe(x => {\n setGiddyUpQuaddieValue(x.data)\n })\n\n return () => {\n tabChangeSubscription.dispose()\n quaddieChangeSubscription.dispose()\n }\n }, [])\n\n return (\n
      \n \n Giddy-Up\n \n \n \n \n\n \n }>\n \n \n \n
      \n )\n}\n","import React from 'react'\nimport { injectable, inject } from 'inversify'\nimport type { IErrorHandler } from '@classic/Betting-v2/Utils/IErrorHandler'\nimport type { IEntitlementService } from '@classic/Betting-v2/Services/IEntitlementService'\nimport type { ILoginHelper } from '@classic/AppUtils/Framework/Utils/ILoginHelper'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport { OverlayClose, OverlayOpen } from '@core/Components/Overlay'\nimport { GiddyUpSlice } from '@core/Areas/Racing/Components/RacingFormSliceJS/GiddyUp'\n\n@injectable()\nexport class FormGiddyUpRaceInformation {\n private entitlementService: IEntitlementService\n private loginHelper: ILoginHelper\n private errorHandler: IErrorHandler\n private appWindow: IAppWindow\n\n constructor(\n @inject('IEntitlementService') entitlementService: IEntitlementService,\n @inject('ILoginHelper') logInHelper: ILoginHelper,\n @inject('IErrorHandler') errorHandler: IErrorHandler,\n @inject('IAppWindow') appWindow: IAppWindow\n ) {\n this.entitlementService = entitlementService\n this.loginHelper = logInHelper\n this.errorHandler = errorHandler\n this.appWindow = appWindow\n }\n\n private displayGiddyUpForm(\n giddyUpRaceKey: string,\n giddyUpFixtureKey: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getStarterFunc: (starterNumber: number) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getRaceDetailFunc: () => any,\n selectAcceptorFunc: (acceptorNumber: number, isFixed: boolean) => void,\n clearSelectionFunc: () => void,\n selectQuaddieFunc: (raceNumbers: number[], acceptorNumbers: number[][]) => void\n ): void {\n const raceInfo = {\n raceKey: giddyUpRaceKey,\n fixtureKey: giddyUpFixtureKey,\n getAcceptor: (starterKey: string) => {\n let result: Record = {}\n\n // starterKey e.g. '562439-1'\n const [, starterNumber] = starterKey.split('-')\n // TD: Note: Assumes currently viewed race. When multiple races will need to\n // refactor mobi to collect race-ids and/or starter ids, OR initiate giddyup js earlier\n // and have it collect the data for races/meetings.\n if (!starterNumber) return defaultResult\n\n const starter = getStarterFunc(Number(starterNumber))\n if (!starter) return defaultResult\n\n const fixedOddsInfo = starter.fixedOddsFinisherInfo\n ? starter.fixedOddsFinisherInfo\n : starter.fixedOddsStarterInfo\n const silkImage = starter.getSilkImage(this.appWindow)\n\n result = {\n starterKey,\n name: starter.name(),\n isScratched: starter.isScratched(),\n isEmergency: starter.isEmergency(),\n emergencyNum: starter.emergencyNum(),\n hasBetSelected: false,\n scratchType: starter.scratchType(),\n silkImage: {\n cssurl: silkImage\n ? silkImage.getCssBackgroundFor(starter.number(), starter.type())\n : '',\n url: '',\n width: silkImage ? silkImage.size.width : '',\n },\n fixedOdds: {\n win: fixedOddsInfo.displayWinDividend(),\n place: fixedOddsInfo.displayPlaceDividend(),\n isSuspended: fixedOddsInfo.isSuspended(),\n isScratched: fixedOddsInfo.isScratched(),\n },\n toteOdds: {\n win: starter.displayWinDividend(),\n place: starter.displayPlaceDividend(),\n },\n }\n\n if (Object.prototype.hasOwnProperty.call(starter, 'barrier')) {\n result.barrier = starter.barrier()\n }\n if (Object.prototype.hasOwnProperty.call(starter, 'boxNumber')) {\n result.boxNumber = starter.boxNumber()\n }\n if (Object.prototype.hasOwnProperty.call(starter, 'handicap')) {\n result.handicap = starter.handicap()\n }\n\n // Server API (RaceController.GetAcceptors) returns different results based on the race status\n // - open --> returns RaceStarters\n // - other (jumped, resulted, abandoned, released, etc) --> returns Finishers.. which includes the 'placing' property used for determining 'hasJumped'\n result.hasJumped = Object.prototype.hasOwnProperty.call(starter, 'placing')\n\n return result\n },\n getRaceDetail: () => getRaceDetailFunc() || defaultRace,\n selectAcceptor: (acceptorNumber: number, isFixed: boolean) =>\n selectAcceptorFunc(acceptorNumber, isFixed),\n clearSelection: clearSelectionFunc,\n selectQuaddie: (raceNumbers: number[], acceptorNumbers: number[][]) => {\n selectQuaddieFunc(raceNumbers, acceptorNumbers)\n },\n }\n OverlayOpen(() => )\n }\n\n public openGiddyUp(\n raceKey: string,\n fixtureKey: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getStarterFunc: (starterNumber: number) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getRaceDetailFunc: () => any,\n selectAcceptorFunc: (acceptorNumber: number, isFixed: boolean) => void,\n clearSelectionFunc: () => void,\n selectQuaddieFunc: (raceNumbers: number[], acceptorNumbers: number[][]) => void\n ) {\n const promise = this.entitlementService.isEntitled('giddyUp')\n promise\n .then(result => {\n if (result != undefined) {\n if (result.success && result.data.isGiddyUpEntitled) {\n this.displayGiddyUpForm(\n raceKey,\n fixtureKey,\n getStarterFunc,\n getRaceDetailFunc,\n selectAcceptorFunc,\n clearSelectionFunc,\n selectQuaddieFunc\n )\n } else if (result.errorCode === 403) {\n this.loginHelper.presentLogIn()\n } else {\n this.errorHandler.showWarningMessage('', result.data.reasonText)\n }\n }\n })\n .catch(() => {\n const message =\n 'If you require assistance please contact our Customer Service Centre on 1300 36 36 88'\n this.errorHandler.showErrorMessage('Service is currently unavailable', message)\n })\n }\n\n public close() {\n OverlayClose()\n }\n}\n\n// Local Helpers\n\nconst defaultRace = {\n raceCourse: 'Missing',\n raceNumber: 1,\n distance: '0',\n trackCondition: '',\n weatherClass: '',\n raceStatus: '',\n raceTimeLocal: 0,\n}\n\nconst defaultResult = {\n name: 'Missing information',\n number: 1,\n isEmergency: false,\n isScratched: false,\n hasBetSelected: false,\n scratchType: '',\n silkImage: { cssurl: '', url: '' },\n fixedOdds: { win: 0.0, isSuspended: false },\n toteOdds: { win: 0.0 },\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { state$ as bettingV2CommandDriver$ } from '../../Commands/driver'\n\n@injectable()\nexport class StartersListViewModel extends Disposable {\n public starters: ko.ObservableArray\n public raceNumber: ObservableRaceKey\n public bettingContext: BettingInformation\n public isInfoVisible: ko.Observable\n public numberOfStartersInRace: ko.PureComputed\n private hasMarketMovers: ko.PureComputed\n private hasFixedOdds: ko.PureComputed\n private subInfoButton: Rx.Disposable\n public doubleProvDivAllowed: ko.Observable\n public quaddieProvDivAllowed: ko.Observable\n public isRaceClosed: ko.Observable = ko.observable(false)\n\n constructor(\n @inject('$params') params: StartersListViewModelParams,\n @inject('IEventAggregator') evtAggregator: IEventAggregator\n ) {\n super(evtAggregator)\n\n Guard.notNull(params.raceStarters)\n Guard.notNull(params.bettingContext)\n\n this.evtAggregator = evtAggregator\n this.bettingContext = params.bettingContext\n this.raceNumber = params.raceStarters.Key\n this.starters = params.raceStarters.Value\n\n this.hasMarketMovers = ko.pureComputed(() =>\n this.starters().some(starter => starter.hasMarketMovers())\n )\n\n this.numberOfStartersInRace = ko.pureComputed(() => this.starters().length)\n\n this.hasFixedOdds = ko.pureComputed(() =>\n this.starters().some(starter => starter.hasFixedOdds())\n )\n\n this.isInfoVisible = ko.observable(false)\n\n this.isRaceClosed(params.isRaceClosed || false)\n\n this.doubleProvDivAllowed = !this.isRaceClosed()\n ? params.doubleProvDivAllowed\n : ko.observable(false)\n this.quaddieProvDivAllowed = !this.isRaceClosed()\n ? params.quaddieProvDivAllowed\n : ko.observable(false)\n\n this.subInfoButton = bettingV2CommandDriver$\n .map(record => {\n return {\n showAllForm: record.showAllForm,\n showFixedFlucs: record.showFixedFlucs,\n showMarketMovers: record.showMarketMovers,\n showDoubleProvDiv: record.showDoubleProvDiv,\n showQuaddieProvDiv: record.showQuaddieProvDiv,\n }\n })\n .distinctUntilChanged()\n .subscribe(record => {\n // This is where the subscription to the driver state is resolved. Put logic here, not in toggleFixedFlucs.\n if (!this.isRaceClosed()) {\n this.isInfoVisible(\n record.showAllForm ||\n (record.showFixedFlucs && this.hasFixedOdds()) ||\n (record.showMarketMovers && this.hasMarketMovers()) ||\n (record.showDoubleProvDiv && this.doubleProvDivAllowed()) ||\n (record.showQuaddieProvDiv && this.quaddieProvDivAllowed())\n )\n }\n })\n\n this.registerDisposals(() => {\n this.subInfoButton.dispose()\n })\n }\n}\n\nclass StartersListViewModelParams {\n raceStarters!: { Key: ObservableRaceKey; Value: ko.ObservableArray }\n bettingContext!: BettingInformation\n hasFixedOdds!: ko.Observable\n doubleProvDivAllowed!: ko.Observable\n quaddieProvDivAllowed!: ko.Observable\n isRaceClosed?: boolean\n}\n","import React, { type CSSProperties } from 'react'\nimport {\n PriceInnerStyled,\n PriceChangeContainerStyled,\n PriceChangeIndicatorInsideStyled,\n PriceWrapperStyled,\n PriceLableStyled,\n PriceChangeIndicatorAboveStyled,\n} from './PriceChangeDisplay.styles'\nimport { usePriceChangeAnimation, PriceChangeType } from '@core/Utils/hooks/usePriceChangeAnimation'\n\nexport const PriceChangeDisplay: React.FC<{\n priceWin: string\n pricePlace?: string\n isVisible?: boolean\n isSelected?: boolean\n priceWinPrefix?: React.ReactNode\n pricePlacePrefix?: React.ReactNode\n /** Prices can be stacked (default) or inline */\n isInline?: boolean\n /** Show w/p label in price display */\n isWidthDynamic?: boolean\n /** set the width of price change indicator to be Dynamic */\n isLabelShown?: boolean\n /** Arrow can be above container 'OUT' (default) or inline with price 'IN' */\n arrowLocation?: 'IN' | 'OUT'\n /** Custom styles for container */\n containerStyle?: CSSProperties\n /** Centre the content */\n isContentCentred?: boolean\n}> = ({\n priceWin,\n pricePlace,\n priceWinPrefix,\n pricePlacePrefix,\n isVisible = true,\n isSelected = false,\n isInline = false,\n isWidthDynamic = false,\n isLabelShown = false,\n arrowLocation = 'OUT',\n containerStyle,\n isContentCentred = false,\n}) => {\n const [state] = usePriceChangeAnimation(priceWin, pricePlace)\n\n if (!isVisible) {\n return null\n }\n\n return (\n \n {!!priceWin && (\n \n {arrowLocation === 'IN' && (\n \n )}\n\n \n {priceWinPrefix && priceWinPrefix}\n {state.priceDisplayState.win}\n {isLabelShown && w}\n \n \n )}\n\n {!!pricePlace && (\n \n {arrowLocation === 'IN' && (\n \n )}\n\n \n {pricePlacePrefix && pricePlacePrefix}\n {state.priceDisplayState.place}\n {isLabelShown && p}\n \n \n )}\n\n {arrowLocation === 'OUT' && (\n \n )}\n \n )\n}\n\n// =======\n// Helpers\n// =======\nexport type ArrowDirection = PriceChangeType | 'BOTH'\n\nfunction getArrowDirection(winType: PriceChangeType, placeType: PriceChangeType): ArrowDirection {\n if (!!winType && !!placeType && winType !== placeType) {\n return 'BOTH'\n }\n return winType || placeType\n}\n","import styled from '@emotion/styled'\nimport { ButtonSelectionStyled } from '@mobi/component-library/Common/Buttons'\nimport { WinPlaceSelection } from '..'\n\nexport const WinPlaceSelectionButtonStyled = styled(ButtonSelectionStyled)({\n width: '5rem',\n minWidth: '5rem',\n height: '5rem',\n})\n\nexport const WinPlaceSelectionButtonTitleStyled = styled('div')<{ isContentCentered: boolean }>(\n {\n marginLeft: '0.3rem',\n marginRight: '0.3rem',\n marginTop: '0.3rem',\n marginBottom: '0.4rem',\n fontWeight: 'normal',\n },\n ({ isContentCentered: isContentCentered = false }) => ({\n textAlign: isContentCentered ? 'center' : 'right',\n })\n)\n\ntype WinPlaceSelectionFavouriteStyledProps = Pick\nexport const WinPlaceSelectionFavouriteStyled = styled.span(\n {\n position: 'absolute',\n top: 0,\n },\n ({ favouritePosition = 'left' }) => ({\n [favouritePosition]: 0,\n transform: `translate(${favouritePosition === 'left' ? '-' : ''}40%,-40%)`,\n })\n)\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { hexColors } from '@mobi/settings'\nimport {\n WinPlaceSelectionButtonStyled,\n WinPlaceSelectionButtonTitleStyled,\n WinPlaceSelectionFavouriteStyled,\n} from './WinPlaceSelection.styles'\nimport { PriceChangeDisplay } from '../PriceChangeDisplay'\n\nexport interface WinPlaceSelection {\n isVisible: boolean\n isDisabled: boolean\n isFavourite: boolean\n isSelected: boolean\n selectionName?: string\n onClick: React.MouseEventHandler\n priceWin: string\n pricePlace: string\n starterNumber: number\n tidAttribute?: string\n favouritePosition?: 'left' | 'right'\n buttonStyleOverride?: React.CSSProperties\n centerContent?: boolean\n arrowLocation?: 'IN' | 'OUT'\n title?: string\n}\n\nexport const WinPlaceSelection = React.forwardRef(\n (\n {\n isVisible,\n isDisabled,\n isFavourite,\n isSelected,\n selectionName,\n onClick,\n priceWin,\n pricePlace,\n starterNumber,\n buttonStyleOverride,\n tidAttribute = '',\n favouritePosition = 'right',\n centerContent = false,\n arrowLocation = 'OUT',\n title = undefined,\n },\n ref\n ) => {\n if (!isVisible) {\n return null\n }\n\n const extra: Record = {}\n if (selectionName) extra['data-tid-selection'] = selectionName\n\n return (\n \n {title && (\n \n
      {title}
      \n
      \n )}\n\n \n\n {isFavourite && (\n \n \n \n )}\n \n )\n }\n)\n","import styled from '@emotion/styled'\nimport { ButtonSelectionStyled } from '@mobi/component-library/Common/Buttons'\n\nconst BUTTON_HEIGHT = '4rem'\nconst BORDER_WIDTH = '0.1rem'\n\nexport const BettingOptionsSelectionButtonStyled = styled(ButtonSelectionStyled)({\n flex: 1,\n height: BUTTON_HEIGHT,\n margin: 0,\n borderWidth: BORDER_WIDTH,\n\n '&:first-of-type': {\n marginRight: '0.5rem',\n },\n '&:last-of-type': {\n marginLeft: '0.5rem',\n },\n})\n\nexport const BettingOptionsSelectionInnerStyled = styled('span')({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: `calc((${BUTTON_HEIGHT} - ${BORDER_WIDTH}) - ${BORDER_WIDTH})`,\n})\n\nexport const BettingOptionsSelectionLabelStyled = styled('span')({\n fontWeight: 'normal',\n paddingLeft: '0.7rem',\n})\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IMultiSelectionPriceViewModel } from './IMultiSelectionPriceViewModel'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { ObservableStarter } from '@classic/Betting-v2/Model/Observables/ObservableStarter'\nimport { PriceChangeDisplay } from '@core/Components/PriceChangeDisplay'\n\n@injectable()\nexport class MultiSelectionPriceViewModel\n extends Disposable\n implements IMultiSelectionPriceViewModel\n{\n public bettingInformation!: BettingInformation\n public starter!: ObservableStarter\n public isFixedOddsOn!: ko.Observable\n public shouldDisplayScratchedFixedOdds!: ko.PureComputed\n public shouldDisplaySuspendedFixedOdds!: ko.PureComputed\n public shouldDisplayWinFixedOdds!: ko.PureComputed\n public shouldDisplayPlaceFixedOdds!: ko.PureComputed\n public shouldDisplayStackedPrices!: ko.PureComputed\n public PriceChangeDisplay: typeof PriceChangeDisplay\n\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n\n this.PriceChangeDisplay = PriceChangeDisplay\n }\n\n public init(params: { starter: ObservableStarter; bettingInformation: BettingInformation }) {\n Guard.notNull(params.starter)\n Guard.notNull(params.bettingInformation)\n\n this.starter = params.starter\n this.bettingInformation = params.bettingInformation\n this.isFixedOddsOn = ko.observable(false)\n\n this.shouldDisplayScratchedFixedOdds = ko.pureComputed(\n () => this.starter.hasFixedOdds() && this.starter.fixedOddsStarterInfo.isScratched()\n )\n this.shouldDisplaySuspendedFixedOdds = ko.pureComputed(\n () =>\n this.starter.hasFixedOdds() &&\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n !this.starter.fixedOddsStarterInfo.hasWinDividend()\n )\n this.shouldDisplayWinFixedOdds = ko.pureComputed(\n () =>\n this.starter.hasFixedOdds() &&\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n this.starter.fixedOddsStarterInfo.hasWinDividend()\n )\n this.shouldDisplayPlaceFixedOdds = ko.pureComputed(\n () =>\n this.starter.hasFixedOdds() &&\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n this.starter.fixedOddsStarterInfo.hasWinDividend() &&\n this.starter.fixedOddsStarterInfo.hasPlacePool()\n )\n this.shouldDisplayStackedPrices = ko.pureComputed(\n () =>\n this.bettingInformation.selectedBetType().isExacta() ||\n this.bettingInformation.selectedBetType().isQuinella() ||\n this.bettingInformation.rovingBanker() ||\n this.bettingInformation.isBoxed() ||\n this.bettingInformation.selectedBetType().isMultiLegType() ||\n this.bettingInformation.selectedBetType().isAllUp()\n )\n\n this.registerEventHandlers()\n }\n\n private registerEventHandlers() {\n this.safeSubscribe('fixed-odds-display-state-changed', (isOn: boolean) => {\n this.isFixedOddsOn(isOn)\n })\n }\n}\n","import * as ko from 'knockout'\nimport moment from 'moment'\nimport countdown from 'countdown'\nimport { injectable, inject } from 'inversify'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { TimeSpanCalculator } from '@classic/Betting-v2/Utils/TimeSpanCalculator'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport * as DateTimeProvider from '@classic/Foundation/DateTimeProvider'\n\ninterface RaceSubHeaderViewModelParams {\n race: ObservableRaceKey\n context: { bettingContext: BettingInformation; legVisible: ko.Observable }\n}\n\n@injectable()\nexport class RaceSubHeaderViewModel extends Disposable {\n public race: ObservableRaceKey\n public formattedStartTime: ko.PureComputed\n public currentCountDown: ko.Observable\n public bulbColour: ko.Observable\n public bettingContext: BettingInformation\n public legVisible: ko.Observable\n public raceSelectionString: ko.Observable\n public showTapToSelect: ko.PureComputed\n public isCurrentRace: ko.PureComputed\n\n constructor(\n @inject('$params') params: RaceSubHeaderViewModelParams,\n @inject('IEventAggregator') eventAggregator: IEventAggregator\n ) {\n super(eventAggregator)\n\n this.race = params.race\n this.legVisible = params.context.legVisible\n this.bettingContext = params.context.bettingContext\n\n this.raceSelectionString = ko.observable('')\n\n this.formattedStartTime = ko.pureComputed(() => {\n const rt = moment(params.race.startTime())\n return `${rt.format('HH:mm')}`\n })\n\n this.currentCountDown = ko.observable('')\n this.bulbColour = ko.observable('green')\n\n this.showTapToSelect = ko.pureComputed((): boolean => {\n return this.raceSelectionString().length === 0 && this.race.leg() !== this.legVisible()\n })\n\n this.isCurrentRace = ko.pureComputed(() => {\n return this.race.leg() === this.legVisible()\n })\n\n this.initialiseTimer()\n\n this.registerDisposals(() => {\n this.formattedStartTime.dispose()\n if (this.selectionsChangedSubscription != undefined) {\n this.selectionsChangedSubscription.dispose()\n }\n if (this.selectedPoolSubscription !== undefined) {\n this.selectedPoolSubscription.dispose()\n }\n this.showTapToSelect.dispose()\n clearInterval(this.timerId)\n })\n\n this.registerHandlers()\n }\n\n private registerHandlers() {\n const raceSelectionsObject = this.bettingContext.selections\n .selections()\n .find(s => s.raceKey().raceNumber() === this.race.raceNumber())\n\n if (raceSelectionsObject != undefined) {\n this.selectionsChangedSubscription = raceSelectionsObject.starters.subscribe(() => {\n this.raceSelectionString(this.selectionStringDisplay())\n })\n\n this.raceSelectionString(this.selectionStringDisplay())\n }\n\n if (\n this.bettingContext.selectedBetType().isAllUp() &&\n this.race.poolInfo.selectedPool !== undefined\n ) {\n this.selectedPoolSubscription = this.race.poolInfo.selectedPool.subscribe(() => {\n this.raceSelectionString(this.selectionStringDisplay())\n })\n\n this.raceSelectionString(this.selectionStringDisplay())\n }\n }\n\n private selectionStringDisplay() {\n const result = this.bettingContext\n .selectedBetType()\n .selectionStringProcessor.selections(\n this.bettingContext,\n this.race.raceNumber(),\n this.bettingContext.selections\n )\n const leadText =\n result.selectionStrings[0].length > 0 &&\n this.bettingContext.selectedBetType().isAllUp() &&\n this.race.poolInfo.selectedPool() !== undefined\n ? this.race.poolInfo.selectedPool().description() + ' - '\n : ''\n return leadText + result.selectionStrings[0]\n }\n\n public toggle(): void {\n if (this.legVisible() != this.race.leg()) {\n this.legVisible(this.race.leg())\n } else {\n this.legVisible(-1)\n }\n }\n\n protected initialiseTimer(): void {\n const raceStartTime = this.race.startTime()\n this.updateTimer(raceStartTime)\n this.timerId = window.setInterval(() => this.updateTimer(raceStartTime), 1000)\n }\n\n private updateTimer(raceStartTime: Date): void {\n const now = new Date(DateTimeProvider.now())\n const timeSpan = TimeSpanCalculator.process(\n countdown(\n raceStartTime,\n now,\n countdown.DAYS | countdown.HOURS | countdown.MINUTES | countdown.SECONDS\n ) as countdown.Timespan\n )\n this.currentCountDown(timeSpan.text)\n this.bulbColour(timeSpan.color)\n }\n\n private selectedPoolSubscription!: ko.Subscription\n private selectionsChangedSubscription!: ko.Subscription\n private timerId!: number\n}\n","import * as ko from 'knockout'\nimport Decimal from 'decimal.js'\nimport { injectable, inject } from 'inversify'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport { BetSpecialOffer, FobAmount } from '@classic/Specials/Model/BetSpecialOffer'\nimport { CurrencyConverter } from '@classic/AppUtils/Utils/CurrencyConverter'\nimport { LegTypeCode } from '@classic/Specials/Model/LegTypeCode'\nimport { PyosStore } from '@classic/Specials/Store/PyosStore'\nimport { Stake } from '@classic/Specials/Model/Stake'\nimport { PriceDetails } from '@classic/Specials/Model/PriceDetails'\nimport { IFixedWinPlaceSelectionsViewModel } from './IFixedWinPlaceSelectionsViewModel'\n\nconst priceBoostIncrementIntervalSpeed = 60\n\n@injectable()\nexport class FixedWinPlaceSelectionsViewModel\n extends Disposable\n implements IFixedWinPlaceSelectionsViewModel\n{\n private currencyConverter!: CurrencyConverter\n private pyosStore: PyosStore\n private stakeChangeSubscription!: ko.Subscription\n private maxProjectedPay!: decimal.Decimal\n\n public title!: string\n public selectionsString!: string\n public winPrice!: string\n public placePrice!: string\n public displayWinPrice!: ko.Observable\n public displayPlacePrice!: ko.Observable\n public hasFixedPlacePool!: boolean\n public projectedReturnString!: ko.Observable\n public currentBoostedPrice!: ko.Observable\n\n constructor(\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('PyosStore') pyosStore: PyosStore\n ) {\n super(eventAggregator)\n this.pyosStore = pyosStore\n }\n\n public init(params: {\n selectionsString: string\n winPrice: string\n placePrice: string\n hasFixedPlacePool: boolean\n }) {\n this.maxProjectedPay = new Decimal('999999999.99')\n this.currencyConverter = new CurrencyConverter()\n\n this.selectionsString = params.selectionsString\n this.winPrice = params.winPrice\n this.placePrice = params.placePrice\n this.displayWinPrice = ko.observable('')\n this.setDisplayPrice(this.displayWinPrice, this.winPrice)\n this.displayPlacePrice = ko.observable('')\n this.setDisplayPrice(this.displayPlacePrice, this.placePrice)\n this.hasFixedPlacePool = params.hasFixedPlacePool\n this.projectedReturnString = ko.observable('')\n this.currentBoostedPrice = ko.observable('')\n\n this.initialiseTitle()\n this.updatePrices()\n this.updateReturn()\n\n this.configureDisposal()\n this.registerHandlers()\n }\n\n private registerHandlers() {\n this.safeSubscribe('specialoffer.selected', (specialOffer: BetSpecialOffer) => {\n if (specialOffer.isBoostOffer || specialOffer.isInsuranceOffer) {\n this.boostPrices(specialOffer)\n this.boostReturn(specialOffer)\n } else {\n this.clearBoostedPrices()\n this.clearBoostedReturn()\n }\n })\n\n this.safeSubscribe('specialoffer.cleared', () => {\n this.clearBoostedPrices()\n this.clearBoostedReturn()\n })\n\n this.stakeChangeSubscription = this.pyosStore.stake.subscribe(() => {\n this.updateReturn()\n })\n }\n\n private configureDisposal() {\n this.registerDisposals(() => {\n this.stakeChangeSubscription.dispose()\n })\n }\n\n private calculateProjectedReturn(): number {\n let projectedPay: decimal.Decimal = new Decimal(0)\n if (this.pyosStore.stake() && this.pyosStore.priceDetails()) {\n const winPay = (this.pyosStore.stake() as Stake).Win.times(\n (this.pyosStore.priceDetails() as PriceDetails).Win.DollarReturn\n )\n const placePay = (this.pyosStore.stake() as Stake).Place.times(\n (this.pyosStore.priceDetails() as PriceDetails).Place.DollarReturn\n )\n projectedPay = winPay.plus(placePay)\n projectedPay = Decimal.min(projectedPay, this.maxProjectedPay)\n projectedPay = Decimal.max(projectedPay, 0)\n }\n return projectedPay.toNumber()\n }\n\n private updatePrices(): void {\n const selectedSpecial = this.pyosStore.selectedSpecial()\n if (selectedSpecial && (selectedSpecial.isBoostOffer || selectedSpecial.isInsuranceOffer)) {\n this.boostPrices(selectedSpecial)\n }\n }\n\n public GetPriceIncrease(specialOffer: BetSpecialOffer): FobAmount | null {\n if (!specialOffer.isBoostOffer && !specialOffer.isInsuranceOffer) {\n return null\n }\n if (!specialOffer.elements) {\n return null\n }\n\n const boostElement = specialOffer.elements.find(element => element.isBoost)\n return boostElement?.priceIncrease ?? null\n }\n\n private boostPrices(specialOffer: BetSpecialOffer): void {\n const priceIncrease: FobAmount | null = this.GetPriceIncrease(specialOffer)\n if (!priceIncrease) {\n return\n }\n if (specialOffer.legTypeCode === LegTypeCode.Win) {\n this.currentBoostedPrice(LegTypeCode.Win)\n this.setDisplayPrice(this.displayPlacePrice, this.placePrice)\n this.boostPrice(this.displayWinPrice, this.winPrice, priceIncrease.win)\n } else {\n this.currentBoostedPrice(LegTypeCode.Place)\n this.setDisplayPrice(this.displayWinPrice, this.winPrice)\n this.boostPrice(this.displayPlacePrice, this.placePrice, priceIncrease.place)\n }\n }\n\n private clearBoostedPrices(): void {\n this.currentBoostedPrice('')\n this.setDisplayPrice(this.displayWinPrice, this.winPrice)\n this.setDisplayPrice(this.displayPlacePrice, this.placePrice)\n }\n\n private boostReturn(selectedSpecialOffer: BetSpecialOffer): void {\n if (this.calculateProjectedReturn() > 0) {\n const reward = this.pyosStore.projectedBoostReward(selectedSpecialOffer)\n if (reward) {\n this.boostPrice(this.projectedReturnString, this.calculateProjectedReturn(), reward)\n }\n }\n }\n\n private updateReturn(): void {\n let boostReward = 0\n const selectedSpecial = this.pyosStore.selectedSpecial()\n if (selectedSpecial && (selectedSpecial.isBoostOffer || selectedSpecial.isInsuranceOffer)) {\n const reward = this.pyosStore.projectedBoostReward(selectedSpecial)\n if (reward) {\n boostReward = reward.toNumber()\n }\n }\n\n const projReturnString = this.currencyConverter.toMoney(\n this.calculateProjectedReturn() + boostReward,\n 2\n )\n this.projectedReturnString(projReturnString)\n }\n\n private clearBoostedReturn(): void {\n this.setDisplayPrice(this.projectedReturnString, this.calculateProjectedReturn())\n }\n\n private boostPrice(\n displayPrice: ko.Observable,\n price: string | number,\n increase: decimal.Decimal | number\n ): void {\n const priceIncrease = new Decimal(increase || 0)\n let increment = priceIncrease.dividedBy(10)\n if (increment.lessThan(0.01)) {\n increment = new Decimal(0.01)\n }\n const basePrice = new Decimal(price || 0)\n if (priceIncrease.lessThanOrEqualTo(0)) {\n increment = new Decimal(0)\n }\n const targetPrice = basePrice.plus(priceIncrease)\n let incrementedPrice = new Decimal(basePrice)\n\n const animationTimerId = setInterval(() => {\n incrementedPrice = incrementedPrice.plus(increment)\n this.setDisplayPrice(displayPrice, incrementedPrice.toNumber())\n if (incrementedPrice.greaterThanOrEqualTo(targetPrice)) {\n clearInterval(animationTimerId)\n }\n }, priceBoostIncrementIntervalSpeed)\n }\n\n private setDisplayPrice(\n displayPrice: ko.Observable,\n priceToDisplay: number | string\n ): void {\n let displayPriceString = ''\n if (typeof priceToDisplay === 'number') {\n displayPriceString = this.currencyConverter.toMoney(priceToDisplay, 2)\n }\n if (typeof priceToDisplay === 'string') {\n displayPriceString = this.currencyConverter.toMoney(+priceToDisplay, 2) //unary + operator converts string to number\n }\n\n displayPrice(displayPriceString)\n }\n\n public shouldShowPlacePrice(): boolean {\n return this.hasFixedPlacePool\n }\n\n private initialiseTitle(): void {\n this.title = 'Win & Place - FIXED'\n }\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { RunnerNumber } from '@core/Areas/RaceCard/Components/RunnerNumber'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { SilkImage } from '@classic/Betting-v2/Model/SilkImages'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { MatchedSilkImage } from '@core/Areas/Racing/Components/SilkImage/MatchedSilkImage'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\n\ninterface IStarterImageViewModelParams {\n starter: IObservableStarter\n stripes: ko.ObservableArray\n jumperStripes: (arg: number) => string\n numberOfStartersInRace: ko.Computed\n}\n\n@injectable()\nexport class StarterImageViewModel extends Disposable {\n public RunnerNumber: typeof RunnerNumber\n public MatchedSilkImage: typeof MatchedSilkImage\n public ldSubscription!: Rx.IDisposable\n public isFieldSummaryV2Active: ko.Observable = ko.observable(false)\n\n private appWindow: IAppWindow\n\n constructor(\n @inject('IAppWindow') appWindow: IAppWindow,\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('$params') params: IStarterImageViewModelParams\n ) {\n super(eventAggregator)\n\n this.appWindow = appWindow\n\n this.RunnerNumber = RunnerNumber\n this.MatchedSilkImage = MatchedSilkImage\n\n Guard.notNull(params)\n Guard.notNull(params.starter)\n\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const fieldSummaryV2 = record.features.get(FeatureFlags.FIELD_SUMMARY_V2.key)\n if (fieldSummaryV2 !== this.isFieldSummaryV2Active()) {\n this.isFieldSummaryV2Active(fieldSummaryV2)\n }\n })\n\n this.starter = params.starter\n this.stripes = params.stripes\n this.jumperStripes = params.jumperStripes\n\n this.key = this.starter.type()[0] + this.starter.name().toUpperCase()\n\n this.cssClass = this.starter.tag() === 'Dog' ? '' : `silk ${this.starter.tag().toLowerCase()}`\n\n this.isTrot = ko.pureComputed(() => {\n return this.starter.type() === 'Trots'\n }, this)\n\n this.isDog = ko.pureComputed(() => {\n return this.starter.type() === 'Dogs'\n }, this)\n\n this.hasSilk = ko.pureComputed(() => {\n return typeof this.starter.silkImages() !== 'undefined'\n }, this)\n\n this.silkImage = ko.pureComputed(() => {\n return this.hasSilk()\n ? this.starter.silkImages().getSilkImageFor(this.appWindow.innerWidth())\n : null\n }, this)\n\n this.widthCss = ko.pureComputed(() => {\n return this.hasSilk() && !this.isDog()\n ? `${(this.silkImage() as SilkImage).size.width}px`\n : ''\n }, this)\n\n this.heightCss = ko.pureComputed(() => {\n return this.hasSilk() && !this.isDog()\n ? `${(this.silkImage() as SilkImage).size.height}px`\n : ''\n }, this)\n\n this.backgroundCss = ko.pureComputed(() => {\n return this.hasSilk()\n ? (this.silkImage() as SilkImage).getCssBackgroundForStarter(\n this.starter.number(),\n this.starter.type(),\n params.numberOfStartersInRace ? params.numberOfStartersInRace() : 0\n )\n : ''\n }, this)\n\n this.configureDisposal()\n }\n private configureDisposal() {\n this.registerDisposals(() => {\n this.ldSubscription?.dispose()\n })\n }\n\n public starter: IObservableStarter\n public key: string\n public cssClass: string\n public stripes: ko.ObservableArray\n public jumperStripes: (arg: number) => string\n public isTrot: ko.PureComputed\n public isDog: ko.PureComputed\n public hasSilk: ko.PureComputed\n public silkImage: ko.PureComputed\n public widthCss: ko.PureComputed\n public heightCss: ko.PureComputed\n public backgroundCss: ko.PureComputed\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { SilkImage } from '@classic/Betting-v2/Model/SilkImages'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { MatchedSilkImage } from '@core/Areas/Racing/Components/SilkImage/MatchedSilkImage'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\n\ninterface IResultedImageViewModelParams {\n starter: IObservableStarter\n stripes: ko.ObservableArray\n jumperStripes: (arg: number) => string\n numberOfStartersInRace: ko.Computed\n}\n\n@injectable()\nexport class ResultedImageViewModel extends Disposable {\n public MatchedSilkImage: typeof MatchedSilkImage\n public isFieldSummaryV2Active: ko.Observable = ko.observable(false)\n public ldSubscription!: Rx.IDisposable\n\n constructor(\n @inject('IAppWindow') appWindow: IAppWindow,\n @inject('IEventAggregator') eventAggregator: IEventAggregator,\n @inject('$params') params: IResultedImageViewModelParams\n ) {\n super(eventAggregator)\n\n this.appWindow = appWindow\n this.MatchedSilkImage = MatchedSilkImage\n\n Guard.notNull(params)\n Guard.notNull(params.starter)\n\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const fieldSummaryV2 = record.features.get(FeatureFlags.FIELD_SUMMARY_V2.key)\n if (fieldSummaryV2 !== this.isFieldSummaryV2Active()) {\n this.isFieldSummaryV2Active(fieldSummaryV2)\n }\n })\n this.starter = params.starter\n this.stripes = params.stripes\n this.jumperStripes = params.jumperStripes\n\n this.key = this.starter.type()[0] + this.starter.name().toUpperCase()\n\n this.cssClass = this.starter.tag() === 'Dog' ? '' : `silk ${this.starter.tag().toLowerCase()}`\n\n this.isTrot = ko.pureComputed(() => {\n return this.starter.type() === 'Trots'\n }, this)\n\n this.isDog = ko.pureComputed(() => {\n return this.starter.type() === 'Dogs'\n }, this)\n\n this.hasSilk = ko.pureComputed(() => {\n return typeof this.starter.silkImages() !== 'undefined'\n }, this)\n\n this.silkImage = ko.pureComputed(() => {\n return this.hasSilk()\n ? this.starter.silkImages().getSilkImageFor(this.appWindow.innerWidth())\n : null\n }, this)\n\n this.widthCss = ko.pureComputed(() => {\n return this.hasSilk() && !this.isDog()\n ? `${(this.silkImage() as SilkImage).size.width}px`\n : ''\n }, this)\n\n this.heightCss = ko.pureComputed(() => {\n return this.hasSilk() && !this.isDog()\n ? `${(this.silkImage() as SilkImage).size.height}px`\n : ''\n }, this)\n\n this.backgroundCss = ko.pureComputed(() => {\n return this.hasSilk()\n ? (this.silkImage() as SilkImage).getCssBackgroundForStarter(\n this.starter.number(),\n this.starter.type(),\n params.numberOfStartersInRace ? params.numberOfStartersInRace() : 0\n )\n : ''\n }, this)\n\n this.configureDisposal()\n }\n private configureDisposal() {\n this.registerDisposals(() => {\n this.ldSubscription?.dispose()\n })\n }\n\n private appWindow: IAppWindow\n\n public starter: IObservableStarter\n public key: string\n public cssClass: string\n public stripes: ko.ObservableArray\n public jumperStripes: (arg: number) => string\n public isTrot: ko.PureComputed\n public isDog: ko.PureComputed\n public hasSilk: ko.PureComputed\n public silkImage: ko.PureComputed\n public widthCss: ko.PureComputed\n public heightCss: ko.PureComputed\n public backgroundCss: ko.PureComputed\n}\n","import type { SortOption } from './types'\n\nexport default {\n for(property: SortOption['property']): string {\n if (property == 'Number') {\n return 'Number'\n }\n if (property == 'FixedPrice') {\n return 'Fixed'\n }\n if (property == 'Price') {\n return 'Tote'\n }\n if (property == 'Name') {\n return 'Name'\n }\n if (property == 'SameRaceMultiWinPrice') {\n return 'Win Price'\n }\n return ''\n },\n}\n","import SortConverter from '@classic/Betting-v2/Sorting/SortConverter'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport type { SelectedBetType } from '../types'\n\nexport function shouldDisplayColumn(\n sortOption: SortOption,\n selectedBetType: SelectedBetType,\n isFixedOddsOn: boolean,\n hasFixedOdds: boolean\n): boolean {\n switch (sortOption.property) {\n case 'Price':\n return selectedBetType.isWinPlace || !isFixedOddsOn\n case 'FixedPrice':\n return hasFixedOdds && (selectedBetType.isWinPlace || isFixedOddsOn)\n case 'Number':\n case 'Name':\n return true\n case 'SameRaceMultiWinPrice':\n return selectedBetType.isSameRaceMulti\n default:\n return false\n }\n}\n\nexport function shouldResetTotePriceSort(\n selectedBetType: SelectedBetType,\n selectedSortOption: SortOption,\n isFixedOddsOn: boolean\n): boolean {\n return !selectedBetType.isWinPlace && selectedSortOption.property === 'Price' && isFixedOddsOn\n}\n\nexport function shouldResetFixedPriceSort(\n sortOptions: SortOption[],\n selectedBetType: SelectedBetType,\n selectedSortOption: SortOption,\n isFixedOddsOn: boolean\n): boolean {\n const hasFixedOddsHeader = sortOptions.some((so: SortOption) => {\n return so.property === 'FixedPrice'\n })\n return (\n (!hasFixedOddsHeader && selectedSortOption.property === 'FixedPrice') ||\n (!selectedBetType.isWinPlace && selectedSortOption.property === 'FixedPrice' && !isFixedOddsOn)\n )\n}\n\nexport function cssClass(sortOption: SortOption): string {\n let result = SortConverter.for(sortOption.property)\n // first time needed for Same Race Multi: replace ' ' with '-'\n result = result.replace(/\\s/g, '-')\n const cssClass = `${result.toLowerCase()}-col ${result.toLowerCase()}-color`\n\n return cssClass\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\n\nexport const FobToteSwitch: React.FC<{\n isFixedOddsOn: boolean\n}> = ({ isFixedOddsOn }) => {\n const centerXForFixedOdds = 15\n const centerXForTote = 35\n\n const centerX = React.useMemo(\n () => (isFixedOddsOn ? centerXForFixedOdds : centerXForTote),\n [isFixedOddsOn]\n )\n\n return (\n \n \n \n F\n \n \n T\n \n \n \n \n \n \n \n \n \n \n \n \n \n F\n \n \n T\n \n \n \n \n )\n}\n\nconst SvgStyled = styled.svg({\n padding: '0.3rem',\n verticalAlign: 'middle',\n display: 'inline-block',\n width: '4.4rem',\n height: '2.4rem',\n\n text: {\n fontFamily: font.family.primary,\n fontWeight: font.weight.bold,\n fontSize: '13px',\n lineHeight: 1,\n },\n\n circle: {\n transitionProperty: 'cx',\n transitionDuration: '0.2s',\n transitionTimingFunction: 'ease-in-out',\n },\n})\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport * as ko from 'knockout'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport class BoxedViewModel {\n constructor(params: { context: { bettingContext: BettingInformation } }) {\n Guard.notNull(params.context.bettingContext)\n this.bettingContext = params.context.bettingContext\n this.cssClass = ko.pureComputed(() => {\n if (this.bettingContext.isBoxed()) {\n return 'orange'\n } else {\n return ''\n }\n })\n }\n\n public toggle() {\n this.bettingContext.toggleBoxed()\n }\n\n public bettingContext: BettingInformation\n public cssClass: ko.PureComputed\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport class LegInViewModel {\n constructor(params: { context: { bettingContext: BettingInformation } }) {\n Guard.notNull(params.context.bettingContext)\n this.bettingContext = params.context.bettingContext\n }\n\n public toggle() {\n this.bettingContext.toggleLegIn()\n }\n\n public isSelected(): boolean {\n return this.bettingContext.isLegIn()\n }\n\n public bettingContext: BettingInformation\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport * as ko from 'knockout'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport class RovingBankerViewModel {\n constructor(params: { context: { bettingContext: BettingInformation } }) {\n Guard.notNull(params.context.bettingContext)\n this.bettingContext = params.context.bettingContext\n this.cssClass = ko.pureComputed(() => {\n if (this.bettingContext.rovingBanker()) {\n return 'orange'\n } else {\n return ''\n }\n })\n }\n\n public toggle() {\n this.bettingContext.toggleRovingBanker()\n }\n\n public bettingContext: BettingInformation\n public cssClass: ko.PureComputed\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { BoxedViewModel } from '@classic/Betting-v2/Components/Selection/Allways/BoxedViewModel'\nimport { LegInViewModel } from '@classic/Betting-v2/Components/Selection/LegIn/LegInViewModel'\nimport { RovingBankerViewModel } from '@classic/Betting-v2/Components/Selection/RovingBanker/RovingBankerViewModel'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setActiveToteSwap } from '@core/Areas/RaceCard/Store'\nimport { useToteSwapToggle } from './Hooks/useToteSwapToggle'\n\ntype BetModifierTypes = 'all-ways' | 'roving-banker' | 'insurance' | 'leg-in' | 'starting-price'\n\nconst enum LocalConstants {\n BetModifierActiveClassName = 'js-bet-modifier-btn--active',\n}\n\nexport const BetModifiers: React.FC<{\n bettingContext: BettingInformation\n betType: BetType\n}> = ({ betType, bettingContext }) => {\n const dispatch = useAppDispatch()\n const [selected, setSelected] = React.useState(null)\n\n const { isStartingPriceAvailable, isInsuranceAvailable, activeToteSwapOption } =\n useToteSwapToggle()\n\n React.useEffect(() => {\n const isAllwaysSubscription = bettingContext.isBoxed.subscribe(isAllwaysActive => {\n if (selected == 'all-ways' && !isAllwaysActive) {\n setSelected(null)\n }\n })\n\n const isRovingBankerSubscription = bettingContext.rovingBanker.subscribe(\n isRovingBankerActive => {\n if (selected == 'roving-banker' && !isRovingBankerActive) {\n setSelected(null)\n }\n }\n )\n\n return () => {\n isAllwaysSubscription.dispose()\n isRovingBankerSubscription.dispose()\n }\n }, [bettingContext, selected])\n\n // Sync BetModifiers state with tote swap SP and CON state\n React.useEffect(() => {\n if (activeToteSwapOption !== 'SP' && selected === 'starting-price') {\n setSelected(null)\n return\n }\n if (activeToteSwapOption === 'SP' && selected !== 'starting-price') {\n setSelected('starting-price')\n return\n }\n if (activeToteSwapOption === 'CON' && selected !== 'insurance') {\n setSelected('insurance')\n return\n }\n }, [selected, activeToteSwapOption])\n\n return (\n <>\n {[BetType.Exacta, BetType.First4, BetType.Trifecta].includes(betType) && (\n {\n handleButtonClick('roving-banker', setSelected)\n dispatch(setActiveToteSwap(null))\n new RovingBankerViewModel({ context: { bettingContext } }).toggle()\n }}\n >\n Roving Banker\n \n )}\n\n {[BetType.Exacta, BetType.First4, BetType.Trifecta].includes(betType) && (\n {\n handleButtonClick('all-ways', setSelected)\n dispatch(setActiveToteSwap(null))\n new BoxedViewModel({ context: { bettingContext } }).toggle()\n }}\n >\n Allways\n \n )}\n\n {isStartingPriceAvailable && BetType.WinPlace === betType && (\n {\n handleButtonClick('starting-price', setSelected, isSelected =>\n dispatch(setActiveToteSwap(isSelected ? null : 'SP'))\n )\n }}\n >\n Starting Price\n \n )}\n\n {isInsuranceAvailable && BetType.WinPlace === betType && (\n {\n handleButtonClick('insurance', setSelected, isSelected =>\n dispatch(setActiveToteSwap(isSelected ? null : 'CON'))\n )\n }}\n >\n Ins. 2nd & 3rd\n \n )}\n\n {BetType.Quinella === betType && (\n {\n handleButtonClick('leg-in', setSelected)\n dispatch(setActiveToteSwap(null))\n new LegInViewModel({ context: { bettingContext } }).toggle()\n }}\n >\n Leg In\n \n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst handleButtonClick = (\n key: BetModifierTypes,\n setState: React.Dispatch>,\n callBackWithSelectedState?: (isSelected: boolean) => void\n) => {\n setState(prev => {\n const isSelected = prev === key\n callBackWithSelectedState?.(isSelected)\n return isSelected ? null : key\n })\n trackBetModifierButtonPressed(key)\n}\n\nconst trackBetModifierButtonPressed = (type: BetModifierTypes) =>\n trackEvent('bet-modifier-button-pressed', { type })\n\n// ======\n// Styles\n// ======\n\nconst BetModifierButtonStyled = styled.button({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n borderRadius: '3rem',\n fontSize: font.size.sm.fontSize,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.regular,\n fontFamily: font.family.primary,\n marginLeft: spacing.smx2,\n minHeight: '3rem',\n padding: '0 1rem',\n whiteSpace: 'nowrap',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n\n backgroundColor: colors.white,\n border: `0.1rem solid ${colors.neutral[200]}`,\n color: colors.black,\n transition: 'all 0.2s ease',\n\n [`&.${LocalConstants.BetModifierActiveClassName}`]: {\n backgroundColor: colors.studio[500],\n borderColor: colors.studio[500],\n color: colors.white,\n },\n})\n","import React from 'react'\nimport * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { getActiveToteSwap, getToteSwapOptions } from '@core/Areas/RaceCard/Store/selectors'\n\nexport const useToteSwapToggle = () => {\n const toteSwapOptions = useAppSelector(getToteSwapOptions)\n const activeToteSwapOption = useAppSelector(getActiveToteSwap)\n\n const isInsuranceAvailable = toteSwapOptions.includes('CON')\n const isStartingPriceAvailable = toteSwapOptions.includes('SP')\n\n // Disable tote field select\n React.useEffect(() => {\n const fieldEl = document.querySelector(\n '[data-tid-race-starters] .flat-field-section'\n )\n if (!fieldEl) return undefined\n fieldEl.style.display = activeToteSwapOption ? 'none' : 'block'\n return () => {\n if (fieldEl) fieldEl.style.display = 'block'\n }\n }, [activeToteSwapOption])\n\n // Clear tote selections on active tote swap option\n React.useEffect(() => {\n if (activeToteSwapOption) amplify.publish('clear-all-selections-command')\n }, [activeToteSwapOption])\n\n return {\n isInsuranceAvailable,\n isStartingPriceAvailable,\n activeToteSwapOption,\n }\n}\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { RaceStatus } from '@core/Areas/Racing/Types'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\n\nconst mappedSortTypes: Record = {\n Name: 'runner',\n Number: 'runner',\n Price: 'tote',\n FixedPrice: 'fixed',\n SameRaceMultiWinPrice: 'srm',\n}\n\nexport const trackRaceCardSorting = (sortOption: SortOption, updatedRaceStatus: RaceStatus) => {\n const sortItem = mappedSortTypes[sortOption.property]\n const sortOrder = sortOption.direction === 'Ascending' ? 'ascending' : 'descending'\n const raceStatus = updatedRaceStatus.toLowerCase()\n trackEvent('race_card_sorting', {\n sortItem,\n sortOrder,\n raceStatus,\n })\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport SortConverter from '@classic/Betting-v2/Sorting/SortConverter'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { getActiveToteSwap } from '@core/Areas/RaceCard/Store/selectors'\nimport { RaceStatus } from '@core/Areas/Racing/Types'\nimport {\n cssClass,\n shouldDisplayColumn,\n shouldResetFixedPriceSort,\n shouldResetTotePriceSort,\n} from './Helpers/StarterPageHeaderHelper'\nimport { FobToteSwitch } from './Components/FobToteSwitch'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { BetModifiers } from '../BetModifiers/BetModifiers'\nimport type { SelectedBetType, StarterForRace } from './types'\nimport { useColumnSort, useFixedOdds } from './Hooks'\nimport { trackRaceCardSorting } from './analytics'\n\nconst enum LocalConstants {\n ActiveSortClassName = 'js-race-col-header__sort--active',\n}\n\ntype StarterPageProps = {\n currentSortForRace: SortOption\n startersForRace: StarterForRace[]\n selectedBetType: SelectedBetType\n raceNumber: number\n raceStatus: RaceStatus\n}\n\nexport const StartersColumnHeader: React.FC<\n StarterPageProps & { bettingContext: BettingInformation }\n> = ({\n currentSortForRace,\n startersForRace,\n selectedBetType,\n raceNumber,\n raceStatus,\n bettingContext,\n}) => {\n const activeToteSwapOption = useAppSelector(getActiveToteSwap)\n const { hasFixedOdds, shouldDisplayFixedOddsToggle, isFixedOddsOn, toggleFixedOdds } =\n useFixedOdds(selectedBetType, startersForRace)\n\n const { sortOptions, sortSelected, sort } = useColumnSort(\n selectedBetType,\n raceNumber,\n currentSortForRace\n )\n\n const resetSortBackToDefaultIfRequired = React.useCallback(() => {\n if (\n shouldResetTotePriceSort(selectedBetType, sortSelected, isFixedOddsOn) ||\n shouldResetFixedPriceSort(sortOptions, selectedBetType, sortSelected, isFixedOddsOn)\n ) {\n const numberSortOption = sortOptions?.find((so: SortOption) => {\n return so.property === 'Number'\n })\n if (numberSortOption != null) {\n sort(numberSortOption)\n }\n }\n }, [isFixedOddsOn, selectedBetType, sort, sortOptions, sortSelected])\n\n React.useEffect(() => {\n resetSortBackToDefaultIfRequired()\n }, [\n selectedBetType.isWinPlace,\n sortSelected.property,\n isFixedOddsOn,\n sortSelected,\n resetSortBackToDefaultIfRequired,\n ])\n\n const shouldShowBetModifiers = React.useCallback(\n (index: number) => raceStatus === RaceStatus.Open && index === 0,\n [raceStatus]\n )\n\n const handleToggleFixedOdds = () => {\n toggleFixedOdds()\n resetSortBackToDefaultIfRequired()\n }\n\n return (\n // TODO: All references to SCSS should have been removed on rewrite to react\n
      \n {sortOptions?.map((sortOption, i) => {\n if (!shouldDisplayColumn(sortOption, selectedBetType, isFixedOddsOn, hasFixedOdds))\n return null\n\n const sortNameText =\n sortOption.property === 'Number' ? '#' : SortConverter.for(sortOption.property)\n\n return (\n \n {sortNameText.toLowerCase() === 'tote' && !!activeToteSwapOption ? (\n \n {activeToteSwapOption === 'CON' ? 'Ins.' : 'SP'}\n \n ) : (\n {\n sort(sortOption)\n trackRaceCardSorting(sortOption, raceStatus)\n }}\n className={\n sortOption.property === sortSelected.property\n ? LocalConstants.ActiveSortClassName\n : ''\n }\n >\n {sortNameText}\n \n \n )}\n\n \n {/* show bet modifiers only after # column */}\n {shouldShowBetModifiers(i) && (\n \n )}\n \n \n )\n })}\n\n {shouldDisplayFixedOddsToggle && (\n \n
      \n \n
      \n
      \n )}\n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst ColumnHeaderPanelStyled = styled.div({\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'center',\n height: '2rem',\n justifyContent: 'center',\n})\n\nconst ColumnHeaderItemStyled = styled.div({\n display: 'inline-flex',\n flexWrap: 'nowrap',\n alignItems: 'center',\n gap: '0.2rem',\n fontFamily: font.family.primary,\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.black,\n\n [`&.${LocalConstants.ActiveSortClassName}`]: {\n fontWeight: font.weight.semibold,\n svg: { color: colors.black },\n },\n})\n","import { SelectedBetType, StarterForRace } from '../types'\nimport { useEventAggregator } from '@core/Utils/hooks/useEventAggregator'\nimport { useMemo, useState } from 'react'\n\ntype UseFixedOdds = {\n hasFixedOdds: boolean\n shouldDisplayFixedOddsToggle: boolean\n isFixedOddsOn: boolean\n toggleFixedOdds: () => void\n}\n\nexport const useFixedOdds = (\n selectedBetType: Omit,\n startersForRace: StarterForRace[]\n): UseFixedOdds => {\n const [isFixedOddsOn, setIsFixedOddsOn] = useState(selectedBetType.isSameRaceMulti)\n\n const eventAggregator = useEventAggregator()\n\n function toggleFixedOdds(): void {\n const nextFixedOddsOn = !isFixedOddsOn\n\n setIsFixedOddsOn(nextFixedOddsOn)\n eventAggregator.publish('fixed-odds-display-state-changed', nextFixedOddsOn)\n }\n\n const hasFixedOdds = useMemo(() => {\n return startersForRace.some(starter => starter.hasFixedOdds)\n }, [startersForRace])\n\n const shouldDisplayFixedOddsToggle = useMemo(() => {\n // SRM doesn't have TOTE pricing, so the toggle should always be hidden and fixed price enabled\n if (selectedBetType.isSameRaceMulti) {\n return false\n }\n\n return hasFixedOdds && !selectedBetType.isWinPlace\n }, [hasFixedOdds, selectedBetType.isSameRaceMulti, selectedBetType.isWinPlace])\n\n return { hasFixedOdds, shouldDisplayFixedOddsToggle, isFixedOddsOn, toggleFixedOdds }\n}\n","import * as React from 'react'\nimport { useEventAggregator } from '@core/Utils/hooks/useEventAggregator'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport type { SelectedBetType } from '../types'\n\ntype UseColumnSort = {\n sortOptions: SortOption[]\n sortSelected: SortOption\n sort: (newOption: SortOption) => void\n}\n\nexport const useColumnSort = (\n selectedBetType: SelectedBetType,\n raceNumber: number,\n currentSortForRace: SortOption\n): UseColumnSort => {\n const [sortSelected, setSortSelected] = React.useState(\n currentSortForRace ?? {\n property: 'Number',\n direction: 'Ascending',\n }\n )\n\n const eventAggregator = useEventAggregator()\n\n const sortOptions = React.useMemo(() => {\n return selectedBetType.sortOptions.map(sortProperty => ({\n property: sortProperty,\n direction: sortSelected?.property === sortProperty ? sortSelected.direction : 'Ascending',\n }))\n }, [selectedBetType.sortOptions, sortSelected.direction, sortSelected?.property])\n\n const sort = React.useCallback(\n (newOption: SortOption) => {\n if (sortSelected?.property === newOption.property) {\n newOption.direction = newOption.direction === 'Ascending' ? 'Descending' : 'Ascending'\n } else {\n sortOptions?.forEach(sortOption => {\n sortOption.direction = 'Ascending'\n })\n }\n setSortSelected(newOption)\n eventAggregator.publish('sort-starters', { raceNumber: raceNumber, option: newOption })\n },\n [eventAggregator, raceNumber, sortOptions, sortSelected?.property]\n )\n\n return { sortOptions, sortSelected, sort }\n}\n","import * as ko from 'knockout'\nimport { injectable, inject } from 'inversify'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IObservablePage } from '@classic/Betting-v2/Model/Observables/IObservablePage'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport BetTypeInformation from '@classic/Betting-v2/Model/Betting/BetTypeInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport { BetInformers } from '@core/Areas/Racing/Components/BetInformers/BetInformers'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { StartersColumnHeader } from '@core/Areas/Racing/Components/RunnersColumnHeader'\nimport { RacePanels } from '@core/Areas/Racing/Components/Panels'\nimport { RaceStatus } from '@core/Areas/Racing/Types'\nimport type { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { state$ as bettingV2CommandDriver$ } from '../driver'\nimport type { IInfoToolbarViewModel, IInfoToolbarViewModelParams } from './IInfoToolbarViewModel'\n\ntype Params = IInfoToolbarViewModelParams & {\n starters: ko.ObservableArray\n raceKey: ObservableRaceKey\n useGiddyUp: IUseGiddyUp\n bettingContext: BettingInformation\n}\n\ntype StartersColumnHeaderParams = Omit<\n React.ComponentProps,\n 'children' | 'bettingContext'\n>\n\n@injectable()\nexport class InfoToolbarViewModel extends Disposable implements IInfoToolbarViewModel {\n public raceInfo!: IObservablePage\n public betType!: ko.Observable\n public isDoubleSelected!: ko.Observable\n public isQuaddieSelected!: ko.Observable\n public starters!: ko.ObservableArray\n public raceKey!: ObservableRaceKey\n private subFormButton!: Rx.Disposable\n\n public BetInformers = BetInformers\n public StarterPageHeader = StartersColumnHeader\n public RacePanels = RacePanels\n public useGiddyUp!: IUseGiddyUp\n public isGiddyUpDisabled!: boolean\n public toggleGiddyUp!: () => void\n\n public bettingContext!: BettingInformation\n public starterPageHeaderProps!: ko.PureComputed\n public showBestPrice!: ko.PureComputed\n\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n this.starterPageHeaderProps = ko.pureComputed(this.createStarterPageHeaderProps, this)\n }\n\n public init(params: Params): void {\n this.bettingContext = params.bettingContext\n this.raceInfo = params.raceInfo\n this.betType = params.betType\n this.starters = params.starters\n this.raceKey = params.raceKey\n\n const raceNumber = this.raceKey.raceNumber()\n\n this.useGiddyUp = params.useGiddyUp\n this.isGiddyUpDisabled = !this.useGiddyUp.showGiddyUpInInformationPanel(raceNumber)\n this.toggleGiddyUp = this.useGiddyUp.openGiddyUp\n\n this.subFormButton = bettingV2CommandDriver$\n .map(record => {\n return {\n selected: record.showAllForm,\n }\n })\n .distinctUntilChanged()\n .subscribe(result => {\n this.PublishFormMessages(result.selected)\n })\n\n this.registerDisposals(() => {\n this.subFormButton.dispose()\n })\n }\n\n private PublishFormMessages(selected: boolean) {\n this.evtAggregator.publish('all-form-selected-command', {\n raceNumber: this.raceKey.raceNumber(),\n selected: selected,\n })\n }\n\n private createStarterPageHeaderProps(): StartersColumnHeaderParams {\n const selectedBetType = this.bettingContext.selectedBetType()\n const raceNumber = this.raceKey.raceNumber()\n const currentSortForRace = this.bettingContext.sortOption\n const raceInformation = this.raceInfo as unknown as ObservableRacePage\n const raceStatus = this.raceInfo.meetingInformation.selectedRace.raceStatus() as RaceStatus\n return {\n currentSortForRace: {\n property: currentSortForRace?.property || 'Number',\n direction: currentSortForRace?.direction || 'Ascending',\n },\n startersForRace: raceInformation\n .getStartersForRace(raceNumber)()\n .map(x => ({ hasFixedOdds: x.hasFixedOdds() })),\n selectedBetType: {\n betType: selectedBetType.betType(),\n isSameRaceMulti: selectedBetType.isSameRaceMulti(),\n isWinPlace: selectedBetType.isWinPlace(),\n sortOptions: selectedBetType.sortOptions(),\n },\n raceNumber,\n raceStatus,\n }\n }\n}\n","let numberFormatter: Intl.NumberFormat\n\nexport function toOdds(value: number) {\n if (!isFinite(value)) return ''\n\n numberFormatter ??= new Intl.NumberFormat('en-AU', {\n style: 'decimal',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n\n return numberFormatter.format(value)\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { DividendChange } from '@core/Components/Text/utils'\nimport { RightArrowIcon } from '@core/Components/Icons'\n\nexport const FixedFlucsContainer = styled('div')({\n borderTop: `1px solid ${colors.fixedFlucs.separator}`,\n padding: '0.75rem',\n})\ninterface SingleLegDividendProps {\n dividendChange?: DividendChange\n}\n\nexport const FixedFlucsDividend = styled('span')(\n {\n display: 'block',\n },\n ({ dividendChange }) => {\n if (dividendChange === DividendChange.Increase || dividendChange === DividendChange.Decrease) {\n return {\n '&::after': {\n content: '\" \"',\n width: 0,\n height: 0,\n borderLeft: '0.4rem solid transparent',\n borderRight: '0.4rem solid transparent',\n marginBottom: '0.1rem',\n marginLeft: '0.4rem',\n position: 'relative',\n display: 'inline-block',\n borderBottomStyle: 'solid',\n borderBottomWidth: dividendChange === DividendChange.Increase ? '0.6rem' : 0,\n borderTopWidth: dividendChange === DividendChange.Decrease ? '0.6rem' : 0,\n borderTopStyle: 'solid',\n borderTopColor:\n dividendChange === DividendChange.Increase\n ? colors.priceChange.decrease.text\n : colors.priceChange.increase.text,\n borderBottomColor:\n dividendChange === DividendChange.Increase\n ? colors.priceChange.decrease.text\n : colors.priceChange.increase.text,\n },\n }\n }\n return {}\n }\n)\n\nexport const FixedFlucsDividendLabel = styled('span')({\n color: colors.fixedFlucs.label,\n})\n\nexport const FixedFlucsSeperator = styled('div')({\n width: '1px',\n borderLeft: `1px solid ${colors.fixedFlucs.dividends.separator}`,\n})\n\nexport const FixedFlucsChevron = styled(RightArrowIcon)({\n color: colors.fixedFlucs.label,\n})\n","import React from 'react'\nimport { state$ as commandState$, BettingV2CommandStateRecord } from '../../Commands/driver'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport {\n FixedFlucsContainer,\n FixedFlucsDividend,\n FixedFlucsDividendLabel,\n FixedFlucsSeperator,\n FixedFlucsChevron,\n} from './FixedFlucs.styles'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { getDividendChange } from '@core/Components/Text/utils'\nimport { toOdds } from '@core/Utils/odds/odds'\n\ninterface FixedFlucsWrapperComponentProps {\n showFixedFlucs: boolean\n starter: FixedFlucsStarterProps\n}\n\nexport interface FixedFlucsStarterProps {\n hasFixedOdds: boolean\n isScratched: boolean\n fixedOddsStarterInfo: FixedOddsStarterInfo\n}\n\nexport interface FixedOddsStarterInfo {\n isScratched: boolean\n fixedFlucs: FixedFlucsDividendProps\n}\n\nexport interface FixedFlucsDividendProps {\n winOpeningDividend: number\n winHighDividend: number\n winLowDividend: number\n winDividends: number[]\n}\n\nexport const FixedFlucs = observeImmutable(\n commandState$,\n ({ record, ...props }) => {\n const { showFixedFlucs } = record\n\n return \n }\n)\n\nexport function FixedFlucsWrapperComponent({\n showFixedFlucs,\n starter,\n}: FixedFlucsWrapperComponentProps): JSX.Element | null {\n const { hasFixedOdds, fixedOddsStarterInfo, isScratched } = starter\n\n if (\n !hasFixedOdds ||\n isScratched ||\n !fixedOddsStarterInfo ||\n !fixedOddsStarterInfo.fixedFlucs ||\n fixedOddsStarterInfo.isScratched ||\n !fixedOddsStarterInfo.fixedFlucs\n ) {\n return null\n }\n\n return showFixedFlucs ? : null\n}\n\nexport function FixedFlucsPointDividend({\n dividendPoints: dividendPoints,\n dividendIndex: dividendIndex,\n}: {\n dividendPoints: number[]\n dividendIndex: number\n}): JSX.Element {\n const dividend = dividendPoints[dividendIndex]\n const previousDividend = dividendPoints[dividendIndex + 1]\n\n const dividendChange = getDividendChange(dividend, previousDividend)\n\n const displayData =\n dividendIndex === 0 || dividendIndex + 1 > dividendPoints.length ? '-' : toOdds(dividend)\n\n return (\n \n {displayData}\n \n )\n}\n\nexport function FixedFlucsComponent({\n winOpeningDividend: openingDividend,\n winHighDividend: highDividend,\n winLowDividend: lowDividend,\n winDividends: dividendPoints,\n}: FixedFlucsDividendProps) {\n const lowDividendDisplay = dividendPoints.length <= 1 ? '-' : toOdds(lowDividend)\n const highDividendDisplay = dividendPoints.length <= 1 ? '-' : toOdds(highDividend)\n\n return (\n \n \n \n Open\n \n \n {toOdds(openingDividend)}\n \n \n\n \n \n \n\n \n Latest 3\n \n \n\n \n \n \n\n \n  \n \n\n \n Low\n {lowDividendDisplay}\n \n\n \n High\n {highDividendDisplay}\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const MarketMoverContainer = styled('div')({\n borderTop: `1px solid ${colors.fixedFlucs.separator}`,\n padding: '0.75rem',\n lineHeight: '1.5rem',\n})\n\nexport const MarketMoversDividend = styled('span')({\n display: 'block',\n})\n\nexport const MarketMoversHeader = styled('span')({\n display: 'block',\n color: colors.fixedFlucs.label,\n})\n","import React from 'react'\nimport { state$ as commandState$, BettingV2CommandStateRecord } from '../../Commands/driver'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport {\n MarketMoverContainer as MarketMoversContainer,\n MarketMoversDividend,\n MarketMoversHeader,\n} from './MarketMovers.styles'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { toOdds } from '@core/Utils/odds/odds'\n\nexport interface MarketMoversDividendProps {\n MinutesToAst: number\n Dividend: number | null\n}\n\ninterface MarketMoversWrapperComponentProps {\n showMarketMovers: boolean\n starter: MarketMoversStarterProps\n}\n\ninterface MarketMoversStarterProps {\n isScratched: boolean\n marketMovers: MarketMoversDividendProps[]\n}\n\nexport const MarketMovers = observeImmutable(\n commandState$,\n ({ record, ...props }) => {\n const { showMarketMovers } = record\n return \n }\n)\n\nexport function MarketMoversWrapperComponent({\n showMarketMovers,\n starter,\n}: MarketMoversWrapperComponentProps): JSX.Element | null {\n const { isScratched, marketMovers } = starter\n\n if (!showMarketMovers) return null\n\n if (isScratched || marketMovers.length === 0 || !marketMovers.some(m => m.Dividend != null)) {\n return null\n }\n\n return \n}\n\nfunction MarketMoversComponent({\n marketMovers,\n}: {\n marketMovers: MarketMoversDividendProps[]\n}): JSX.Element {\n const listItems = marketMovers.map(marketMover => (\n \n \n \n \n ))\n\n return (\n \n \n \n {listItems}\n \n \n )\n}\n\nfunction MarketMoverPointDividend({\n dividendIndex,\n dividend,\n}: {\n dividendIndex: number\n dividend: number | null\n}): JSX.Element {\n const displayDividend: string = dividend === null ? '-' : toOdds(dividend)\n return (\n \n {displayDividend}\n \n )\n}\n\nfunction MarketMoverHeader({\n dividendIndex,\n header,\n}: {\n dividendIndex: number\n header: number\n}): JSX.Element {\n return {header}m\n}\n","import * as ko from 'knockout'\nimport { inject, injectable } from 'inversify'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { FixedFlucs } from '@classic/Betting-v2/Components/Panels/FixedFlucs/FixedFlucs'\nimport { MarketMovers } from '@classic/Betting-v2/Components/Panels/MarketMovers/MarketMovers'\nimport { RunnerExpanded } from '@core/Areas/RaceCard/Components'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport { state$ as bettingV2Driver$ } from '@classic/Betting-v2/Components/Commands/driver'\nimport { trackEvent, trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\n@injectable()\nexport default class BaseStarterViewModel extends Disposable {\n public shouldDisplayFavouriteInStarterName!: ko.Observable\n public shouldDisplaySelectionsStacked!: ko.Observable\n public fixedFlucs!: typeof FixedFlucs | null\n public marketMovers!: typeof MarketMovers | null\n public RunnerExpanded: typeof RunnerExpanded\n public ldSubscription!: Rx.IDisposable\n public isFieldSummaryV2Active: ko.Observable = ko.observable(false)\n public isRunnerExpanded: ko.Observable = ko.observable(false)\n public isExpandable = ko.observable(true)\n\n public starter!: IObservableStarter\n public raceNumber!: ObservableRaceKey\n public bettingContext!: BettingInformation\n public tag!: string\n public numberOfStartersInRace!: ko.Computed\n public doubleProvDivAllowed!: ko.Observable\n public quaddieProvDivAllowed!: ko.Observable\n public isRaceClosed!: ko.Observable\n\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n this.eventAggregator = eventAggregator\n\n this.RunnerExpanded = RunnerExpanded\n }\n\n public initBase(\n starter: IObservableStarter,\n raceNumber: ObservableRaceKey,\n bettingContext: BettingInformation,\n tag: string,\n numberOfStartersInRace: ko.Computed,\n doubleProvDivAllowed: ko.Observable,\n quaddieProvDivAllowed: ko.Observable,\n isRaceClosed: ko.Observable\n ) {\n Guard.notNull(starter)\n Guard.notNull(raceNumber)\n Guard.notNull(bettingContext)\n Guard.stringNotNullOrEmpty(tag)\n\n this.starter = starter\n this.raceNumber = raceNumber\n this.bettingContext = bettingContext\n this.tag = tag\n this.numberOfStartersInRace = numberOfStartersInRace\n this.doubleProvDivAllowed = doubleProvDivAllowed\n this.quaddieProvDivAllowed = quaddieProvDivAllowed\n this.isRaceClosed = isRaceClosed\n this.ldSubscription = launchDarkState$.subscribe(record => {\n const fieldSummaryV2 = record.features.get(FeatureFlags.FIELD_SUMMARY_V2.key)\n if (fieldSummaryV2 !== this.isFieldSummaryV2Active()) {\n this.isFieldSummaryV2Active(fieldSummaryV2)\n }\n })\n\n if (this.starter.name() === '*** VACANT BOX ***') {\n this.isExpandable(false)\n }\n\n // consumers shouldn't care if it's tote or fixed odds favourite, since this is an implementation detail based on the selected bet type context\n this.shouldDisplayFavouriteInStarterName = ko.observable(\n // novelty favourite\n (this.starter.isFavourite() &&\n !this.bettingContext.selectedBetType().isWinPlace() &&\n !this.bettingContext.selectedBetType().isSameRaceMulti()) ||\n // SRM favourite\n (this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.isFavourite() === true &&\n this.bettingContext.selectedBetType().isSameRaceMulti())\n )\n\n // novelty favourite\n this.starter.isFavourite.subscribe(val => {\n if (\n !this.bettingContext.selectedBetType().isWinPlace() &&\n !this.bettingContext.selectedBetType().isSameRaceMulti()\n )\n this.shouldDisplayFavouriteInStarterName(val)\n })\n\n // SRM favourite\n this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.isFavourite.subscribe(val => {\n if (this.bettingContext.selectedBetType().isSameRaceMulti())\n this.shouldDisplayFavouriteInStarterName(val === true)\n })\n\n this.shouldDisplaySelectionsStacked = ko.observable(\n this.bettingContext.selectedBetType().isSameRaceMulti()\n )\n\n this.fixedFlucs = !isRaceClosed() ? FixedFlucs : null\n this.marketMovers = !isRaceClosed() ? MarketMovers : null\n\n this.safeSubscribe(\n 'all-form-selected-command',\n (arg: { raceNumber: number; selected: boolean }) => {\n if (this.raceNumber.raceNumber() !== arg.raceNumber) return\n\n this.isRunnerExpanded(arg.selected)\n }\n )\n\n this.safeSubscribe(\n 'show-formdata-command',\n (command: { raceNumber: number; starterNumber: number }) => {\n if (this.raceNumber.raceNumber() !== command.raceNumber) return\n if (this.starter.number() !== command.starterNumber) return\n\n this.isRunnerExpanded(!this.isRunnerExpanded())\n }\n )\n\n bettingV2Driver$.take(1).subscribe(state => {\n this.isRunnerExpanded(state.showAllForm)\n })\n\n this.configureDisposal()\n }\n\n public showFormData() {\n if (!this.isRunnerExpanded())\n trackEvent(analyticsKeys.formOpened, {\n meetingName: this.bettingContext.meetingInformation?.meetingName(),\n meetingCode: this.tag.toLowerCase(),\n })\n else trackKey(analyticsKeys.formClosed)\n\n this.eventAggregator.publish('show-formdata-command', {\n raceNumber: this.raceNumber.raceNumber(),\n starterNumber: this.starter.number(),\n })\n }\n\n private configureDisposal() {\n this.registerDisposals(() => {\n this.ldSubscription?.dispose()\n })\n }\n\n private eventAggregator: IEventAggregator\n}\n","import * as ko from 'knockout'\nimport { inject, injectable } from 'inversify'\nimport ObservableDogStarter from '@classic/Betting-v2/Model/Observables/ObservableDogStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IDogStarterViewModel } from './IDogStarterViewModel'\nimport BaseStarterViewModel from './../BaseStarterViewModel'\nimport { MatchedFieldSummary } from '@core/Areas/Racing/Components/FieldSummary/MatchedFieldSummary'\n\n@injectable()\nexport class DogStarterViewModel extends BaseStarterViewModel implements IDogStarterViewModel {\n public MatchedFieldSummary: typeof MatchedFieldSummary\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n this.MatchedFieldSummary = MatchedFieldSummary\n }\n\n init(params: {\n data: ObservableDogStarter\n raceNumber: ObservableRaceKey\n context: { bettingContext: BettingInformation }\n numberOfStartersInRace: ko.Computed\n doubleProvDivAllowed: ko.Observable\n quaddieProvDivAllowed: ko.Observable\n isRaceClosed: ko.Observable\n }) {\n super.initBase(\n params.data,\n params.raceNumber,\n params.context.bettingContext,\n 'Dogs',\n params.numberOfStartersInRace,\n params.doubleProvDivAllowed,\n params.quaddieProvDivAllowed,\n params.isRaceClosed\n )\n\n this.stripes = ko.observableArray([])\n for (let i = 1; i <= params.data.stripeCount(); ++i) {\n this.stripes.push(i)\n }\n this.stripeClass = stripe => 'stripe-' + stripe\n }\n\n public stripes!: ko.ObservableArray\n public stripeClass!: (arg: number) => string\n}\n","import { inject, injectable } from 'inversify'\nimport ObservableRaceStarter from '@classic/Betting-v2/Model/Observables/ObservableRaceStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { IRaceStarterViewModel } from './IRaceStarterViewModel'\nimport BaseStarterViewModel from './../BaseStarterViewModel'\nimport { MatchedFieldSummary } from '@core/Areas/Racing/Components/FieldSummary/MatchedFieldSummary'\nimport { JockeyName } from '@core/Areas/RaceCard/Components/JockeyName'\n\n@injectable()\nexport class RaceStarterViewModel extends BaseStarterViewModel implements IRaceStarterViewModel {\n public MatchedFieldSummary: typeof MatchedFieldSummary\n public JockeyName: typeof JockeyName\n\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n this.JockeyName = JockeyName\n this.MatchedFieldSummary = MatchedFieldSummary\n }\n\n init(params: {\n data: ObservableRaceStarter\n raceNumber: ObservableRaceKey\n context: { bettingContext: BettingInformation }\n numberOfStartersInRace: ko.Computed\n doubleProvDivAllowed: ko.Observable\n quaddieProvDivAllowed: ko.Observable\n isRaceClosed: ko.Observable\n }) {\n super.initBase(\n params.data,\n params.raceNumber,\n params.context.bettingContext,\n 'Races',\n params.numberOfStartersInRace,\n params.doubleProvDivAllowed,\n params.quaddieProvDivAllowed,\n params.isRaceClosed\n )\n }\n}\n","import { inject, injectable } from 'inversify'\nimport ObservableTrotStarter from '@classic/Betting-v2/Model/Observables/ObservableTrotStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport type { ITrotStarterViewModel } from './ITrotStarterViewModel'\nimport BaseStarterViewModel from './../BaseStarterViewModel'\nimport { MatchedFieldSummary } from '@core/Areas/Racing/Components/FieldSummary/MatchedFieldSummary'\n\n@injectable()\nexport class TrotStarterViewModel extends BaseStarterViewModel implements ITrotStarterViewModel {\n public MatchedFieldSummary: typeof MatchedFieldSummary\n constructor(@inject('IEventAggregator') eventAggregator: IEventAggregator) {\n super(eventAggregator)\n this.MatchedFieldSummary = MatchedFieldSummary\n }\n\n init(params: {\n data: ObservableTrotStarter\n raceNumber: ObservableRaceKey\n context: { bettingContext: BettingInformation }\n numberOfStartersInRace: ko.Computed\n doubleProvDivAllowed: ko.Observable\n quaddieProvDivAllowed: ko.Observable\n isRaceClosed: ko.Observable\n }) {\n super.initBase(\n params.data,\n params.raceNumber,\n params.context.bettingContext,\n 'Trots',\n params.numberOfStartersInRace,\n params.doubleProvDivAllowed,\n params.quaddieProvDivAllowed,\n params.isRaceClosed\n )\n }\n}\n","import { ContainerModule, type interfaces } from 'inversify'\n\nimport { IRaceDisplayStateManagerViewModel } from '../Components/Pages/Workflow/IRaceDisplayStateManagerViewModel'\nimport { RaceDisplayStateManagerViewModel } from '../Components/Pages/Workflow/RaceDisplayStateManagerViewModel'\nimport { IBettingStateManagerViewModel } from '../Components/Pages/Workflow/IBettingStateManagerViewModel'\nimport { BettingStateManagerViewModel } from '../Components/Pages/Workflow/BettingStateManagerViewModel'\nimport { IStartersPageViewModel } from '../Components/Pages/Starters/IStartersPageViewModel'\nimport { StartersPageViewModel } from '../Components/Pages/Starters/StartersPageViewModel'\nimport { IResultsPageViewModel } from '../Components/Pages/Results/IResultsPageViewModel'\nimport { ResultsPageViewModel } from '../Components/Pages/Results/ResultsPageViewModel'\nimport { IMultiLegSelectionsViewModel } from '../Components/MySelection/MultiLeg/IMultiLegSelectionsViewModel'\nimport { MultiLegSelectionsViewModel } from '../Components/MySelection/MultiLeg/MultiLegSelectionsViewModel'\nimport { DogFinisherViewModel } from '../Components/Finishers/Dog/DogFinisherViewModel'\nimport { IDogFinisherViewModel } from '../Components/Finishers/Dog/IDogFinisherViewModel'\nimport { IRaceFinisherViewModel } from '../Components/Finishers/Race/IRaceFinisherViewModel'\nimport { RaceFinisherViewModel } from '../Components/Finishers/Race/RaceFinisherViewModel'\nimport { ITrotFinisherViewModel } from '../Components/Finishers/Trot/ITrotFinisherViewModel'\nimport { TrotFinisherViewModel } from '../Components/Finishers/Trot/TrotFinisherViewModel'\nimport { IFinishersListViewModel } from '../Components/Finishers/List/IFinishersListViewModel'\nimport { FinishersListViewModel } from '../Components/Finishers/List/FinishersListViewModel'\nimport { IFinisherPlaceViewModel } from '../Components/Finishers/Place/IFinisherPlaceViewModel'\nimport { FinisherPlaceViewModel } from '../Components/Finishers/Place/FinisherPlaceViewModel'\nimport { IFinisherPricesViewModel } from '../Components/Finishers/Prices/IFinisherPricesViewModel'\nimport { FinisherPricesViewModel } from '../Components/Finishers/Prices/FinisherPricesViewModel'\nimport { IFieldViewModel } from '../Components/Selection/Field/IFieldViewModel'\nimport { FieldViewModel } from '../Components/Selection/Field/FieldViewModel'\nimport { MultiFieldViewModel } from '../Components/Selection/Field/MultiFieldViewModel'\nimport { IMultiFieldViewModel } from '../Components/Selection/Field/IMultiFieldViewModel'\nimport { StandardTopPanel } from '../Components/Panels/Standard/StandardTopPanel'\nimport { IStandardTopPanel } from '../Components/Panels/Standard/IStandardTopPanel'\nimport { SubstitutesViewModel } from '../Components/Panels/Substitutes/SubstitutesViewModel'\nimport { ISubstitutesViewModel } from '../Components/Panels/Substitutes/ISubstitutesViewModel'\nimport { ScratchingsViewModel } from '../Components/Panels/Scratchings/ScratchingsViewModel'\nimport { IScratchingsViewModel } from '../Components/Panels/Scratchings/IScratchingsViewModel'\nimport { IMessageBoxViewModel } from '../Components/Panels/MessageBox/IMessageBoxViewModel'\nimport { MessageBoxViewModel } from '../Components/Panels/MessageBox/MessageBoxViewModel'\nimport { IResultsViewModel } from '../Components/Finishers/view/IResultsViewModel'\nimport { ResultsViewModel } from '../Components/Finishers/view/ResultsViewModel'\nimport { IResultsFieldViewModel } from '../Components/Finishers/view/IResultsFieldViewModel'\nimport { ResultsFieldViewModel } from '../Components/Finishers/view/ResultsFieldViewModel'\nimport { IFieldFinisherPricesViewModel } from '../Components/Finishers/Prices/IFieldFinisherPricesViewModel'\nimport { FieldFinisherPricesViewModel } from '../Components/Finishers/Prices/FieldFinisherPricesViewModel'\nimport { IAllUpViewModel } from '../Components/BetTypes/AllUp/IAllUpViewModel'\nimport { AllUpViewModel } from '../Components/BetTypes/AllUp/AllUpViewModel'\nimport { IMultiLegViewModel } from '../Components/BetTypes/MultiLeg/IMultiLegViewModel'\nimport { MultiLegViewModel } from '../Components/BetTypes/MultiLeg/MultiLegViewModel'\nimport { NoveltyDividendsViewModel } from '../Components/Panels/NoveltyDividends/NoveltyDividendsViewModel'\nimport { INoveltyDividendsViewModel } from '../Components/Panels/NoveltyDividends/INoveltyDividendsViewModel'\nimport { ProvDivsViewModel } from '../Components/Selection/ProvDivs/ProvDivsViewModel'\nimport { RaceReplayViewModel } from '../Components/General/RaceReplay/RaceReplayViewModel'\nimport { IRaceReplayViewModel } from '../Components/General/RaceReplay/IRaceReplayViewModel'\nimport { FormGiddyUpRaceInformation } from '../Components/Form/FormGiddyUpRaceInformation'\nimport { StartersListViewModel } from '../Components/Starters/List/StartersListViewModel'\nimport { IMultiSelectionPriceViewModel } from '../Components/Starters/Pricing/IMultiSelectionPriceViewModel'\nimport { MultiSelectionPriceViewModel } from '../Components/Starters/Pricing/MultiSelectionPriceViewModel'\nimport { RaceSubHeaderViewModel } from '../Components/Panels/MultiRaceSubHeader/RaceSubHeaderViewModel'\nimport { IFixedWinPlaceSelectionsViewModel } from '../Components/MySelection/WinPlace/Fixed/IFixedWinPlaceSelectionsViewModel'\nimport { FixedWinPlaceSelectionsViewModel } from '../Components/MySelection/WinPlace/Fixed/FixedWinPlaceSelectionsViewModel'\nimport { StarterImageViewModel } from '../Components/Starters/Image/StarterImageViewModel'\nimport { ResultedImageViewModel } from '../Components/Starters/ResultedImage/ResultedImageViewModel'\nimport { InfoToolbarViewModel } from '../Components/Commands/InfoToolboxWrapper/InfoToolbarViewModel'\nimport { IInfoToolbarViewModel } from '../Components/Commands/InfoToolboxWrapper/IInfoToolbarViewModel'\nimport { IRaceStarterViewModel } from '../Components/Starters/Race/IRaceStarterViewModel'\nimport { DogStarterViewModel } from '../Components/Starters/Dog/DogStarterViewModel'\nimport { RaceStarterViewModel } from '../Components/Starters/Race/RaceStarterViewModel'\nimport { TrotStarterViewModel } from '../Components/Starters/Trot/TrotStarterViewModel'\nimport { IDogStarterViewModel } from '../Components/Starters/Dog/IDogStarterViewModel'\nimport { ITrotStarterViewModel } from '../Components/Starters/Trot/ITrotStarterViewModel'\n\nconst viewmodels = new ContainerModule((bind: interfaces.Bind) => {\n bind('IRaceDisplayStateManagerViewModel').to(\n RaceDisplayStateManagerViewModel\n )\n bind('IBettingStateManagerViewModel').to(\n BettingStateManagerViewModel\n )\n bind('IStartersPageViewModel').to(StartersPageViewModel)\n bind('IDogStarterViewModel').to(DogStarterViewModel)\n bind('IRaceStarterViewModel').to(RaceStarterViewModel)\n bind('ITrotStarterViewModel').to(TrotStarterViewModel)\n\n bind('IResultsPageViewModel').to(ResultsPageViewModel)\n bind('IMultiLegSelectionsViewModel').to(MultiLegSelectionsViewModel)\n bind('IResultsViewModel').to(ResultsViewModel)\n bind('IResultsFieldViewModel').to(ResultsFieldViewModel)\n bind('IDogFinisherViewModel').to(DogFinisherViewModel)\n bind('IRaceFinisherViewModel').to(RaceFinisherViewModel)\n bind('ITrotFinisherViewModel').to(TrotFinisherViewModel)\n bind('IFinishersListViewModel').to(FinishersListViewModel)\n bind('IFinisherPlaceViewModel').to(FinisherPlaceViewModel)\n bind('IFinisherPricesViewModel').to(FinisherPricesViewModel)\n bind('IFieldFinisherPricesViewModel').to(\n FieldFinisherPricesViewModel\n )\n bind('IFieldViewModel').to(FieldViewModel)\n bind('IMultiFieldViewModel').to(MultiFieldViewModel)\n bind('IStandardTopPanel').to(StandardTopPanel)\n bind('ISubstitutesViewModel').to(SubstitutesViewModel)\n bind('IScratchingsViewModel').to(ScratchingsViewModel)\n bind('IMessageBoxViewModel').to(MessageBoxViewModel)\n bind('IAllUpViewModel').to(AllUpViewModel)\n bind('IMultiLegViewModel').to(MultiLegViewModel)\n bind('INoveltyDividendsViewModel').to(NoveltyDividendsViewModel)\n bind('ProvDivsViewModel').to(ProvDivsViewModel)\n bind('IRaceReplayViewModel').to(RaceReplayViewModel)\n bind('FormGiddyUpRaceInformation').to(FormGiddyUpRaceInformation)\n bind('StartersListViewModel').to(StartersListViewModel)\n bind('IMultiSelectionPriceViewModel').to(\n MultiSelectionPriceViewModel\n )\n bind('RaceSubHeaderViewModel').to(RaceSubHeaderViewModel)\n bind('IFixedWinPlaceSelectionsViewModel').to(\n FixedWinPlaceSelectionsViewModel\n )\n bind('StarterImageViewModel').to(StarterImageViewModel)\n bind('ResultedImageViewModel').to(ResultedImageViewModel)\n bind('IInfoToolbarViewModel').to(InfoToolbarViewModel)\n})\n\nexport default viewmodels\n","import { Container } from 'inversify'\nimport parentContainer from '../../Specials/IOC/inversify.config'\nimport services from './services.config'\nimport viewmodels from './viewmodels.config'\nimport { tap } from '@mobi/utils'\n\nconst container = tap(new Container(), container => {\n container.parent = parentContainer\n container.load(services)\n container.load(viewmodels)\n})\n\nexport default container\n","import EventAggregator from '@classic/AppUtils/Framework/Messaging/EventAggregator'\nimport { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport container from '@classic/Betting-v2/IOC/inversify.config'\n\nexport function getEventAggregator(): T {\n return container.get('IEventAggregator')\n}\n","import type {\n RaceCodesLowerCase as CodesLower,\n RaceCodes,\n} from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport function meetingIdToContestType(meetingId: string, isUpper: true): RaceCodes | undefined\nexport function meetingIdToContestType(meetingId: string, isUpper?: false): CodesLower | undefined\nexport function meetingIdToContestType(\n meetingId: string,\n isUpper = false\n): RaceCodes | CodesLower | undefined {\n if (!meetingId || meetingId.length <= 1) return undefined\n\n switch (meetingId[1].toLowerCase()) {\n case 'r':\n return isUpper ? 'Races' : 'races'\n case 'd':\n return isUpper ? 'Dogs' : 'dogs'\n case 't':\n return isUpper ? 'Trots' : 'trots'\n default:\n return undefined\n }\n}\n","import { formatDateStringWithoutChangingTimezone } from '@mobi/utils'\n\nexport const getRaceLink = ({\n meetingId,\n raceNumber,\n meetingDate,\n code,\n meetingSeq,\n product,\n raceSeq,\n isFOO,\n}: {\n meetingDate: string\n meetingId?: string\n raceNumber?: string | number\n code?: string\n meetingSeq?: string | number\n product?: string\n raceSeq?: string | number\n isFOO?: boolean\n}): string => {\n const date = formatDateStringWithoutChangingTimezone(meetingDate, 'YYYY-MM-DD')\n return isFOO\n ? `/fobracing/propositions/${product}/${code}/${raceSeq}?selectionDate=${date}&meetingSeq=${meetingSeq}`\n : `/tote/meetings/${meetingId}/${raceNumber}?date=${date}`\n}\n","import { RaceStatus } from '../Hooks/useRaceList/types'\n\nexport function getSimpleRaceStatusText(raceStatus: RaceStatus) {\n switch (raceStatus) {\n case 'Released':\n return 'Results'\n case 'Abandoned':\n return 'ABND'\n default:\n return raceStatus.toString()\n }\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { SkyTvBadge } from '@mobi/component-library/Racing/SkyTvIndicator'\nimport { useFeature } from '@core/Utils/hooks'\nimport { getVisionChannelForDisplay } from '@core/Areas/SkyVideoPlayer/helpers'\nimport { NextRace as NextRaceData } from '@core/Data/Racing/nextRaces'\nimport { HomeNextRacesListItemStyled } from './HomeNextRaces.styles'\nimport { isThoroughbredNextRaceInWA } from '@core/Areas/Racing/helpers/liveVideoFeedHelpers'\nimport { TimeToJumpComponent } from '@core/Areas/NextEvents/Components/TimeToJump/TimeToJump'\nimport { getNextRaceTimeDisplayOptions, buildToteRaceUri } from '@core/Areas/Racing/helpers'\nimport { fontFamilies } from '@core/Settings'\n\ninterface IconTypes {\n Races: keyof typeof iconPaths\n Trots: keyof typeof iconPaths\n Dogs: keyof typeof iconPaths\n}\n\nconst IconTypes: IconTypes = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport function HomeNextRacesTile({ race }: { race: NextRaceData }): JSX.Element {\n const [shouldShowDay, setShouldShowDay] = React.useState(\n () => getNextRaceTimeDisplayOptions(race.AdvertisedStartTime).showDay\n )\n\n const [shouldShowCountdown, setShouldShowCountdown] = React.useState(\n () => getNextRaceTimeDisplayOptions(race.AdvertisedStartTime).showCountDown\n )\n\n const isRacingWAFeatureActive = useFeature('RACING_WA_VISION_CHANNEL')\n\n React.useEffect(() => {\n const interval = window.setInterval(() => {\n const { showCountDown, showDay } = getNextRaceTimeDisplayOptions(race.AdvertisedStartTime)\n setShouldShowCountdown(current => (showCountDown !== current ? showCountDown : current))\n setShouldShowDay(current => (showDay !== current ? showDay : current))\n }, 1_000)\n\n return () => {\n window.clearInterval(interval)\n }\n }, [race.AdvertisedStartTime])\n\n const href = buildToteRaceUri({\n meetingId: race.MeetingID,\n raceNumber: race.RaceNumber,\n meetingDate: race.MeetingDate,\n })\n\n const startTime = new Date(race.AdvertisedStartTime)\n\n const shouldDisplayRacingWA = isRacingWAFeatureActive && isThoroughbredNextRaceInWA(race)\n\n return (\n \n \n \n
      {race.MeetingName}
      \n
      R{race.RaceNumber}
      \n
      \n\n {race.SkyTvChannelId != null && (\n \n \n \n )}\n\n \n \n \n \n
      \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst HomeNextRacesListContainer = styled.div({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: '100%',\n maxHeight: '100%',\n})\n\nconst HomeNextEventNameEventStyled = styled.div({\n fontSize: '1.1rem',\n fontFamily: fontFamilies.brand,\n lineHeight: 1.1,\n\n div: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n})\n\nconst HomeNextEventRaceTimeStyled = styled.div({\n fontSize: '1.2rem',\n justifyContent: 'space-between',\n display: 'flex',\n\n '& > span': {\n display: 'flex',\n alignItems: 'center',\n\n 'div:last-of-type': {\n paddingLeft: '0.2rem',\n },\n },\n})\n\nconst HomeNextEventRaceSkyStyled = styled.div({\n display: 'flex',\n justifyContent: 'right',\n marginTop: '-0.75rem',\n marginBottom: '-0.5rem',\n})\n","import React from 'react'\nimport { isToteRacePushEvent, ToteRaceEventPushEvent } from 'tabtouch-push-contract'\n\nimport {\n HomeScrollableContainerStyled as ScrollableContainer,\n HomeScrollHeaderLinkStyled as Link,\n HomeScrollHeaderStyled as Header,\n HomeScrollListItemsStyled,\n} from '@core/Areas/Home/Home.styles'\nimport {\n isToteRaceChangePushEvent,\n MaxNumberOfRacesForHome,\n useNextRaces,\n} from '@core/Areas/NextEvents/utils'\nimport { ErrorMessage, Message } from '@core/Components/Messages'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\nimport { event$ } from '@mobi/utils/awsiot'\n\nimport { HomeNextRacesLoading } from './HomeNextRacesLoading'\nimport { HomeNextRacesTile } from './HomeNextRacesTile'\n\nexport const HomeNextRaces: React.FC = () => {\n const { isLoading, error, data, refetch } = useNextRaces()\n\n React.useEffect(() => {\n const iotSubscription = event$\n .filter(x => isToteRacePushEvent(x.payload))\n .filter(x => isToteRaceChangePushEvent((x.payload as ToteRaceEventPushEvent).status))\n .subscribe(() => {\n refetch()\n })\n\n return () => iotSubscription.dispose()\n }, [refetch])\n\n if (!data || isLoading) {\n return \n }\n\n if (error) {\n return Error loading next races.\n }\n\n const nextRaces = filterNextRacesForHome(data)\n if (!nextRaces || !nextRaces.length) {\n return No next races.\n }\n\n return (\n <>\n
      \n
      Next Races
      \n \n See All\n \n
      \n\n \n \n {nextRaces.map((race, index) => {\n const key = `${race.MeetingDate.substring(0, 10)}_${race.MeetingID}_${\n race.RaceNumber\n }_${index}`\n return \n })}\n \n \n \n )\n}\n\nfunction filterNextRacesForHome(races: NextRace[]): NextRace[] | null {\n return races instanceof Array ? races.slice(0, MaxNumberOfRacesForHome) : null\n}\n","import { declareResourceType, IKeyMap } from 'rwwa-data-access'\nimport { fetchThenMap } from './utils'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { Observable } from 'rx'\n\nexport interface FeaturedItem {\n text: string\n url: string\n iconPathName: keyof typeof iconPaths\n internalTrackingCode: string | null\n}\n\ninterface FeaturedItemWireResource {\n Text: string\n StartDate: string\n EndDate: string\n Link: string\n IconName: string\n IsInducement: boolean\n InternalTrackingCode: string | null\n}\n\nexport enum FeaturedItemsKeys {\n WithInducements,\n WithoutInducements,\n}\n\n/* istanbul ignore next */\nfunction getPathNameFromIconName(iconName: string): keyof typeof iconPaths {\n switch (iconName) {\n case 'Alpine Sports':\n return 'alpinesports'\n case 'Athletics':\n return 'athletics'\n case 'Australian Football':\n return 'footballau'\n case 'Badminton':\n return 'badminton'\n case 'Bandy':\n return 'bandy'\n case 'Baseball':\n return 'baseball'\n case 'Basketball':\n return 'basketball'\n case 'Boxing':\n return 'boxing'\n case 'Cricket':\n return 'cricket'\n case 'Cycling':\n return 'cycling'\n case 'Darts':\n return 'darts'\n case 'Dogs':\n return 'dog'\n case 'Election':\n return 'elections'\n case 'Entertainment':\n return 'entertainment'\n case 'E-sports':\n return 'esports'\n case 'Financial':\n return 'financial'\n case 'Futsal':\n return 'fustal'\n case 'Golf':\n return 'golf'\n case 'Gridiron':\n return 'footballus'\n case 'Handball':\n return 'handball'\n case 'Hockey':\n return 'hockey'\n case 'House':\n return 'house'\n case 'Ice Hockey':\n return 'hockeyice'\n case 'Info':\n return 'info'\n case 'Ironman':\n return 'surfironman'\n case 'Jackpot':\n return 'jackpot'\n case 'Lawn Bowls':\n return 'lawnbowls'\n case 'Martial Arts':\n return 'martialarts'\n case 'Medal':\n return 'commonwealthgames'\n case 'Motorsports':\n return 'motorsport'\n case 'Multimate':\n return 'accumulator'\n case 'Mystery':\n return 'mystery'\n case 'Netball':\n return 'netball'\n case 'Pencil':\n return 'pencil'\n case 'Person':\n return 'person'\n case 'Pesapallo':\n return 'pesapallo'\n case 'Races':\n return 'races'\n case 'Rugby League':\n return 'rugby'\n case 'Rugby Union':\n return 'rugbyunion'\n case 'Sailing':\n return 'yachting'\n case 'Special':\n return 'specials'\n case 'Snooker/Pool':\n return 'snooker'\n case 'Soccer':\n return 'footballlight'\n case 'Squash':\n return 'squash'\n case 'Surfing':\n return 'surfing'\n case 'Swimming':\n return 'swimming'\n case 'Table Tennis':\n return 'tabletennis'\n case 'Tennis':\n return 'tennis'\n case 'Trots':\n return 'trot'\n case 'Trophy':\n return 'featureraces'\n case 'Volleyball':\n return 'volleyball'\n case 'Winter Sports':\n return 'wintersports'\n default:\n return 'tab' // TAB will default to this so doesn't need own case statement\n }\n}\n\nexport function map(resource: FeaturedItemWireResource): FeaturedItem {\n return {\n text: resource.Text,\n url: resource.Link,\n iconPathName: getPathNameFromIconName(resource.IconName),\n internalTrackingCode: resource.InternalTrackingCode,\n }\n}\n\nfunction keyCreator(mappedItems: FeaturedItemWireResource[]) {\n return {\n WithInducements: mappedItems.filter(item => item.IsInducement),\n WithoutInducements: mappedItems.filter(item => !item.IsInducement),\n }\n}\n\nconst typeKey = 'featuredItems'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const FeaturedItemsRepo = declareResourceType({\n typeKey,\n fetchMultipleNoPromise: keys =>\n fetchThenMap(\n keys[0],\n 'featured-items',\n typeKey,\n map,\n keyCreator\n ) as Observable<{\n keys: string[]\n result?: IKeyMap unknown>> | undefined\n error?: Error | undefined\n }>,\n softTimeToLive: 60 * 1000,\n})\n","import Rx from 'rx'\nimport { mapObject } from '../helpers'\nimport { get } from '@classic/Foundation/Services/ApiService'\n\nexport interface SuccessfulMapResult {\n keys: string[]\n result: Record>\n}\n\nexport interface FailedMapResult {\n keys: string[]\n error: Error\n}\n\nexport function fetchThenMap(\n requestedKey: string,\n resourceType: string,\n typeKey: string,\n iteratee: (wire: WireResource) => Resource,\n createKeysAndGroup: (resources: WireResource[]) => Record\n): Rx.Observable | FailedMapResult> {\n return Rx.Observable.fromPromise(\n get({ url: `/api/contentful/${resourceType}` })\n // Components want to filter results (eg. with or without inducements) so we create new keys\n .then(mappedItems => createKeysAndGroup(mappedItems))\n // Map each field to our interface\n .then(keysWithWireResources =>\n mapObject>(\n keysWithWireResources,\n // @ts-expect-error Typing issues\n (value: WireResource[]) => value.map(iteratee)\n )\n )\n // Build the result that data access expects\n .then(keysWithResources => ({\n keys: [requestedKey],\n result: {\n [typeKey]: keysWithResources,\n },\n }))\n .catch(err => ({\n keys: [requestedKey],\n error: err,\n }))\n )\n}\n","import styled from '@emotion/styled'\nimport { fontFamiliesBold } from '@core/Settings'\nimport { HOME_CSS_SHARED_VALUES } from '@core/Areas/Home/Home.styles'\nimport { colors, hexColors } from '@mobi/settings'\n\nexport const FeaturedEventsItemStyled = styled('a')({\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n\n width: '11rem',\n minWidth: '11rem',\n height: '6.5rem',\n\n margin: '0',\n padding: '0.5rem',\n marginRight: '0.75rem',\n\n color: hexColors.white,\n background: colors.brand.primary,\n border: 0,\n boxShadow: HOME_CSS_SHARED_VALUES.boxShadow,\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n textDecoration: 'none',\n\n '&:hover': {\n backgroundColor: 'none',\n },\n})\n\nexport const FeaturedEventsItemTitleStyled = styled('span')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: '0.5rem',\n lineHeight: 1.1,\n fontSize: '1.1rem',\n fontFamily: fontFamiliesBold.brand,\n textDecoration: 'none',\n textTransform: 'uppercase',\n textAlign: 'center',\n whiteSpace: 'normal',\n color: 'inherit',\n})\n","import React from 'react'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { FeaturedEventsItemStyled, FeaturedEventsItemTitleStyled } from './Item.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\ninterface FeaturedItemProps {\n text: string\n iconPathName: keyof typeof iconPaths\n url: string\n internalTrackingCode: string | null\n featureItemAction?: () => void\n className?: string\n}\n\nexport function FeaturedItemListElement({\n text,\n iconPathName,\n url,\n internalTrackingCode,\n featureItemAction,\n className,\n}: FeaturedItemProps) {\n return (\n \n \n {text}\n \n )\n}\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\ninterface FeatureItemAnalyticsData {\n featureItemTitle: string\n featureItemPosition: number\n accountNumber: number | null\n internalTrackingCode: string | null\n clickUrl: string\n}\n\nconst mapBannerDataToEcommerceItems = (data: FeatureItemAnalyticsData) => {\n const itemBrand = data.clickUrl.includes('tabtouch-sports')\n ? 'pre'\n : data.clickUrl.includes('races')\n ? 'Racing'\n : undefined\n const itemIdMatch = data.clickUrl.match(/\\/event\\/(\\d+)$/)\n const itemId = itemIdMatch ? itemIdMatch[1] : undefined\n\n return {\n promotion_name: data.featureItemTitle,\n internalTrackingCode: data.internalTrackingCode,\n item_id: itemId,\n index: data.featureItemPosition,\n item_brand: itemBrand,\n item_variant: 'Feature Tile',\n }\n}\n\nexport const trackFeatureItemClicked = (data?: FeatureItemAnalyticsData) => {\n if (!data) return\n const newData = mapBannerDataToEcommerceItems(data)\n trackEvent(analyticsKeys.featureItemClicked, {\n ecommerce: {\n items: [newData],\n },\n })\n}\n\nexport const trackFeaturedBannerViewed = (data?: FeatureItemAnalyticsData) => {\n if (!data) return\n const newData = mapBannerDataToEcommerceItems(data)\n trackEvent(analyticsKeys.featureItemBannerViewed, {\n ecommerce: {\n items: [newData],\n },\n })\n}\n","import React, { useEffect, useRef } from 'react'\nimport Rx from 'rx'\nimport { LoadingInstance, ErroredInstance, hasLoadedWithoutError, State } from 'rwwa-data-access'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport {\n FeaturedItemsRepo,\n FeaturedItem as ContentfulFeaturedItemData,\n FeaturedItemsKeys,\n} from '@core/Data/Contentful/featuredItems'\nimport { FeaturedItemListElement } from './Item'\nimport {\n HomeScrollableContainerStyled,\n HomeScrollHeaderStyled as Header,\n HomeScrollListItemsStyled,\n} from '@core/Areas/Home/Home.styles'\nimport {\n isReactNativeApp,\n sendToNative,\n AppVersion as reactNativeAppVersion,\n} from '@mobi/web-native-comms/web'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { trackFeatureItemClicked, trackFeaturedBannerViewed } from './analytics'\n\nconst enum LocalConstants {\n FeaturedTileClassName = 'js-feat-tile-feature-item',\n}\n\ninterface FeaturedItemData extends ContentfulFeaturedItemData {\n featureItemAction?: () => void\n}\n\nexport const FeaturedItems: React.FC = () => {\n const canShowInducements = useInducementService()\n\n return (\n \n )\n}\n\n// Trigger re-render every 30 seconds so data access can check expiry\nconst state$ = Rx.Observable.timer(0, 30000).combineLatest(\n FeaturedItemsRepo.data$,\n (time, state) => {\n return { time, state }\n }\n)\n\nconst ConnectedFeaturedItems = observeImmutable<\n { time: number; state: State },\n { featuredItemsKey: string }\n>(state$, ({ record, featuredItemsKey }) => {\n const featuredItems = FeaturedItemsRepo.getFrom(record.state, featuredItemsKey)\n return \n})\n\ninterface FeaturedItemsComponentProps {\n items: ContentfulFeaturedItemData[] | typeof LoadingInstance | typeof ErroredInstance\n}\n\nexport function FeaturedItemsComponent({ items }: FeaturedItemsComponentProps): JSX.Element | null {\n if (!hasLoadedWithoutError(items) || !items.length) {\n return null\n }\n\n return \n}\n\nconst FeaturedItemsMapped: React.FC<{ items: FeaturedItemData[] }> = ({ items }) => {\n const { accountNumber } = useObservableImmutable(userAccountState$, ['accountNumber'])\n const reactNativeVersion = +(reactNativeAppVersion?.split('.', 1)[0] ?? '0')\n const trackedItemsRef = useRef([])\n const scrollContainerRef = useRef(null)\n const trackGAEvent = (item: FeaturedItemData) => {\n if (!trackedItemsRef.current.includes(item.text.trim())) {\n trackFeaturedBannerViewed({\n featureItemTitle: item.text,\n featureItemPosition: items.indexOf(item),\n accountNumber,\n internalTrackingCode: item.internalTrackingCode,\n clickUrl: item.url,\n })\n trackedItemsRef.current = [...trackedItemsRef.current, item.text.trim()]\n }\n }\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const index = entry.target.getAttribute('data-index')\n const item = index !== null ? items[parseInt(index, 10)] : undefined\n if (item) trackGAEvent(item)\n }\n })\n },\n {\n root: scrollContainerRef.current,\n threshold: 0.9,\n }\n )\n\n const elements = document.querySelectorAll(`.${LocalConstants.FeaturedTileClassName}`)\n elements.forEach((element, idx) => {\n element.setAttribute('data-index', idx.toString())\n observer.observe(element)\n })\n\n return () => {\n observer.disconnect()\n }\n }, [items, trackGAEvent])\n\n if (!hasLoadedWithoutError(items) || !items.length) {\n return null\n }\n\n // Add SMB tile if viable\n if (\n isReactNativeApp &&\n reactNativeVersion > 171 &&\n !items.find(item => item.text === 'Scan My Bet')\n ) {\n items.unshift({\n text: 'Scan My Bet',\n iconPathName: 'scanMyBet',\n url: '/#',\n internalTrackingCode: null,\n featureItemAction: () => sendToNative('SCAN_RETAIL_TICKET'),\n })\n }\n\n return (\n <>\n
      Featured
      \n \n \n {items.map((item, idx) => (\n {\n trackFeatureItemClicked({\n featureItemTitle: item.text,\n featureItemPosition: idx,\n accountNumber,\n internalTrackingCode: item.internalTrackingCode,\n clickUrl: item.url,\n })\n if (item.featureItemAction) item.featureItemAction()\n }}\n />\n ))}\n \n \n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const SummaryPopupStyled = styled('div')<{ isDesktop?: boolean }>(\n {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n ({ isDesktop }) => ({\n height: isDesktop ? '25rem' : undefined,\n minHeight: isDesktop ? undefined : '20rem',\n })\n)\n\nexport const ButtonBlockStyled = styled('div')<{ isDesktop?: boolean }>(({ isDesktop }) => ({\n display: isDesktop ? 'flex' : undefined,\n}))\n\nexport const NoticeboxStyled = styled('div')({\n margin: '2rem 0 -1rem',\n})\n\nexport const ParagraphStyled = styled('div')({\n color: '#000',\n textAlign: 'left',\n margin: '2rem 0',\n})\n","import React from 'react'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n SummaryPopupStyled,\n ButtonBlockStyled,\n NoticeboxStyled,\n ParagraphStyled,\n} from './ActivitySummaryPopup.styles'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\ninterface ActivitySummaryPopupProps {\n isDesktop?: boolean\n}\n\ninterface PromptPopupProps extends ActivitySummaryPopupProps {\n preferredName: string\n onSuccess(): Promise\n onCancellation(): Promise\n}\n\ninterface PopupProps extends ActivitySummaryPopupProps {\n onClose(): void\n}\n\nexport function ActivitySummaryPopup(props: PromptPopupProps): React.ReactElement {\n const { isDesktop, preferredName, onSuccess, onCancellation } = props\n\n const [isSuccessBusy, setIsSuccessBusy] = React.useState(false)\n const [isCancellationBusy, setIsCancellationBusy] = React.useState(false)\n const disabled = isSuccessBusy || isSuccessBusy\n const onSuccessClick = async () => {\n setIsSuccessBusy(true)\n await onSuccess()\n }\n\n const onCancellationClick = async () => {\n setIsCancellationBusy(true)\n await onCancellation()\n }\n\n return (\n \n \n Hi {preferredName ?? ''}, your monthly summary for the past 12 months is\n now available.\n
      \n
      \n Would you like to have this summary emailed to you?\n
      \n \n await onSuccessClick()}\n color='primary'\n isDesktop={isDesktop}\n style={{ margin: isDesktop ? '0 0.5rem 0 0' : undefined }}\n disabled={disabled}\n isBusy={isSuccessBusy}\n >\n Yes, please email it to me\n \n await onCancellationClick()}\n color='secondary'\n isDesktop={isDesktop}\n style={{ margin: isDesktop ? '0 0 0 0.5rem' : '1rem 0 0 0' }}\n disabled={disabled}\n isBusy={isCancellationBusy}\n busyIndicatorColour={'#689F38'}\n >\n No thanks\n \n \n
      \n )\n}\n\nexport function ActivitySummaryPopupSuccess(props: PopupProps): React.ReactElement {\n const { isDesktop, onClose } = props\n\n return (\n \n \n Your request has been sent}\n noticeBoxType={NoticeBoxTypes.Success}\n hasBorder={true}\n isDesktop={isDesktop}\n />\n \n \n You should receive an email with your account monthly summary within the next 2 business\n days.\n \n \n \n Close\n \n \n \n )\n}\n\nexport function ActivitySummaryPopupCancellation(props: PopupProps): React.ReactElement {\n const { isDesktop, onClose } = props\n\n return (\n \n \n You can request to have your account monthly summary emailed to you by contacting the\n Customer Management Centre on \n \n \n \n Close\n \n \n \n )\n}\n\nexport function ErrorPopupNoticeBox(props: PopupProps): React.ReactElement {\n const { isDesktop, onClose } = props\n\n return (\n \n \n We were unable to record your answer, and will ask again later.\n
      \n
      \n For any difficulties, please call our Customer Management Centre on{' '}\n or internationally on{' '}\n .\n
      \n \n \n Close\n \n \n
      \n )\n}\n","import styled from '@emotion/styled'\nimport { PopupStyled, PopupTitleStyledProps } from '@core/Components/Popup/Popup.styles'\n\ninterface ActivitySummaryPopupProps {\n isDesktop?: boolean\n}\n\nexport const ActivitySummaryPopupStyled = styled(PopupStyled)(\n {\n color: '#000',\n position: 'relative',\n },\n ({ isDesktop }) => ({\n fontSize: isDesktop ? '1.4rem' : '1.2rem',\n lineHeight: isDesktop ? '1.7rem' : '1.4rem',\n width: isDesktop ? '40rem' : '26rem',\n height: isDesktop ? '30rem' : undefined,\n margin: isDesktop ? '5rem 0' : undefined,\n transform: isDesktop ? 'translate(-50%,0)' : undefined,\n padding: isDesktop ? '2rem' : '1rem',\n })\n)\n\nActivitySummaryPopupStyled.displayName = 'ActivitySummaryPopup'\n\nexport const PopupTitleStyled = styled('div')(\n {\n textAlign: 'center',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n ({ isDesktop }) => ({\n fontSize: isDesktop ? '2.4rem' : '1.6rem',\n lineHeight: isDesktop ? '2.9rem' : '1.8rem',\n color: isDesktop ? '#512D6D' : undefined,\n boxShadow: isDesktop ? '0px 4px 2px rgba(0, 0, 0, 0.1)' : undefined,\n height: isDesktop ? '7rem' : undefined,\n margin: isDesktop ? '-2rem -2rem 0' : undefined,\n fontWeight: isDesktop ? undefined : 'bold',\n })\n)\nPopupTitleStyled.displayName = 'PopupTitle'\n","import React from 'react'\nimport { BetAccountRepo, BetAccountKey } from '@core/Data/Account/betAccount'\nimport {\n ActivitySummaryPopup,\n ActivitySummaryPopupSuccess,\n ActivitySummaryPopupCancellation,\n ErrorPopupNoticeBox,\n} from './ActivitySummaryPopup'\nimport { PopupContainerStyled } from '@core/Components/Popup/Popup.styles'\nimport { state$ as UserAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { ActivitySummaryPopupStyled, PopupTitleStyled } from './ActivitySummary.styles'\nimport { post, get } from '@classic/Foundation/Services/ApiService'\nimport { hasLoadedWithoutError } from 'rwwa-data-access'\n\nenum DisplayState {\n HideAll,\n Prompt,\n Success,\n Cancellation,\n Error,\n}\n\ninterface ActivitySummaryState {\n displayState: DisplayState\n betAccountNumber: number | null\n checkResponse: CheckResponse | null\n preferredName: string\n}\n\ninterface CheckResponse {\n answerSought: boolean\n statementStartDate: Date\n statementEndDate: Date\n}\n\nconst cache = new Map()\n\nexport class ActivitySummary extends React.Component<\n { isDesktop?: boolean },\n ActivitySummaryState\n> {\n private subscription: Rx.Disposable | undefined\n\n constructor(props: { isDesktop?: boolean }) {\n super(props)\n this.state = {\n displayState: DisplayState.HideAll,\n betAccountNumber: null,\n preferredName: '',\n checkResponse: null,\n }\n }\n\n public async componentDidMount(): Promise {\n this.subscription = UserAccountState$.filter(state => !!(state && state.isLoggedIn))\n .distinctUntilChanged(state => state.isLoggedIn)\n .delay(1000)\n .subscribe(async () => {\n const betAccount = await BetAccountRepo.getPromise(BetAccountKey)\n if (hasLoadedWithoutError(betAccount) && betAccount.BetAccountNumber) {\n if (await this.check(betAccount.BetAccountNumber)) {\n this.setState({\n displayState: DisplayState.Prompt,\n betAccountNumber: betAccount.BetAccountNumber,\n checkResponse: cache.get(betAccount.BetAccountNumber) || null,\n preferredName:\n betAccount.PreferredName ??\n betAccount.AccountHolderList[0]?.FullName ??\n betAccount.AccountHolderList[1]?.FullName ??\n '',\n })\n }\n }\n })\n }\n\n public componentWillUnmount(): void {\n this.subscription?.dispose()\n }\n\n private renderPopup = () => {\n switch (this.state.displayState) {\n case DisplayState.Prompt:\n return (\n \n )\n case DisplayState.Success:\n return (\n \n )\n case DisplayState.Cancellation:\n return (\n \n )\n case DisplayState.Error:\n return \n default:\n return null\n }\n }\n\n public render(): React.ReactElement | null {\n if (this.state.displayState === DisplayState.HideAll) {\n return null\n }\n\n return (\n \n \n \n Activity Summary\n \n {this.renderPopup()}\n \n \n )\n }\n\n private closeAll = () => {\n this.setState({ ...this.state, displayState: DisplayState.HideAll })\n }\n\n private onSuccess = async () => {\n if (!this.state.checkResponse) return\n const success = await this.postAnswer(\n this.state.betAccountNumber as number,\n true,\n this.state.checkResponse.statementStartDate,\n this.state.checkResponse.statementEndDate\n )\n if (success) {\n this.updateCache(this.state.betAccountNumber as number, false)\n this.setState({ ...this.state, displayState: DisplayState.Success })\n } else {\n this.setState({ ...this.state, displayState: DisplayState.Error })\n }\n }\n\n private onCancellation = async () => {\n if (!this.state.checkResponse) return\n const success = await this.postAnswer(\n this.state.betAccountNumber as number,\n false,\n this.state.checkResponse.statementStartDate,\n this.state.checkResponse.statementEndDate\n )\n if (success) {\n this.updateCache(this.state.betAccountNumber as number, false)\n this.setState({ ...this.state, displayState: DisplayState.Cancellation })\n } else {\n this.setState({ ...this.state, displayState: DisplayState.Error })\n }\n }\n\n private updateCache = (betAccountNumber: number, answerSought: boolean) => {\n const value = cache.get(betAccountNumber)\n\n if (value !== undefined) {\n value.answerSought = answerSought\n cache.set(betAccountNumber, value)\n }\n }\n\n private check = (betAccountNumber: number): Promise => {\n const cached = cache.get(betAccountNumber)\n if (cached) {\n return Promise.resolve(cached.answerSought)\n }\n\n return get({\n url: `/api/activity-statements/check?accountNumber=${betAccountNumber}`,\n })\n .then(response => {\n const answerSought = response.answerSought || false\n cache.set(betAccountNumber, response)\n return answerSought\n })\n .catch(() => false)\n }\n\n private postAnswerToCrm = (\n betAccountNumber: number,\n statementStartDate: Date,\n statementEndDate: Date,\n receiveStatement: boolean\n ): Promise => {\n return post({\n url: '/$_/api/account/answerActivityStatementPrompt',\n body: {\n Answer: {\n BetAccountNumber: betAccountNumber,\n StatementStartDate: statementStartDate,\n StatementEndDate: statementEndDate,\n RequestFlag: receiveStatement,\n },\n },\n })\n .then(() => true)\n .catch(() => false)\n }\n\n private postAnswer = (\n betAccountNumber: number,\n receiveStatement: boolean,\n statementStartDate: Date,\n statementEndDate: Date\n ): Promise => {\n return this.postAnswerToCrm(\n betAccountNumber,\n statementStartDate,\n statementEndDate,\n receiveStatement\n ).then(result => {\n if (result) {\n return post({\n url: '/api/activity-statements/answer',\n body: {\n accountNumber: `${betAccountNumber}`,\n receiveStatement,\n },\n })\n .then(() => true)\n .catch(() => false)\n } else {\n return Promise.resolve(false)\n }\n })\n }\n}\n","import styled from '@emotion/styled'\nimport { fontFamiliesBold } from '@core/Settings'\n\nexport const FeaturedItemsHeaderStyled = styled('div')({\n fontFamily: fontFamiliesBold.brand,\n fontSize: '1.4rem',\n padding: '0.45rem 1rem 0',\n display: 'flex',\n justifyContent: 'space-between',\n color: '#FFF',\n alignItems: 'center',\n})\n\nexport const FeaturedItemsListStyled = styled('ol')<{ count: number }>(\n {\n listStyle: 'none',\n margin: 0,\n overflowX: 'hidden',\n textAlign: 'left',\n },\n ({ count }) => ({\n padding: count > 0 ? '1rem' : 0,\n width: `${count * 12}rem`,\n })\n)\n","import styled from '@emotion/styled'\nimport { FeaturedItemsHeaderStyled } from '../FeaturedItems/FeaturedItems.styles'\nimport { HomeNextRacesListItemStyled } from '../HomeNextRaces/HomeNextRaces.styles'\nimport { keyframes } from '@emotion/react'\nimport { hexColors } from '@mobi/settings'\n\nconst animationBackground = keyframes({\n '0%': {\n backgroundPosition: `100% 0`,\n },\n '100%': {\n backgroundPosition: `15% 100%`,\n },\n})\n\nconst gradientColorStop1 = hexColors.orange\nconst gradientColorStop2 = hexColors.alizarin\n\nexport const HomeSuperPicksAnimationContainer = styled('div')({\n backgroundSize: `400% 400%`,\n animation: `${animationBackground} 7s linear infinite`,\n backgroundImage: `linear-gradient(45deg,\n ${gradientColorStop1} 0%,\n ${gradientColorStop2} 33%,\n ${gradientColorStop1} 66%,\n ${gradientColorStop2} 100%)`,\n})\n\nexport const HomeNextSuperPicksContainerStyled = styled('div')({\n WebkitOverflowScrolling: 'touch',\n overflowX: 'auto',\n WebkitTapHighlightColor: 'transparent',\n width: '100%',\n})\n\nexport const HomeNextSuperPicksListStyled = styled(HomeNextRacesListItemStyled)({\n background: hexColors.cinnabar,\n})\n\nexport const HomeNextSuperPicksHeaderStyled = styled(FeaturedItemsHeaderStyled)({\n background: 'transparent',\n padding: '0.75rem 1rem 0',\n color: hexColors.black,\n})\n\nexport const HomeNextRacesListContainer = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n})\n\nexport const HomeNextEventNameEventStyled = styled('div')({\n fontSize: '1.4rem',\n lineHeight: '1.8rem',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n})\n\nexport const HomeNextEventRaceTextStyled = styled('span')({\n fontSize: '1.2rem',\n justifyContent: 'space-between',\n display: 'flex',\n})\n\nexport const HomeTimeToJump = styled('div')({\n textAlign: 'right',\n})\n","import styled from '@emotion/styled'\n\nexport const ListUnstyled = styled('ul')({\n listStyle: 'none',\n padding: 0,\n fontSize: '1.0rem',\n lineHeight: '1.2',\n marginBlockEnd: 0,\n})\n\nexport const ListStyled = styled(ListUnstyled)({\n margin: '1rem 0',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { greaterOrEqualThan } from '@mobi/component-library/Utils/media'\n\nexport const ListItemStyled = styled('li')({\n padding: '0.8rem',\n fontSize: '1.4rem',\n borderTop: `1px solid ${hexColors.gainsboro}`,\n\n [greaterOrEqualThan('xlarge')]: {\n padding: '1rem',\n },\n\n '&:first-of-type': {\n border: 0,\n },\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\ninterface LinkListStyledProps {\n hideChevron?: boolean\n}\n\nexport const ListLinkStyled = styled('a')(\n {\n textDecoration: 'none',\n color: 'currentColor',\n position: 'relative',\n display: 'block',\n },\n\n ({ hideChevron = false }) => {\n if (hideChevron) {\n return undefined\n }\n\n return {\n '&::after': {\n fontFamily: 'tticons',\n content: '\"\\\\3e\"',\n display: 'block',\n width: '10px',\n height: '10px',\n position: 'absolute',\n top: '50%',\n right: '10px',\n lineHeight: '10px',\n textAlign: 'center',\n marginTop: '-5px',\n color: hexColors.veryLightGrey,\n },\n }\n }\n)\n","import React from 'react'\nimport { ListItemStyled } from './ListItem.styles'\nimport { ListLinkStyled } from './ListLink.styles'\n\ninterface ListItemProps {\n href?: string\n children?: React.ReactChild | React.ReactChild[]\n hideChevron?: boolean\n}\n\nexport function ListItem(props: ListItemProps) {\n if (props.href) {\n return (\n \n {props.children}\n \n )\n } else {\n return {props.children}\n }\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\ninterface ListBadgeProps {\n color: string\n}\n\nexport const ListBadgeStyled = styled('div')(\n {\n color: hexColors.white,\n padding: '0.2em',\n textAlign: 'center',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n lineHeight: 1,\n width: '3em',\n height: '3em',\n display: 'table',\n boxSizing: 'border-box',\n },\n\n ({ color }) => ({\n backgroundColor: color || hexColors.black,\n })\n)\n\ninterface ListBadgeInnerProps {\n prefix: string\n}\n\nexport const ListBadgeInnerStyled = styled('div')(\n {\n fontSize: '1.4em',\n display: 'table-cell',\n verticalAlign: 'middle',\n textAlign: 'center',\n },\n\n ({ prefix }) => ({\n '&::before': {\n content: `\"${prefix || ''}\"`,\n fontSize: '0.5em',\n lineHeight: 1,\n display: 'block',\n },\n })\n)\n","import React from 'react'\n\nimport { ListBadgeStyled, ListBadgeInnerStyled } from './ListBadge.styles'\n\nexport const ListBadge: React.FC<{\n color: string\n children?: React.ReactNode\n prefix?: string\n}> = props => (\n \n {props.children}\n \n)\n","import styled from '@emotion/styled'\n\nexport const ListTimeStyled = styled('time')({\n fontWeight: 'bold',\n fontSize: '0.8em',\n width: '100%',\n display: 'block',\n textAlign: 'center',\n paddingTop: '.1em',\n lineHeight: 1.5,\n})\n","import React from 'react'\n\ninterface FlexProps {\n children?: React.ReactNode\n testId?: string\n flexDirection?: 'row' | 'column'\n justifyContent?:\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'space-between'\n | 'space-around'\n | 'initial'\n | 'inherit'\n flexWrap?: 'wrap' | 'nowrap' | 'wrap-reverse'\n alignItems?: 'stretch' | 'center' | 'flex-start' | 'flex-end'\n gap?: string\n}\n\nexport const Flex = (props: FlexProps) => (\n \n {props.children}\n \n)\n","import React from 'react'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport function NextRaceLoading(): JSX.Element {\n return (\n
      \n \n
      \n \n
      \n
      \n \n
      \n \n \n \n \n
      \n
      \n )\n}\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { NextRace as NextRaceData } from '@core/Data/Racing/nextRaces'\nimport {\n HomeNextEventRaceTextStyled,\n HomeNextEventNameEventStyled,\n HomeTimeToJump,\n HomeNextRacesListContainer,\n HomeNextSuperPicksListStyled,\n} from './HomeNextSuperPicks.styles'\nimport { TimeToJumpComponent } from '@core/Areas/NextEvents/Components/TimeToJump/TimeToJump'\nimport { buildToteRaceUri } from '@core/Areas/Racing/helpers'\n\ninterface IconTypes {\n Races: keyof typeof iconPaths\n Trots: keyof typeof iconPaths\n Dogs: keyof typeof iconPaths\n}\n\nconst IconTypes: IconTypes = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport function HomeNextSuperPicksTile({\n race,\n}: {\n race: NextRaceData\n keyValue: string\n}): JSX.Element {\n const href = buildToteRaceUri({\n meetingId: race.MeetingID,\n raceNumber: race.RaceNumber,\n meetingDate: race.MeetingDate,\n })\n\n return (\n \n \n {race.MeetingName}\n R{race.RaceNumber}\n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { List, ListItem } from '@core/Components/List'\nimport { isLoading, isErrored } from 'rwwa-data-access'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { NextRacesRepoData } from '@core/Data/Racing/nextRaces'\nimport { NextRaceLoading } from '@core/Areas/NextEvents/Components/NextRaceLoading/NextRaceLoading'\nimport { FeaturedItemsListStyled } from '../FeaturedItems/FeaturedItems.styles'\nimport { HomeNextSuperPicksTile } from './HomeNextSuperPicksTile'\n\nexport function HomeNextSuperPicksList({ races }: { races: NextRacesRepoData }): JSX.Element {\n if (isErrored(races)) {\n return Error loading next races.\n }\n\n if (isLoading(races)) {\n return (\n \n \n \n \n \n )\n }\n\n if (!races.length) {\n return <>\n }\n\n const raceListItems = races.map(race => {\n const keyValue = `${race.MeetingDate}_${race.MeetingName}_${race.RaceNumber}`\n return \n })\n\n return (\n {raceListItems}\n )\n}\n","import { attachDriver, createSignal, Signal } from 'rwwa-rx-state-machine'\nimport { fromJS } from 'immutable'\nimport { StateMap } from 'typings/immutable'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\n\nexport const UpdateSuperBoostRaceList = createSignal('UpdateRaceList')\nexport const RemoveJumpedRaces = createSignal('RemoveJumpedRaces')\n\ninterface SuperBoostRacesState {\n superBoostRaces: NextRace[]\n}\n\nexport type SuperBoostRacesStateMap = StateMap\n\nexport const defaultState: SuperBoostRacesState = {\n superBoostRaces: [],\n}\n\nexport function SuperBoostRacesStateDriver(\n state = fromJS(defaultState),\n signal: Signal\n): SuperBoostRacesStateMap {\n switch (signal.tag) {\n case UpdateSuperBoostRaceList: {\n const data = signal.data as NextRace[]\n const races = applySuperBoostFilterRules(data)\n return state.merge({ superBoostRaces: races })\n }\n\n case RemoveJumpedRaces: {\n const { superBoostRaces } = state.toJS() as SuperBoostRacesState\n const races = applySuperBoostFilterRules(superBoostRaces)\n return state.merge({ superBoostRaces: races })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const superBoostRacesState$ = attachDriver({\n driver: SuperBoostRacesStateDriver,\n path: `SuperBoostRaces`,\n}).map(state => state.toJS())\n\nexport const applySuperBoostFilterRules = (data: NextRace[] | null): NextRace[] => {\n if (data === null || data.length === 0) {\n return []\n }\n\n try {\n const races = data\n .filter((race, index, races) => {\n if (isNaN(Date.parse(race.AdvertisedStartTime))) {\n return false\n }\n\n if (new Date(race.AdvertisedStartTime) <= new Date()) {\n return false\n }\n\n const isDuplicate =\n index !==\n races.findIndex(\n otherRace =>\n otherRace.AdvertisedStartTime === race.AdvertisedStartTime &&\n otherRace.MeetingDate === race.MeetingDate &&\n otherRace.RaceNumber === race.RaceNumber &&\n otherRace.RaceType === race.RaceType &&\n otherRace.MeetingName === race.MeetingName &&\n otherRace.MeetingID === race.MeetingID\n )\n\n if (isDuplicate) {\n return false\n }\n\n return true\n })\n .sort((a: NextRace, b: NextRace) => {\n return +new Date(a.AdvertisedStartTime) - +new Date(b.AdvertisedStartTime)\n })\n\n return races\n } catch {\n return []\n }\n}\n","import { FeatureFlags as LaunchDarklyFeatureFlags } from '@core/State/LaunchDarklyFeatures/driver'\nimport type { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\nimport { FeatureFlags } from '@mobi/settings'\nimport { UpdateSuperBoostRaceList } from './HomeNextSuperPickDriver'\n\nexport interface SuperBoostMeeting {\n FixtureId: string\n RaceCourse: string\n AdvertisedStartTime: string\n RaceNumber: string\n RaceType: string\n}\n\ninterface SuperBoostSourceData {\n SuperBoostMeetings: SuperBoostMeeting[]\n}\n\nexport const addRawSuperBoostMeetings = (\n serverEnvironment: string,\n features: LaunchDarklyFeatureFlags\n) => {\n try {\n let rawDataFeatureFlagName = FeatureFlags.HOMEPAGE_SUPERPICKS_DATA.key\n if (serverEnvironment.toLowerCase() !== 'dev') {\n rawDataFeatureFlagName += '-' + serverEnvironment.toLowerCase()\n }\n const rawData = features[rawDataFeatureFlagName]\n\n if (!rawData || !rawData.SuperBoostMeetings) {\n UpdateSuperBoostRaceList([])\n return\n }\n\n const races = ConvertSuperBoostMeetings(rawData)\n UpdateSuperBoostRaceList(races)\n } catch {\n UpdateSuperBoostRaceList([])\n }\n}\n\nexport const ConvertSuperBoostMeetings = (data: SuperBoostSourceData): NextRace[] => {\n try {\n if (data === null || data.SuperBoostMeetings === null) {\n return []\n }\n\n const races = data.SuperBoostMeetings.filter(data => {\n if (isNaN(Date.parse(data.AdvertisedStartTime))) {\n return false\n }\n\n if (isNaN(Number.parseInt(data.RaceNumber))) {\n return false\n }\n return new Date(data.AdvertisedStartTime) > new Date()\n })\n .map(superBoostRace => {\n const nextRace: NextRace = {\n AdvertisedStartTime: superBoostRace.AdvertisedStartTime,\n MeetingDate: superBoostRace.AdvertisedStartTime,\n MeetingName: superBoostRace.RaceCourse,\n RaceNumber: Number.parseInt(superBoostRace.RaceNumber),\n RaceType: superBoostRace.RaceType as RaceCodes,\n MeetingID: superBoostRace.FixtureId,\n Distance: 0,\n HasJackpot: false,\n GeoLocationCode: 'WA',\n }\n return nextRace\n })\n .sort((a: NextRace, b: NextRace) => {\n return +new Date(a.AdvertisedStartTime) - +new Date(b.AdvertisedStartTime)\n })\n\n return races\n } catch {\n return []\n }\n}\n","import React from 'react'\nimport { NextRace } from '@core/Data/Racing/nextRaces'\nimport {\n HomeSuperPicksAnimationContainer,\n HomeNextSuperPicksContainerStyled,\n HomeNextSuperPicksHeaderStyled,\n} from './HomeNextSuperPicks.styles'\nimport { HomeNextSuperPicksList } from './HomeNextSuperPicksList'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RemoveJumpedRaces, superBoostRacesState$ } from './HomeNextSuperPickDriver'\nimport { useFeature } from '@core/Utils/hooks'\nimport { addRawSuperBoostMeetings } from './SuperBoostSourceData'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { useServerConfig } from '@core/Data/ServerConfig/useServerConfig'\n\nexport const HomeNextSuperPicks: React.FC = () => {\n const canShowInducements = useInducementService()\n const isSuperBoostFeatureActive = !!useFeature('HOMEPAGE_SUPERPICKS')\n if (!isSuperBoostFeatureActive || !canShowInducements) {\n return null\n }\n\n return \n}\n\nconst HomeNextSuperPicksComponent = (): JSX.Element | null => {\n const [races, setRaces] = React.useState([])\n const serverConfig = useServerConfig()\n\n React.useEffect(() => {\n if (!serverConfig?.serverEnvironment) return undefined\n\n const subscription = featureState$.subscribe(record => {\n const features = record.features.toJS()\n\n addRawSuperBoostMeetings(serverConfig.serverEnvironment, features)\n })\n\n return () => {\n subscription.dispose()\n }\n }, [serverConfig?.serverEnvironment])\n\n React.useEffect(() => {\n const raceSubscription = superBoostRacesState$.distinctUntilChanged().subscribe(state => {\n if (state && state.superBoostRaces) {\n const races = state.superBoostRaces\n .sort((a: NextRace, b: NextRace) => {\n return +new Date(a.AdvertisedStartTime) - +new Date(b.AdvertisedStartTime)\n })\n .slice(0, 20)\n\n setRaces(races)\n }\n })\n\n const updateRacesTimer = window.setInterval(() => {\n RemoveJumpedRaces()\n }, 30000)\n\n return () => {\n window.clearInterval(updateRacesTimer)\n raceSubscription.dispose()\n }\n }, [])\n\n if (!races || races.length === 0) {\n return null\n }\n\n return (\n \n \n
      \n \n   Next BoostPlus+ Races\n
      \n
      \n \n \n \n
      \n )\n}\n","import styled from '@emotion/styled'\nimport { font, colors } from '@mobi/component-library/Theme/Common'\nimport { gapX } from '@mobi/component-library/Utils/gap'\n\nconst desktopMediaQuery = `@media only screen and (min-width: 1280px)`\n\nexport const FooterStyled = styled.footer({\n fontFamily: font.family.primary,\n ...font.size.sm,\n\n backgroundColor: 'white',\n padding: '1.2rem 3.6rem 2rem',\n\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateAreas: `\n 'socials'\n 'gambling-helpline'\n 'rwwa-responsible-wagering'\n 'app-downloads'\n 'copyright'`,\n\n '> div': {\n padding: '1.6rem 0',\n },\n\n '> div > p': {\n ...font.size.md,\n margin: 0,\n\n // Leave gaps equivalent to an empty line\n ['&:not(:first-of-type):not(:last-of-type)']: {\n margin: '1em 0',\n },\n },\n\n a: {\n color: colors.studio[500],\n },\n\n [desktopMediaQuery]: {\n ...font.size.md,\n\n padding: '4.5rem 5.3125rem',\n columnGap: '125px',\n rowGap: '60px',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridTemplateAreas: `\n 'logo socials'\n 'gambling-helpline rwwa-responsible-wagering'\n 'copyright app-downloads'`,\n\n '> div': {\n padding: 0,\n },\n\n '> div > p': {\n ...font.size.lg,\n textAlign: 'left',\n },\n },\n})\n\nexport const LogoStyled = styled.div({\n gridArea: 'logo',\n display: 'none',\n borderBottom: `0.5px solid ${colors.neutral[300]}`,\n\n [desktopMediaQuery]: {\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n})\n\nexport const SocialsStyled = styled.div({\n gridArea: 'socials',\n display: 'flex',\n justifyContent: 'center',\n borderBottom: `0.5px solid ${colors.neutral[300]}`,\n\n a: {\n margin: '0rem 1rem',\n },\n\n [desktopMediaQuery]: {\n border: 'none',\n justifyContent: 'flex-end',\n },\n})\n\nexport const GamblingHelplineStyled = styled.div({\n gridArea: 'gambling-helpline',\n textAlign: 'center',\n borderBottom: `0.5px solid ${colors.neutral[300]}`,\n\n h1: {\n ...font.size.xl,\n fontWeight: font.weight.bold,\n marginTop: '1.6rem',\n },\n\n button: {\n marginTop: '2rem',\n },\n\n [desktopMediaQuery]: {\n border: 'none',\n textAlign: 'left',\n },\n})\n\nexport const RwwaResponsibleWageringStyled = styled.div({\n gridArea: 'rwwa-responsible-wagering',\n margin: '0 auto',\n\n p: {\n textAlign: 'left',\n\n '&:first-of-type': {\n marginTop: '1.6rem',\n },\n },\n})\n\nexport const DownloadAppStyled = styled.div({\n gridArea: 'app-downloads',\n\n h1: {\n ...font.size.lg,\n fontWeight: font.weight.bold,\n color: colors.neutral[900],\n textAlign: 'center',\n margin: '0 0 1.2rem',\n },\n\n 'span.links': [\n {\n display: 'flex',\n justifyContent: 'center',\n\n svg: {\n width: '10rem',\n maxHeight: '4rem',\n fill: 'black',\n },\n },\n gapX('1rem'),\n ],\n\n [desktopMediaQuery]: {\n h1: {\n textAlign: 'left',\n },\n\n 'span.links': [\n {\n justifyContent: 'flex-start',\n },\n gapX('2rem'),\n ],\n },\n})\n\nexport const CopyrightStyled = styled.div({\n gridArea: 'copyright',\n marginTop: '1.2rem',\n borderTop: `0.5px solid ${colors.neutral[300]}`,\n\n [desktopMediaQuery]: {\n marginTop: 0,\n border: 'none',\n },\n})\n","import React from 'react'\n\nexport const TabTouch = () => (\n \n \n \n \n \n \n \n \n \n \n)\n\nexport const AppleAppStore = () => (\n \n \n \n \n \n \n \n \n)\n\nexport const GooglePlayStore = () => (\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","import React, { type ButtonHTMLAttributes, type FC } from 'react'\nimport styled from '@emotion/styled'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nexport const SetDepositLimitButton: FC> = ({ onClick }) => (\n \n
      Set a Deposit Limit
      \n \n
      \n)\n\nconst ButtonStyled = styled(Button)({\n div: {\n marginRight: spacing.smx1,\n },\n})\n","import React, { type AnchorHTMLAttributes, type FC } from 'react'\n\ntype Props = AnchorHTMLAttributes\n\nexport const ExternalLink: FC> = ({ children, ...props }) => {\n return (\n \n {children}\n \n )\n}\n","import { useQueries, UseQueryResult } from 'react-query'\nimport { WebAppVersionDetails, WebAppVersions, webAppVersionsSchema } from '@mobi/api-types'\n\n/**\n * Retrieve available web app versions matching the specified major versions\n */\nexport const useVersions = (majorVersions: number[]) => {\n const results = useQueries(\n majorVersions.map(version => ({\n queryKey: `webapp/versions/${version}`,\n queryFn: () => queryFn(version),\n staleTime: 1000 * 60 /* 1 minute */,\n }))\n )\n\n if (results.some(result => result.isLoading)) {\n return {\n isLoading: true,\n isError: false,\n data: undefined,\n }\n }\n\n if (results.some(result => result.isError)) {\n return {\n isLoading: false,\n isError: true,\n data: undefined,\n }\n }\n\n return {\n isLoading: false,\n isError: false,\n data: merge(results),\n }\n}\n\nconst queryFn = async (majorVersion: number) => {\n const response = await fetch(`api/support/webapp/versions?majorVersion=${majorVersion}`)\n const json = await response.json()\n return webAppVersionsSchema.parse(json)\n}\n\n/**\n * Merge versions from multiple queries into a single dictionary\n */\nconst merge = (\n responses: UseQueryResult[]\n): Record => {\n return responses\n .flatMap(response => response.data || [])\n .reduce((accumulator, data) => {\n return Object.assign(accumulator, data.versions)\n }, {})\n}\n","import { useMemo } from 'react'\nimport type { WebAppVersionDetails as VersionDetails } from '@mobi/api-types'\nimport { dayjs } from '@mobi/utils/date'\n\nexport type LatestVersion = VersionDetails & {\n previousVersions: VersionDetails[]\n}\n\n/**\n * Provide a search function built off a precomputed index of the latest versions by git ref name\n */\nexport const useVersionsSearch = (webAppVersions: Record) => {\n const searchIndex = useMemo(() => {\n const versions = Object.values(webAppVersions)\n return getLatestVersionsByGitRefName(versions)\n }, [webAppVersions])\n\n return {\n searchLatest: (value: string) => {\n return filterBySearchTerm(searchIndex, value).sort(sortByReleaseDateDescending)\n },\n }\n}\n\n/**\n * Build search index of versions\n *\n * Example:\n * {\n * \"searchIndex\": {\n * \"mobi-100-feature-1\": {\n * \"version\": \"version-123.2-mobi-100-feature-1\",\n * \"gitRefName\": \"mobi-100-feature-1\",\n * \"previousVersions\": [\"version-123.2-mobi-100-feature-1\"]\n * },\n * \"mobi-200-feature-2\": {\n * \"version\": \"version-123.3-mobi-200-feature-2\",\n * \"gitRefName\": \"mobi-100-feature-2\",\n * \"previousVersions\": []\n * }\n * }\n * }\n */\nconst getLatestVersionsByGitRefName = (versions: VersionDetails[]) => {\n const groups: Record = {}\n\n for (const item of versions) {\n const { gitRefName, releaseDate } = item\n const existing = groups[gitRefName]\n if (existing) {\n if (releaseDate > existing.releaseDate) {\n groups[gitRefName] = {\n ...item,\n previousVersions: existing.previousVersions.concat(existing).filter(v => v !== item),\n }\n } else {\n groups[gitRefName].previousVersions.push(item)\n }\n } else {\n groups[gitRefName] = { ...item, previousVersions: [] }\n }\n }\n\n return Object.values(groups)\n}\n\nconst filterBySearchTerm = (versions: LatestVersion[], filter: string) => {\n if (filter === '') return versions\n return versions.filter(entry => {\n const { version, gitRefName, username } = entry\n const searchString = [version, gitRefName, username].join(' ').toLocaleLowerCase()\n return searchString.trim().includes(filter.toLocaleLowerCase())\n })\n}\n\nexport const sortByReleaseDateDescending = (a: VersionDetails, b: VersionDetails) =>\n dayjs(b.releaseDate).diff(dayjs(a.releaseDate))\n","import styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const VersionSelectorHeader = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginBottom: '1rem',\n})\n\nexport const VersionSelectorListStyled = styled.ol<{ addSpacing?: boolean }>(\n {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n\n ...font.size['lg'],\n },\n ({ addSpacing = false }) => {\n if (addSpacing) {\n return {\n '& li:not(:last-child)': {\n marginBottom: spacing.sm,\n },\n }\n }\n return {}\n }\n)\n\ntype VersionSelectorListItemProps = {\n highlightItem?: boolean\n}\n\nexport const VersionSelectorListItemStyled = styled.li(\n {\n display: 'flex',\n flexDirection: 'column',\n borderRadius: radius.lgx1,\n boxShadow: 'none',\n backgroundColor: colors.neutral['100'],\n padding: '1.6rem',\n },\n ({ highlightItem = false }) => {\n if (highlightItem) {\n return {\n border: `0.1rem solid ${colors.lavender[500]}`,\n }\n }\n return {}\n }\n)\n\nexport const BadgeStyled = styled.span({\n backgroundColor: colors.lavender[500],\n ...font.size['lg'],\n borderRadius: radius.lgx3,\n color: colors.neutral['100'],\n padding: '0.2rem 0.8rem',\n})\n\nexport const AccordionStyled = styled.div({\n marginTop: '1rem',\n})\n","import React, { type FC, useMemo, useState } from 'react'\nimport { dayjs } from '@mobi/utils/date'\nimport { Input, Accordion } from '@mobi/component-library/Common/V2'\nimport { useVersions } from '../Hooks/useVersions'\nimport type { WebAppVersionDetails } from '@mobi/api-types'\nimport {\n LatestVersion,\n useVersionsSearch,\n sortByReleaseDateDescending,\n} from '../Hooks/useVersionsSearch'\nimport {\n VersionSelectorHeader,\n VersionSelectorListStyled,\n VersionSelectorListItemStyled,\n BadgeStyled,\n AccordionStyled,\n} from './VersionSelector.styled'\n\nconst GITLAB_TABTOUCH_MOBI_PROJECT_URL = `https://gitlab.com/rwwa/channels/tabtouch/tabtouch-mobi/`\n\ntype VersionSelectorProps = {\n currentVersion: string\n currentMajorVersion: number\n}\n\nexport const VersionSelector: FC = ({\n currentVersion,\n currentMajorVersion,\n}) => {\n const results = useVersions([\n currentMajorVersion,\n currentMajorVersion + 1,\n currentMajorVersion - 1,\n currentMajorVersion - 2,\n ])\n const { searchLatest } = useVersionsSearch(results.data || {})\n const [filterValue, setFilterValue] = useState('')\n\n if (results.isLoading) {\n return
      Loading...
      \n }\n\n return (\n <>\n \n setFilterValue(e.target.value)}\n />\n \n\n \n {searchLatest(filterValue).map(searchResult => (\n \n ))}\n \n \n )\n}\n\ntype VersionSelectorListItemProps = {\n details: LatestVersion\n isCurrentVersion: boolean\n}\n\nconst LatestVersionSelectorListItem: FC = ({\n details,\n isCurrentVersion,\n}) => {\n const { version, gitRefName, releaseDate, previousVersions } = details\n return (\n \n
      \n Branch: \n
      \n
      \n Version: \n
      \n \n \n \n {previousVersions.length > 1 && }\n \n \n
      \n )\n}\n\nconst VersionDetails: FC<{ details: WebAppVersionDetails }> = ({ details }) => {\n const { username, releaseDate, gitCommitSha, gitPipelineId, gitPipelineIid } = details\n return (\n \n
      \n Username: {username}\n
      \n
      \n Release Date: \n
      \n
      \n Gitlab Commit: \n
      \n
      \n Gitlab Pipeline:{' '}\n \n
      \n
      \n )\n}\n\nconst BranchName: FC<{ gitRefName: string }> = ({ gitRefName }) => {\n return gitRefName === 'master' ? (\n master\n ) : (\n {gitRefName}\n )\n}\n\nconst Version: FC<{ version: string; releaseDate: string }> = ({ version, releaseDate }) => {\n const versionOnly = version.split('-')[0]\n const releaseDateFromNow = dayjs(releaseDate).fromNow()\n return (\n \n \n {versionOnly}\n {' '}\n ({releaseDateFromNow})\n \n )\n}\n\nconst PreviousVersions: FC<{ previousVersions: WebAppVersionDetails[] }> = ({\n previousVersions,\n}) => {\n const sortedPreviousVersions = useMemo(\n () => previousVersions.sort(sortByReleaseDateDescending).slice(0, 10),\n [previousVersions]\n )\n\n const header = previousVersions.length > 11 ? `Previous Versions (max. 10)` : `Previous Versions`\n\n return (\n <>\n

      {header}

      \n \n {sortedPreviousVersions.map(otherVersion => (\n
    • \n \n \n }\n >\n \n \n \n
    • \n ))}\n
      \n \n )\n}\n\nconst ReleaseDate: FC<{ value: string }> = ({ value }) => {\n const formattedDate = dayjs(value).format('MMM D, YYYY h:mm A')\n return {formattedDate}\n}\n\nconst GitLabCommit: FC<{ gitCommitSha: string }> = ({ gitCommitSha }) => {\n const shortSha = gitCommitSha.slice(0, 8)\n return (\n \n \n {shortSha}\n \n \n )\n}\n\nconst GitLabPipeline: FC<{\n gitPipelineId: string\n gitPipelineIid: string\n}> = ({ gitPipelineId, gitPipelineIid }) => {\n return (\n \n \n {gitPipelineIid}\n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport cookies from 'js-cookie'\n\nconst COOKIE_NAME = 'webapp-version'\n\nexport const InternalVersionNumber = ({\n version,\n onClick,\n}: {\n version: string\n onClick?: VoidFunction\n}) => {\n const onRevertVersion = () => {\n cookies.remove(COOKIE_NAME)\n window.location.reload()\n }\n return (\n <>\n {cookies.get(COOKIE_NAME) ? (\n <>\n \n Version {version}\n {' '}\n \n × Revert\n \n \n ) : (\n \n Version {version}\n \n )}\n \n )\n}\n\nconst InternalVersionNumberStyled = styled.span({\n display: 'inline-block',\n backgroundColor: 'black',\n color: 'white',\n margin: '0.2rem 0',\n borderRadius: '1rem',\n padding: '0.6rem',\n})\n","import React from 'react'\nimport { OS } from '@mobi/web-native-comms/web'\n\nexport function UnbundlingStatusDot() {\n return OS === 'ios' && location.protocol === 'customscheme:' ? (\n \n ) : null\n}\n\nfunction StatusDot({ color, radius }: { color: string; radius: number }) {\n return (\n \n \n \n )\n}\n","import React, { type FC } from 'react'\nimport { Constants } from '@mobi/settings'\nimport { isReactNativeApp as isNative } from '@mobi/web-native-comms/web'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Tray } from '@mobi/component-library/Overlays/Tray'\nimport {\n FooterStyled,\n LogoStyled as Logo,\n SocialsStyled as Socials,\n GamblingHelplineStyled as GamblingHelpline,\n RwwaResponsibleWageringStyled as RwwaResponsibleWagering,\n DownloadAppStyled as DownloadApp,\n CopyrightStyled as Copyright,\n} from './Footer.styles'\nimport {\n TabTouch as TabTouchLogo,\n AppleAppStore as AppleAppStoreLogo,\n GooglePlayStore as GooglePlayStoreLogo,\n} from './Logos'\nimport { SetDepositLimitButton } from './SetDepositLimitButton'\nimport { ExternalLink } from './ExternalLink'\nimport { VersionSelector } from './VersionSelector'\nimport { useServerConfig } from '@core/Data/ServerConfig/useServerConfig'\nimport { fullClientVersion } from '@core/Utils/clientVersion'\nimport { InternalVersionNumber } from '../InternalVersionNumber'\nimport { UnbundlingStatusDot } from './UnbundlingStatusDot'\n\ntype Props = {\n /** Function to track analytics events for internal link navigation */\n trackInternalNavigation: (destination: string) => void\n /** Function to track analytics events for exit link navigation */\n trackExitNavigation: (destination: string) => void\n /** Handler for 'set deposit limit' button click events */\n onSetDepositLimitClick: VoidFunction\n /** Handler for copyright click events */\n onCopyrightClick: VoidFunction\n}\n\nconst versionWithPipelineId = CI_PIPELINE_ID\n ? `${fullClientVersion} (${CI_PIPELINE_ID})`\n : fullClientVersion\n\nexport const Footer: FC = ({\n trackInternalNavigation,\n trackExitNavigation,\n onSetDepositLimitClick,\n onCopyrightClick,\n}) => {\n const [isTrayOpen, setIsTrayOpen] = React.useState(false)\n const serverConfig = useServerConfig()\n const isInternal = serverConfig?.isInternalRequest ?? false\n\n return (\n \n \n \n \n\n \n trackExitNavigation('instagram')}\n data-msg-publish='nav.exit'\n data-msg-data='instagram'\n data-tid-home-instagram\n >\n \n \n trackExitNavigation('facebook')}\n data-msg-publish='nav.exit'\n data-msg-data='facebook'\n data-tid-home-facebook\n >\n \n \n trackExitNavigation('twitter')}\n data-msg-publish='nav.exit'\n data-msg-data='twitter'\n data-tid-home-twitter\n >\n \n \n \n\n \n

      WHAT ARE YOU REALLY GAMBLING WITH?

      \n\n

      \n For free and confidential support call{' '}\n \n \n {Constants.GamblingHelpPhoneNumber}\n \n {' '}\n or visit{' '}\n \n trackExitNavigation('gambling-help-online')}\n >\n gamblinghelponline.org.au\n \n \n

      \n\n {onSetDepositLimitClick && }\n
      \n\n \n

      \n BetStop - the National Self-Exclusion Register™ is a free service for people who\n want to exclude from all Australian online wagering providers. Visit{' '}\n trackExitNavigation('bet-stop')}>\n www.betstop.gov.au\n {' '}\n for more information.\n

      \n

      \n RWWA supports{' '}\n trackInternalNavigation('responsible-wagering')}\n >\n Responsible Wagering\n \n

      \n

      \n RWWA's gambling operations are governed by its{' '}\n trackExitNavigation('responsible-gambling-code-of-practice')}\n >\n Responsible Gambling Code of Practice\n {' '}\n and for South Australian residents by the{' '}\n trackExitNavigation('responsible-gambling-code-of-practice-sa')}\n >\n South Australian Responsible Gambling Code of Practice.\n \n

      \n
      \n\n {!isNative && (\n \n

      Download our app

      \n \n trackExitNavigation('apple-app-store')}\n >\n \n \n trackExitNavigation('android-play-store')}\n >\n \n \n \n
      \n )}\n\n \n

      \n Gamble responsibly. 18+ only.{' '}\n © Copyright RWWA {new Date().getFullYear()}\n
      \n {!isInternal && (\n \n v{versionWithPipelineId}\n \n )}\n {isInternal && (\n setIsTrayOpen(true)}\n />\n )}\n
      \n {isInternal && Toolbox}\n

      \n
      \n\n {isTrayOpen && (\n setIsTrayOpen(false)}\n >\n \n \n )}\n
      \n )\n}\n","import React, { useCallback } from 'react'\nimport { sendToNative } from '@mobi/web-native-comms/web'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nimport { Footer } from './Components/Footer'\nimport { useHistory } from 'react-router'\nimport { useLogon } from '@core/Utils/hooks'\n\nexport const HomeFooter: React.FC = () => {\n const history = useHistory()\n const { isLoggedIn } = useLogon()\n const [showDeveloperOptions, setShowDeveloperOptions] = React.useState(0)\n\n const onSetDepositLimitClick = useCallback(() => {\n if (isLoggedIn) {\n history.push(`/#account/deposit-limits`)\n } else {\n window.open('https://help.tabtouch.com.au/knowledge-base/setting-up-your-deposit-limit/')\n }\n }, [history, isLoggedIn])\n\n const onVersionNumberClick = useCallback(() => {\n if (!isReactNativeApp) {\n return\n }\n\n if (showDeveloperOptions >= 4) {\n sendToNative('REQUEST_NATIVE_NAVIGATION', { location: 'Developer Options' })\n setShowDeveloperOptions(0)\n } else {\n setShowDeveloperOptions(curr => ++curr)\n }\n }, [showDeveloperOptions])\n\n return (\n trackEvent('nav.nav', { destination })}\n trackExitNavigation={destination => trackEvent('nav.exit', { destination })}\n onSetDepositLimitClick={onSetDepositLimitClick}\n onCopyrightClick={onVersionNumberClick}\n />\n )\n}\n","import styled from '@emotion/styled'\nimport { fontFamilies } from '@core/Settings'\nimport { hexColors } from '@mobi/settings'\nimport { SilkImageStyled } from '@core/Components/SilkImage/SilkImage.styles'\nimport {\n HomeScrollableContainerStyled,\n HomeScrollHeaderStyled,\n HOME_CSS_SHARED_VALUES,\n} from '@core/Areas/Home/Home.styles'\n\nexport const silkHeight = 30\n\nexport const Wrapper = styled('div')({\n backgroundColor: '#512D6D',\n background: `linear-gradient(102deg, #512D6D 0%, #512D6D 45%, #814AAE 45%, #814AAE 100%)`,\n position: 'relative',\n minHeight: '2.5rem',\n marginTop: '0.5rem',\n padding: '1rem 0 1rem 0',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n})\n\nexport const SubheadingContainer = styled('div')({\n alignContent: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n margin: '0.5rem 1rem 0 1rem',\n})\n\nexport const HeaderContainer = styled(HomeScrollHeaderStyled)({\n flex: 1,\n minHeight: '2.5rem',\n justifyContent: 'space-between',\n flexBasis: '100%',\n})\n\nexport const Header = styled('div')({\n fontSize: '1.6rem',\n minHeight: '2.6rem',\n paddingLeft: '2.5rem',\n fontFamily: fontFamilies.brand,\n fontWeight: 'bold',\n fontStyle: 'italic',\n textTransform: 'uppercase',\n textShadow: `${hexColors.charCoal} 0.1rem 0.1rem 0.5rem`,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 0 top 0',\n backgroundImage: `url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyMyAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2RfNjcwXzM0MikiPg0KPHBhdGggZD0iTTE5IDEyLjQ2NTZDMTkgMTYuNjM3NSAxNS42MzY3IDIwLjAwMDggMTEuNSAyMC4wMDA4QzcuMzYzMjggMjAuMDAwOCA0IDE2LjYzNjMgNCAxMi41MDA4QzQgMTAuMjA5IDUuMDg2NzIgOC4zMjg4OSA2LjEzMTY0IDcuMjYyNDhDNi43MTY0MSA2LjYxNDA0IDcuNzUgNy4wMjQyIDcuNzUgNy44NzE4NVYxMS4yMTE3QzcuNzUgMTIuNTg1NSA4Ljg0MjU4IDEzLjczMTIgMTAuMjE3MiAxMy43NDg0QzExLjYxMzMgMTMuNzcwMyAxMi43NSAxMi42NDE0IDEyLjc1IDExLjI1MDhDMTIuNzUgNy44MTMyNiA1LjkxMDE2IDcuNDk2MDcgMTAuNzEyOSAwLjQyMjYzNUMxMS4yNDAyIC0wLjM0NzY3NyAxMi40Mzc1IDAuMDAxOTMyMDggMTIuNDM3NSAwLjkzMTYyQzEyLjQwMjMgNC45NjE3IDE5IDUuODQ4NDIgMTkgMTIuNDY1NloiIGZpbGw9IiNFMzg3MDYiLz4NCjwvZz4NCjxkZWZzPg0KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzY3MF8zNDIiIHg9IjAiIHk9IjAiIHdpZHRoPSIyMyIgaGVpZ2h0PSIyOC4wMDA3IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPg0KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+DQo8ZmVPZmZzZXQgZHk9IjQiLz4NCjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIiLz4NCjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPg0KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMjUgMCIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfNjcwXzM0MiIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfNjcwXzM0MiIgcmVzdWx0PSJzaGFwZSIvPg0KPC9maWx0ZXI+DQo8L2RlZnM+DQo8L3N2Zz4NCg==)`,\n maxWidth: 'calc(100% - 8rem)',\n '@media (max-width: 350px)': {\n maxWidth: 'calc(100% - 12rem)',\n },\n})\n\nexport const HeaderContent = styled('span')({\n color: '#fdfdfc',\n lineHeight: '2.6rem', // must match minHeight of TiltedScrollHeader\n letterSpacing: '0.1rem',\n display: 'inline-block',\n})\n\nexport const HomeTrendingBetsScrollableContainerStyled = styled(HomeScrollableContainerStyled)({\n padding: '1rem',\n backgroundColor: 'none',\n flex: 1,\n})\n\nexport const TrendingBetsListItemStyled = styled('a')({\n background: hexColors.white,\n boxShadow: HOME_CSS_SHARED_VALUES.boxShadow,\n color: hexColors.black,\n display: 'inline-block',\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n alignItems: 'center',\n fontFamily: fontFamilies.default,\n fontSize: '1.1rem',\n margin: '0',\n marginRight: '1rem',\n padding: '.3rem .6rem',\n position: 'relative',\n textAlign: 'left',\n textDecoration: 'none',\n verticalAlign: 'middle',\n height: '13rem',\n width: '9.8rem',\n minWidth: '9.8rem',\n\n '&:hover': {\n backgroundColor: 'none',\n },\n\n 'a:last-of-type': {\n marginRight: '0',\n },\n})\n\nexport const TrendingBetsListItemContainer = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: '100%',\n})\n\nexport const TrendingDividendsStyled = styled('div')({\n fontWeight: 'bold',\n display: 'flex',\n justifyContent: 'space-between',\n})\n\nexport const TrendingWinDividendStyled = styled('span')({\n textAlign: 'left',\n})\n\nexport const TrendingPlaceDividendStyled = styled(TrendingWinDividendStyled)({\n textAlign: 'right',\n})\n\nexport const TrendingBetNameStyled = styled('div')({\n fontWeight: 'normal',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n})\n\nexport const TrendingRaceNameStyled = styled(TrendingBetNameStyled)({\n fontSize: '1.1rem',\n})\n\nexport const TrendingRacerStyled = styled(TrendingRaceNameStyled)({\n color: '#666666',\n marginBottom: '-2px',\n})\n\nexport const TrendingBetEventRaceTimeStyled = styled('div')({\n justifyContent: 'space-between',\n display: 'flex',\n fontSize: '1.1rem',\n\n '& > span': {\n display: 'flex',\n alignItems: 'center',\n\n 'div:last-of-type': {\n paddingLeft: '0.2rem',\n },\n },\n})\n\nexport const TrendingBetGreyhoundsSilkImageStyled = styled(SilkImageStyled)({\n marginTop: '.4rem',\n})\n\nexport const TrendingBetSilkImageContainerStyled = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n background: '#eee',\n padding: '.4rem .8rem',\n height: '3.6rem',\n width: '8.2rem',\n borderRadius: '.8rem',\n})\n","import { ImageUrlWithSizes, ImageUrlWithSize, ImageSize } from '@core/Data/Racing'\nimport { formatDateStringWithoutChangingTimezone } from '@mobi/utils'\n\ntype Sizes = 'small' | 'large' | 'larger' | 'largest'\n\nexport interface BuildImageUrlWithSizesProps {\n meetingId: string\n meetingDate: string\n raceNo: number\n isTrots: boolean\n}\n\nexport interface BuildImageUrlWithSizeProps extends BuildImageUrlWithSizesProps {\n imageSize: Sizes\n}\n\nexport const RaceSmall: ImageSize = { width: 25, height: 30, y: 0 }\nexport const RaceLarge: ImageSize = { width: 35, height: 42, y: 0 }\nexport const RaceLarger: ImageSize = { width: 45, height: 54, y: 0 }\nexport const RaceLargest: ImageSize = { width: 55, height: 77, y: 0 }\nexport const TrotSmall: ImageSize = { width: 24, height: 18, y: -1 }\nexport const TrotLarge: ImageSize = { width: 36, height: 36, y: -1 }\nexport const TrotLarger: ImageSize = { width: 48, height: 48, y: -1 }\nexport const TrotLargest: ImageSize = { width: 60, height: 60, y: -1 }\n\nexport function getSize(isTrots: boolean, imageSize: Sizes): ImageSize {\n const sizes: Record = {\n RaceSmall,\n RaceLarge,\n RaceLarger,\n RaceLargest,\n TrotSmall,\n TrotLarge,\n TrotLarger,\n TrotLargest,\n }\n\n return (\n sizes[\n `${isTrots ? 'Trot' : 'Race'}${imageSize.charAt(0).toUpperCase() + imageSize.slice(1)}`\n ] || RaceSmall\n )\n}\n\nexport function getImageUrlWithSize({\n meetingId,\n meetingDate,\n raceNo,\n isTrots,\n imageSize,\n}: BuildImageUrlWithSizeProps): ImageUrlWithSize {\n return {\n url: getImageSizeUrl({ meetingId, meetingDate, raceNo, isTrots, imageSize }),\n size: getSize(isTrots, imageSize),\n }\n}\n\nexport function getImageUrlWithSizes({\n meetingId,\n meetingDate,\n raceNo,\n isTrots,\n}: BuildImageUrlWithSizesProps): ImageUrlWithSizes {\n return {\n small: getImageUrlWithSize({ meetingId, meetingDate, raceNo, isTrots, imageSize: 'small' }),\n large: getImageUrlWithSize({ meetingId, meetingDate, raceNo, isTrots, imageSize: 'large' }),\n larger: getImageUrlWithSize({ meetingId, meetingDate, raceNo, isTrots, imageSize: 'larger' }),\n largest: getImageUrlWithSize({ meetingId, meetingDate, raceNo, isTrots, imageSize: 'largest' }),\n }\n}\n\n// /Image/GetSilkSpriteWithSizes?meetingId=CR&meetingDate=03%2F30%2F2020&raceNo=5&isTrots=False&size=large\n\nexport function getImageSizeUrl({\n meetingId,\n meetingDate,\n raceNo,\n isTrots,\n imageSize,\n}: BuildImageUrlWithSizeProps): string {\n const urlDate = encodeURIComponent(\n formatDateStringWithoutChangingTimezone(meetingDate, 'MM/DD/YYYY')\n )\n\n return `/Image/GetSilkSpriteWithSizes?meetingId=${meetingId}&meetingDate=${urlDate}&raceNo=${raceNo}&isTrots=${isTrots}&size=${imageSize}`\n}\n","export enum RacingCode {\n Races = 'Races',\n Dogs = 'Dogs',\n Trots = 'Trots',\n}\n\nexport interface StructuredSearchTrack {\n id: string\n name: string\n location: string\n contestType: string\n hitCount: number\n isAustralian: boolean\n isDuplicate: boolean\n}\n\nexport interface StructuredSearchAggregations {\n tracks: StructuredSearchTrack[]\n}\nexport interface RawStructuredSearchResults {\n statistics: {\n count: number\n acceptorCount: number\n hitCount: number\n }\n results: StructuredSearchResult[]\n aggregations: StructuredSearchAggregations\n}\n\nexport interface StructuredSearchResult {\n id: string\n metadata: Metadata\n acceptor: AcceptorDetail\n}\n\ninterface Metadata {\n score?: number\n}\n\nexport interface AcceptorDetail {\n race: RaceDetail\n name: string\n numberOrBox: number\n driverName: string\n trainerName: string\n riderName: string\n scratchedStatus?: string\n fixedOddsPrices?: Prices | null\n}\n\nexport interface RaceDetail {\n fixture: FixtureDetail\n name: string\n advertisedStartTime: string\n number: number\n distance: number\n class: string\n status?: string\n isStartTimeRelevant: boolean\n}\n\ninterface FixtureDetail {\n contestType: RacingCode\n date: string\n name: string\n id: string\n}\n\ninterface Prices {\n isFavourite: boolean\n win: Price\n place: Price\n}\n\ninterface Price {\n isValid: boolean\n dividend: number | null\n dividendChange: number | null\n isFirming: boolean | null\n calculationTime: Date | null\n}\n","import React from 'react'\nimport {\n silkHeight,\n TrendingBetsListItemStyled,\n TrendingBetsListItemContainer,\n TrendingBetNameStyled,\n TrendingBetEventRaceTimeStyled,\n TrendingWinDividendStyled,\n TrendingPlaceDividendStyled,\n TrendingBetGreyhoundsSilkImageStyled,\n TrendingBetSilkImageContainerStyled,\n TrendingRacerStyled,\n TrendingRaceNameStyled,\n TrendingDividendsStyled,\n} from './TrendingBets.styles'\nimport { dayjs } from '@mobi/utils'\nimport { getNextRaceTimeDisplayOptions, buildToteRaceUri } from '@core/Areas/Racing/helpers'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { TimeToJumpComponent } from '@core/Areas/NextEvents/Components/TimeToJump/TimeToJump'\nimport { BuildImageUrlWithSizesProps, getImageUrlWithSizes } from '@core/Components/SilkImage/utils'\nimport { AcceptorDetail, RacingCode } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport { SilkImageStyled } from '@core/Components/SilkImage/SilkImage.styles'\nimport { trackTrendingBetSelected } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { IconTypes } from './TrendingBetsList'\nimport { TrendingBetFilterEnum } from './TrendingBetsFilter'\nimport { AcceptorResult, TrendingBet } from '../types'\n\nexport function TrendingBetTile({\n bet,\n index,\n sorting,\n acceptors,\n}: {\n bet: TrendingBet\n index: number\n sorting: TrendingBetFilterEnum\n acceptors: AcceptorResult\n}): JSX.Element | null {\n const { acceptor } = acceptors[bet.acceptorLegIds[0].acceptorId]\n const { race } = acceptor\n const nextEvent = getNextRaceTimeDisplayOptions(acceptor.race.advertisedStartTime)\n const [shouldShowDay, setShouldShowDay] = React.useState(() => nextEvent.showDay)\n\n React.useEffect(() => {\n const interval = window.setInterval(() => {\n const { showDay } = getNextRaceTimeDisplayOptions(race.advertisedStartTime)\n setShouldShowDay(current => (showDay !== current ? showDay : current))\n }, 1_000)\n\n return () => window.clearInterval(interval)\n }, [race.advertisedStartTime])\n\n const someParams = {\n meetingId: race.fixture.id,\n raceNo: race.number,\n isTrots: race.fixture.contestType === RacingCode.Trots,\n meetingDate: race.fixture.date,\n }\n\n const href = buildToteRaceUri({\n ...someParams,\n raceNumber: race.number,\n starter: acceptor.numberOrBox,\n source: 'trending-bets-single',\n })\n\n const startTime = new Date(race.advertisedStartTime)\n\n const silkProps = computeSilkProps(\n someParams,\n acceptor.numberOrBox,\n acceptor.race.fixture.contestType\n )\n\n const name = `${acceptor.numberOrBox} - ${acceptor.name}`\n\n const winDividends = !acceptor.fixedOddsPrices?.win.isValid\n ? '-'\n : `W:$${acceptor.fixedOddsPrices.win?.dividend?.toFixed(2)}`\n const placeDividends = !acceptor.fixedOddsPrices?.place.isValid\n ? ' -'\n : ` P:$${acceptor.fixedOddsPrices.place?.dividend?.toFixed(2)}`\n\n let racer = ''\n switch (race.fixture.contestType) {\n case RacingCode.Races:\n racer = 'J: ' + acceptor.riderName\n break\n case RacingCode.Dogs:\n racer = 'T: ' + acceptor.trainerName\n break\n default:\n racer = 'D: ' + acceptor.driverName\n break\n }\n\n const raceName = `R${race.number} ${race.fixture.name}`\n\n return (\n handleClick(bet, acceptor, index, sorting)}\n href={href}\n >\n \n {name}\n\n \n {winDividends}\n {placeDividends}\n \n\n \n {silkProps.isDogsSilk ? (\n \n ) : (\n \n )}\n \n\n {racer}\n {raceName}\n\n \n \n \n \n \n \n )\n}\n\nexport const computeSilkProps = (\n someParams: BuildImageUrlWithSizesProps,\n numberOrBox: number,\n contestType: RacingCode\n) => {\n const imageUrl = getImageUrlWithSizes(someParams).larger\n const url = imageUrl.url\n let { height, width } = imageUrl.size\n const ratio = silkHeight / height\n width *= ratio\n height *= ratio\n\n const baseWidth = width\n const isDogsSilk = contestType === RacingCode.Dogs\n const xOffset = numberOrBox - 1\n return { url, height, width, isDogsSilk, xOffset, baseWidth }\n}\n\nfunction handleClick(\n bet: TrendingBet,\n acceptor: AcceptorDetail,\n index: number,\n sorting: TrendingBetFilterEnum\n) {\n const timeToJump = dayjs(acceptor.race.advertisedStartTime).diff(dayjs(), 'second')\n\n trackTrendingBetSelected({\n bet: bet,\n acceptor,\n timeToJump,\n index,\n sorting,\n trendingType: 'single',\n })\n}\n","import { HOME_CSS_SHARED_VALUES } from '@core/Areas/Home/Home.styles'\nimport { SilkImageStyled } from '@core/Components/SilkImage/SilkImage.styles'\nimport { fontFamilies } from '@core/Settings'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const silkHeight = 13\n\nexport const TrendingBetCard = styled('div')({\n background: hexColors.white,\n boxShadow: HOME_CSS_SHARED_VALUES.boxShadow,\n color: hexColors.black,\n borderRadius: HOME_CSS_SHARED_VALUES.borderRadius,\n alignItems: 'center',\n fontFamily: fontFamilies.default,\n fontSize: '1.2rem',\n fontWeight: 'normal',\n lineHeight: '1.3rem',\n margin: '0',\n marginRight: '1rem',\n padding: '0',\n position: 'relative',\n textAlign: 'left',\n textDecoration: 'none',\n verticalAlign: 'middle',\n width: '19.7rem',\n height: '16.8rem',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n})\n\n// HEADER\nexport const TrendingBetCardHeader = styled('div')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderRadius: '.7rem .7rem 0 0',\n backgroundColor: '#eee',\n width: '19.7rem',\n height: '2.8rem',\n padding: '.6rem .96rem .6rem .4rem',\n boxSizing: 'border-box',\n})\n\nexport const TrendingBetCardHeaderLink = styled('a')({\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n color: '#512D6D',\n lineHeight: '1.7rem',\n marginLeft: '.7rem',\n width: '10.9rem',\n maxWidth: '10.9rem',\n textDecoration: 'none',\n flex: '1',\n})\n\n// BODY\nexport const TrendingBetCardBody = styled('div')({\n height: '11rem',\n display: 'flex',\n flexDirection: 'column',\n lineHeight: '1.3rem',\n padding: '10px 10px 0 10px',\n})\n\nexport const TrendingBetCardAcceptor = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n background: 'white',\n height: '1.8rem',\n width: '17.7rem',\n color: '#888A84',\n})\n\nexport const TrendingBetCardSilkAndName = styled('div')({\n display: 'flex',\n})\n\nexport const TrendingBetCardSilkImage = styled(SilkImageStyled)({\n display: 'inline-block',\n})\n\nexport const TrendingBetCardGreyhoundsSilkImage = styled(TrendingBetCardSilkImage)({\n color: 'red',\n})\n\nexport const TrendingBetCardSameRaceMultiAcceptorName = styled('span')({\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n display: 'inline-block',\n marginLeft: '10px',\n maxWidth: '12rem',\n})\n\nexport const TrendingBetCardSameRaceMultiAcceptorPosition = styled('span')({\n display: 'inline-block',\n})\n\n// FOOTER\nexport const TrendingBetCardFooter = styled('div')({\n height: '5rem',\n fontWeight: '700',\n fontSize: '1.4rem',\n lineHeight: '1.6rem',\n textAlign: 'center',\n width: '17.7rem',\n padding: '1rem',\n})\n\nexport const TrendingBetCardQuickbetButton = styled('a')({\n backgroundColor: '#689F38',\n color: 'white',\n width: '16rem',\n display: 'inline-block',\n borderRadius: '.5rem',\n padding: '1rem',\n textDecoration: 'none',\n})\n","import React from 'react'\nimport { dayjs } from '@mobi/utils'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { TimeToJumpComponent } from '@core/Areas/NextEvents/Components/TimeToJump/TimeToJump'\nimport { BuildImageUrlWithSizesProps, getImageUrlWithSizes } from '@core/Components/SilkImage/utils'\nimport { RaceDetail, RacingCode } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport {\n buildSameRaceMultiRaceUri,\n getNextRaceTimeDisplayOptions,\n} from '@core/Areas/Racing/helpers'\nimport { trackTrendingBetSelected } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { TrendingBetFilterEnum } from './TrendingBetsFilter'\nimport { IconTypes } from './TrendingBetsList'\nimport {\n silkHeight,\n TrendingBetCard,\n TrendingBetCardHeader,\n TrendingBetCardHeaderLink,\n TrendingBetCardBody,\n TrendingBetCardAcceptor,\n TrendingBetCardGreyhoundsSilkImage,\n TrendingBetCardSilkImage,\n TrendingBetCardSameRaceMultiAcceptorName,\n TrendingBetCardSameRaceMultiAcceptorPosition,\n TrendingBetCardFooter,\n TrendingBetCardQuickbetButton,\n TrendingBetCardSilkAndName,\n} from './TrendingSameRaceMultiBetTile.styles'\nimport { AcceptorResult, TrendingBet } from '../types'\n\nexport function TrendingSameRaceMultiBetTile({\n bet,\n index,\n sorting,\n acceptors,\n}: {\n bet: TrendingBet\n index: number\n sorting: TrendingBetFilterEnum\n acceptors: AcceptorResult\n}): JSX.Element | null {\n const betAcceptorLegIds = bet.acceptorLegIds\n\n // all acceptors are on the Same Race, so just pick first\n const race = acceptors[betAcceptorLegIds[0].acceptorId].acceptor.race\n\n const nextEvent = getNextRaceTimeDisplayOptions(race.advertisedStartTime)\n\n const [shouldShowDay, setShouldShowDay] = React.useState(() => nextEvent.showDay)\n\n React.useEffect(() => {\n const interval = window.setInterval(() => {\n const { showDay } = getNextRaceTimeDisplayOptions(race.advertisedStartTime)\n setShouldShowDay(current => (showDay !== current ? showDay : current))\n }, 1_000)\n\n return () => window.clearInterval(interval)\n }, [race.advertisedStartTime])\n\n try {\n const someParams = {\n meetingDate: race.fixture.date,\n meetingId: race.fixture.id,\n raceNumber: race.number,\n raceNo: race.number,\n isTrots: race.fixture.contestType === RacingCode.Trots,\n }\n const acceptorsForUrl = betAcceptorLegIds\n .map(\n acceptor =>\n `${acceptors[acceptor.acceptorId].acceptor.numberOrBox}-${parseInt(acceptor.legType)}`\n )\n .join(',')\n\n const linkToRace = buildSameRaceMultiRaceUri({ ...someParams })\n const linkToRaceWithSelection = buildSameRaceMultiRaceUri({\n ...someParams,\n starters: acceptorsForUrl,\n source: 'trending-bets-srm',\n })\n\n const startTime = new Date(race.advertisedStartTime)\n\n const acceptorData = betAcceptorLegIds\n .map(acceptorLegId => {\n const acceptorData = acceptors[acceptorLegId.acceptorId].acceptor\n return {\n silkProps: computeSilkProps(\n someParams,\n acceptorData.numberOrBox,\n race.fixture.contestType\n ),\n numberOrBox: acceptorData.numberOrBox,\n name: acceptorData.name,\n sameRaceMultiPosition: Number(acceptorLegId.legType),\n }\n })\n .sort(sortSameRaceMultiAcceptors)\n\n const raceName = `R${race.number} - ${race.fixture.name}`\n\n return (\n \n \n \n handleClick(bet, acceptors, index, sorting, race, 'race name')}\n >\n {raceName}\n \n \n \n\n \n {acceptorData.map(({ silkProps, numberOrBox, name, sameRaceMultiPosition }) => {\n const acceptorName = `${numberOrBox} - ${toTitleCase(name)}`\n return (\n \n \n {silkProps.isDogsSilk ? (\n \n ) : (\n \n )}\n \n {acceptorName}\n \n \n \n {sameRaceMultiPositionToString(sameRaceMultiPosition)}\n \n \n )\n })}\n \n\n \n handleClick(bet, acceptors, index, sorting, race, 'quickbet button')}\n href={linkToRaceWithSelection}\n >\n Quickbet{bet?.price?.dividend && ` @ $${bet?.price?.dividend}`}\n \n \n \n )\n } catch {\n // it shouldn't happen, but we don't want any code/data issues causing exceptions to bubble up back to the parent (e.g. home page)\n return null\n }\n}\n\nconst sameRaceMultiPositionToString = (sameRaceMultiPosition: number) =>\n sameRaceMultiPosition === 1 ? 'WIN' : `TOP${sameRaceMultiPosition}`\n\nconst handleClick = (\n bet: TrendingBet,\n allAcceptors: AcceptorResult,\n index: number,\n sorting: TrendingBetFilterEnum,\n race: RaceDetail,\n element: string\n) => {\n const timeToJump = dayjs(race.advertisedStartTime).diff(dayjs(), 'second')\n const acceptors = getAcceptorsForBet(bet, allAcceptors)\n\n trackTrendingBetSelected({\n bet,\n acceptors,\n timeToJump,\n index,\n sorting,\n element,\n trendingType: 'same race multi',\n })\n}\n\nexport const getAcceptorsForBet = (bet: TrendingBet, acceptors: AcceptorResult) => {\n const result: AcceptorResult = {}\n\n bet.acceptorLegIds.forEach(legId => {\n result[legId.acceptorId] = acceptors[legId.acceptorId]\n })\n\n return result\n}\n\nexport const computeSilkProps = (\n someParams: BuildImageUrlWithSizesProps,\n numberOrBox: number,\n contestType: RacingCode\n) => {\n const imageUrl = getImageUrlWithSizes(someParams).larger\n const url = imageUrl.url\n let { height, width } = imageUrl.size\n const ratio = silkHeight / height\n width *= ratio\n height *= ratio\n\n const baseWidth = width\n const isDogsSilk = contestType === RacingCode.Dogs\n const xOffset = numberOrBox - 1\n return { url, height, width, isDogsSilk, xOffset, baseWidth }\n}\n\nfunction sortSameRaceMultiAcceptors(\n a: { numberOrBox: number; sameRaceMultiPosition: number },\n b: { numberOrBox: number; sameRaceMultiPosition: number }\n) {\n const diff = a.sameRaceMultiPosition - b.sameRaceMultiPosition\n if (diff != 0) return diff\n return a.numberOrBox - b.numberOrBox\n}\n","import { logError } from '@core/Utils'\nimport React from 'react'\n\n// TODO move somewhere higher up the filesystem\nexport class TrendingBetTileErrorBoundary<\n TP extends { children?: React.ReactNode },\n> extends React.Component {\n constructor(props: TP) {\n super(props)\n this.state = { hasError: false }\n }\n\n public componentDidCatch(error: { toString: () => string } /*, info*/) {\n logError(`TrendingBetTile render error: ${error.toString()}`, true)\n this.setState({\n hasError: true,\n })\n }\n\n public render() {\n if (this.state.hasError) {\n return <>\n }\n\n return this.props.children\n }\n}\n","import React from 'react'\nimport { TrendingBetTile } from './TrendingBetTile'\nimport { TrendingBetsQueryResponse } from '../types'\nimport { TrendingSameRaceMultiBetTile } from './TrendingSameRaceMultiBetTile'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { TrendingBetFilterEnum } from './TrendingBetsFilter'\nimport { TrendingBetTileErrorBoundary } from './TrendingBetTileErrorBoundary'\n\nexport type TrendingBetsType = 'Single' | 'SameRaceMulti'\n\nexport interface IconTypes {\n Races: keyof typeof iconPaths\n Trots: keyof typeof iconPaths\n Dogs: keyof typeof iconPaths\n}\n\nexport const IconTypes: IconTypes = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport const TrendingBetsList: React.FC<{\n response: TrendingBetsQueryResponse\n selectedFilter: TrendingBetFilterEnum\n type: TrendingBetsType\n}> = ({ response, selectedFilter, type }) => {\n if (type === 'SameRaceMulti') {\n return (\n <>\n {response.srm.results.map((bet, index) => {\n return (\n \n \n \n )\n })}\n \n )\n } else {\n return (\n <>\n {response.singles.results.map((bet, index) => (\n \n \n \n ))}\n \n )\n }\n}\n","import { fontFamilies } from '@core/Settings'\nimport styled from '@emotion/styled'\nimport React from 'react'\n\nexport enum TrendingBetFilterEnum {\n TotalBets = 'count',\n TotalSpend = 'cost',\n}\n\ntype TrendingBetFilterOptions = Readonly<{\n id: number\n name: string\n filter: TrendingBetFilterEnum\n selectable: boolean\n}>\n\nconst SelectContainer = styled.div({\n position: 'relative',\n paddingRight: '1rem',\n\n '&::after': {\n MozOsxFontSmoothing: 'grayscale',\n WebkitFontSmoothing: 'antialiased',\n color: '#cbb5d8',\n content: `'\\\\76'`,\n display: 'inline-block',\n fontFamily: `'tticons'`,\n fontSize: '11px',\n pointerEvents: 'none',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n },\n '& select': {\n marginRight: '0.5rem',\n },\n})\n\nconst Select = styled.select({\n fontFamily: fontFamilies.brand,\n appearance: 'none',\n background: 'none',\n color: '#cbb5d8',\n border: 'none',\n fontWeight: 'normal',\n borderBottom: '1px solid #cbb5d8',\n})\n\nexport const TrendingBetsFilter: React.FC<{\n initialFilter: TrendingBetFilterEnum\n onChanged: (selectedFilter: TrendingBetFilterEnum) => void\n}> = ({ initialFilter, onChanged }) => {\n const FilterSelections: readonly TrendingBetFilterOptions[] = React.useMemo(() => {\n return [\n {\n id: 0,\n name: 'Total Bets',\n filter: TrendingBetFilterEnum.TotalBets,\n selectable: true,\n },\n {\n id: 1,\n name: 'Total Spend',\n filter: TrendingBetFilterEnum.TotalSpend,\n selectable: true,\n },\n ]\n }, [])\n\n return (\n \n onChanged(e.target.value as TrendingBetFilterEnum)}\n value={initialFilter}\n >\n {FilterSelections.map(x => (\n \n ))}\n \n \n )\n}\n\nexport const TrendingBetsFilterAsTitle = styled('span')({\n position: 'relative',\n fontFamily: fontFamilies.brand,\n color: '#cbb5d8',\n border: 'none',\n fontWeight: 'normal',\n textAlign: 'right',\n marginRight: '1.5rem',\n marginBottom: '.5rem',\n})\n","import React, { useEffect } from 'react'\nimport { useQuery } from 'react-query'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { HomeScrollListItemsStyled } from '@core/Areas/Home/Home.styles'\nimport { fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport { TrendingBetsList, TrendingBetsType } from './Components/TrendingBetsList'\nimport { ToteRaceEventPushEvent, isToteRacePushEvent } from 'tabtouch-push-contract'\nimport { event$ } from '@mobi/utils/awsiot'\nimport {\n HeaderContainer,\n Header,\n HeaderContent,\n HomeTrendingBetsScrollableContainerStyled,\n Wrapper,\n SubheadingContainer,\n} from './Components/TrendingBets.styles'\nimport { isToteRaceChangePushEvent } from '@core/Areas/NextEvents/utils'\nimport {\n TrendingBetFilterEnum,\n TrendingBetsFilter,\n TrendingBetsFilterAsTitle,\n} from './Components/TrendingBetsFilter'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { trackTrendingBetSortingChanged } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { TrendingBetsQueryResponse } from './types'\n\nconst getTrendingBets = async (sortingOptions?: string[]): Promise => {\n let url = `/api/search/trendingBets`\n if (sortingOptions && sortingOptions.length) url += `?${sortingOptions.join('&')}`\n const results = await fetchFromApi(url)\n return await results.json()\n}\n\nconst useQueryOptions = {\n refetchInterval: 30_000,\n queryKey: queryKeys.trendingBets,\n refetchOnWindowFocus: true,\n}\n\ninterface TrendingBetsListConfig {\n localStorageKey: string\n headerContentText: string\n trackSortingChanged: (input: unknown) => unknown\n sortingParameterName: string\n}\n\nconst config: Record = {\n Single: {\n localStorageKey: 'TRENDING_BETS_FILTERBY',\n headerContentText: 'Trending Bets',\n trackSortingChanged: filter => trackTrendingBetSortingChanged({ sorting: filter }),\n sortingParameterName: 'sortSingle',\n },\n SameRaceMulti: {\n localStorageKey: 'TRENDING_BETS_SAMERACEMULTI_FILTERBY',\n headerContentText: 'Trending Same Race Multis',\n trackSortingChanged: filter => filter + '', // TODO implementing later, no sorting change now\n sortingParameterName: 'sortSrm',\n },\n}\n\nexport const TrendingBets: React.FC<{\n type: TrendingBetsType\n}> = ({ type }) => {\n const { localStorageKey, headerContentText, trackSortingChanged, sortingParameterName } =\n config[type]\n\n const persistedValue =\n (getFromLocalStorage(localStorageKey) as TrendingBetFilterEnum) ??\n TrendingBetFilterEnum.TotalBets\n\n const [selectedFilter, setSelectedFilter] = React.useState(persistedValue)\n\n const sortingParameter = `${sortingParameterName}=${selectedFilter}`\n\n const { isLoading, isError, data, refetch } = useQuery({\n ...useQueryOptions,\n queryFn: () => getTrendingBets([sortingParameter]),\n queryKey: [useQueryOptions.queryKey, sortingParameter],\n })\n\n useEffect(() => {\n const subscription = event$\n .filter(\n x =>\n // trending bets are about fob, so that should really read isFobRacePushEvent\n // but tote and fob events are closely coupled => the tote events will typically occur before the fob events\n isToteRacePushEvent(x.payload) &&\n isToteRaceChangePushEvent((x.payload as ToteRaceEventPushEvent).status)\n )\n .delay(2_000) // a small delay to cater for potential race condition between mobi push and bet ingestion\n .subscribe(() => refetch())\n\n return () => subscription.dispose()\n }, [refetch])\n\n if (\n isLoading ||\n !data ||\n (type === 'Single' && !data.singles.results.length) ||\n (type === 'SameRaceMulti' && !data.srm.results.length)\n ) {\n return null\n }\n\n if (isError) {\n return Error loading trending bets.\n }\n\n return (\n <>\n \n \n
      \n {headerContentText}\n
      \n \n {type === 'SameRaceMulti' ? (\n Total Bets\n ) : (\n {\n setSelectedFilter(filter)\n setInLocalStorage(localStorageKey, filter.toString())\n trackSortingChanged(filter)\n }}\n />\n )}\n \n
      \n \n \n \n \n \n
      \n \n )\n}\n","import { useFeature } from '@core/Utils/hooks/useFeature'\nimport { FeatureFlags } from '@mobi/settings'\nimport React from 'react'\nimport { TrendingBetsType } from './Components/TrendingBetsList'\nimport { TrendingBets } from './TrendingBets'\n\n// a 'Toggled' wrapper component is used because of a bug in useFeature which fires an unnecessary undefined state causing an unnecessary render\nexport function TrendingBetsToggled({\n flagKey,\n type,\n}: {\n flagKey: keyof typeof FeatureFlags\n type: TrendingBetsType\n}) {\n const isEnabled = useFeature(flagKey)\n\n return isEnabled ? : null\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { colors } from '@core/Settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nexport const ContentHeaderStyled = styled('header')({\n background: hexColors.black,\n color: hexColors.white,\n padding: '1em',\n})\n\nexport const ContentHeaderTitleStyled = styled('h2')({\n display: 'flex',\n alignItems: 'center',\n fontSize: '1.6rem',\n textTransform: 'uppercase',\n lineHeight: '1.2',\n\n svg: {\n marginRight: '0.5rem',\n },\n})\n\nexport const ContentHeaderLinkStyled = styled('a')({\n color: colors.subContentHeader.text,\n textDecoration: 'none',\n})\n\nexport const Rotated180Icon = styled(Icon)({\n transform: 'rotate(180deg)',\n})\n","import React from 'react'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\n\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonWithIcon } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\n\nimport {\n ContentHeaderStyled,\n ContentHeaderTitleStyled,\n Rotated180Icon,\n} from './ContentHeader.styles'\n\nexport function ContentHeader({\n title,\n refreshCallback,\n navigateLeftCallback,\n navigateRightCallback,\n iconCode,\n shouldShowHome = true,\n}: {\n title: string\n refreshCallback?: () => void\n navigateLeftCallback?: () => void\n navigateRightCallback?: () => void\n iconCode?: keyof typeof iconPaths\n shouldShowHome?: boolean\n}): JSX.Element {\n const testId = { 'data-tid-page-title': '' }\n return (\n \n \n \n {shouldShowHome && (\n }\n color='light'\n />\n )}\n \n\n {(navigateLeftCallback || navigateRightCallback) && (\n \n {navigateLeftCallback && (\n }\n color='light'\n />\n )}\n \n )}\n\n \n \n {iconCode && }\n {title}\n \n \n\n {(navigateRightCallback || navigateLeftCallback) && (\n \n {navigateRightCallback && (\n }\n color='light'\n />\n )}\n \n )}\n\n \n {refreshCallback && (\n }\n color='light'\n />\n )}\n \n \n \n )\n}\n","import React from 'react'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { toggleIsAppHeaderSticky } from '../Store'\n\n/** Only to be used on top level page routes - otherwise changes required */\nexport const useDisableAppHeaderSticky = () => {\n const dispatch = useAppDispatch()\n\n React.useEffect(() => {\n dispatch(toggleIsAppHeaderSticky(false))\n return () => {\n dispatch(toggleIsAppHeaderSticky(true))\n }\n }, [dispatch])\n}\n","export const CountryIsoCode = {\n Australia: 'AU',\n NewZealand: 'NZ',\n HongKong: 'HK',\n Singapore: 'SG',\n Japan: 'JP',\n SouthKorea: 'KR',\n SouthAfrica: 'ZA',\n UnitedArabEmirates: 'AE',\n UnitedKingdom: 'GB',\n Ireland: 'IE',\n France: 'FR',\n Germany: 'DE',\n Sweden: 'SE',\n Norway: 'NO',\n UnitedStates: 'US',\n Argentina: 'AR',\n Brazil: 'BR',\n Chile: 'CL',\n Uruguay: 'UY',\n}\n\nexport const CountryIsoCodeOrder: string[] = [\n CountryIsoCode.Australia,\n CountryIsoCode.NewZealand,\n CountryIsoCode.HongKong,\n CountryIsoCode.Singapore,\n CountryIsoCode.Japan,\n CountryIsoCode.SouthKorea,\n CountryIsoCode.SouthAfrica,\n CountryIsoCode.UnitedArabEmirates,\n CountryIsoCode.UnitedKingdom,\n CountryIsoCode.Ireland,\n CountryIsoCode.France,\n CountryIsoCode.Germany,\n CountryIsoCode.Sweden,\n CountryIsoCode.Norway,\n CountryIsoCode.UnitedStates,\n CountryIsoCode.Argentina,\n CountryIsoCode.Brazil,\n CountryIsoCode.Chile,\n CountryIsoCode.Uruguay,\n]\n\nexport const StateCodes = {\n AustralianCapitalTerritory: 'ACT',\n NewSouthWales: 'NSW',\n NorthernTerritory: 'NT',\n Queensland: 'QLD',\n SouthAustralia: 'SA',\n Tasmania: 'TAS',\n Victoria: 'VIC',\n WesternAustralia: 'WA',\n}\n\nexport const StateOrder: string[] = [\n StateCodes.WesternAustralia,\n StateCodes.Victoria,\n StateCodes.NewSouthWales,\n StateCodes.Queensland,\n StateCodes.SouthAustralia,\n StateCodes.Tasmania,\n StateCodes.AustralianCapitalTerritory,\n StateCodes.NorthernTerritory,\n]\n\nexport const RaceCourseClassCode = {\n Metro: 'M',\n Provincial: 'P',\n Country: 'C',\n Other: 'O',\n}\n\nexport const RaceCourseClassCodeOrder: string[] = [\n RaceCourseClassCode.Metro,\n RaceCourseClassCode.Provincial,\n RaceCourseClassCode.Country,\n RaceCourseClassCode.Other,\n]\n","import type { MeetingsAPIResponse } from '@core/Areas/Racing/Hooks/useMeetings/types'\nimport {\n CountryIsoCode,\n CountryIsoCodeOrder,\n StateOrder,\n RaceCourseClassCodeOrder,\n} from './constants'\n\nconst enum LocalConstants {\n OtherState = 'OTH',\n}\n\nexport function sortMeetings(meetings: T[]): SortedMeetings {\n const australianUnsorted = filterAustralianMeetings(meetings)\n const internationalUnsorted = filterInternationalMeetings(meetings)\n return {\n AustralianMeetings: sortAustralianMeetings(australianUnsorted),\n InternationalMeetings: sortInternationalMeetings(internationalUnsorted),\n }\n}\n\nexport function sortMeetingOnName({ name: name1 }: Meeting, { name: name2 }: Meeting): number {\n return name1.toLocaleUpperCase().localeCompare(name2.toLocaleUpperCase())\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction isInternational(meeting: Meeting): boolean {\n return meeting.isoCountryCode !== CountryIsoCode.Australia\n}\n\nfunction filterAustralianMeetings(meetings: T[]): T[] {\n return meetings.filter(meeting => !isInternational(meeting))\n}\n\nfunction filterInternationalMeetings(meetings: T[]): T[] {\n return meetings.filter(meeting => isInternational(meeting))\n}\n\nfunction sortAustralianMeetings(meetings: T[]): T[] {\n const sortedMeetings: Meeting[] = meetings.sort(compareAustralianMeeting)\n const groupedData = reduceSortedArray(sortedMeetings)\n const results = orderGroupedAustralianMeetings(groupedData)\n\n return results as T[]\n}\n\nfunction sortInternationalMeetings(meetings: T[]): T[] {\n return meetings.sort(compareInternationalMeeting)\n}\n\nfunction reduceSortedArray(meetings: Meeting[]): StateMeeting {\n const groups: StateMeeting = new Map()\n const groupedData = meetings.reduce(reduceMeetingToStates, groups)\n\n return groupedData\n}\n\nfunction reduceMeetingToStates(map: StateMeeting, meeting: Meeting): StateMeeting {\n const key =\n StateOrder.indexOf(meeting.geoLocationCode) === -1\n ? LocalConstants.OtherState\n : meeting.geoLocationCode\n\n if (!map.has(key)) {\n map.set(key, [meeting])\n } else {\n const value = map.get(key)\n if (value) value.push(meeting)\n else map.set(key, [meeting]) // Handle scenario just in case\n }\n return map\n}\n\nfunction orderGroupedAustralianMeetings(groupedData: StateMeeting): Meeting[] {\n let meeting: Meeting | undefined\n let result: Meeting[] = []\n let groupedMeetings: Meeting[] | undefined\n\n // If the requirement to put the user's home state first ever eventuates, take the user's first meeting out of their home state and insert it into homeStateFirstMeeting\n // Store the remainder in homeStateOtherMeetings. The groupedData entry for the home state will then be empty.\n // The algorithm has been templated with empty values, so this won't occur actually at this time.\n\n const homeStateFirstMeeting: Meeting | undefined = undefined\n const homeStateOtherMeetings: Meeting[] = []\n\n if (homeStateFirstMeeting) {\n result.push(homeStateFirstMeeting)\n }\n\n for (const state of StateOrder) {\n groupedMeetings = groupedData.get(state)\n\n if (groupedMeetings && groupedMeetings.length > 0) {\n meeting = groupedMeetings.shift()\n if (meeting) {\n result.push(meeting)\n }\n }\n }\n\n if (homeStateOtherMeetings && homeStateOtherMeetings.length > 0) {\n result = result.concat(homeStateOtherMeetings)\n }\n\n for (const state of StateOrder) {\n groupedMeetings = groupedData.get(state)\n\n if (groupedMeetings && groupedMeetings.length > 0) {\n result = result.concat(groupedMeetings)\n }\n }\n\n // Now handle other\n groupedMeetings = groupedData.get(LocalConstants.OtherState)\n if (groupedMeetings && groupedMeetings.length > 0) {\n result = result.concat(groupedMeetings)\n }\n\n return result\n}\n\nfunction compareAustralianMeeting(m1: Meeting, m2: Meeting): number {\n const firstState = StateOrder.indexOf(m1.geoLocationCode)\n const secondState = StateOrder.indexOf(m2.geoLocationCode)\n\n if (firstState < secondState) {\n return -1\n } else if (firstState > secondState) {\n return 1\n }\n\n const firstClass = RaceCourseClassCodeOrder.indexOf(m1.raceCourseClassCode)\n const secondClass = RaceCourseClassCodeOrder.indexOf(m2.raceCourseClassCode)\n\n if (firstClass < secondClass) {\n return -1\n } else if (firstClass > secondClass) {\n return 1\n }\n return sortMeetingOnName(m1, m2)\n}\n\nfunction compareInternationalGeoLocationAndName(m1: Meeting, m2: Meeting): number {\n if (m1.geoLocationCode?.toUpperCase() < m2.geoLocationCode?.toUpperCase()) return -1\n if (m1.geoLocationCode > m2.geoLocationCode) return 1\n return sortMeetingOnName(m1, m2)\n}\n\nfunction compareInternationalMeeting(m1: Meeting, m2: Meeting): number {\n const first = getIsoCountryCodeOrdinal(m1.isoCountryCode)\n const second = getIsoCountryCodeOrdinal(m2.isoCountryCode)\n\n if (first === -1 && second === -1) {\n return compareInternationalGeoLocationAndName(m1, m2)\n } else if (first === -1) {\n return 1\n } else if (second === -1) {\n return -1\n } else if (first < second) {\n return -1\n } else if (first > second) {\n return 1\n } else {\n return compareInternationalGeoLocationAndName(m1, m2)\n }\n}\n\nfunction getIsoCountryCodeOrdinal(isoCode: string | null): number {\n if (isoCode === null) return -1\n return CountryIsoCodeOrder.indexOf(isoCode)\n}\n\n// =====\n// Types\n// =====\n\ninterface SortedMeetings {\n AustralianMeetings: T[]\n InternationalMeetings: T[]\n}\n\ntype StateMeeting = Map\n\ntype Meeting = MeetingsAPIResponse[0]['meetings'][0]\n","import { get } from '@classic/Foundation/Services/ApiService'\nimport { MeetingsAPIResponse } from './types'\n\nexport const getMeetingsFromApi = (date: string) =>\n get({ url: '/api/meetings?date=' + date })\n","import { useQuery } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getMeetingsFromApi } from './api'\n\nconst enum LocalConstants {\n ThirtySeconds = 30_000,\n}\n\nexport const useMeetingsQuery = (\n /** date format should be YYYY-MM-DD */\n date: string\n) =>\n useQuery(queryKeys.meetings(date), () => getMeetingsFromApi(date), {\n staleTime: LocalConstants.ThirtySeconds as number,\n refetchInterval: LocalConstants.ThirtySeconds as number,\n refetchOnWindowFocus: true,\n retry: false,\n })\n","import type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { formatDateStringWithoutChangingTimezone } from '@mobi/utils'\nimport type { MeetingsAPIResponse, Meeting } from './types'\nimport { useMeetingsQuery } from './useMeetingsQuery'\n\nexport const useMeetings = (raceCode: RaceCodesLowerCase, incomingDate: string): Meeting[] => {\n const cleanedDate = formatDateStringWithoutChangingTimezone(incomingDate, 'YYYY-MM-DD')\n const { data } = useMeetingsQuery(cleanedDate)\n\n const meetingsData = data ? data[cleanedDate] : undefined\n\n return getMeetingsForCode(raceCode, meetingsData?.meetings)\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getMeetingsForCode(\n code: RaceCodesLowerCase,\n allMeetings?: MeetingsAPIResponse[0]['meetings']\n): NonNullable[0][] {\n if (!allMeetings) return []\n return Object.values(allMeetings).filter(meeting => meeting.code.toLowerCase() === code)\n}\n","import { toTitleCase } from '@mobi/utils/string'\n\nconst regexRuleToCaptureCountryAbbr = / - [A-Za-z]{2,3}$/\n\nexport function getCleanMeetingName(meetingName: string) {\n let name = toTitleCase(meetingName)\n const matchResult = name.match(regexRuleToCaptureCountryAbbr)\n\n if (matchResult) {\n const meeting = name.replace(regexRuleToCaptureCountryAbbr, '')\n const country = matchResult[0].replace('-', '').trim()\n name = `${meeting} - ${country.toUpperCase()}`\n }\n\n return name\n}\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { getRaceLink } from '@core/Areas/Racing/helpers/getRaceLink'\nimport { MeetingsAPIResponse } from '@core/Areas/Racing/Hooks/useMeetings/types'\nimport { getCleanMeetingName } from '../helpers/getCleanMeetingName'\n\nexport const DropdownLink: React.FC<{ meeting: MeetingsAPIResponse[0]['meetings'][0] }> = ({\n meeting,\n}) => {\n const history = useHistory()\n\n const nextRaceUrl = getRaceLink({\n meetingId: meeting.id,\n raceNumber: meeting.nextRaceNumber || 1,\n meetingDate: meeting.date,\n code: meeting.code,\n meetingSeq: meeting.fixed?.competitionId,\n product: meeting.fixed?.racingProduct,\n raceSeq: meeting.fixed?.nextRaceEventId,\n isFOO: Number.isInteger(Number(meeting.id)),\n })\n const onLinkClick = () => {\n history.push(nextRaceUrl)\n }\n\n return (\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, layering } from '@mobi/component-library/Theme/Common'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { sortMeetingOnName, sortMeetings } from '@core/Areas/Meetings/helpers/sortMeetings'\nimport { useClickOutside } from '@core/Utils/hooks/useClickOutside'\nimport { useMeetings } from '@core/Areas/Racing/Hooks/useMeetings'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { DropdownLink } from './Components/DropdownLink'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { getCleanMeetingName } from './helpers/getCleanMeetingName'\n\nexport const MeetingsDropdown: React.FC<{\n meetingName: string\n meetingCode: RaceCodesLowerCase\n meetingDate: string\n}> = ({ meetingName, meetingCode, meetingDate }) => {\n const dropdownRef = React.useRef(null)\n const [isOpen, setOpen] = React.useState(false)\n\n useClickOutside(dropdownRef, () => setOpen(false))\n\n const meetings = useMeetings(meetingCode, meetingDate)\n const favourites = useAppSelector(state => state.meetings.favourites)\n\n React.useEffect(() => setOpen(false), [meetingName])\n\n const favouriteMeetings = meetings\n .filter(meeting => meeting.status === 'Open' && favourites.includes(meeting.name))\n .sort(sortMeetingOnName)\n\n const { AustralianMeetings, InternationalMeetings } = sortMeetings(\n meetings.filter(meeting => meeting.status === 'Open' && !favourites.includes(meeting.name))\n )\n\n const shouldShowDropdown = !!(\n favouriteMeetings.length ||\n AustralianMeetings.length ||\n InternationalMeetings.length\n )\n\n const meetingNameClean = getCleanMeetingName(meetingName)\n\n return (\n \n {shouldShowDropdown ? (\n \n ) : (\n {meetingNameClean}\n )}\n\n {shouldShowDropdown && isOpen && (\n
      \n
        \n {favouriteMeetings.length > 0 && (\n <>\n
      • \n Favourites\n
      • \n {favouriteMeetings.map(meeting => (\n
      • \n \n
      • \n ))}\n \n )}\n\n {AustralianMeetings.length > 0 && (\n <>\n
      • \n Australia\n
      • \n {AustralianMeetings.map(meeting => (\n
      • \n \n
      • \n ))}\n \n )}\n\n {InternationalMeetings.length > 0 && (\n <>\n
      • \n International\n
      • \n {InternationalMeetings.map(meeting => (\n
      • \n \n
      • \n ))}\n \n )}\n
      \n
      \n )}\n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst MeetingsDropdownStyled = styled.div({\n position: 'relative',\n fontFamily: font.family.primary,\n\n // Current Meeting\n '> button, > strong': {\n fontWeight: font.weight.semibold,\n fontSize: font.size.xl.fontSize,\n lineHeight: font.size.xl.lineHeight,\n letterSpacing: font.size.xl.letterSpacing,\n color: colors.black,\n },\n\n // Toggle\n '> button': {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n minHeight: '4rem',\n cursor: 'pointer',\n paddingLeft: 0,\n background: 0,\n border: 0,\n\n svg: { pointerEvents: 'none' },\n\n '&:active': { background: 'transparent' },\n },\n\n // No Toggle\n '> strong': {\n display: 'inline-flex',\n alignItems: 'center',\n minHeight: '3rem',\n },\n\n '@keyframes animateIn': {\n ['0%']: { transform: 'translateY(1rem)', opacity: 0 },\n ['70%']: { opacity: 1 },\n ['100%']: { transform: 'translateY(0)' },\n },\n\n // Dropdown\n '& > div': {\n backgroundColor: colors.surface[200],\n borderRadius: '0.5rem',\n boxShadow: '0 0.4rem 0.2rem rgba(0, 0, 0, 0.2)',\n color: 'black',\n overflow: 'hidden',\n position: 'absolute',\n top: '100%',\n animation: 'ease animateIn .2s',\n transform: 'translateY(0)',\n zIndex: layering.pagePopoverElements,\n\n ul: {\n listStyle: 'none',\n margin: 0,\n maxHeight: '60vh',\n overflow: 'hidden auto',\n padding: '0.8rem 1.6rem',\n\n li: {\n alignItems: 'center',\n display: 'flex',\n fontSize: '1.2rem',\n lineHeight: 1,\n height: '3rem',\n whiteSpace: 'nowrap',\n\n strong: {\n color: colors.black,\n },\n\n button: {\n flex: 1,\n paddingLeft: 0,\n textAlign: 'left',\n fontWeight: 'normal',\n },\n },\n },\n },\n})\n","import React, { useMemo } from 'react'\nimport styled from '@emotion/styled'\nimport { newTheme } from '@mobi/component-library/Theme'\nimport { radius, spacing, font } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst defaultPayout = 'Pay 1,2,3'\nconst ignoreValues = [defaultPayout, undefined]\n\nconst enum LocalConstants {\n SkyRacePageClassname = 'js-payout-info--sky-race-card',\n}\n\nexport const PayoutInformation: React.FC<{\n totePayoutInformation?: string\n fixedPayoutInformation?: string\n isOnSkyRacePage?: boolean\n}> = ({ totePayoutInformation, fixedPayoutInformation, isOnSkyRacePage }) => {\n const payoutInformation = useMemo(() => {\n const toteShouldBeIgnored = ignoreValues.includes(totePayoutInformation)\n const fixedShouldBeIgnored = ignoreValues.includes(fixedPayoutInformation)\n\n if (toteShouldBeIgnored && fixedShouldBeIgnored) return undefined\n\n if (fixedPayoutInformation === totePayoutInformation) return fixedPayoutInformation\n\n return [\n fixedPayoutInformation ? `Fixed ${fixedPayoutInformation}` : undefined,\n totePayoutInformation ? `Tote ${totePayoutInformation}` : undefined,\n ]\n .filter(x => x)\n .join(' and ')\n }, [totePayoutInformation, fixedPayoutInformation])\n\n if (!payoutInformation) {\n return null\n }\n\n return (\n \n \n {payoutInformation}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst PayoutInformationStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n height: '2.8rem',\n margin: `0 ${spacing.md} ${spacing.smx1} ${spacing.md}`,\n padding: spacing.smx2 + ' ' + spacing.smx1,\n\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n\n borderRadius: radius.md,\n color: newTheme.colors.mariner[600],\n backgroundColor: newTheme.colors.mariner[50],\n\n '> span:first-of-type': { marginRight: spacing.smx1 },\n\n [`&.${LocalConstants.SkyRacePageClassname}`]: {\n margin: `0 ${spacing.smx1} ${spacing.smx1} ${spacing.smx1}`,\n },\n})\n","import React from 'react'\nimport { dayjs } from '@mobi/utils/date'\nimport styled from '@emotion/styled'\nimport { useIntervalWhen } from 'rooks'\nimport { StatusBadge } from '../../Common/StatusBadge/StatusBadge'\n\n/**\n * A badge showing a countdown to a particular time (usually the start of a race) passed as a `Date`.\n * When the time has passed the badge will show a negative duration. The color of the badge\n * changes from green to yellow to red as the time approaches.\n */\nexport function CountdownBadge({\n badgeSize,\n advertisedStartTime,\n}: {\n advertisedStartTime: Date\n} & StatusBadgeSize) {\n const previousTextRef = React.useRef('')\n\n const [state, setState] = React.useState(() => {\n const state = getCountdownState(advertisedStartTime)\n previousTextRef.current = state.text\n return state\n })\n\n useIntervalWhen(\n () => {\n const state = getCountdownState(advertisedStartTime)\n if (state.text !== previousTextRef.current) {\n setState(state)\n previousTextRef.current = state.text\n }\n },\n 1_000,\n true\n )\n\n return (\n \n \n {state.text}\n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getCountdownState(advertisedStartTime: Date): CountdownBadgeState {\n return {\n text: formatCountdownDuration(advertisedStartTime),\n color: badgeColorForCountdown(advertisedStartTime),\n }\n}\n\nfunction badgeColorForCountdown(advertisedStartTime: Date): StatusBadgeColor {\n const secondsToJump = (advertisedStartTime.getTime() - Date.now()) / 1_000\n\n if (secondsToJump < 0) return 'red'\n if (secondsToJump < 60 * 10) return 'yellow'\n if (secondsToJump < 60 * 60) return 'green'\n return 'gray'\n}\n\nfunction formatCountdownDuration(advertisedStartTime: Date) {\n const now = dayjs()\n const eventTime = dayjs(advertisedStartTime)\n const millisecondsDiff = Math.abs(now.diff(eventTime))\n\n // Past\n\n if (eventTime.isBefore(now)) {\n if (eventTime.isAfter(now.subtract(1, 'minute'))) {\n return '-' + dayjs.duration(millisecondsDiff).format('ss[s]')\n }\n\n if (eventTime.isAfter(now.subtract(1, 'hour'))) {\n return '-' + dayjs.duration(millisecondsDiff).format('m[m] ss[s]')\n }\n\n return eventTime.format('D MMM YYYY')\n }\n\n // Upcoming\n\n if (eventTime.isBefore(now.add(1, 'minute'))) {\n return dayjs.duration(millisecondsDiff).format('s[s]')\n }\n\n if (eventTime.isBefore(now.add(10, 'minute'))) {\n return dayjs.duration(millisecondsDiff).format('m[m] ss[s]')\n }\n\n if (eventTime.isBefore(now.add(1, 'hour'))) {\n return dayjs.duration(millisecondsDiff).format('m[m]')\n }\n\n if (eventTime.isToday()) {\n return eventTime.format('H:mm')\n }\n\n if (eventTime.isBefore(now.add(7, 'days'))) {\n return eventTime.format('ddd H:mm')\n }\n\n if (now.isSame(eventTime, 'year')) {\n return eventTime.format('D MMM H:mm')\n }\n\n return eventTime.format('D MMM YYYY')\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.span({\n display: 'flex',\n alignItems: 'stretch !important',\n\n '> *': {\n minWidth: '5.5rem',\n },\n})\n\n// =====\n// Types\n// =====\n\ntype CountdownBadgeState = {\n text: string\n color: StatusBadgeColor\n}\n\ntype StatusBadgeSize = Pick, 'badgeSize'>\ntype StatusBadgeColor = React.ComponentProps['color']\n","import React, { ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst enum LocalConstants {\n TextExpandedClassName = 'js-race-info--expanded-text',\n TitleSwitchClassName = 'js-race-info--switch-titles',\n SkyRaceCardClassName = 'js-race-info--sky-race',\n}\n\nexport const RaceInfoWrapperWithTextExpand: React.FC<{\n titlePrimary: string\n titleSecondary: string\n subTitle: ReactNode\n shouldSwitchTitles: boolean\n children: React.ReactChild\n isOnSkyRacePage?: boolean\n}> = ({\n children,\n titlePrimary,\n titleSecondary,\n subTitle,\n shouldSwitchTitles,\n isOnSkyRacePage,\n}) => {\n const textualElRef = React.useRef(null)\n\n const [shouldEnableTextExpand, setShouldEnableTextExpand] = React.useState(false)\n const [isTextExpanded, setIsTextExpanded] = React.useState(false)\n\n // Only allow text expand on click when overflowed\n React.useEffect(() => {\n if (!textualElRef.current || !window.ResizeObserver) return\n const el = textualElRef.current\n const observer = new ResizeObserver(() => {\n for (const child of el.children) {\n const spanEls = child.querySelectorAll('span')\n for (const spanEl of spanEls) {\n if (spanEl.offsetWidth < spanEl.scrollWidth) setShouldEnableTextExpand(true)\n }\n }\n })\n observer.observe(el)\n return () => observer.disconnect()\n }, [])\n\n const classNames = []\n if (isTextExpanded) classNames.push(LocalConstants.TextExpandedClassName)\n if (isOnSkyRacePage) classNames.push(LocalConstants.SkyRaceCardClassName)\n\n return (\n \n
      setIsTextExpanded(curr => !curr) : undefined}>\n \n

      \n {titlePrimary}\n {titleSecondary}\n

      \n\n
      \n {subTitle}\n
      \n
      \n\n {isTextExpanded && (\n
      \n \n
      \n )}\n \n\n
      {children}
      \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n flexWrap: 'nowrap',\n justifyContent: 'space-between',\n\n '> div': { transition: 'all 0.3s' },\n\n // Race textual info\n '> div:first-of-type': {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n paddingLeft: spacing.md,\n\n fontWeight: font.weight.regular,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n overflow: 'hidden',\n\n '> div:nth-of-type(1)': {\n overflow: 'hidden',\n\n '> h2 > span, > div > span': {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n\n '> h2': {\n margin: 0,\n padding: 0,\n textShadow: 'none',\n textAlign: 'left',\n color: colors.black,\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.semibold,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n textTransform: 'unset',\n\n // Default to show race name, hide race # + meeting\n '> span:nth-of-type(1)': { display: 'none' },\n '> span:nth-of-type(2)': { display: 'block' },\n },\n\n '@keyframes fadeIn': { from: { opacity: 0 }, to: { opacity: 1 } },\n\n // Switch titles when pinned (standard race) or button out of view (sky)\n [`&.${LocalConstants.TitleSwitchClassName} > h2`]: {\n '> span:nth-of-type(1)': { display: 'block', animation: 'ease-in 0.2s fadeIn forwards' },\n '> span:nth-of-type(2)': { display: 'none' },\n },\n\n '> div': { display: 'flex' },\n },\n\n // Close icon\n '> div:nth-of-type(2)': {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n marginLeft: 'auto',\n paddingLeft: '0.2rem',\n opacity: 0,\n animation: 'ease-in 0.3s fadeIn 0.1s forwards',\n\n '> span': {\n padding: spacing.smx1,\n background: colors.surface[50],\n borderRadius: radius.md,\n },\n },\n },\n\n // Race actions / status / extra info\n '> div:last-of-type': {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'stretch',\n justifyContent: 'flex-end',\n gap: spacing.smx2,\n width: '100%',\n maxWidth: 'fit-content',\n opacity: 1,\n transform: 'translateX(0)',\n paddingRight: spacing.md,\n paddingLeft: '0.5rem',\n marginLeft: 'auto',\n\n '> *': {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n minWidth: 0,\n },\n },\n\n [`&.${LocalConstants.SkyRaceCardClassName}`]: {\n '> div:first-of-type': { paddingLeft: spacing.smx1 },\n '> div:last-of-type': { paddingRight: spacing.smx1 },\n },\n\n // Text expanded animation of status/btn section\n [`&.${LocalConstants.TextExpandedClassName}`]: {\n overflowX: 'hidden',\n\n '> div:last-of-type': {\n width: 0,\n opacity: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n transform: `translateX(calc(100% + ${spacing.md}))`,\n },\n },\n})\n","export const DOCKED_EXPAND_ANIMATION_MS = 400\n","import React from 'react'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { selectDockedPlayerHeight } from '@core/Areas/SkyVideoPlayer/Store/selectors'\n\nexport const useHeaderPinnedState = () => {\n const wrapperElRef = React.useRef(null)\n\n const [isHeaderPinned, setIsHeaderPinned] = React.useState(false)\n\n const skyVideoDockedPlayerHeight = useAppSelector(selectDockedPlayerHeight)\n\n // Determine when pinned - player NOT docked\n React.useEffect(() => {\n if (!wrapperElRef.current || !!skyVideoDockedPlayerHeight) return\n const el = wrapperElRef.current\n const observer = new IntersectionObserver(([e]) => setIsHeaderPinned(e.intersectionRatio < 1), {\n threshold: [1],\n })\n observer.observe(el)\n return () => observer.disconnect()\n }, [skyVideoDockedPlayerHeight])\n\n // Determine when pinned - player is docked\n React.useEffect(() => {\n if (!wrapperElRef.current || skyVideoDockedPlayerHeight === null) return\n const el = wrapperElRef.current\n let prevValue: boolean\n const handleScrollChange = () => {\n const shouldPin = el.getBoundingClientRect().top < skyVideoDockedPlayerHeight\n if (prevValue !== shouldPin) {\n setIsHeaderPinned(shouldPin)\n prevValue = shouldPin\n }\n }\n window.addEventListener('scroll', handleScrollChange)\n return () => {\n window.removeEventListener('scroll', handleScrollChange)\n }\n }, [skyVideoDockedPlayerHeight])\n\n return { isHeaderPinned, top: (skyVideoDockedPlayerHeight || 0) - 1, wrapperElRef }\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useFloating, autoUpdate, offset, type Placement, shift } from '@floating-ui/react-dom'\nimport { colors, layering, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\n\nconst enum LocalConstants {\n PopoverPresetStylesClass = 'js-popover--preset-style',\n}\n\nexport const Popover: React.FC<{\n isOpen: boolean\n /** Popover will be placed relative to reference element */\n referenceElRef: React.RefObject\n /** Relative to reference, where should popover be placed */\n placement?: Placement\n /** Offset in pixels from reference on placement axis */\n offsetPx?: number\n /** Determines if preset styles should be applied to popover @default true */\n shouldUsePresetStyles?: boolean\n children?: React.ReactNode\n}> = ({\n isOpen,\n referenceElRef,\n placement = 'bottom',\n offsetPx = 0,\n shouldUsePresetStyles = true,\n children,\n}) => {\n if (!isOpen) return null\n\n return (\n \n {children}\n \n )\n}\n\n// ==========================\n// Local Component w/ Content\n// ==========================\n\nconst PopoverComponent: React.FC, 'isOpen'>> = ({\n referenceElRef,\n placement,\n offsetPx,\n shouldUsePresetStyles,\n children,\n}) => {\n const { floatingStyles, refs } = useFloating({\n placement,\n middleware: [offset(offsetPx), shift()],\n whileElementsMounted: autoUpdate,\n elements: { reference: referenceElRef.current },\n })\n\n return (\n \n
      \n {children}\n
      \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst PopoverStyled = styled.div({\n zIndex: layering.pagePopoverElements,\n\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n animation: 'cubic-bezier(0.165, 0.84, 0.44, 1) animateIn 0.3s forwards',\n\n [`&.${LocalConstants.PopoverPresetStylesClass}`]: {\n padding: spacing.smx1,\n borderRadius: radius.md,\n backgroundColor: colors.white,\n border: `0.1rem solid ${colors.neutral[200]}`,\n boxShadow: shadow.md,\n },\n },\n\n '@keyframes animateIn': {\n ['0%']: { transform: 'scale(0.92)', opacity: 0 },\n ['70%']: { opacity: 1 },\n ['100%']: { transform: 'translateY(0)' },\n },\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { Popover } from '@mobi/component-library/Overlays/Popover'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { NotificationTime } from '../../types'\n\nexport const TimePickerPopover: React.FC<{\n selectedTimes: Set\n validNotificationOptions: readonly NotificationTime[]\n setSelectedTimes: (setter: (prev: Set) => Set) => void\n registerAlert: (time: Set) => void\n deregisterAlert: (time: Set) => void\n popoverRef: React.RefObject\n analyticsDataRef: React.RefObject\n}> = ({\n selectedTimes,\n setSelectedTimes,\n registerAlert,\n deregisterAlert,\n validNotificationOptions,\n popoverRef,\n analyticsDataRef,\n}) => {\n const initialSelectedTimesRef = React.useRef(selectedTimes)\n\n React.useEffect(() => {\n const data = analyticsDataRef\n const initialSelectedTimes = initialSelectedTimesRef.current\n return () => {\n if (!data.current || areSelectedTimesEqual(initialSelectedTimes, data.current.selectedTimes))\n return\n trackAnalytics({ ...data.current })\n }\n }, [analyticsDataRef])\n\n return (\n \n \n

      Set your reminder(s)

      \n\n {validNotificationOptions.map(time => (\n {\n e.stopPropagation()\n setSelectedTimes(prev => {\n const updatedTimes = new Set(prev)\n\n if (updatedTimes.has(time)) {\n updatedTimes.delete(time)\n } else {\n updatedTimes.add(time)\n }\n\n if (updatedTimes.size === 0) {\n deregisterAlert(updatedTimes)\n } else {\n registerAlert(updatedTimes)\n }\n\n return updatedTimes\n })\n }}\n >\n {time} min\n \n ))}\n
      \n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\n// Analytics tracking\n\nconst serialisedSet = (set: Set) => [...set].join('')\n\nfunction areSelectedTimesEqual(\n initialSelectedTimes: Set,\n newSelectedTimes: Set\n) {\n return serialisedSet(initialSelectedTimes) === serialisedSet(newSelectedTimes)\n}\n\nconst trackAnalytics = ({\n selectedTimes,\n ast,\n isHeaderPinned,\n eventId,\n}: RaceAlertAnalyticsData) => {\n const timeToJump = dayjs(ast).diff(dayjs(), 'second')\n\n if (selectedTimes.size === 0)\n trackRaceNotificationDisabled({\n timeToJump,\n eventId,\n })\n else\n trackRaceNotificationEnabled({\n timeToJump,\n eventId,\n headerState: isHeaderPinned ? 'sticky' : 'default',\n ...selectedTimesToDictionary(selectedTimes ?? new Set()),\n })\n}\n\nfunction selectedTimesToDictionary(selectedTimes: Set) {\n const allTimes: NotificationTime[] = [1, 5, 10, 15]\n return allTimes.reduce(\n (result, n) => {\n result[`alert${n}`] = selectedTimes.has(n)\n return result\n },\n {} as Record<`alert${NotificationTime}`, boolean>\n )\n}\n\nconst trackRaceNotificationEnabled = ({ headerState, ...data }: AnalyticsDataEnabled): void => {\n trackEvent('race-notification-enabled', { data, headerState })\n}\n\nconst trackRaceNotificationDisabled = (data: AnalyticsData): void => {\n trackEvent('race-notification-disabled', { data })\n}\n\n// ======\n// Styles\n// ======\n\nconst PopoverWrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx2,\n\n '> h4': {\n padding: 0,\n margin: 0,\n marginBottom: spacing.smx2,\n color: colors.black,\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.semibold,\n textAlign: 'left',\n whiteSpace: 'nowrap',\n },\n})\n\n// =====\n// Types\n// =====\n\ntype AnalyticsData = {\n eventId: string\n timeToJump: number\n}\n\ntype AnalyticsDataEnabled = AnalyticsData & {\n headerState?: 'sticky' | 'default'\n} & Record<`alert${NotificationTime}`, boolean>\n\nexport type RaceAlertAnalyticsData = {\n selectedTimes: Set\n eventId: string\n ast: string\n isHeaderPinned?: boolean\n}\n","import styled from '@emotion/styled'\n\nexport const NotificationButtonStyled = styled.button({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '3rem',\n width: '3rem',\n padding: 0,\n background: 'none',\n border: 'none',\n borderRadius: '100%',\n})\n","import React from 'react'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { recordify, TypedRecord } from 'typed-immutable-record'\n\n/** @deprecated */\nexport const HidePopup = createSignal('HidePopup')\n/** @deprecated */\nexport const ShowPopup = createSignal<{ content: React.ElementType; contentProps: unknown }>(\n 'ShowPopup'\n)\n\nexport interface PopupState {\n show: boolean\n content: React.ElementType | null\n contentProps: unknown\n}\n\ninterface PopupStateRecord extends TypedRecord, PopupState {}\nconst defaultState = recordify({\n show: false,\n content: null,\n contentProps: null,\n})\n\nconst popupDriver = (state = defaultState, signal: Signal) => {\n switch (signal.tag) {\n case ShowPopup: {\n if (!signal.data.content) {\n return state\n }\n return state.merge({\n content: signal.data.content,\n contentProps: signal.data.contentProps,\n show: true,\n })\n }\n case HidePopup: {\n return state.merge({ show: false })\n }\n default:\n return state\n }\n}\n/** @deprecated */\nexport const state$ = attachDriver({ path: 'popup', driver: popupDriver })\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport type { Contract } from '@mobi/web-native-comms'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { ShowPopup, HidePopup } from '@core/Components/Popup/driver'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { subscribeToNative, sendToNative, isReactNativeApp } from '@mobi/web-native-comms/web'\n\nexport function ShowNotificationAuthPopup({\n reason,\n notificationAuthStatus,\n}: {\n reason: string\n notificationAuthStatus: Contract['RESPONSE_PUSH_AUTH_STATUS']['status']\n}): void {\n ShowPopup({\n content: NotificationAuthPopup,\n contentProps: { reason, notificationAuthStatus },\n })\n}\n\nexport function checkNotificationStatusAsync(): Promise {\n const promise = new Promise(resolve => {\n if (isReactNativeApp) {\n const { dispose } = subscribeToNative('RESPONSE_PUSH_AUTH_STATUS', payload => {\n dispose()\n resolve(payload)\n })\n sendToNative('REQUEST_PUSH_AUTH_STATUS')\n } else if (process.env.NODE_ENV === 'development') {\n resolve({\n status: 'Authorized',\n fcmRegistrationToken: 'mock',\n deviceId: 'mock-device-id',\n })\n }\n else {\n resolve({ status: 'NotDetermined' })\n }\n })\n return promise\n}\n\nfunction NotificationAuthPopup({\n reason,\n notificationAuthStatus,\n}: {\n reason: string\n notificationAuthStatus: Contract['RESPONSE_PUSH_AUTH_STATUS']['status']\n}): JSX.Element {\n const enableHandler = notificationAuthStatus === 'NotDetermined' ? hardReprompt : openSettings\n\n return (\n \n \n \n Enable Notifications\n \n {reason}\n \n \n {notificationAuthStatus === 'NotDetermined' ? 'Enable Notifications' : 'Open Settings'}\n \n \n \n \n Maybe Later\n \n \n \n )\n}\n\nfunction hardReprompt() {\n if (isReactNativeApp) {\n sendToNative('SHOW_PUSH_AUTH')\n }\n HidePopup()\n}\n\nfunction openSettings() {\n if (isReactNativeApp) {\n const { dispose } = subscribeToNative('USER_OPENED_NOTIFICATION_SETTINGS', () => {\n dispose()\n HidePopup()\n })\n sendToNative('UPDATE_PUSH_NOTIFICATION_SETTINGS')\n }\n}\n\nconst IconStyled = styled(Icon)({\n margin: '3rem 0rem 2rem',\n})\n\nconst NotificationAuthPopupTitleStyled = styled.div({\n fontSize: '2rem',\n})\n\nconst NotificationAuthDescriptionStyled = styled.div({\n fontSize: '1.4rem',\n width: '90%',\n margin: '1rem 0',\n textAlign: 'center',\n})\n\nconst ButtonStyled = styled.div({\n fontSize: '1.4rem',\n width: '92%',\n margin: '1rem 0',\n})\n\nconst NotificationAuthPopupContainerStyled = styled.div({\n top: '50%',\n minHeight: '20rem',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n})\n","import { RootState } from '@core/Store'\n\nexport function getRegisteredNotifications(state: RootState) {\n return state.notifications.notifications\n}\n","import dayjs from 'dayjs'\nimport React from 'react'\nimport { NotificationTime } from '../../types'\n\nconst notificationTimeOptions: NotificationTime[] = [1, 5, 10, 15]\n\n/** a hook to only render valid notification times and rerender component when a time lapses so it is now hidden */\nexport const useValidNotificationOptions = (eventStartTime: string): NotificationTime[] => {\n const now = dayjs()\n const startTime = dayjs(eventStartTime)\n const minutesTillStart = startTime.diff(now, 'minute')\n const [validTimes, setValidTimes] = React.useState(() =>\n notificationTimeOptions.filter(option => option <= minutesTillStart)\n )\n\n React.useEffect(() => {\n if (!validTimes.length) {\n return\n }\n const now = dayjs()\n const nextNotificationInterval = Math.max(...validTimes)\n const notificationTime = startTime.subtract(nextNotificationInterval, 'minute')\n const timeTillNotification = notificationTime.valueOf() - now.valueOf()\n const timer = setTimeout(() => {\n // notification was sent out. re render component with that time option filtered out\n const now = dayjs()\n const minutesTillStart = startTime.diff(now, 'minute')\n setValidTimes(notificationTimeOptions.filter(option => option <= minutesTillStart))\n }, timeTillNotification)\n\n return () => clearTimeout(timer)\n }, [startTime, validTimes])\n\n return validTimes\n}\n","import React, { useRef } from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { isReactNativeAndroid, isReactNativeApp } from '@mobi/web-native-comms/web'\nimport {\n TimePickerPopover,\n type RaceAlertAnalyticsData,\n} from './TimePickerPopover/TimePickerPopover'\nimport { NotificationButtonStyled } from './NotificationButton.styles'\nimport {\n checkNotificationStatusAsync,\n ShowNotificationAuthPopup,\n} from '@core/Areas/Settings/Components/PayoutNotification/PayoutNotificationPopup'\nimport { useClickOutside } from '@core/Utils/hooks/useClickOutside'\nimport { useSelector } from 'react-redux'\nimport { getRegisteredNotifications } from '../Store/selectors'\nimport { registerNotification, unregisterNotification } from '../Store'\nimport { store } from '@core/Store'\nimport { useValidNotificationOptions } from './hooks/useValidNotificationTimes'\nimport { NotificationTime, RaceNotificationEventId, SportNotificationEventId } from '../types'\nimport { addToast, ToastContent } from '@mobi/component-library/Feedback/Toast'\n\nexport function NotificationButton({\n eventId,\n ast,\n isHeaderPinned,\n deepLink,\n eventName,\n eventType,\n}: {\n deepLink?: string\n /** the title shown in the push notification */\n eventName: string\n ast: string\n isHeaderPinned?: boolean\n} & (\n | { eventType: Extract; eventId: RaceNotificationEventId }\n | { eventType: Extract; eventId: SportNotificationEventId }\n)) {\n if (!isReactNativeApp && process.env.NODE_ENV !== 'development') {\n return null\n }\n\n return (\n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst NotificationButtonComponent: React.FC<\n NotificationDetails & {\n isHeaderPinned?: boolean\n }\n> = props => {\n const { eventId, ast, isHeaderPinned } = props\n\n const registeredNotifications = useSelector(getRegisteredNotifications)\n const selectedNotificationTimes = registeredNotifications[eventId] || []\n\n const validNotificationOptions = useValidNotificationOptions(ast)\n\n const [selectedTimes, setSelectedTimes] = React.useState>(\n () => new Set(selectedNotificationTimes)\n )\n const prevSelectedTimes = new Set(selectedTimes)\n\n const [shouldShake, setShouldShake] = React.useState(false)\n const [isTimeSelectPopoverOpen, setIsTimeSelectPopoverOpen] = React.useState(false)\n\n const popoverRef = useRef(null)\n\n useClickOutside(popoverRef, () => {\n setIsTimeSelectPopoverOpen(false)\n })\n\n const analyticsDataRef = React.useRef()\n analyticsDataRef.current = { selectedTimes, ast, isHeaderPinned, eventId }\n\n if (!validNotificationOptions.length) {\n return null\n }\n\n const isNotificationOn =\n Array.from(selectedTimes.values()).some(x => validNotificationOptions.includes(x)) ||\n selectedNotificationTimes.some(x => validNotificationOptions.includes(x))\n\n const onNotificationToggle = async (\n action: 'register' | 'deregister',\n _selectedTimes?: Set\n ) => {\n const notificationStatus = await checkNotificationStatusAsync()\n\n if (notificationStatus.status !== 'Authorized') {\n ShowNotificationAuthPopup({\n reason:\n 'Notifications must be enabled on TABtouch to set a race alert. Enable notifications then try again.',\n notificationAuthStatus: notificationStatus.status,\n })\n return\n }\n\n const fcmToken = notificationStatus.fcmRegistrationToken\n\n if (!fcmToken) {\n addToast({\n id: 'alert-error',\n isDismissable: true,\n content: (\n \n ),\n })\n\n return\n }\n\n let respSuccess = false\n if (action === 'register') {\n respSuccess = await register(\n props,\n fcmToken,\n Array.from(_selectedTimes ?? []).sort((a, b) => a - b),\n isReactNativeAndroid\n )\n } else if (action === 'deregister') {\n respSuccess = await unregister({ eventId, fcmToken })\n }\n\n if (!respSuccess) {\n setSelectedTimes(prevSelectedTimes)\n addToast({\n id: 'alert-error',\n isDismissable: true,\n content: ,\n })\n }\n }\n\n const onRegister = (notificationTimes: Set) => {\n setShouldShake(true)\n setTimeout(() => setShouldShake(false), 820)\n onNotificationToggle('register', notificationTimes)\n }\n\n const onDeregister = () => onNotificationToggle('deregister')\n\n return (\n
      \n \n {\n e.stopPropagation()\n setIsTimeSelectPopoverOpen(prev => !prev)\n }}\n >\n \n \n \n\n {isTimeSelectPopoverOpen && (\n }\n />\n )}\n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction register(\n details: NotificationDetails,\n fcmToken: string,\n minutesBeforeStart: NotificationTime[],\n isAndroid: boolean\n) {\n const payload: RaceRegistrationV2Body = {\n eventId: details.eventId,\n eventName: details.eventName,\n eventType: details.eventType,\n ast: details.ast,\n fcmToken,\n minutesBeforeStart: minutesBeforeStart.join(','),\n deepLink: details.deepLink,\n isAndroid,\n }\n\n // use fancy new v2\n return fetch('/api/notification/v2/register', {\n method: 'POST',\n body: JSON.stringify(payload),\n })\n .then(() => {\n store.dispatch(\n registerNotification({ eventId: details.eventId, notificationTimes: minutesBeforeStart })\n )\n addToast({\n id: 'alert-success',\n isDismissable: true,\n content: ,\n })\n return true\n })\n .catch(() => false)\n}\n\nfunction unregister(raceDeregistration: { eventId: string; fcmToken: string }) {\n return fetch('/api/notification/deregister', {\n method: 'POST',\n body: JSON.stringify(raceDeregistration),\n })\n .then(() => {\n store.dispatch(unregisterNotification(raceDeregistration.eventId))\n addToast({\n id: 'alert-cancelled',\n isDismissable: true,\n content: ,\n })\n return true\n })\n .catch(() => false)\n}\n\n// =====\n// Style\n// =====\n\nconst ShakeWrapperStyled = styled.div<{ shake: boolean }>(\n {\n display: 'inline-block',\n\n '@keyframes shakeAnimation': {\n '10%, 90%': {\n transform: 'translate3d(-0.1rem, 0, 0)',\n },\n '20%, 80%': {\n transform: 'translate3d(0.1rem, 0, 0)',\n },\n '30%, 50%, 70%': {\n transform: 'translate3d(-0.1rem, 0, 0)',\n },\n '40%, 60%': {\n transform: 'translate3d(0.1rem, 0, 0)',\n },\n },\n },\n ({ shake }) =>\n shake && {\n animation: 'shakeAnimation 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both',\n }\n)\n\n// =====\n// Types\n// =====\n\nexport type NotificationEventType = 'Race' | 'Sport'\n\ninterface NotificationDetails {\n eventId: string\n deepLink: string | null\n eventType: NotificationEventType\n eventName: string\n ast: string\n}\n\ninterface RaceRegistrationV2Body {\n /** This is the id of the race/sport game etc */\n eventId: string\n /** event start time */\n ast: string\n fcmToken: string\n minutesBeforeStart: string\n /** Name to show in notification text */\n eventName: string\n /** Optional Notification url link */\n deepLink: string | null\n isAndroid: boolean\n eventType: NotificationEventType\n}\n","import dayjs from 'dayjs'\nimport React from 'react'\nimport { NotificationButton } from '../../../Notifications/NotificationButton/NotificationButton'\nimport type { RaceStatus } from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport { buildToteRaceUri } from '../../helpers'\n\ntype Props = {\n raceStatus: RaceStatus\n raceTime: Date\n meetingId: string\n raceNumber: number\n meetingName: string\n meetingDate: string\n isHeaderPinned?: boolean\n}\n\n/** Race alert button - RN only */\nexport const RaceNotificationButton: React.FC = ({\n raceStatus,\n raceTime,\n meetingId,\n raceNumber,\n meetingDate,\n meetingName,\n isHeaderPinned,\n}) => {\n const expiryTime = React.useMemo(() => dayjs(raceTime).subtract(1, 'm'), [raceTime])\n const checkIfTimerExpired = React.useCallback(() => expiryTime.isBefore(Date.now()), [expiryTime])\n\n const [hasTimerExpired, setHasTimerExpired] = React.useState(checkIfTimerExpired)\n\n React.useEffect(() => {\n const hasExpired = checkIfTimerExpired()\n setHasTimerExpired(hasExpired)\n\n if (hasExpired) return undefined\n\n const timerId = setInterval(() => {\n if (!checkIfTimerExpired()) return\n setHasTimerExpired(true)\n clearInterval(timerId)\n }, 1000)\n return () => clearInterval(timerId)\n }, [checkIfTimerExpired])\n\n const link = React.useMemo(\n () =>\n window.location.origin +\n buildToteRaceUri({\n meetingId,\n meetingDate,\n raceNumber,\n }),\n [meetingId, meetingDate, raceNumber]\n )\n\n if (raceStatus === 'Released' || raceStatus === 'Abandoned' || hasTimerExpired) return null\n\n return (\n \n )\n}\n","import React, { useMemo } from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, layering, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge/StatusBadge'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { RaceInfoWrapperWithTextExpand } from '@core/Areas/Racing/Components/Shared/RaceInfoWrapperWithTextExpand'\nimport { DOCKED_EXPAND_ANIMATION_MS } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer/constants'\nimport { useHeaderPinnedState } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer/Hooks/useHeaderPinnedState'\nimport type {\n RaceListEntry,\n RaceListResponse,\n RaceStatus,\n} from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport { SkyVideoButton, SkyVideoButtonRace } from './Components/SkyVideoButton'\nimport { RaceNotificationButton } from '@core/Areas/Racing/Components/RaceNotificationButton'\nimport { getSimpleRaceStatusText, meetingIdToContestType } from '@core/Areas/Racing/helpers'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks'\nimport { ResultsPageDataTransferObject } from '@mobi/api-types'\nimport dayjs from 'dayjs'\nimport { useFeature } from '@core/Utils/hooks'\n\nconst enum LocalConstants {\n PinnedClassName = 'js-race-info--pinned',\n StatusBadgeClassName = 'js-race-info__status-badge',\n}\n\nexport const RaceInfoHeader: React.FC<\n { currentRace: RaceListEntry; isRacingWA?: boolean | null } & Pick<\n RaceListResponse,\n 'meetingId' | 'meetingDate' | 'courseName'\n >\n> = ({ currentRace, meetingDate, meetingId, courseName, isRacingWA }) => {\n const { isHeaderPinned, top, wrapperElRef } = useHeaderPinnedState()\n\n const isRaceOpenForBetting = currentRace.raceStatus === 'Open'\n const raceStartTime = new Date(currentRace.advertisedStartTime)\n const raceStatusText = useMemo(\n () => getSimpleRaceStatusText(currentRace.raceStatus),\n [currentRace.raceStatus]\n )\n\n const raceStatusesWithPlacings: RaceStatus[] = ['Interim', 'Results', 'Released']\n\n const theDate = dayjs(meetingDate).format('YYYY-MM-DD')\n const { race } = useRacePageData({\n meetingDate: theDate,\n meetingId,\n raceNumber: currentRace.raceNumber,\n })\n\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n const videoKey = (race as ResultsPageDataTransferObject)?.RaceReplay?.VideoKey\n\n const raceCode = meetingIdToContestType(meetingId) ?? 'races'\n\n const raceProp: SkyVideoButtonRace = {\n ...(currentRace.raceKey && {\n raceReplay: {\n raceNumber: currentRace.raceNumber,\n trackName: courseName,\n raceReplayKey: videoKey,\n raceCode,\n meetingDate,\n },\n }),\n advertisedStartTime: currentRace.advertisedStartTime,\n raceStatus: currentRace.raceStatus,\n skyTvChannelId: currentRace.skyTvChannelId ?? '',\n }\n\n return (\n \n \n {currentRace.distance != 0 && `${currentRace.distance}m · `}\n {currentRace.raceType && `${currentRace.raceType}`}\n \n }\n >\n <>\n {currentRace.raceKey && (\n \n )}\n\n {isRaceOpenForBetting ? (\n \n ) : (\n \n \n {raceStatusesWithPlacings.includes(currentRace.raceStatus) ? (\n <>\n {raceStatusText}\n {currentRace.shortResultString}\n \n ) : (\n raceStatusText\n )}\n \n \n )}\n\n {((hasRaceReplayImprovements && videoKey != null) ||\n (isRacingWA !== null && currentRace.skyTvChannelId != null)) && (\n \n )}\n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n position: 'sticky',\n top: '-1px',\n zIndex: layering.stickyPageElements,\n padding: `${spacing.sm} 0`,\n transition: `top ${DOCKED_EXPAND_ANIMATION_MS}ms ease`,\n\n background: colors.white,\n color: colors.black,\n fontFamily: font.family.primary,\n\n // Performant drop shadow w/ fade animation\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: -1,\n top: 0,\n bottom: 0,\n width: '100%',\n boxShadow: shadow.md,\n opacity: 0,\n pointerEvents: 'none',\n transition: 'opacity 0.4s ease',\n },\n\n [`.${LocalConstants.StatusBadgeClassName}`]: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: '5.2rem',\n\n '> span:first-of-type': {\n fontSize: font.size.xs.fontSize,\n letterSpacing: font.size.xs.letterSpacing,\n lineHeight: font.size.xs.lineHeight,\n\n color: colors.neutral[800],\n },\n },\n\n // Pinned to show race # + meeting, hide race name\n [`&.${LocalConstants.PinnedClassName}`]: { '&::after': { opacity: 1 } },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { radius, colors, font } from '@mobi/component-library/Theme/Common'\nimport { useRacePromotions } from '@core/Areas/Racing/Hooks/RacePromotion/useRacePromotions'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { filterRacePromotionsByEntitlement } from '@core/Utils/race-promotions'\nimport type { RaceListEntry } from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport { RaceCardIcon } from '@core/Components/Icons'\n\nconst enum LocalConstants {\n RaceButtonActiveClassName = 'js-race-btn--active',\n RaceButtonClosedClassName = 'js-race-btn--closed',\n QuaddieIndicatorClassName = 'js-race-btn__quaddie-ind',\n SpecialIndicatorClassName = 'js-race-btn__special-ind',\n}\n\nexport const RaceButton: React.FC<{\n meetingId: string\n meetingDate: string\n race: RaceListEntry\n isSelected: boolean\n firstLegsOfQuaddies: Set\n onClick: (raceNumber: number) => void\n activeIndicatorRef: React.RefObject\n scrollContainerRef: React.RefObject\n}> = ({\n meetingId,\n meetingDate,\n race,\n isSelected,\n firstLegsOfQuaddies,\n onClick,\n activeIndicatorRef,\n scrollContainerRef,\n}) => {\n const buttonRef = React.useRef(null)\n\n const { promotions } = useRacePromotions({\n meetingDate: new Date(meetingDate),\n meetingId,\n raceNumber: race.raceNumber,\n })\n const isEntitled = useInducementService()\n\n const entitledPromotions = React.useMemo(\n () => filterRacePromotionsByEntitlement(promotions, isEntitled),\n [promotions, isEntitled]\n )\n\n const repositionActiveIndicator = React.useCallback(() => {\n if (!buttonRef.current || !activeIndicatorRef.current) return\n activeIndicatorRef.current.style.transform = `translateX(${buttonRef.current.offsetLeft}px)`\n }, [activeIndicatorRef])\n\n React.useEffect(() => {\n if (!isSelected || !buttonRef.current || !scrollContainerRef.current) return\n repositionActiveIndicator()\n scrollContainerRef.current.scrollLeft =\n buttonRef.current.offsetLeft - buttonRef.current.offsetWidth\n }, [isSelected, scrollContainerRef, repositionActiveIndicator])\n\n React.useEffect(() => {\n if (!window.ResizeObserver || !isSelected) return\n const observer = new ResizeObserver(repositionActiveIndicator)\n observer.observe(document.body)\n return () => observer.disconnect()\n }, [isSelected, repositionActiveIndicator])\n\n const buttonClassName = isSelected\n ? LocalConstants.RaceButtonActiveClassName\n : race.raceStatus !== 'Open'\n ? LocalConstants.RaceButtonClosedClassName\n : ''\n\n const isQuaddieIndicatorShown = firstLegsOfQuaddies.has(race.raceNumber)\n const isSpecialIndicatorShown = race.raceStatus === 'Open' && entitledPromotions.length > 0\n\n return (\n onClick(race.raceNumber)}\n className={buttonClassName}\n >\n <>R{race.raceNumber}\n\n {(isQuaddieIndicatorShown || isSpecialIndicatorShown) && (\n
      \n {isQuaddieIndicatorShown && (\n \n {firstLegsOfQuaddies.size > 1 && Math.min(...firstLegsOfQuaddies) === race.raceNumber\n ? 'EQ'\n : 'Q'}\n \n )}\n\n {isSpecialIndicatorShown && (\n \n \n \n )}\n
      \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst RaceButtonStyled = styled.button({\n flex: 1,\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n WebkitUserSelect: 'none',\n userSelect: 'none',\n\n margin: 0,\n padding: 0,\n border: 0,\n borderRadius: '1.2rem',\n\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n letterSpacing: font.size.lg.letterSpacing,\n fontWeight: font.weight.medium,\n textTransform: 'uppercase',\n\n color: colors.black,\n backgroundColor: 'transparent',\n cursor: 'pointer',\n\n transition: 'color 0.2s ease',\n\n [`&.${LocalConstants.RaceButtonActiveClassName}`]: {\n color: colors.white,\n },\n\n [`&.${LocalConstants.RaceButtonClosedClassName}`]: {\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n\n // Indicators\n '> div': {\n position: 'absolute',\n top: 0,\n left: '50%',\n display: 'flex',\n gap: '0.2rem',\n transform: 'translate(-50%, -60%)',\n height: font.size.xs.lineHeight,\n lineHeight: 1,\n\n '> span': {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '1.5rem',\n height: font.size.xs.lineHeight,\n padding: '0 0.3rem',\n borderRadius: radius.smx1,\n\n fontSize: font.size.xs.fontSize,\n lineHeight: font.size.xs.lineHeight,\n\n [`&.${LocalConstants.QuaddieIndicatorClassName}`]: {\n color: colors.studio[500],\n backgroundColor: colors.lavender[50],\n },\n [`&.${LocalConstants.SpecialIndicatorClassName}`]: {\n color: colors.warning[500],\n backgroundColor: colors.warning[50],\n\n '> svg': {\n width: '100%',\n height: font.size.xs.fontSize,\n },\n },\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport type { RaceListResponse } from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport { RaceButton } from './RaceButton'\n\nconst enum LocalConstants {\n RaceButtonWidth = '3.6rem',\n}\n\nexport const RaceSelection: React.FC<{\n meetingId: string\n meetingDate: string\n races: RaceListResponse['races']\n selectedRace: number\n onRaceSelected: (raceNumber: number) => void\n firstLegsOfQuaddies: Set\n}> = ({ meetingId, meetingDate, races, selectedRace, firstLegsOfQuaddies, onRaceSelected }) => {\n const scrollContainerRef = React.useRef(null)\n const activeIndicatorRef = React.useRef(null)\n\n return (\n \n {races.map(race => (\n
    • \n \n
    • \n ))}\n\n \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst RacesListStyled = styled.ol({\n position: 'relative',\n display: 'flex',\n padding: '1rem 0',\n paddingLeft: spacing.md,\n margin: 0,\n listStyle: 'none',\n overflowX: 'auto',\n overscrollBehavior: 'contain',\n\n scrollbarWidth: 'thin',\n scrollBehavior: 'smooth',\n scrollbarColor: colors.neutral[300] + ' ' + colors.surface[50],\n\n '@media (pointer: coarse)': {\n scrollbarWidth: 'none',\n '::-webkit-scrollbar': { display: 'none' },\n },\n\n '> li': {\n zIndex: 1,\n display: 'flex',\n flexDirection: 'column',\n marginRight: spacing.sm,\n minWidth: LocalConstants.RaceButtonWidth,\n maxWidth: LocalConstants.RaceButtonWidth,\n height: '2.4rem',\n },\n\n '> li:last-of-type': { paddingRight: spacing.md },\n\n // Active Indicator\n '> span': {\n position: 'absolute',\n left: 0,\n zIndex: 0,\n width: LocalConstants.RaceButtonWidth,\n height: '2.4rem',\n transform: `translateX(${spacing.md})`,\n transition: 'transform 0.2s ease',\n borderRadius: radius.lgx1,\n backgroundColor: colors.studio[500],\n },\n})\n","import React from 'react'\nimport styled, { CSSObject } from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { colors } from '@mobi/component-library/Theme/Common'\n\nexport const WeatherIcon: React.FC<{ courseWeather: string }> = ({ courseWeather }) => {\n const weatherIconName = getWeatherIcon(courseWeather)\n\n if (!weatherIconName) return null\n\n return (\n \n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst sunnyWeather = ['sunny', 'clear', 'good', 'fine']\nconst cloudyWeather = ['cloudy', 'cloud']\nconst partlyCloudyWeather = ['overcast', 'average']\nconst rainyWeather = [\n 'rain',\n 'rainy',\n 'raining',\n 'drizzle',\n 'storm',\n 'stormy',\n 'awful',\n 'bad',\n 'showery',\n 'showers',\n]\n\nconst getWeatherIcon = (courseWeather: string): WeatherIconTypes | null => {\n const weather = courseWeather.toLowerCase()\n\n if (sunnyWeather.includes(weather)) return 'DuocolorSun'\n if (cloudyWeather.includes(weather)) return 'DuocolorCloud01'\n if (partlyCloudyWeather.includes(weather)) return 'DuocolorCloudSun02'\n if (rainyWeather.includes(weather)) return 'DuocolorCloudRaining05'\n\n return null\n}\n\n// ============\n// Local Styles\n// ============\n\nconst WrapperStyled = styled.span(\n {\n display: 'flex',\n alignItems: 'center',\n\n // Styles to add multiple colours to SVGs\n '> span svg': { fill: 'none' },\n },\n {\n '&.DuocolorSun': {\n '> span svg': { color: colors.warning[500] },\n },\n\n '&.DuocolorCloudSun02': {\n transform: 'translateY(-0.1rem)',\n 'svg > path:first-of-type': { color: colors.warning[500] },\n },\n\n '&.DuocolorCloudRaining05': {\n 'svg > path:first-of-type': { color: colors.mariner[500] },\n },\n } as Partial>\n)\n\n// =====\n// Types\n// =====\n\ntype WeatherIconTypes = Extract<\n React.ComponentProps['name'],\n 'DuocolorSun' | 'DuocolorCloud01' | 'DuocolorCloudSun02' | 'DuocolorCloudRaining05'\n>\n","import React from 'react'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const SkeletonLoader = () => {\n return (\n
      \n \n
      \n \n {/* Meeting Dropdown */}\n \n {/* Weather */}\n \n \n
      \n {/* Race Seletor */}\n
      \n \n {Array.apply(0, new Array(5)).map((_, i: number) => (\n \n ))}\n \n
      \n
      \n \n {/* Race Info */}\n \n \n \n \n\n {/* Sky & Time */}\n \n \n \n \n \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useHistory } from 'react-router-dom'\nimport { newTheme } from '@mobi/component-library/Theme'\nimport { getPayIndicatorText, setSelectedRace } from '@core/Areas/Racing/helpers'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { RaceCodesLowerCase } from '../../Types/MeetingInformation'\nimport { useRaceList } from '../../Hooks/useRaceList/useRaceList'\nimport type { RaceListResponse } from '../../Hooks/useRaceList/types'\nimport { MeetingsDropdown, PayoutInformation, RaceSelection, RaceInfoHeader } from './Components'\nimport { getRaceLink } from '../../helpers/getRaceLink'\nimport { useEventAggregator } from '@core/Utils/hooks/useEventAggregator'\nimport { CHANGE_BET_TYPE_EVENT } from '@core/Areas/RaceCard/constants'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { WeatherIcon } from '../WeatherIcon'\nimport { SkeletonLoader } from './Components/SkeletonLoader'\nimport { DateTime } from '@core/Components/DateTime'\n\nexport const RaceNavigation: React.FC<{\n raceNumber: number\n meetingId: string\n meetingDate: string\n meetingSeq?: string\n product?: string\n fooPayIndicator?: number\n isRacingWA?: boolean | null\n}> = ({ raceNumber, meetingId, meetingDate, meetingSeq, product, fooPayIndicator, isRacingWA }) => {\n const history = useHistory()\n const isAllUpSelected = useIsAllUpSelected()\n const { meeting } = useRaceList(meetingDate, meetingId, meetingSeq, product)\n\n const races = meeting?.races\n const currentRace = races?.find(race => race.raceNumber === raceNumber)\n\n const hasData = meeting != undefined && races != undefined && currentRace != undefined\n if (!hasData) return \n\n const isTrackConditionKnown = meeting.courseCondition.toLowerCase() !== 'unknown'\n\n const onRaceSelected = (races: RaceListResponse['races'], raceNumber: number): void => {\n const selectedRace = races.find(race => race.raceNumber === raceNumber)\n\n if (selectedRace != undefined) {\n // To determine whether we are navigating between FOO and Matched\n const bothTote = !currentRace.fixed && !selectedRace?.fixed\n if (bothTote) setSelectedRace(selectedRace.raceNumber)\n else {\n const selectRaceLink = getRaceLink({\n meetingId: meeting.meetingId,\n raceNumber: selectedRace.raceNumber,\n meetingDate: meeting.meetingDate,\n code: meeting.meetingCode,\n meetingSeq: meeting.fixed?.competitionSequence,\n product: selectedRace.fixed?.product,\n raceSeq: selectedRace.fixed?.eventSequence,\n isFOO: !!selectedRace.fixed,\n })\n history.push(selectRaceLink)\n }\n }\n }\n\n return (\n <>\n \n
      \n \n\n
      \n \n \n \n {isTrackConditionKnown && (\n {toTitleCase(meeting.courseCondition)}\n )}{' '}\n \n
      \n
      \n\n {!isAllUpSelected && (\n
      \n onRaceSelected(races, raceNumber)}\n firstLegsOfQuaddies={\n new Set(races.filter(race => race.quaddie.includes(1)).map(race => race.raceNumber))\n }\n />\n
      \n )}\n
      \n\n {!isAllUpSelected && (\n <>\n \n\n \n \n )}\n\n
      \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst useIsAllUpSelected = () => {\n const eventAggregator = useEventAggregator()\n const [isAllUp, setIsAllUp] = React.useState(false)\n\n React.useEffect(() => {\n eventAggregator.subscribe(CHANGE_BET_TYPE_EVENT, (params: { betType: BetType }) =>\n setIsAllUp(params.betType === BetType.AllUp)\n )\n return () => {\n eventAggregator.unsubscribe(CHANGE_BET_TYPE_EVENT, (params: { betType: BetType }) =>\n setIsAllUp(params.betType === BetType.AllUp)\n )\n }\n }, [eventAggregator])\n\n return isAllUp\n}\n\n// ======\n// Styles\n// ======\n\nconst RaceNavigationStyled = styled.nav({\n paddingTop: '0.5rem',\n color: newTheme.colors.black,\n fontFamily: newTheme.font.family.primary,\n fontSize: newTheme.font.size.sm.fontSize,\n lineHeight: newTheme.font.size.sm.lineHeight,\n\n // Meeting Dropdown & Weather\n '> div:first-of-type': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingLeft: newTheme.spacing.md,\n paddingRight: newTheme.spacing.md,\n\n '> div:last-of-type': {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n\n '> span:first-of-type': {\n fontWeight: newTheme.font.weight.semibold,\n paddingRight: newTheme.spacing.smx1,\n },\n },\n },\n\n // Race Number Selection\n '> div:nth-of-type(2)': {\n overflow: 'hidden',\n },\n\n '& ~ hr:first-of-type': {\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n border: 0,\n height: '0.05rem',\n borderBottom: '0.05rem solid ' + newTheme.colors.neutral[200],\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { dayjs } from '@mobi/utils/date'\nimport { toMoney } from '@mobi/utils/money'\nimport { GridCell, GridCellStyled } from '@mobi/component-library/Common/Grid'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport { RunnerExpanded, RunnerNumber } from '@core/Areas/RaceCard/Components'\nimport type { RaceCodes, RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport {\n ButtonWrapStyled,\n ImageGridCellStyled,\n PillStyled,\n PropositionFooResultsStyled,\n PropositionOddsStyled,\n FavouriteIconWrapper,\n PropositionResultsStyled,\n SilkFOODivImageStyled,\n SilkFOODivImageResultsStyled,\n SilkImageStyled,\n SingleSilkDivImageResultsStyled,\n} from '../RaceCardFixedOnly.styles'\nimport type { Proposition, SelectedFOOProposition } from '../Data/types'\nimport { RaceProduct, RaceStatus } from '../constants'\nimport { FieldsResults } from '@core/Areas/Racing/Components/FieldSummary/FieldsResults'\nimport { Fields } from '@core/Areas/Racing/Components/FieldSummary/Fields'\nimport type { FieldsResponse } from '@core/Areas/RaceCardFixedOnly/Hooks/useRaceFieldSummaryData/api'\nimport { useFeature } from '@core/Utils/hooks'\nimport { getSingleSilkImageUri } from '@core/Areas/RaceCardFixedOnly/Hooks/Silks/api'\nimport { trackEvent, trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { SingleSilkImageStyled } from '@core/Components/SilkImage/SingleSilkImage.styles'\n\nconst enum LocalConstants {\n runnerNameClassName = 'foo__runner-number',\n scratchedDeductionsClassName = 'foo__runner-scratched-deductions',\n}\n\nexport const PropositionItem: React.FC<{\n fieldSummary?: FieldsResponse\n proposition: Proposition\n raceProduct: RaceProduct\n raceStatus: RaceStatus\n raceCode: RaceCodesLowerCase\n selectedItem: SelectedFOOProposition | null\n onItemSelected: (item: SelectedFOOProposition) => void\n isFieldSelected: boolean\n isStartingPriceAvailable: boolean\n payIndicator?: number\n racecourseSeq?: number | undefined\n meetingDate: string\n raceNumber: number\n raceLocation: string\n}> = ({\n fieldSummary,\n proposition,\n raceProduct,\n raceStatus,\n raceCode,\n selectedItem,\n onItemSelected,\n isFieldSelected,\n isStartingPriceAvailable,\n payIndicator,\n racecourseSeq,\n meetingDate,\n raceNumber,\n raceLocation,\n}) => {\n const [isRunnerExpanded, setIsRunnerExpanded] = React.useState(false)\n if (proposition.winReturn == null) {\n proposition.racingStatus = RaceStatus.Suspended\n }\n const isFormFeatureActive = useFeature('FOO_FORM_ENABLED')\n\n const boxNumber = getBoxNumber(proposition.name)\n\n const isWinner = proposition.resultPlace === 1\n const isScratched = proposition.racingStatus === RaceStatus.Scratched\n const isSuspended = proposition.racingStatus === RaceStatus.Suspended\n const isClosed =\n proposition.racingStatus === RaceStatus.Closed || raceStatus === RaceStatus.Closed\n const isAbandoned =\n proposition.racingStatus === RaceStatus.Abandoned || raceStatus === RaceStatus.Abandoned\n const isRaceFixedOddsOnly = raceProduct === RaceProduct.FixedOddsOnly\n const isFutureFinalField = raceProduct === RaceProduct.FutureFinalField\n const isBlackbookAvailable =\n isRaceFixedOddsOnly ||\n raceProduct === RaceProduct.FutureFinalField ||\n raceProduct === RaceProduct.FeatureRace\n const isRaceSettledOrResulted =\n raceStatus === RaceStatus.Settled || raceStatus === RaceStatus.Resulted\n const isBettingOpen =\n raceStatus === RaceStatus.Open && proposition.racingStatus === RaceStatus.Open\n\n const shouldShowDogSilks =\n raceCode == 'dogs' &&\n raceProduct == RaceProduct.Challenge &&\n boxNumber &&\n !proposition.name.includes('/')\n\n const shouldShowSpButton =\n isStartingPriceAvailable &&\n !isScratched &&\n (isBettingOpen || raceStatus === RaceStatus.Suspended)\n\n const isFieldSummaryPopulated = fieldSummary?.fields !== undefined\n\n function shouldShowFieldSummaryResults() {\n if (!isRaceFixedOddsOnly || !isFieldSummaryPopulated || isFieldSelected) return false\n return isRaceSettledOrResulted\n }\n function shouldShowFieldSummary() {\n if (!isRaceFixedOddsOnly || !isFieldSummaryPopulated) return false\n\n const isNotResultedWithStatus =\n !isRaceSettledOrResulted && (isScratched || isSuspended || isAbandoned || isClosed)\n\n const isNotResultedAndFieldSelectedWithStatus =\n !isRaceSettledOrResulted && isFieldSelected && isSuspended\n\n const isSettledOrResultedAndFieldSelected = isRaceSettledOrResulted && isFieldSelected\n\n const isRaceStatusMatching =\n isBettingOpen ||\n isNotResultedWithStatus ||\n isNotResultedAndFieldSelectedWithStatus ||\n isSettledOrResultedAndFieldSelected\n\n return isRaceStatusMatching\n }\n const isTrots = raceCode === 'trots'\n const isDogs = raceCode === 'dogs'\n const starterNumber = proposition.starterNumber\n const singleSilkImageUri = getSingleSilkImageUri({\n racecourseSeq,\n meetingDate,\n raceNumber,\n isTrots,\n isDogs,\n starterNumber,\n isFieldSummaryPopulated,\n })\n\n function shouldShowFieldSummaryToFFFRace() {\n if (!isFutureFinalField) {\n return false\n }\n if (!isFieldSummaryPopulated) {\n return false\n }\n const isNotResultedWithStatus =\n !isRaceSettledOrResulted && (isScratched || isSuspended || isAbandoned || isClosed)\n\n const isNotResultedAndFieldSelectedWithStatus =\n !isRaceSettledOrResulted && isFieldSelected && isSuspended\n\n const isSettledOrResultedAndFieldSelected = isRaceSettledOrResulted && isFieldSelected\n\n const isRaceStatusMatching =\n isBettingOpen ||\n isNotResultedWithStatus ||\n isNotResultedAndFieldSelectedWithStatus ||\n isSettledOrResultedAndFieldSelected\n\n return isRaceStatusMatching\n }\n\n const handleExpandProposition = () => {\n if (!isRunnerExpanded) {\n trackEvent(analyticsKeys.formOpened, {\n meetingName: raceLocation,\n meetingCode: raceCode,\n })\n } else {\n trackKey(analyticsKeys.formClosed)\n }\n\n setIsRunnerExpanded(curr => !curr)\n }\n\n return (\n <>\n \n {isRaceFixedOddsOnly && !isFieldSelected && isRaceSettledOrResulted && (\n \n {proposition.resultPlace && (\n \n {isFieldSummaryPopulated && singleSilkImageUri && (\n \n \n \n )}\n \n {positionToText(proposition.resultPlace)}\n \n \n )}\n \n )}\n\n {shouldShowDogSilks && (\n \n {boxNumber}\n \n )}\n\n \n {proposition.name.split('/').map(x => (\n \n {proposition.starterNumber && isBlackbookAvailable && (\n
      \n \n
      \n )}\n\n {x.trim()}\n\n {isScratched && (\n \n Scratched{' '}\n {proposition.scratchTime ? (\n {dayjs.tz(proposition.scratchTime).local().format('DD/MM, h:mma')}\n ) : (\n ''\n )}\n \n )}\n \n ))}\n\n {!isScratched && (\n \n {(shouldShowFieldSummary() || shouldShowFieldSummaryToFFFRace()) &&\n singleSilkImageUri && (\n \n )}\n {shouldShowFieldSummaryResults() &&\n fieldSummary?.fields\n .filter(itemField => itemField.starterNumber === proposition.starterNumber)\n .map(raceField => {\n return (\n \n )\n })}\n {(shouldShowFieldSummary() || shouldShowFieldSummaryToFFFRace()) &&\n fieldSummary?.fields\n .filter(itemField => itemField.starterNumber === proposition.starterNumber)\n .map(raceField => {\n return (\n
      \n \n
      \n )\n })}\n
      \n )}\n
      \n\n \n \n {isBettingOpen && (\n {\n e.stopPropagation()\n onItemSelected({ ...proposition, isStartingPrice: false })\n }}\n priceWin={proposition.winReturn.toFixed(2)}\n pricePlace={proposition.placeReturn?.toFixed(2)}\n starterNumber={proposition.starterNumber}\n centerContent={!isRaceFixedOddsOnly}\n />\n )}\n\n {isSuspended &&\n (shouldShowSpButton ? (\n \n ) : (\n Suspended\n ))}\n\n {isScratched && (\n \n \n {!proposition.winDeduction && !proposition.placeDeduction ? (\n 'No deductions'\n ) : (\n <>\n {`W ${toMoney(proposition.winDeduction || 0)} P ${toMoney(\n proposition.placeDeduction || 0\n )}`}\n Deductions applied\n \n )}\n \n \n )}\n\n {raceStatus !== RaceStatus.Open && !isSuspended && !isScratched && (\n \n {!isRaceFixedOddsOnly && isWinner && (\n Win\n )}\n\n {isStartingPriceAvailable && isWinner && proposition.spWinReturn && (\n \n {proposition.spWinReturn.toFixed(2)}\n \n )}\n\n {!isFieldSelected && isRaceFixedOddsOnly && isRaceSettledOrResulted && (\n \n {isWinner && (\n
      {proposition.winReturn && proposition.winReturn.toFixed(2)}
      \n )}\n {proposition.isFavourite && (\n \n \n \n )}\n\n {payIndicator &&\n proposition.resultPlace <= payIndicator &&\n proposition.placeReturn &&\n proposition.placeReturn.toFixed(2)}\n
      \n )}\n\n {(!isRaceFixedOddsOnly ||\n (isRaceFixedOddsOnly && isFieldSelected) ||\n (isRaceFixedOddsOnly && !isRaceSettledOrResulted)) && (\n \n {proposition.isFavourite && (\n \n \n \n )}\n\n {proposition.winReturn && proposition.winReturn.toFixed(2)}\n
      \n {proposition.placeReturn && proposition.placeReturn.toFixed(2)}\n
      \n )}\n
      \n )}\n
      \n\n {shouldShowSpButton && (\n \n {\n e.stopPropagation()\n onItemSelected({ ...proposition, isStartingPrice: true })\n }}\n priceWin='SP'\n pricePlace=''\n starterNumber={proposition.starterNumber}\n tidAttribute='data-tid-dividend-starting-price'\n />\n \n )}\n \n \n\n {isBlackbookAvailable && (\n \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst PropositionWrapperStyled = styled.div<{\n isWinnerHighlighted: boolean\n isScratched: boolean\n}>(\n {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n minHeight: '4rem',\n fontWeight: 'normal',\n textTransform: 'uppercase',\n fontSize: '1.4rem',\n borderBottom: '0.1rem solid ' + hexColors.gainsboro,\n '&:last-of-type': { border: 0 },\n\n [`.${LocalConstants.runnerNameClassName}`]: {\n '> div': {\n display: 'inline-flex',\n justifyContent: 'center',\n marginRight: '0.9rem',\n minWidth: '2.2rem',\n\n span: { flex: 1, textAlign: 'center' },\n },\n\n '> strong': {\n display: 'block',\n fontSize: '1.1rem',\n paddingLeft: 'calc(2.2rem + 0.9rem)',\n textDecoration: 'none',\n color: hexColors.darkGrey,\n\n span: { fontWeight: 'normal' },\n },\n },\n\n [`.${LocalConstants.scratchedDeductionsClassName}`]: {\n color: hexColors.grey,\n fontSize: '1.2rem',\n textTransform: 'none',\n\n span: { display: 'block', fontWeight: 'normal', fontSize: '1.1rem' },\n },\n },\n ({ isWinnerHighlighted, isScratched }) => ({\n backgroundColor: isWinnerHighlighted ? hexColors.blueDiamond : hexColors.white,\n color: isWinnerHighlighted ? hexColors.white : isScratched ? hexColors.grey : 'default',\n\n ['.' + LocalConstants.runnerNameClassName]: {\n '> span, > div': {\n textDecoration: isScratched ? 'line-through' : undefined,\n },\n },\n })\n)\n\n// =============\n// Local Helpers\n// =============\n\nconst getBoxNumber = (name: string): number | null => {\n for (let i = 10; i >= 1; i--) {\n if (name.toUpperCase().includes(`BOX ${i}`)) return i\n }\n return null\n}\n\nconst positionToText = (position: number): string | null =>\n ['1st', '2nd', '3rd', '4th'][--position] || null\n\nconst converRaceCodeLowercaseToRaceCode = (code: RaceCodesLowerCase): RaceCodes => {\n return (code.slice(0, 1).toUpperCase() + code.slice(1)) as RaceCodes\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { hexColors } from '@mobi/settings'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport {\n persistedSortOption as matchedSortOrder,\n setPersistedSortOption,\n} from '@classic/Betting-v2/Sorting/PersistedSorting'\nimport type { SortOption } from '@classic/Betting-v2/Sorting/types'\nimport type { Proposition, SelectedFOOProposition } from '../Data/types'\nimport { RaceProduct, RaceStatus } from '../constants'\nimport { PropositionItem } from './PropositionItem'\nimport { FieldsResponse } from '@core/Areas/RaceCardFixedOnly/Hooks/useRaceFieldSummaryData/api'\n\nconst enum LocalConstants {\n ActiveSortClassName = 'js-race-col-header__sort--active',\n}\n\nexport const PropositionList: React.FC<{\n raceStatus: RaceStatus\n raceProduct: RaceProduct\n fieldSummary?: FieldsResponse\n raceCode: RaceCodesLowerCase\n items: Proposition[]\n selectedItem: SelectedFOOProposition | null\n onItemSelected: (item: SelectedFOOProposition) => void\n isFieldSelected: boolean\n isStartingPriceAvailable: boolean\n payIndicator?: number\n racecourseSeq?: number | undefined\n meetingDate: string\n raceNumber: number\n raceLocation: string\n}> = ({\n fieldSummary,\n raceProduct,\n raceStatus,\n raceCode,\n items,\n selectedItem,\n onItemSelected,\n isFieldSelected,\n isStartingPriceAvailable,\n payIndicator,\n racecourseSeq,\n meetingDate,\n raceNumber,\n raceLocation,\n}) => {\n const isFixedOddsOrFutureFF =\n raceProduct === RaceProduct.FixedOddsOnly || raceProduct === RaceProduct.FutureFinalField\n\n const [sortOrder, setSortOrder] = React.useState(() =>\n translateMatchedPersistedSort(isFixedOddsOrFutureFF)\n )\n\n React.useEffect(() => {\n if (raceStatus === RaceStatus.Resulted || raceStatus === RaceStatus.Settled) {\n setSortOrder(isFieldSelected ? 'NumberAsc' : 'ResultAsc')\n }\n }, [isFieldSelected, raceStatus])\n\n let sortedItems: Proposition[] = []\n\n if (sortOrder) {\n sortedItems = Array.from(items).sort(sortOrderFns[sortOrder])\n }\n\n const handleSortOrderChange = React.useCallback(\n (property: Extract) => () => {\n setSortOrder(currSort => {\n if (property === 'Number') {\n const isDesc = currSort === 'NumberAsc'\n setPersistedSortOption({ property, direction: isDesc ? 'Descending' : 'Ascending' })\n return isDesc ? 'NumberDesc' : 'NumberAsc'\n }\n if (property === 'Name') {\n const isDesc = currSort == 'NameAsc'\n setPersistedSortOption({ property, direction: isDesc ? 'Descending' : 'Ascending' })\n return isDesc ? 'NameDesc' : 'NameAsc'\n }\n if (property === 'FixedPrice') {\n const isDesc = currSort == 'OddsAsc'\n setPersistedSortOption({ property, direction: isDesc ? 'Descending' : 'Ascending' })\n return isDesc ? 'OddsDesc' : 'OddsAsc'\n }\n return null\n })\n },\n []\n )\n\n const isRaceStatusOpenOrSuspended =\n raceStatus === RaceStatus.Open || raceStatus === RaceStatus.Suspended\n const shouldRenderStartingPriceColHeaderWithResults =\n isStartingPriceAvailable &&\n !isRaceStatusOpenOrSuspended &&\n items.some(runner => !!runner.spWinReturn)\n\n return (\n <>\n \n {isFixedOddsOrFutureFF ? (\n \n #{' '}\n \n \n ) : (\n \n Runner{' '}\n \n \n )}\n\n {shouldRenderStartingPriceColHeaderWithResults && SP}\n\n \n Fixed{' '}\n \n \n\n {isStartingPriceAvailable && isRaceStatusOpenOrSuspended && SP}\n \n\n {(sortOrder && sortedItems.length ? sortedItems : items).map(\n proposition =>\n shouldDisplayItem(raceProduct, raceStatus, proposition, isFieldSelected) && (\n \n )\n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst translateMatchedPersistedSort = (isNumberSortEnabled: boolean): SortOrder | null => {\n const isAscending = matchedSortOrder.direction === 'Ascending'\n if (matchedSortOrder.property === 'FixedPrice') return isAscending ? 'OddsAsc' : 'OddsDesc'\n if (isNumberSortEnabled) {\n if (matchedSortOrder.property === 'Number') return isAscending ? 'NumberAsc' : 'NumberDesc'\n } else {\n if (matchedSortOrder.property === 'Name') return isAscending ? 'NameAsc' : 'NameDesc'\n }\n return null\n}\n\nconst sortOrderFns: Record number> = {\n NumberAsc: (a, b) => a.starterNumber - b.starterNumber,\n NumberDesc: (a, b) => b.starterNumber - a.starterNumber,\n NameAsc: (a, b) => a.name.localeCompare(b.name),\n NameDesc: (a, b) => b.name.localeCompare(a.name),\n ResultAsc: (a, b) => a.resultPlace - b.resultPlace,\n OddsAsc: (a, b) => {\n // Scratched runners sorted to bottom of list\n if (a.scratchTime) {\n return 1\n } else if (b.scratchTime) {\n return -1\n }\n\n return a.winReturn - b.winReturn\n },\n OddsDesc: (a, b) => {\n // Scratched runners sorted to bottom of list\n if (a.scratchTime) {\n return 1\n } else if (b.scratchTime) {\n return -1\n }\n\n return b.winReturn - a.winReturn\n },\n}\n\nconst shouldDisplayItem = (\n raceProduct: RaceProduct,\n raceStatus: RaceStatus,\n proposition: Proposition,\n fieldSelected: boolean\n) =>\n raceProduct !== RaceProduct.FixedOddsOnly ||\n (raceStatus !== RaceStatus.Resulted && raceStatus !== RaceStatus.Settled) ||\n !!proposition.resultPlace ||\n fieldSelected\n\n// ======\n// Styles\n// ======\n\nconst SortRowStyled = styled.div({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-end',\n backgroundColor: colors.white,\n borderBottom: '0.1rem solid ' + hexColors.gainsboro,\n\n '& > button, & > span': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: '5rem',\n height: '4rem',\n marginRight: '1rem',\n padding: 0,\n border: 0,\n background: 0,\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.black,\n\n '> span': { paddingLeft: '0.3rem' },\n },\n\n 'button:first-of-type': {\n justifyContent: 'flex-start',\n marginRight: 'auto',\n marginLeft: '1rem',\n },\n\n [`& > button.${LocalConstants.ActiveSortClassName}`]: {\n fontWeight: font.weight.semibold,\n svg: { color: colors.black },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype SortOrder =\n | 'NumberDesc'\n | 'NumberAsc'\n | 'NameDesc'\n | 'NameAsc'\n | 'OddsDesc'\n | 'OddsAsc'\n | 'ResultAsc'\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { MaterialIcon } from '@core/Components/Icons'\n\nexport const FieldToggle = ({\n enabled,\n toggleFieldState,\n}: {\n enabled: boolean\n toggleFieldState: () => void\n}): JSX.Element => {\n const isFieldToggled = enabled\n const isResultsToggled = !enabled\n\n const resultsClicked = () => {\n if (!isResultsToggled) toggleFieldState()\n }\n const fieldClicked = () => {\n if (!isFieldToggled) toggleFieldState()\n }\n\n return (\n \n \n {isResultsToggled && }\n Results\n \n \n {isFieldToggled && }\n Field\n \n \n )\n}\n\nconst FieldToggleContainerStyled = styled.div({\n alignItems: 'center',\n backgroundColor: hexColors.white,\n boxSizing: 'border-box',\n display: 'flex',\n maxWidth: '100vw',\n overflowX: 'auto',\n padding: '1rem 1.2rem 1rem 1.2rem',\n whiteSpace: 'nowrap',\n})\n\nconst ToggleButtonStyled = styled.label<{ enabled: boolean }>(({ enabled = false }) => ({\n alignItems: 'center',\n border: 'none',\n borderRadius: '5px',\n boxSizing: 'border-box',\n display: 'inline-flex',\n height: '2.6rem',\n justifyContent: 'center',\n padding: '0 1rem',\n backgroundColor: enabled ? hexColors.lavenderBlue : hexColors.gainsboro,\n color: enabled ? hexColors.blueDiamond : hexColors.matterhorn,\n marginRight: '1rem',\n fontSize: '1.2rem',\n\n '> svg': {\n marginRight: '0.4rem',\n },\n}))\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { hexColors } from '@mobi/settings'\nimport { DirectionalIcon } from '@core/Components/Icons'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n ExtraInfoDetailStyled,\n ExtraInfoHeaderStyled,\n InfoIconStyled,\n PropositionGridRowStyled,\n PropositionOddsStyled,\n PropositionScatchTimeStyled,\n PropositionStartNumberStyled,\n SeparatorGridRowStyled,\n SpecialsIconStyled,\n} from '../RaceCardFixedOnly.styles'\nimport type { Proposition } from '../Data/types'\nimport { RaceStatus } from '../constants'\n\nexport const ExtraInfo: React.FC<{\n title: string\n type: 'info' | 'specials' | 'deductions'\n items: TextItem[] | Proposition[]\n}> = ({ items, type, title }) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n\n if (!items.length) {\n return null\n }\n\n return (\n \n \n {\n setIsExpanded(!isExpanded)\n }}\n >\n {title}\n \n\n {\n setIsExpanded(!isExpanded)\n }}\n >\n {type === 'info' && }\n {type === 'specials' && }\n \n \n \n\n {isExpanded &&\n (isTextItemArray(items)\n ? items.map(\n x =>\n !!x.description && (\n \n {x.title}\n {x.description}\n \n )\n )\n : items\n .filter(\n x => x.racingStatus == RaceStatus.Scratched && (x.winDeduction || x.placeDeduction)\n )\n .map(proposition => (\n \n \n \n
      \n \n {`${proposition.starterNumber}. `}\n \n {proposition.name}\n
      \n
      \n\n \n \n {dayjs(proposition.scratchTime).format('DD/MM/YYYY hh:mm:ss a')}\n \n \n\n \n \n {proposition.winDeduction.toFixed(2)}\n
      \n {proposition.placeDeduction.toFixed(2)}\n
      \n \n \n \n
      \n )))}\n
      \n )\n}\n\n// Local Helpers\n\nconst isTextItemArray = (input: TextItem[] | Proposition[]): input is TextItem[] => {\n return (input as TextItem[])[0].title !== undefined\n}\n\n// Types\n\ninterface TextItem {\n title: string\n description: string\n}\n","import { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport React from 'react'\nimport {\n EventInfoContainerStyled,\n EventInfoDescriptionSectionStyled,\n EventInfoIconSectionStyled,\n EventInfoIconStyled,\n EventInfoStatusStyled,\n EventInfoTimeStyled,\n PillStyled,\n RaceDateHeaderStyled,\n HeaderSpecialsIconStyled,\n EventInfoNumberStyled,\n EventInfoStatusTextStyled,\n EventInfoStatusFieldStyled,\n EventInfoPayIndicatorTextStyled,\n} from '../RaceCardFixedOnly.styles'\nimport { hexColors } from '@mobi/settings'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport dayjs from 'dayjs'\nimport { RaceProduct, RaceStatus } from '../constants'\n\ninterface EventInfoProps {\n icon: keyof typeof iconPaths | null\n eventNumber: number\n eventLocation: string\n eventDate: Date\n eventName: string\n eventStatus: RaceStatus\n priceLastUpdateTime: Date\n raceProduct: RaceProduct\n raceCode: 'races' | 'dogs' | 'trots'\n hasSpecials: boolean\n payIndicator?: number\n fieldState: boolean\n onFieldClicked: () => void\n}\n\nexport const EventInfo = (input: EventInfoProps): JSX.Element | null => {\n return (\n <>\n \n \n \n {dayjs(input.eventDate).format('ddd D MMM YYYY')}\n \n \n \n \n \n {input.icon && (\n \n )}\n {!input.icon && (\n \n {input.eventNumber}\n \n )}\n {dayjs(input.eventDate).format('HH:mm')}\n \n \n {input.eventLocation &&
      {input.eventLocation}
      }\n
      \n {`${input.eventName} `}\n {input.hasSpecials && }\n
      \n \n \n {getRacingStatusText(input.eventStatus, input.priceLastUpdateTime)}\n {input.raceProduct == RaceProduct.FixedOddsOnly &&\n input.eventStatus != RaceStatus.Abandoned &&\n input.eventStatus != RaceStatus.Suspended &&\n !!input.payIndicator && (\n \n {' '}\n {` ${getPayIndicatorText(input.payIndicator)}`}\n \n )}\n \n \n {input.raceProduct == RaceProduct.FixedOddsOnly &&\n (input.eventStatus == RaceStatus.Resulted ||\n input.eventStatus == RaceStatus.Settled) && (\n \n {input.fieldState ? 'Results' : 'Field'}\n \n )}\n \n \n
      \n
      \n \n )\n}\n\nconst getRacingStatusText = (raceStatus: RaceStatus, priceLastUpdateTime: Date) => {\n const comparisonFormat = 'MMDDYYYY'\n const displayFormatToday = 'HH:mm:ss'\n const displayFormatNotToday = 'DD MMM HH:mm:ss'\n const raceStatusValue = RaceStatus[raceStatus]\n\n const lastUpdatedToday =\n dayjs().format(comparisonFormat) == dayjs(priceLastUpdateTime).format(comparisonFormat)\n\n const lastUpdatedDisplay = dayjs(priceLastUpdateTime).format(\n lastUpdatedToday ? displayFormatToday : displayFormatNotToday\n )\n\n if (raceStatus == RaceStatus.Open) {\n return priceLastUpdateTime ? `Updated ${lastUpdatedDisplay}` : raceStatusValue\n }\n\n if (raceStatus == RaceStatus.Settled) {\n return RaceStatus[RaceStatus.Resulted]\n }\n\n return raceStatusValue\n}\n\nconst getPayIndicatorText = (payIndicator: number): string | null => {\n if (!payIndicator) {\n return null\n }\n\n let text = 'Pay '\n\n for (let i = 1; i <= payIndicator; i++) {\n text += i + ', '\n }\n\n return text.slice(0, -2)\n}\n","import { get } from '@classic/Foundation/Services/ApiService'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { RaceProduct } from '../constants'\nimport { FixedOddsEventDetailsResponse } from './types'\n\nexport const getFixedOddsEventDetails = async (\n product: RaceProduct,\n racingCode: RaceCodesLowerCase,\n competitionSequence: string\n): Promise => {\n const details = await get({\n url: `/api/fobracing/eventDetails/${product}/${racingCode}/${competitionSequence}`,\n })\n return details\n}\n","import { sendToNative } from '@mobi/web-native-comms/web'\nimport React from 'react'\n\nexport const useDisableAndroidBackGesture = () => {\n React.useEffect(() => {\n sendToNative('DISABLE_ANDROID_BACK_GESTURE', true)\n return () => {\n sendToNative('DISABLE_ANDROID_BACK_GESTURE', false)\n }\n }, [])\n}\n","import React from 'react'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const SkeletonLoader = () => {\n return (\n
      \n \n {/* Bet Selectors */}\n \n {/* Bet Informers Etc */}\n \n {/* Starter Headers */}\n \n {/* Starter */}\n \n \n \n \n \n \n \n \n
      \n )\n}\n\nconst BetSelectorsSkeleton = () => (\n
      \n \n \n \n \n \n \n \n
      \n)\n\nconst BetInformersSkeleton = () => (\n
      \n \n \n \n \n \n \n
      \n)\n\nconst StarterHeadersSkeleton = () => (\n
      \n \n \n \n \n \n \n \n \n \n \n
      \n)\n\nconst StarterSkeleton = () => (\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","import { keyframes } from '@emotion/react'\nimport styled from '@emotion/styled'\nimport type { Direction } from './types'\n\n// Animations\nconst swipeBackward = keyframes({\n '33%': { transform: 'translateX(100%)', opacity: 0 }, // Completely to the right\n '50%': { transform: 'translateX(-200%)', opacity: 0 }, // Completely to the left out of view\n '100%': { transform: 'translateX(0%)', opacity: 1 }, // Back to original position\n})\n\nconst swipeForward = keyframes({\n '33%': { transform: 'translateX(-100%)', opacity: 0 }, // Completely to the left\n '50%': { transform: 'translateX(200%)', opacity: 0 }, // Completely to the right out of view\n '100%': { transform: 'translateX(0%)', opacity: 1 }, // Back to original position\n})\n\nexport const AnimatedSwipeContainerStyled = styled.div<{\n animateDirection?: Direction\n}>({}, ({ animateDirection }) => {\n if (!animateDirection) return null\n const animationName = animateDirection === 'FORWARD' ? swipeForward : swipeBackward\n return {\n animation: `${animationName} 0.65s ease-in-out forwards`,\n opacity: 0.5,\n }\n})\n","export const isSwipeDisabled = (e: TouchEvent) => {\n const shouldDisableSwipe = hasAncestorWithAttribute(\n e.target as Element,\n 'data-js-race-card-no-swipe'\n )\n if (shouldDisableSwipe) {\n return true\n }\n preventEdgeSwipe(e)\n return false\n}\n\n// Local Helpers\n\n/** Checks if an element or any of its ancestors has a specific attribute. */\nconst hasAncestorWithAttribute = (element: Element | null, attributeName: string): boolean => {\n while (element) {\n if (element.hasAttribute(attributeName)) {\n return true\n }\n element = element.parentElement\n }\n return false\n}\n\nconst preventEdgeSwipe = (ev: TouchEvent) => {\n const threshhold = 0.05\n if (ev.touches.length === 1) {\n const touch = ev.touches[0]\n\n if (\n touch.clientX < window.innerWidth * threshhold ||\n touch.clientX > window.innerWidth - threshhold\n ) {\n if (ev.cancelable) {\n ev.preventDefault()\n }\n }\n }\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { AnimatedSwipeContainerStyled } from './SwipeContainer.styles'\nimport { useFeature } from '@core/Utils/hooks'\nimport { Direction, X_THRESHOLD } from './types'\nimport { isSwipeDisabled } from './helpers'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport const RaceSwipeContainer = ({\n children,\n onSwipeCallback,\n isFirstRace,\n isLastRace,\n}: {\n children: React.ReactNode\n onSwipeCallback: (direction: Direction) => void\n isLastRace: boolean\n isFirstRace: boolean\n}) => {\n const isSwipeToChangeRaceActive = useFeature('SWIPE_TO_CHANGE_RACE')\n\n const onSwipe = useCallback(\n (direction: Direction) => {\n onSwipeCallback(direction)\n // track in GA\n trackEvent('race-card-swiped', { direction })\n },\n [onSwipeCallback]\n )\n\n const isForwardSwipeDisabled = !isSwipeToChangeRaceActive || isLastRace\n const isBackwardSwipeDisabled = !isSwipeToChangeRaceActive || isFirstRace\n\n const containerRef = useRef(null)\n const [xOffset, setXOffset] = useState(0)\n const startXRef = useRef(null)\n const startYRef = useRef(null)\n\n const [swipeDirection, setSwipeDirection] = useState()\n\n // Determines if swiping should be disabled based on the event target's attributes.\n // Prevents edge swipes if not on a scrollable components\n\n const handleTouchStart = useCallback(\n (e: TouchEvent) => {\n if (isSwipeDisabled(e) || !isSwipeToChangeRaceActive) {\n return\n }\n startXRef.current = e.touches[0].clientX\n startYRef.current = e.touches[0].clientY\n },\n [isSwipeToChangeRaceActive]\n )\n\n const handleTouchMove = useCallback(\n (e: TouchEvent) => {\n if (\n isSwipeDisabled(e) ||\n !isSwipeToChangeRaceActive ||\n !startXRef.current ||\n !startYRef.current ||\n !containerRef.current\n ) {\n return\n }\n containerRef.current.style.transition = 'transform 0.2s ease-out'\n const xDiff = startXRef.current - e.touches[0].clientX\n const yDiff = startYRef.current - e.touches[0].clientY\n\n if (Math.abs(yDiff) > Math.abs(xDiff)) {\n return // Early return to disable swiping when vertical scrolling\n } else {\n document.body.style.overflowY = 'hidden' // Disable vertical scrolling\n }\n\n // Check if the swipe exceeds the threshold\n if (Math.abs(xDiff) > X_THRESHOLD && Math.abs(yDiff) < 25) {\n if (xDiff > 0) {\n if (!isForwardSwipeDisabled) {\n setXOffset(0.5 * xDiff)\n } else {\n // Allow a limited movement for feedback, e.g., 30% of the swipe distance\n setXOffset(0.3 * xDiff)\n }\n } else if (xDiff <= 0) {\n if (!isBackwardSwipeDisabled) {\n setXOffset(0.5 * xDiff)\n } else {\n setXOffset(0.3 * xDiff)\n }\n }\n }\n },\n [isForwardSwipeDisabled, isBackwardSwipeDisabled, isSwipeToChangeRaceActive]\n )\n\n const handleTouchEnd = useCallback(\n (e: TouchEvent) => {\n if (\n !isSwipeToChangeRaceActive ||\n isSwipeDisabled(e) ||\n !startXRef.current ||\n !startYRef.current ||\n !containerRef.current\n ) {\n return\n }\n\n containerRef.current.style.transition = 'none'\n document.body.style.overflowY = 'auto' // Re-enable vertical scrolling\n const xDiff = startXRef.current - e.changedTouches[0].clientX\n\n const yDiff = startYRef.current - e.changedTouches[0].clientY\n\n const isScrolling = Math.abs(yDiff) > Math.abs(xDiff)\n\n if (isForwardSwipeDisabled || isBackwardSwipeDisabled || isScrolling) {\n setXOffset(0)\n setSwipeDirection(undefined)\n }\n\n if (Math.abs(xDiff) > 55 && !isScrolling) {\n if (xDiff > 0 && !isForwardSwipeDisabled) {\n // left swipe\n onSwipe('FORWARD')\n setSwipeDirection('FORWARD')\n } else if (xDiff <= 0 && !isBackwardSwipeDisabled) {\n // right swipe\n onSwipe('BACKWARD')\n setSwipeDirection('BACKWARD')\n }\n } else {\n setXOffset(0)\n }\n },\n [isForwardSwipeDisabled, isBackwardSwipeDisabled, onSwipe, isSwipeToChangeRaceActive]\n )\n\n const handleAnimationEnd = (event: AnimationEvent) => {\n if (event.animationName.includes('animation')) {\n setXOffset(0)\n setSwipeDirection(undefined)\n }\n }\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) {\n return\n }\n container.addEventListener('touchstart', handleTouchStart)\n container.addEventListener('touchmove', handleTouchMove, { passive: false })\n container.addEventListener('touchend', handleTouchEnd)\n container.addEventListener('animationend', handleAnimationEnd)\n\n return () => {\n if (!container) {\n return\n }\n container.removeEventListener('touchstart', handleTouchStart)\n container.removeEventListener('touchmove', handleTouchMove)\n container.removeEventListener('touchend', handleTouchEnd)\n container.removeEventListener('animationend', handleAnimationEnd)\n }\n }, [handleTouchMove, handleTouchStart, handleTouchEnd])\n\n return (\n \n {children}\n \n )\n}\n","export type Direction = 'FORWARD' | 'BACKWARD'\n\n// Minimum horizontal pixels a touch must cover to be recognized as a swipe.\nexport const X_THRESHOLD = 50\n","import React from 'react'\nimport { useHistory, useLocation, useParams } from 'react-router-dom'\nimport type {\n StartingPriceFOOSelection,\n FobPropositionSelection,\n FobDetails,\n} from '@mobi/betslip/types'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { MainContainer } from '@core/Components/Containers'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { useDisableAppHeaderSticky } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderSticky'\nimport { BettingInformationOverrides } from '@core/Areas/RaceCard/constants'\nimport { RaceNavigation } from '@core/Areas/Racing/Components/Navigation/RaceNavigation'\nimport { RaceProduct, RaceStatus } from './constants'\nimport { PropositionList } from './Components/PropositionList'\nimport { FieldToggle } from './Components/FieldToggle'\nimport { ExtraInfo } from './Components/ExtraInfo'\nimport type { FixedOddsEventDetailsResponse, SelectedFOOProposition } from './Data/types'\nimport type { Direction } from '../RaceCard/Components/RaceSwipeContainer/types'\nimport { useClearSelectionOnPlacement } from './Hooks/useClearSelectionOnPlacement'\nimport { InfoNoticeBoxStyled } from './RaceCardFixedOnly.styles'\nimport { EventInfo } from './Components/EventInfo'\nimport { useFixedOddsEventDetails } from '@core/Areas/RaceCardFixedOnly/Hooks/useFixedOddsEventDetails'\nimport { useRaceFieldSummaryData } from '@core/Areas/RaceCardFixedOnly/Hooks/useRaceFieldSummaryData'\nimport { useFeature } from '@core/Utils/hooks'\nimport { useDisableAndroidBackGesture } from '../RaceCard/Hooks/useDisableAndroidBackGesture'\nimport { SkeletonLoader as RaceCardSkeletonLoader } from '../RaceCard/Components/SkeletonLoader'\nimport { SkeletonLoader as RaceNavigationSkeletonLoader } from '../Racing/Components/Navigation/Components/SkeletonLoader'\nimport { useRaceList } from '../Racing/Hooks/useRaceList/useRaceList'\nimport { RaceSwipeContainer } from '../RaceCard/Components/RaceSwipeContainer/RaceSwipeContainer'\nimport { getRaceLink } from '../Racing/helpers'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nexport const RaceCardFixedOnly: React.FC = () => {\n useDisableAppHeaderSticky()\n const canShowInducements = useInducementService()\n\n const {\n product,\n code,\n raceId: competitionNumber,\n } = useParams<{ product: string; code: RaceCodesLowerCase; raceId: string }>()\n const history = useHistory()\n const raceProduct = product.toUpperCase() as RaceProduct\n const raceCode = code?.toLowerCase() as RaceCodesLowerCase\n\n const selectionDate = useSearchParams().get('selectiondate') as string\n const meetingSeq = useSearchParams().get('meetingseq') as string\n\n const [selectedItem, setSelectedItem] = React.useState(null)\n const [fieldState, setFieldState] = React.useState(false)\n\n const { isLoading, isError, data, refetch, isFetching } = useFixedOddsEventDetails({\n competitionNumber,\n raceProduct,\n raceCode,\n })\n\n useDisableAndroidBackGesture()\n const racecourseSeq = data?.racecourseSequence\n const raceNumber = data?.eventNumber\n const isFormSummaryFeatureActive = useFeature('FOO_FORM_SUMMARY')\n const { data: fieldData } = useRaceFieldSummaryData({\n racecourseSeq,\n selectionDate,\n raceNumber,\n isFormSummaryFeatureActive,\n })\n\n const { meeting } = useRaceList(selectionDate, '', meetingSeq, raceProduct)\n\n const races = meeting?.races ?? []\n const clearSelection = React.useCallback(() => setSelectedItem(null), [])\n useClearSelectionOnPlacement(clearSelection)\n\n const currentRace = races?.find(race => race.raceNumber === raceNumber)\n const prevRace = currentRace && races.find(race => race.raceNumber === currentRace.raceNumber - 1)\n\n const nextRace = currentRace && races.find(race => race.raceNumber === currentRace.raceNumber + 1)\n\n const lastRaceNumber = races.length > 0 ? races[races.length - 1].raceNumber : null\n const firstRaceNumber = races.length > 0 ? races[0].raceNumber : null\n\n React.useEffect(() => {\n if (isLoading || isFetching) {\n clearSelection()\n }\n }, [isLoading, isFetching, clearSelection])\n\n if (isLoading) {\n return (\n
      \n \n \n
      \n )\n }\n\n if (isError || !data) {\n return (\n \n \n \n )\n }\n\n const isStartingPriceAvailable = data.isSpAvailable\n\n const competitionName = getTitle(code, product)\n const shouldShowDeductions =\n (data.eventStatus == RaceStatus.Resulted || data.eventStatus == RaceStatus.Settled) &&\n data.propositions.filter(\n x => x.racingStatus == RaceStatus.Scratched && (x.winDeduction || x.placeDeduction)\n ).length > 0\n\n const handleQuickbetClick = () => {\n if (!selectedItem || !data) return\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: convertItemToBetslipItem(\n selectedItem,\n competitionName,\n competitionNumber,\n data,\n raceProduct,\n raceCode\n ),\n })\n }\n\n const handleAddToBetslipClick = () => {\n if (!selectedItem || !data) return\n handleBetSelection({\n betFlow: { location: 'Betslip' },\n selection: convertItemToBetslipItem(\n selectedItem,\n competitionName,\n competitionNumber,\n data,\n raceProduct,\n raceCode,\n meetingSeq\n ),\n })\n\n clearSelection()\n }\n\n const toggleFieldState = () => setFieldState(curr => !curr)\n const selectItem = (item: SelectedFOOProposition) =>\n selectedItem &&\n selectedItem.sequenceNumber === item.sequenceNumber &&\n selectedItem.isStartingPrice === item.isStartingPrice\n ? clearSelection()\n : setSelectedItem(item)\n\n return (\n \n {raceProduct === RaceProduct.FixedOddsOnly ? (\n \n ) : (\n <>\n \n 0}\n payIndicator={data.payIndicator}\n fieldState={fieldState}\n onFieldClicked={toggleFieldState}\n />\n \n )}\n\n {isFetching ? (\n
      \n \n
      \n ) : (\n {\n const raceToSwipeTo = direction === 'BACKWARD' ? prevRace : nextRace\n if (raceToSwipeTo && meeting) {\n const selectRaceLink = getRaceLink({\n meetingId: meeting.meetingId,\n raceNumber: raceToSwipeTo.raceNumber,\n meetingDate: meeting.meetingDate,\n code: meeting.meetingCode,\n meetingSeq: meeting.fixed?.competitionSequence,\n product: raceToSwipeTo.fixed?.product,\n raceSeq: raceToSwipeTo.fixed?.eventSequence,\n isFOO: true,\n })\n history.push(selectRaceLink)\n }\n }}\n isLastRace={!currentRace || lastRaceNumber === currentRace.raceNumber}\n isFirstRace={!currentRace || firstRaceNumber === currentRace.raceNumber}\n >\n {[RaceStatus.Resulted, RaceStatus.Settled].includes(data.eventStatus) &&\n raceProduct === RaceProduct.FixedOddsOnly && (\n \n )}\n\n {raceProduct == RaceProduct.FixedOddsOnly && data.eventStatus == RaceStatus.Abandoned && (\n \n )}\n\n \n\n \n\n {shouldShowDeductions && (\n \n )}\n\n {data.bettingInformation && (\n \n )}\n\n {canShowInducements && data.specials?.length > 0 && (\n \n )}\n\n \n \n )}\n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction useSearchParams() {\n const params = new URLSearchParams()\n new URLSearchParams(useLocation().search).forEach((value, name) => {\n params.append(name.toLowerCase(), value)\n })\n return params\n}\n\nfunction convertItemToBetslipItem(\n selectedItem: SelectedFOOProposition,\n competitionName: string,\n competitionNumber: string,\n event: FixedOddsEventDetailsResponse,\n raceProduct: RaceProduct,\n raceCode: RaceCodesLowerCase,\n meetingSeq?: string\n): QuickbetSelection {\n const isStartingPrice = selectedItem.isStartingPrice\n const isFixedOddsOnly = raceProduct == RaceProduct.FixedOddsOnly\n const propositionSeq = selectedItem.sequenceNumber?.toString()\n const shouldAllowPlaceInvestment = !isStartingPrice && isFixedOddsOnly\n const { eventName, eventNumber, eventLocation, eventStartTime } = event\n\n let selection: FobPropositionSelection | StartingPriceFOOSelection\n if (isStartingPrice) {\n selection = {\n type: 'fob-proposition',\n propositionSeq,\n winPrice: null,\n placePrice: null,\n marketCode: 'SP',\n marketName: 'Starting Price',\n }\n } else {\n selection = {\n type: 'fob-proposition',\n propositionSeq,\n priceSource: 'selection',\n winPrice: selectedItem.winReturn,\n winPriceLastSeen: selectedItem.winReturn,\n placePrice: selectedItem.placeReturn,\n placePriceLastSeen: selectedItem.placeReturn,\n }\n }\n\n const selectionDetails: FobDetails = {\n event: competitionNumber,\n competitionName: isFixedOddsOnly ? `${eventLocation}:R${eventNumber}` : competitionName,\n marketName: isStartingPrice ? 'Starting Price' : isFixedOddsOnly ? 'Win + Place' : eventName,\n propositionName: selectedItem.name,\n sportIconCode: getBetSlipIcon(raceProduct, raceCode),\n eventStartTime,\n meetingSeq,\n }\n\n const isEachWayAvailable = isFixedOddsOnly ? false : !!selection.placePrice\n\n return {\n bettingType: 'fixed-odds-racing',\n isEachWayAvailable,\n shouldAllowPlaceInvestment,\n selection,\n selectionDetails,\n }\n}\n\nconst getBetSlipIcon = (\n raceProduct: RaceProduct,\n raceCode: RaceCodesLowerCase\n): keyof typeof iconPaths => {\n if (raceProduct == RaceProduct.FixedOddsOnly) return raceCode\n if (raceProduct == RaceProduct.Challenge && raceCode == 'dogs') return 'greysboxchallenge'\n if (raceProduct == RaceProduct.Challenge && raceCode == 'races') return 'jockeychallenge'\n if (raceProduct == RaceProduct.FeatureRace) return 'featureraces'\n return 'tab'\n}\n\nconst getTitle = (code: RaceCodesLowerCase, product: string): string => {\n product = product.toUpperCase()\n code = code.toLowerCase() as RaceCodesLowerCase\n if (product == RaceProduct.Challenge) {\n if (code == 'dogs') return 'Greys Box Challenge'\n if (code == 'races') return 'Jockey Challenge'\n }\n if (product == RaceProduct.FeatureRace) return 'Futures'\n if (product == RaceProduct.FutureFinalField || product == RaceProduct.FixedOddsOnly) {\n if (code == 'dogs') return 'Dogs'\n if (code == 'races') return 'Races'\n if (code == 'trots') return 'Trots'\n }\n return 'Unknown'\n}\n","import { useQuery } from 'react-query'\nimport type { FixedOddsEventDetailsResponse } from '@core/Areas/RaceCardFixedOnly/Data/types'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getFixedOddsEventDetails } from '@core/Areas/RaceCardFixedOnly/Data/api'\nimport { RaceProduct } from '@core/Areas/RaceCardFixedOnly'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\ntype Props = {\n raceProduct: RaceProduct\n raceCode: RaceCodesLowerCase\n competitionNumber: string\n}\n\nexport function useFixedOddsEventDetails({ raceProduct, raceCode, competitionNumber }: Props) {\n return useQuery(\n [queryKeys.eventDetails, raceProduct, raceCode, competitionNumber],\n () => getFixedOddsEventDetails(raceProduct, raceCode, competitionNumber),\n {\n retry: false,\n cacheTime: 0,\n refetchOnWindowFocus: false,\n keepPreviousData: true,\n }\n )\n}\n","import React from 'react'\nimport { AddingToBetslip, QuickbetClosed } from '@core/Areas/Quickbet/signals'\nimport { QuickbetState, state$ as quickbetState$ } from '@core/Areas/Quickbet/driver'\n\nexport const useClearSelectionOnPlacement = (clearSelection: () => void) => {\n React.useEffect(() => {\n const subscription = QuickbetClosed.signal$\n .withLatestFrom(quickbetState$, (_, quickbetState) => ({ quickbetState }))\n .subscribe(x => {\n const quickbetState: QuickbetState = x.quickbetState.toJS()\n if (quickbetState.betPlaced) clearSelection()\n })\n const subscriptionForBetslip = AddingToBetslip.signal$.subscribe(() => {\n clearSelection()\n })\n return () => {\n subscription.dispose()\n subscriptionForBetslip.dispose()\n }\n }, [clearSelection])\n}\n","import dayjs from 'dayjs'\nimport {\n FixedOddsMarketCodes,\n type MarketDataTransferObject,\n type RacePageDataTransferObject,\n type StarterDataTransferObject,\n} from '@mobi/api-types'\nimport type { Selection, Acceptor, Race } from '@mobi/betslip/types'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\n\nexport function createBetSelection({\n market,\n proposition,\n raceData,\n}: {\n market: MarketDataTransferObject\n proposition: MarketDataTransferObject['Propositions'][0]\n raceData: RacePageDataTransferObject\n}): QuickbetSelection {\n const isMatchedWithStarters =\n market.MarketCode === FixedOddsMarketCodes.HeadToHead ||\n market.MarketCode === FixedOddsMarketCodes.RunnerVsField ||\n market.MarketCode === FixedOddsMarketCodes.Concession\n\n const matchedAcceptor =\n isMatchedWithStarters && matchedAcceptorForRace(raceData, proposition.Number)\n\n return {\n bettingType: 'fixed-odds-racing',\n isEachWayAvailable: false,\n selection: {\n type: 'fob-proposition',\n fixtureDate: dayjs(market.FixtureDate).format('YYYY-MM-DD'),\n fixtureId: market.FixtureId,\n propositionSeq: proposition.PropositionSequence.toString(),\n placePrice: null,\n placePriceLastSeen: null,\n raceNumber: market.ContestNumber,\n winPrice: +proposition.PriceToDisplay,\n winPriceLastSeen: +proposition.PriceToDisplay,\n displayName: proposition.Description, // for AvB market without matched started\n marketName: market.MarketName,\n marketCode: market.MarketCode,\n selectedAcceptors: matchedAcceptor\n ? [starterToAcceptor(matchedAcceptor, raceData.MeetingInformation.MeetingName)]\n : ([] as Acceptor[]),\n priceSource: 'selection',\n } as Selection,\n\n selectionDetails: {\n races: [\n {\n key: raceData.MeetingInformation.SelectedRace?.Key,\n raceNumber: raceData.MeetingInformation.SelectedRace.RaceNumber,\n meetingName: raceData.MeetingInformation.MeetingName,\n meetingCode: raceData.MeetingInformation.MeetingCode,\n meetingId: raceData.MeetingInformation.MeetingId,\n meetingDate: raceData.MeetingInformation.MeetingDate,\n distance: raceData.MeetingInformation.SelectedRace?.Distance,\n raceTime: raceData.MeetingInformation.SelectedRace?.RaceTime,\n type: raceData.MeetingInformation.SelectedRace?.RaceType,\n isFixedOddsRace: raceData.MeetingInformation.SelectedRace?.IsFixedOddsRace,\n acceptorKeys: [],\n } as Race,\n ],\n acceptors: [],\n },\n shouldAllowPlaceInvestment: false,\n }\n}\n\nexport function createStartingPriceBetSelection(\n starterNumber: number,\n raceData: RacePageDataTransferObject\n): QuickbetSelection {\n const matchedAcceptor = matchedAcceptorForRace(raceData, starterNumber)\n const selectedAcceptor =\n matchedAcceptor && starterToAcceptor(matchedAcceptor, raceData.MeetingInformation.MeetingName)\n\n return {\n bettingType: 'fixed-odds-racing',\n betSource: 'race-card',\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment: false,\n selection: {\n fixtureId: raceData.MeetingInformation.MeetingId,\n fixtureDate: dayjs(raceData.MeetingInformation.MeetingDate).format('YYYY-MM-DD'),\n raceNumber: raceData.MeetingInformation.SelectedRace.RaceNumber,\n acceptorNumber: starterNumber,\n marketCode: FixedOddsMarketCodes.StartingPrice,\n marketName: 'Starting Price',\n selectedAcceptor,\n },\n selectionDetails: {\n races: [\n {\n key: raceData.MeetingInformation.SelectedRace?.Key,\n raceNumber: raceData.MeetingInformation.SelectedRace.RaceNumber,\n meetingName: raceData.MeetingInformation.MeetingName,\n meetingCode: raceData.MeetingInformation.MeetingCode,\n meetingId: raceData.MeetingInformation.MeetingId,\n meetingDate: raceData.MeetingInformation.MeetingDate,\n distance: raceData.MeetingInformation.SelectedRace?.Distance,\n raceTime: raceData.MeetingInformation.SelectedRace?.RaceTime,\n type: raceData.MeetingInformation.SelectedRace?.RaceType,\n isFixedOddsRace: raceData.MeetingInformation.SelectedRace?.IsFixedOddsRace,\n acceptorKeys: [],\n },\n ],\n acceptors: [],\n },\n }\n}\n\nexport function starterToAcceptor(starter: StarterDataTransferObject, meetingName?: string) {\n return {\n barrier: starter.Barrier,\n weight: starter.JockeyWeight,\n priceWin: starter?.FixedOddsStarterInfo?.DisplayWinDividend,\n pricePlace: starter?.FixedOddsStarterInfo?.DisplayPlaceDividend,\n name: starter.Name,\n number: starter.Number,\n rating: starter.Rating,\n type: starter.Type,\n imageUrlWithSizes: starter.SilkImages,\n meetingName,\n isScratched: starter.IsScratched,\n scratchType: starter.ScratchType,\n } as unknown as Acceptor\n}\n\nfunction matchedAcceptorForRace(\n raceData: RacePageDataTransferObject,\n starterNumber: number | undefined\n) {\n return raceData.RaceStarters.find(\n race => race.RaceKey.Key === raceData.MeetingInformation.SelectedRace.Key\n )?.Starters.find(starter => starter.Number === starterNumber)\n}\n","import type { RacingBetType } from '@mobi/betslip/types'\nimport { PlanSeq } from '@mobi/api-types'\n\nexport function getToteBetType(productPlanSequence: PlanSeq): RacingBetType | undefined {\n switch (productPlanSequence) {\n case PlanSeq.Win:\n case PlanSeq.Place:\n case PlanSeq.WinAndPlace:\n return 'Win & Place'\n\n case PlanSeq.Exacta:\n case PlanSeq.ExactaWithRovingBanker:\n return 'Exacta'\n\n case PlanSeq.Quinella:\n return 'Quinella'\n\n case PlanSeq.Trifecta:\n case PlanSeq.TrifectaWithRovingBanker:\n return 'Trifecta'\n\n case PlanSeq.First4:\n case PlanSeq.First4WithRovingBanker:\n return 'First 4'\n\n case PlanSeq.Double:\n return 'Double'\n\n case PlanSeq.Quaddie:\n return 'Quaddie'\n\n case PlanSeq.AllUp:\n return 'All Up'\n }\n\n return undefined\n}\n","import dayjs from 'dayjs'\nimport type {\n SameRaceMultiSelection,\n ToteSelection,\n StartingPriceMatchedSelection,\n FobMatchedSelection,\n} from '@mobi/betslip/types'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { isRovingBanker } from '@core/Data/Betting/selections'\nimport { starterToAcceptor } from '@core/Areas/RaceCard/Components/MoreBettingOptions/FixedOddsMarkets/Utils/createBetSelection'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\nimport type { StarterDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/DataTransferObjects'\nimport type { BetDetails } from '../../types'\nimport { getSelectionPrice } from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiBettingDrawer/SameRaceMultiPrice'\nimport { getToteBetType } from '../getToteBetType'\n\n// Parses a selection string based on '.' and '/' notation\n// eg. '1/3.4.6/FD/2.7' will convert to [['1'], ['2','4','6'], ['FD'], ['2','7']]\nexport const parseSelectionsString = (selectionString: string): string[][] => {\n const selections = selectionString\n .split('/')\n .map(secondaryDivision => secondaryDivision.split('.'))\n\n return selections\n}\n\nexport const getToteSelection = async (betDetails: BetDetails) => {\n const { fixtureId, fixtureDate, races, selectionString, planSeq, numberOfCombinations } =\n betDetails\n\n const singleSelectionGroup = parseSelectionsString(selectionString).length === 1\n const betType = getToteBetType(planSeq)\n\n if (!betType) throw new Error('Unsupported bet type')\n\n const toteSelection: ToteSelection = {\n fixtureId,\n fixtureDate: dayjs(fixtureDate).format('YYYY-MM-DD'),\n raceNumber: races[0],\n selectionString,\n numberOfCombinations: numberOfCombinations ?? 1,\n isRovingBanker: isRovingBanker(planSeq),\n isAllways: singleSelectionGroup,\n isLegIn: betType === 'Quinella' && !singleSelectionGroup,\n betType,\n }\n return toteSelection\n}\n\nexport const getFOBSelection = async (\n betDetails: BetDetails\n): Promise => {\n const {\n fixtureId,\n fixtureDate: fixtureDateAsDate,\n races,\n selectionString,\n srmSelections,\n betType,\n } = betDetails\n\n const fixtureDate = dayjs(fixtureDateAsDate).format('YYYY-MM-DD')\n const starters = await get({\n url: `/api/meetings/${fixtureId}/${fixtureDate}/race/${races[0]}/starters`,\n })\n const starter = starters.find(starter => starter.Number === parseInt(selectionString))\n\n if (!starter) throw new Error('Could not match starter')\n\n const winPrice = starter.FixedOddsStarterInfo.DisplayWinDividend\n const placePrice = starter.FixedOddsStarterInfo.DisplayPlaceDividend\n\n if (betType === FixedOddsMarketDisplayNames.SP) {\n const spSelection: StartingPriceMatchedSelection = {\n fixtureId,\n fixtureDate,\n raceNumber: races[0],\n acceptorNumber: parseInt(selectionString, 10),\n marketCode: 'SP',\n marketName: 'Starting Price',\n selectedAcceptor: starterToAcceptor(starter),\n }\n return spSelection\n }\n\n if (srmSelections && srmSelections.length >= 2) {\n const selectionString = srmSelections\n .map(s => `selection=${s.acceptorNumber}-${s.legNumber + 1}`)\n .join('&')\n\n const srmSelectionPrice = await getSelectionPrice(\n fixtureDateAsDate,\n fixtureId,\n races[0],\n selectionString\n )\n\n const srmSelection: SameRaceMultiSelection = {\n type: 'same-race-multi',\n fixtureId,\n fixtureDate,\n raceNumber: races[0],\n acceptors: srmSelections,\n winPrice: Number(srmSelectionPrice.price),\n }\n return srmSelection\n }\n\n const fobMatchedSelection: FobMatchedSelection = {\n type: 'fob-matched',\n fixtureId,\n fixtureDate,\n raceNumber: races[0],\n acceptorNumber: parseInt(selectionString),\n propositionSeq: starter.FixedOddsStarterInfo?.PropositionSequence?.toString(),\n winPrice: Number(winPrice),\n winPriceLastSeen: Number(winPrice),\n placePrice: placePrice !== '-' ? Number(placePrice) : null,\n placePriceLastSeen: placePrice !== '-' ? Number(placePrice) : null,\n priceSource: 'selection',\n }\n return fobMatchedSelection\n}\n","import type {\n SameRaceMultiSelection,\n AllUpSelection,\n FobSportsSelection,\n SportsDetails,\n} from '@mobi/betslip/types'\n\nexport type LoadBetDetails = BetDetails | FOOBetDetails | SportDetails\n\nexport const enum LoadBetErrors {\n Default = \"Sorry, we're unable to create bet\",\n BettingClosed = 'Betting Closed',\n NoSportsInLegacy = 'No Sports in Legacy',\n}\n\nexport interface BetDetails {\n fixtureId: string\n fixtureDate: Date\n races: number[]\n selectionString: string\n planSeq: number\n numberOfCombinations?: number\n betType: string | null\n\n // All Up\n details?: AllUpSelection['details']\n formulas?: AllUpSelection['formulas']\n\n // Same Race Multi\n srmSelections?: SameRaceMultiSelection['acceptors']\n}\n\nexport interface FOOBetDetails {\n competitionName: string\n competitionSeq: string\n propositionSeq: number\n betType: string | null\n sportName: string | null\n eventStartDateTime: string\n}\n\nexport type SportDetails = Pick<\n SportsDetails,\n 'eventId' | 'tournamentId' | 'marketId' | 'sportId'\n> &\n Pick\n","import dayjs from 'dayjs'\nimport type { RaceDetails, Acceptor, Race } from '@mobi/betslip/types'\nimport { PlanSeq } from '@mobi/api-types'\nimport {\n RacePageDataTransferObject,\n ResultsPageDataTransferObject,\n} from '@classic/Betting-v2/DataTransferObjects/DataTransferObjects'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { LoadBetErrors } from '../../types'\n\nexport const getSelectionDetails = async (\n fixtureId: string,\n fixtureDate: Date,\n raceNumbers: number[],\n selections: string[][],\n planSeq: PlanSeq,\n shouldForceWinOnly = false\n): Promise<{ selectionDetails: RaceDetails; shouldAllowPlaceInvestment: boolean }> => {\n const isMultiRace = raceNumbers.length > 1\n const isWinPlaceDetails = isWinPlace(planSeq)\n\n const formattedDate = dayjs(fixtureDate).format('YYYY-MM-DD')\n const raceArray = isWinPlaceDetails ? [raceNumbers[0]] : raceNumbers\n const meeting = await get({\n url: `/api/meetings/${fixtureId}/${formattedDate}/races/${raceArray.join(',')}`,\n })\n\n let shouldAllowPlaceInvestment = false\n if (isWinPlaceDetails) {\n const { HasPlacePool, FixedOddsInfo } = meeting.MeetingInformation.SelectedRace\n shouldAllowPlaceInvestment =\n !shouldForceWinOnly && !!(HasPlacePool || FixedOddsInfo?.IsPlaceAvailable)\n }\n\n if (isBettingClosedOnRace(meeting)) throw new Error(LoadBetErrors.BettingClosed)\n\n const { MeetingInformation: meetingInformation, RaceStarters: raceStarters } = meeting\n\n const races = meetingInformation.Races.filter(race => raceNumbers.includes(race.RaceNumber)).map(\n (raceDetails, index) => {\n const acceptorKeysList = isMultiRace\n ? selections[index]\n : selections.flatMap(selection => selection)\n\n const race: Race = {\n key: raceDetails.Key,\n raceNumber: raceDetails.RaceNumber,\n meetingName: meetingInformation.MeetingName,\n meetingCode: meetingInformation.MeetingCode,\n meetingId: meetingInformation.MeetingId,\n meetingDate: meetingInformation.MeetingDate,\n distance: raceDetails.Distance,\n raceTime: raceDetails.RaceTime,\n type: raceDetails.RaceType,\n isFixedOddsRace: raceDetails.IsFixedOddsRace,\n // Either Split the keys across races, or all on single race\n acceptorKeys: acceptorKeysList.map(acceptor =>\n createAcceptorKey(raceDetails.RaceNumber, acceptor)\n ),\n }\n\n return race\n }\n )\n\n // Flatten acceptors across all races\n const acceptors = raceStarters\n .filter(race => raceNumbers.includes(race.RaceKey.RaceNumber))\n .flatMap(race => {\n return race.Starters.map(starter => {\n const acceptor: Acceptor = {\n key: createAcceptorKey(race.RaceKey.RaceNumber, starter.Number),\n name: starter.Name,\n number: starter.Number,\n type: starter.Type,\n imageUrl: starter.SilkImages.small.url,\n imageUrlWithSizes: starter.SilkImages,\n meetingName: meetingInformation.MeetingName,\n isScratched: starter.IsScratched,\n scratchType: starter.ScratchType,\n fixedOdds: {\n win: starter.FixedOddsStarterInfo?.DisplayWinDividend,\n place: starter.FixedOddsStarterInfo?.DisplayPlaceDividend,\n isSuspended: starter.FixedOddsStarterInfo?.IsSuspended,\n },\n toteOdds: {\n win: starter.DisplayWinDividend,\n place: starter.DisplayPlaceDividend,\n },\n }\n\n return acceptor\n })\n })\n\n return {\n selectionDetails: {\n races,\n acceptors,\n },\n shouldAllowPlaceInvestment,\n }\n}\n\n// Local Helpers\n\nfunction createAcceptorKey(raceNumber: number, selection: string | number): string {\n return `${raceNumber}-${selection}`\n}\n\nfunction isWinPlace(planSeq: number): boolean {\n if ([PlanSeq.Win, PlanSeq.Place, PlanSeq.WinAndPlace, PlanSeq.FOBRacing].includes(planSeq))\n return true\n return false\n}\n\nfunction isBettingClosedOnRace(\n meeting: RacePageDataTransferObject | ResultsPageDataTransferObject\n): meeting is ResultsPageDataTransferObject {\n return meeting.Tag === 'Results'\n}\n","import type { BetSelection, FobSportsSelection, SportsDetails } from '@mobi/betslip/types'\nimport type { QuickbetSelection } from '@core/Areas/Quickbet/signals'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SportsProposition = any\n\nexport function createSportsQuickbetSelection({\n sportId,\n sportName,\n tournamentId,\n tournamentName,\n eventName,\n eventId,\n advertisedStartTime,\n bettingClosingTime,\n marketId,\n marketName,\n outcomeId,\n outcomeName,\n price,\n externalBetId,\n urlPath,\n marketTypeCode,\n}: SportsProposition): QuickbetSelection {\n const selection: FobSportsSelection = {\n externalBetId,\n type: 'fob-sports',\n propositionSeq: outcomeId.toString(),\n propositionName: outcomeName,\n winPrice: price,\n winPriceLastSeen: null,\n placePrice: null,\n placePriceLastSeen: null,\n priceSource: 'api',\n }\n\n const selectionDetails: SportsDetails = {\n sportId,\n sportName,\n tournamentId,\n tournamentName,\n eventName,\n eventId,\n marketId,\n marketName,\n advertisedStartTime,\n bettingClosingTime,\n urlPath,\n marketTypeCode,\n outcomeId,\n }\n\n return {\n bettingType: 'fixed-odds-sports',\n shouldAllowPlaceInvestment: false,\n isEachWayAvailable: false,\n\n selection,\n selectionDetails,\n }\n}\n\nexport function createSportsNewBetslipSelection({\n sportId,\n sportName,\n tournamentId,\n tournamentName,\n eventName,\n eventId,\n advertisedStartTime,\n bettingClosingTime,\n marketId,\n marketName,\n outcomeId,\n outcomeName,\n price,\n externalBetId,\n marketTypeCode,\n}: SportsProposition): BetSelection {\n const selection: FobSportsSelection = {\n externalBetId,\n type: 'fob-sports',\n propositionSeq: outcomeId.toString(),\n propositionName: outcomeName,\n winPrice: price,\n winPriceLastSeen: null,\n placePrice: null,\n placePriceLastSeen: null,\n priceSource: 'api',\n }\n\n const selectionDetails: SportsDetails = {\n sportId,\n sportName,\n tournamentId,\n tournamentName,\n eventName,\n eventId,\n marketId,\n marketName,\n advertisedStartTime,\n bettingClosingTime,\n marketTypeCode,\n outcomeId,\n }\n\n return {\n bettingType: 'fixed-odds-sports',\n shouldAllowPlaceInvestment: false,\n isEachWayAvailable: false,\n\n selection,\n selectionDetails,\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { SportDetails } from '../../types'\nimport type { SportsProposition } from '@core/Areas/Sports/helpers/createSportsBetSelection'\n\nexport async function buildSportsBetProposition({\n tournamentId,\n eventId,\n marketId,\n externalBetId,\n}: SportDetails): Promise {\n // const event = await getSingleEventForTournament(tournamentId, eventId)\n\n // const selectedMarket = event?.markets?.find(market => market.marketId === marketId)\n // const selectOutcome = selectedMarket?.outcomes?.find(\n // outcome => outcome.externalBetId === externalBetId\n // )\n\n return {\n // sportName: event.sportName,\n // sportId: Number(event.sportId),\n // tournamentName: event.tournamentName,\n // tournamentId: Number(event.tournamentId),\n // eventName: event.eventName,\n // eventId: event.eventId,\n // advertisedStartTime: event.advertisedStartTime,\n // marketId: marketId,\n // marketName: selectedMarket?.marketName || '',\n // bettingClosingTime: selectedMarket?.bettingClosingTime || '',\n // outcomeId: selectOutcome?.outcomeId ?? 0,\n // outcomeName: selectOutcome?.outcomeName || '',\n // price: selectOutcome?.price ?? 0,\n // externalBetId: externalBetId,\n // urlPath: buildEventPageURL(event.sportId, tournamentId, eventId),\n // marketTypeCode: selectOutcome?.marketTypeCode || '',\n }\n}\n","import type {\n StartingPriceFOOSelection,\n FobPropositionSelection,\n FobDetails,\n} from '@mobi/betslip/types'\nimport { PlanSeq } from '@mobi/api-types'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { RaceProduct } from '@core/Areas/RaceCardFixedOnly'\nimport { getFixedOddsEventDetails } from '@core/Areas/RaceCardFixedOnly/Data/api'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\nimport {\n parseSelectionsString,\n getToteSelection,\n getFOBSelection,\n} from './getSelectionInfo/getSelection'\nimport { getSelectionDetails } from './getSelectionInfo/getSelectionDetails'\nimport { BetDetails, FOOBetDetails, LoadBetDetails, SportDetails } from '../types'\nimport { createSportsQuickbetSelection } from '@core/Areas/Sports/helpers/createSportsBetSelection'\nimport { buildSportsBetProposition } from './getSelectionInfo/buildSportsBetProposition'\n\nexport async function buildBaseBetSelection(bet: LoadBetDetails): Promise {\n if (isFOOBetDetails(bet)) {\n return await buildFixedOddsOnlyBet(bet)\n }\n if (isSportBetDetails(bet)) {\n return createSportsQuickbetSelection(await buildSportsBetProposition(bet))\n }\n return await buildStandardBet(bet)\n}\n\nexport const isFOOBetDetails = (bet: LoadBetDetails): bet is FOOBetDetails =>\n Object.prototype.hasOwnProperty.call(bet, 'propositionSeq')\n\nexport const isSportBetDetails = (bet: LoadBetDetails): bet is SportDetails =>\n Object.prototype.hasOwnProperty.call(bet, 'externalBetId')\n\nexport function getFOOEventType(sportName: string | null): RaceProduct {\n const product = (sportName || '').toLowerCase()\n if (product.includes('feature')) return RaceProduct.FeatureRace\n if (product.includes('challenge')) return RaceProduct.Challenge\n if (product.includes('future')) return RaceProduct.FutureFinalField\n\n return RaceProduct.FixedOddsOnly\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst buildFixedOddsOnlyBet = async (betDetails: FOOBetDetails) => {\n const { competitionSeq, propositionSeq, competitionName, sportName, betType } = betDetails\n\n const event = await getFixedOddsEventDetails(getFOOEventType(sportName), 'races', competitionSeq)\n\n const proposition = event.propositions.find(\n proposition => proposition.sequenceNumber === propositionSeq\n )\n if (!proposition) throw new Error('Failed to match provided proposition')\n\n const isStartingPrice = betType === FixedOddsMarketDisplayNames.SP\n const marketName = isStartingPrice ? 'Starting Price' : event.marketName\n const shouldAllowPlaceInvestment = !isStartingPrice && event.isPlaceAvailable\n\n const selection: StartingPriceFOOSelection | FobPropositionSelection = isStartingPrice\n ? {\n type: 'fob-proposition',\n propositionSeq: propositionSeq.toString(),\n winPrice: null,\n placePrice: null,\n marketCode: 'SP',\n marketName: 'StartingPrice',\n }\n : {\n type: 'fob-proposition',\n propositionSeq: propositionSeq.toString(),\n winPrice: proposition.winReturn,\n winPriceLastSeen: proposition.winReturn,\n placePrice: proposition.placeReturn,\n placePriceLastSeen: proposition.placeReturn,\n priceSource: 'selection',\n }\n\n const details: Partial = {\n competitionName: competitionName,\n event: competitionSeq,\n marketName,\n eventName: event.eventName,\n eventStartTime: event.eventStartTime,\n propositionName: proposition.name,\n sportIconCode: 'tab',\n sportName: '',\n tournamentName: '',\n handicapName: null,\n }\n\n const isEachWayAvailable = Boolean(\n !event.isPlaceAvailable && selection.winPrice && selection.placePrice\n )\n const quickbetSelection: QuickbetSelection = {\n bettingType: 'fixed-odds-racing',\n isEachWayAvailable,\n shouldAllowPlaceInvestment,\n selection,\n selectionDetails: details as FobDetails,\n }\n\n return quickbetSelection\n}\n\nconst buildStandardBet = async (betDetails: BetDetails) => {\n const { fixtureId, fixtureDate, races, planSeq, selectionString } = betDetails\n\n const selections = parseSelectionsString(selectionString)\n\n // Multi Race bets (Double, Quaddie & All Up) should have a selection string\n // with the same # of divisions (eg. Quaddie => 1.2/3/2/1.2.3)\n if (races.length > 1 && selections.length !== races.length)\n throw new Error('Provided selection details invalid')\n\n const shouldForceWinOnly =\n !!(betDetails.srmSelections && betDetails.srmSelections.length >= 2) ||\n betDetails.betType === FixedOddsMarketDisplayNames.SP\n\n const { selectionDetails, shouldAllowPlaceInvestment } = await getSelectionDetails(\n fixtureId,\n fixtureDate,\n races,\n selections,\n planSeq,\n shouldForceWinOnly\n )\n\n const selection =\n betDetails.planSeq === PlanSeq.FOBRacing\n ? await getFOBSelection(betDetails)\n : await getToteSelection(betDetails)\n\n const quickbetSelection: QuickbetSelection = {\n bettingType: PlanSeq.FOBRacing === planSeq ? 'fixed-odds-racing' : 'tote-racing',\n selection: selection,\n selectionDetails,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n\n return quickbetSelection\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBox } from '@core/Components/NoticeBox'\nimport { PromptBetslipChangeSelecton } from './helpers'\n\nexport const PromptBetslipChange: React.FC<{\n handleSelection: (choice: PromptBetslipChangeSelecton) => void\n}> = ({ handleSelection }) => {\n return (\n
      \n \n \n \n\n \n\n \n \n
      \n )\n}\n\nconst ButtonWrapperStyled = styled.div({\n display: 'flex',\n padding: '0.5rem',\n background: hexColors.white,\n\n button: {\n flex: 1,\n minHeight: '4rem',\n margin: 0,\n\n '&:first-of-type': {\n marginRight: '0.5rem',\n },\n '&:last-of-type': {\n marginLeft: '0.5rem',\n },\n\n 'svg:last-of-type': {\n marginLeft: '0.2rem',\n },\n 'svg:first-of-type': {\n marginLeft: '0.2rem',\n },\n },\n})\n","import { store } from '@core/Store'\nimport { closeModal, openModal } from '@core/Components/Modal'\nimport { PromptBetslipChange } from '../PromptBetslipChange'\n\nexport type PromptBetslipChangeSelecton = 'cancel' | 'add' | 'replace'\n\nexport function promptUserAndReturnDecision() {\n return new Promise(resolve => {\n const USER_PROMPT_ID = 'user-prompt-for-betslip-clear'\n\n // Callback to capture decision\n const handleSelection = (decision: PromptBetslipChangeSelecton) => {\n store.dispatch(closeModal({ id: USER_PROMPT_ID }))\n resolve(decision)\n }\n\n // Present prompt to user\n store.dispatch(\n openModal({\n id: USER_PROMPT_ID,\n modalComponent: PromptBetslipChange,\n modalComponentProps: {\n handleSelection,\n },\n isDismissable: false,\n })\n )\n })\n}\n","/**\n * Lazily zip together any number of same length arrays and return a tuple for each step\n *\n * This is more performant then `zip` if you chain another array fluent api call\n * e.g. `.map(...)` immediately after this call, because it only allocates once\n * when you call `.toArray()`, at the end of the call chain\n * @param arrs Any number of arrays. They must all be the same length\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function* zipLazy(...arrs: T): Generator> {\n const size = arrs.length\n const steps = Math.max(...arrs.map(x => x.length))\n for (let index = 0; index < steps; index++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step: FlatTuple = new Array(size) as any\n for (let i = 0; i < size; i++) {\n const arr = arrs[i]\n step[i] = arr[index]\n }\n yield step\n }\n}\n\n/**\n * Zip together any number of same length arrays and return a tuple for each step\n *\n * Use `zipLazy` for more memory performance if this is a sequence in fluent api calls\n * and it makes sense to lazily evaluate the expressions\n * @param arrs Any number of arrays. They must all be the same length\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function zip(...arrs: T): FlatTuple[] {\n return Array.from(zipLazy(...arrs))\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FlatTuple = { [K in keyof T]: T[K] extends (infer U)[] ? U : never } // black magic to staticly infer typs from array spread\n","import type { BetSelection, BetSlipItem } from '@mobi/betslip/types'\nimport { isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { trackLoadedBetBetslip } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { promptUserAndReturnDecision } from '@core/Utils/betting/loadBet/Components/PromptBetslipChange/helpers'\nimport { buildBaseBetSelection } from '../buildBetItem/buildBaseBetSelection'\nimport { LoadBetDetails, LoadBetErrors } from '../types'\nimport { store } from '@core/Store'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { addItemsToBetSlip, removeItemFromBetSlipById } from '@mobi/betslip/Store/Bets'\nimport { createBetSlipItem } from '@mobi/betslip/helpers/createBetSlipItem'\nimport { getErrorMessage } from './loadBet'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport { zip } from '@mobi/utils/functions/zip'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\n\nconst enum LocalConstants {\n PlaceBetType = 'Place - Fixed',\n}\n\n/** NEW BetSlip: handle non-empty betslip, build items and open (Multi ONLY) */\nexport async function addToBetSlip(\n bets: LoadBetDetails[],\n source?: LoadBetSource,\n // pass in existing bet selection to avoid loading from api again\n prebuiltBets?: QuickbetSelection[] | null\n) {\n let whatToDoWithExisting = 'emptyBetslip'\n\n if (hasExistingBetSlipItems()) {\n whatToDoWithExisting = await promptUserAndReturnDecision()\n\n switch (whatToDoWithExisting) {\n case 'cancel':\n return { total: bets.length, success: 0 }\n case 'add':\n break\n case 'replace': {\n removeFixedOddsBetslipItems()\n break\n }\n }\n }\n\n const createBetslipItemResults = await Promise.allSettled(\n zip(bets, prebuiltBets || []).map(async ([bet, qbSelection]) => {\n const item = qbSelection || (await buildBaseBetSelection(bet))\n const betslipItem = createBetSlipItem(item as BetSelection)\n if ('betType' in bet) {\n betslipItem.multiLegBetType = bet.betType === LocalConstants.PlaceBetType ? 'P' : 'W'\n }\n return betslipItem\n })\n )\n const betsReadyForBetslip = createBetslipItemResults\n .filter(isFulfilled)\n .map(result => result.value)\n\n if (betsReadyForBetslip.length === 0) {\n const isBettingClosedOnBets = createBetslipItemResults\n .filter(isRejected)\n .map(result => result.reason)\n .some(err => getErrorMessage(err) === LoadBetErrors.BettingClosed)\n throw Error(isBettingClosedOnBets ? LoadBetErrors.BettingClosed : LoadBetErrors.Default)\n }\n\n store.dispatch(addItemsToBetSlip(betsReadyForBetslip))\n store.dispatch(setBetSlipNewIsOpen(true))\n\n source &&\n trackLoadedBetBetslip({\n source,\n action: whatToDoWithExisting,\n betsToAdd: betsReadyForBetslip.length,\n })\n\n return { total: bets.length, success: betsReadyForBetslip.length }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction removeFixedOddsBetslipItems() {\n const betSlipItems = selectBetSlipItems(store.getState())\n const toRemove = betSlipItems.filter(item => !isToteSelection(item.selection))\n for (const item of toRemove) {\n store.dispatch(removeItemFromBetSlipById(item))\n }\n}\n\nfunction hasExistingBetSlipItems(): boolean {\n const betSlipItems = selectBetSlipItems(store.getState())\n return betSlipItems.some(item => !isToteSelection(item.selection))\n}\n\nfunction isFulfilled(input: PromiseSettledResult): input is PromiseFulfilledResult {\n return input.status === 'fulfilled'\n}\nfunction isRejected(input: PromiseSettledResult): input is PromiseRejectedResult {\n return input.status === 'rejected'\n}\n\ntype LoadBetSource = 'share-bet' | 'rebet' | 'blackbook'\n","import React from 'react'\nimport { isRaceDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { dayjs } from '@mobi/utils/date'\nimport { BetslipItem, BetslipState, state$ } from '@core/Areas/Betslip/driver'\nimport {\n getBetsInMulti,\n hasInvestment,\n hasNotBeenPlaced,\n isValidMulti,\n} from '@core/Areas/Betslip/helpers/state'\nimport { trackOptimoveEvent } from '../optimove'\n\nexport const useTrackOptimoveBetslipAbandoned = () => {\n React.useEffect(() => {\n return () => {\n state$.take(1).subscribe(betslipState => {\n const items = betslipState.items\n const { multiReceipt, multiInvestment, multiBetError } = betslipState.toJS() as BetslipState\n\n if (items.isEmpty() || (!items.some(hasInvestment) && !items.some(item => item.isInMulti)))\n return\n\n const soonestRef = { ast: null }\n\n const multiItems = getBetsInMulti(items)\n if (!multiReceipt && isValidMulti(multiInvestment, multiBetError, multiItems)) {\n multiItems.forEach(item => handleUpdatingSoonestAst(item, soonestRef))\n if (soonestRef.ast) trackWithMinutesToNextRace(soonestRef.ast)\n return\n }\n\n const singleItems = items.filter(hasInvestment).filter(hasNotBeenPlaced)\n if (singleItems.count() > 0) {\n singleItems.forEach(item => handleUpdatingSoonestAst(item, soonestRef))\n if (soonestRef.ast) trackWithMinutesToNextRace(soonestRef.ast)\n return\n }\n })\n }\n }, [])\n}\n\n// Local Helpers\n\nfunction handleUpdatingSoonestAst(item: BetslipItem, data: Record<'ast', string | null>) {\n if (isRaceDetails(item.selectionDetails)) {\n const itemAst = item.selectionDetails.races[0].raceTime\n if (!data.ast || dayjs(dayjs(itemAst).toISOString()).isBefore(dayjs(data.ast).toISOString())) {\n data.ast = itemAst\n }\n }\n}\n\nfunction trackWithMinutesToNextRace(ast: string) {\n const astISOString = dayjs(ast).toISOString()\n const nowISOString = dayjs().toISOString()\n if (dayjs(astISOString).isBefore(nowISOString)) return\n\n const minutes_to_next_race = Math.floor(dayjs(astISOString).diff(nowISOString, 'm'))\n if (minutes_to_next_race > 5) {\n trackOptimoveEvent({\n eventName: 'betslip_abandoned_w_valid_bets',\n data: { minutes_to_next_race },\n })\n }\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { colors } from '@core/Settings'\nimport { MainContainer } from '@core/Components/Containers'\nimport { OverlayHeaderStyled, OverlayHeadingStyled } from '@core/Components/Overlay/Overlay.styles'\n\nexport const BetslipOverlayStyled = styled.div({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n background: colors.betslip.background,\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const BetslipOverlayHeaderStyled = styled(OverlayHeaderStyled)({\n position: 'fixed',\n})\n\nexport const BetslipOverlayHeaderTextStyled = styled(OverlayHeadingStyled)({\n color: colors.betslip.header.text,\n})\n\nexport const BetslipMainContainerStyled = styled(MainContainer)({\n overflowY: 'scroll', // scroll, not auto for momentum scroll to work\n WebkitOverflowScrolling: 'touch', // enables momentum scroll < IOS11\n overscrollBehavior: 'contain',\n minHeight: 0,\n flex: 1,\n background: hexColors.gainsboro,\n marginTop: measurements.mobi.headerHeight,\n '&::after': {\n content: '\"\"',\n display: 'block',\n paddingBottom: '22rem', // Height of footer and notification(s)\n },\n})\n\nexport const EmptyBetslipMessageStyled = styled.div({\n fontSize: '1.6rem',\n textAlign: 'center',\n color: colors.betslip.summary.title.text,\n textShadow: `0 0.1rem 0 ${colors.betslip.summary.color}`,\n paddingTop: `calc(50vh - (${measurements.mobi.headerHeight} + 4rem))`, // 6rem:header + 4rem:~half-footer\n})\n\nEmptyBetslipMessageStyled.displayName = 'EmptyBetslipMessageStyled'\n","import styled from '@emotion/styled'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\nimport { fontSizes } from '@core/Settings'\nimport { Money } from '@core/Components/Text/Money'\n\nexport const AccountBalanceStyled = styled.div({\n flexGrow: 1,\n textAlign: 'right',\n display: 'flex',\n justifyContent: 'flex-end',\n})\n\nexport const AccountBalanceTouchableStyled = styled.button({\n textAlign: 'right',\n lineHeight: 1.2,\n fontSize: fontSizes.betslip.summary.fontSize,\n color: hexColors.lilac,\n background: 'none',\n border: 'none',\n borderRadius: '0.2rem',\n paddingLeft: '2rem',\n minHeight: measurements.mobi.headerHeight,\n\n '&:active': {\n backgroundColor: 'rgba(0,0,0,0.05)',\n },\n})\n\nexport const AccountBalanceMoneyStyled = styled(Money)({\n position: 'relative',\n color: hexColors.white,\n fontSize: '1.4rem',\n\n '&::before': {\n content: '\"+\"',\n fontSize: '2rem',\n fontWeight: 600,\n position: 'absolute',\n top: '50%',\n left: '-2rem',\n transform: 'translateY(-50%)',\n },\n})\n\nexport const BonusBalanceMoneyStyled = styled\n .div({\n display: 'flex',\n alignItems: 'center',\n textAlign: 'right',\n padding: '0 0.5rem',\n color: hexColors.orange,\n fontSize: '1.2em',\n margin: 'unset',\n })\n .withComponent(Money)\n","import React from 'react'\nimport type { BetSlipResponse } from '@mobi/betslip/types'\nimport {\n AccountBalanceStyled,\n AccountBalanceMoneyStyled,\n AccountBalanceTouchableStyled,\n BonusBalanceMoneyStyled,\n} from './AccountBalance.styles'\nimport { close as modalClose } from '@classic/AppUtils/Framework/Intent/modal'\nimport { openDepositModal } from '@core/Areas/Deposit'\nimport {\n UpdateAccountBalance,\n state$ as userAccountState$,\n} from '@core/State/UserAccount/userAccountDriver'\nimport {\n BetslipDepositModalClosed,\n ConfirmAllBetsSuccessful,\n OnClose,\n RefreshBetslipSuccessful,\n} from '../../signals'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { fetchAccountBalanceAsync } from '@core/State/UserAccount/async-signals'\nimport { hasValue } from '@mobi/utils'\nimport { OverlayClose } from '@core/Components/Overlay'\n\nexport const AccountBalance = () => {\n const {\n accountBalance: balance,\n bonusBetBalance,\n bonusCashBalance,\n } = useObservableImmutable(userAccountState$, [\n 'accountBalance',\n 'bonusBetBalance',\n 'bonusCashBalance',\n ])\n\n React.useEffect(() => {\n const sideEffectConfirmAllBetsSuccessful = ConfirmAllBetsSuccessful.signal$.subscribe(\n ({ data }: { data: BetSlipResponse[] }) => {\n let shouldUpdateBalance = false\n const accountBalancesFromResponse = data.reduce((arr: number[], item) => {\n if (item.success && item.receipt && item.receipt.accountBalance >= 0) {\n shouldUpdateBalance = true\n return arr.concat(item.receipt.accountBalance)\n }\n return arr\n }, [])\n if (shouldUpdateBalance) {\n accountBalancesFromResponse.sort((a, b) => a - b)\n UpdateAccountBalance({ balance: accountBalancesFromResponse[0] })\n }\n }\n )\n\n const sideEffectRefreshBetslip =\n RefreshBetslipSuccessful.signal$.subscribe(fetchAccountBalanceAsync)\n\n const legacyModalSubscription = modalClose.signal$.throttle(200).subscribe(() => {\n BetslipDepositModalClosed()\n })\n\n return function cleanUp() {\n sideEffectConfirmAllBetsSuccessful.dispose()\n sideEffectRefreshBetslip.dispose()\n legacyModalSubscription.dispose()\n }\n }, [])\n\n const bonusBalanceToDisplay = (bonusBetBalance ?? 0) + (bonusCashBalance ?? 0)\n\n const handleDepositClick = () => {\n OverlayClose()\n OnClose()\n openDepositModal('quick-deposit')\n }\n\n return hasValue(balance) ? (\n \n \n \n \n {!!bonusBalanceToDisplay && (\n \n )}\n \n ) : null\n}\n","import styled from '@emotion/styled'\nimport { ButtonStyled } from '@mobi/component-library/Common/Buttons'\n\nexport const GridButtonStyled = styled(ButtonStyled)({\n width: '100%',\n paddingTop: '0.5rem',\n paddingBottom: '0.5rem',\n whiteSpace: 'pre-line',\n height: '4rem',\n})\n\nexport const RefreshButtonStyled = styled('button')({\n margin: '-1.4rem',\n padding: '1.4rem',\n background: 'none',\n border: 'none',\n})\n","import React from 'react'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { ClearBetslip } from '../../signals'\nimport { GridButtonStyled } from './Buttons.styles'\nimport { state$ } from '../../driver'\n\nconst clearBetslip = () => ClearBetslip()\n\ninterface ClearBetslipButtonComponentProps {\n isDisabled: boolean\n}\n\nfunction ClearBetslipButtonComponent({ isDisabled }: ClearBetslipButtonComponentProps) {\n return (\n \n Clear Betslip\n \n )\n}\n\nexport const ClearBetslipButton = observeImmutable(state$, ({ record: { items } }) => (\n \n))\n","import styled from '@emotion/styled'\n\nexport const BetslipErrorBoundaryContainer = styled('div')({\n padding: '1.5rem',\n})\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { BetslipErrorBoundaryContainer } from './BetslipErrorBoundary.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ClearBetslip, OnClose } from '../../signals'\nimport { navigateToPendingBets } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { logError } from '@core/Utils/logging/logging'\nimport {\n BetslipMainContainerStyled,\n BetslipOverlayHeaderStyled,\n BetslipOverlayHeaderTextStyled,\n} from '../../Betslip.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { OverlayCloseButtonStyled } from '@core/Components/Overlay/Overlay.styles'\n\nconst handleCloseButtonClick = () => OverlayClose()\n\nexport class BetslipErrorBoundary extends React.Component<\n { children?: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: Record) {\n super(props)\n this.state = { hasError: false }\n }\n\n public componentDidCatch(error: Error) {\n logError(`Betslip render error: ${error.toString()}`, true)\n this.setState({\n hasError: true,\n })\n }\n\n public render() {\n if (this.state.hasError) {\n return (\n \n \n Betslip\n \n \n \n \n\n \n \n \n \n \n Clear Betslip\n \n \n \n \n Pending Bets\n \n \n \n \n \n \n )\n }\n\n return this.props.children\n }\n\n private handlePendingClick = () => {\n OverlayClose()\n OnClose()\n navigateToPendingBets()\n }\n\n private handleClearBetslip = () => {\n ClearBetslip()\n this.setState({ hasError: false })\n }\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ReceiptItem, BetslipItem } from '../../driver'\nimport { List } from 'immutable'\nimport { toMoney } from '@mobi/utils/money'\n\ninterface BetsPlacedMessageComponentProps {\n items: List\n multiReceipt: ReceiptItem | null\n}\n\nexport function BetsPlacedMessage({ items, multiReceipt }: BetsPlacedMessageComponentProps) {\n let placedBetsCount = 0\n let placedBetsAmount = 0\n items.forEach(item => {\n if (item.receipt) {\n placedBetsCount++\n placedBetsAmount += item.receipt.amountPaid as number\n }\n })\n if (multiReceipt) {\n placedBetsCount++\n placedBetsAmount += multiReceipt.amountPaid as number\n }\n\n if (placedBetsCount === 0) {\n return null\n }\n return (\n 1 ? 's' : ''} placed totalling ${toMoney(\n placedBetsAmount\n )}`}\n noticeBoxType={NoticeBoxTypes.Success}\n hasBorder={false}\n />\n )\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '../../../../Components/NoticeBox'\n\nexport function ConfirmMessage() {\n return (\n \n )\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\ninterface ErrorMessageProps {\n errorMessage: string\n}\n\nexport function ErrorMessage({ errorMessage }: ErrorMessageProps) {\n return \n}\n","import styled from '@emotion/styled'\nimport { transparentize } from 'polished'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { colors, fontSizes } from '@core/Settings'\n\nexport const FooterStyled = styled.div({\n height: 'auto',\n position: 'fixed',\n zIndex: 1,\n bottom: 0,\n left: 0,\n right: 0,\n maxWidth: measurements.mobi.maxWidth,\n width: '100%',\n margin: '0 auto',\n lineHeight: 1,\n})\n\nexport const SummaryStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n backgroundColor: colors.betslip.summary.background,\n color: colors.betslip.summary.color,\n padding: '1rem',\n width: '100%',\n height: '8rem',\n boxSizing: 'border-box',\n})\n\nexport const FooterSummaryValueStyled = styled.span({})\n\nexport const FooterSummaryHeadingStyled = styled.span({\n fontSize: fontSizes.betslip.summary.fontSize,\n color: colors.betslip.summary.title.text,\n\n '> span': {\n fontSize: fontSizes.betslip.summary.fontSizeMedium,\n fontWeight: 'bold',\n color: colors.betslip.summary.value.text,\n margin: 0,\n },\n})\n\nexport const MessagesContainerStyled = styled.div({\n backgroundColor: colors.betslip.errors.container.background,\n padding: '1rem',\n overflow: 'auto',\n})\n\nexport const FooterNoticeBoxWrapper = styled.div({\n backgroundColor: colors.betslip.errors.noticeBox.background,\n color: colors.betslip.errors.noticeBox.text,\n\n '& > div': {\n marginBottom: 0,\n borderBottom: `1px solid ${transparentize(0.5, colors.betslip.errors.container.background)}`,\n },\n\n '& > div:last-child': {\n borderBottom: 'none',\n },\n})\n","import { FooterSummaryHeadingStyled } from '../FooterSummary/FooterSummary.styles'\n\nexport const EstimatedReturnHeadingStyled = FooterSummaryHeadingStyled\n","import React from 'react'\nimport * as immutable from 'immutable'\nimport { EstimatedReturnHeadingStyled } from './EstimatedReturn.styles'\nimport { Money } from '@core/Components/Text/Money'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$, MultiInvestmentRecord, MultiInvestment } from '../../driver'\nimport { calculateEstReturn } from '../../helpers/calculator'\nimport { getBetsToPlace, getBetsInMulti, isValidMulti } from '../../helpers/state'\n\ninterface EstimatedReturnProps {\n estimatedReturn: number\n}\n\nexport function EstimatedReturnComponent({ estimatedReturn }: EstimatedReturnProps) {\n const displayValue = Number.isFinite(estimatedReturn) && estimatedReturn > 0\n return (\n \n Est. Return{' '}\n {displayValue ? : N/A}\n \n )\n}\n\nexport const EstimatedReturn = observeImmutable(\n state$,\n ({ record: { items, multiInvestment, multiReceipt } }) => {\n const multiInvestmentJS: MultiInvestment = (multiInvestment as MultiInvestmentRecord).toJS()\n const multiItems = getBetsInMulti(items)\n const placeableItems = getBetsToPlace(items)\n const placeableMultis =\n !multiReceipt && isValidMulti(multiInvestmentJS, null, multiItems)\n ? multiItems\n : immutable.List([])\n const estimatedReturn = calculateEstReturn(placeableItems, placeableMultis, multiInvestmentJS)\n return \n }\n)\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '../../../../Components/NoticeBox'\n\nexport function InvalidBetsMessage() {\n return (\n \n )\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '../../../../Components/NoticeBox'\n\ninterface ReviewChangesMessageProps {\n includeCancellationWarning: boolean\n}\n\nexport function ReviewChangesMessage({ includeCancellationWarning }: ReviewChangesMessageProps) {\n const subtitle = includeCancellationWarning ? 'Bets cannot be cancelled once confirmed.' : ''\n return (\n \n )\n}\n","import styled from '@emotion/styled'\nimport { fontSizes } from '@core/Settings'\n\nexport const TotalStakeValueStyled = styled('span')({\n fontWeight: 'bold',\n fontSize: fontSizes.betslip.summary.fontSizeLarge,\n})\n","import React from 'react'\nimport { TotalStakeValueStyled } from './TotalStake.styles'\nimport { Money } from '@core/Components/Text/Money'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ } from '../../driver'\nimport { calculateTotalStake } from '@core/Areas/Betslip/helpers/calculator'\n\ninterface TotalStakeProps {\n totalStake: number\n}\n\nexport function TotalStakeComponent({ totalStake }: TotalStakeProps) {\n return (\n \n \n \n )\n}\n\nexport const TotalStake = observeImmutable(state$, ({ record }) => (\n \n))\n","import React from 'react'\nimport { openDeposit } from '@core/Areas/Deposit'\nimport { GridButtonStyled } from '../Buttons/Buttons.styles'\nimport { TotalStake } from '../TotalStake/TotalStake'\nimport {\n ProposeAllBets,\n ConfirmAllBets,\n EditBets,\n KeepBets,\n RefreshBetslip,\n OnClose,\n} from '../../signals'\nimport { BusyIndicator } from '@mobi/component-library/Feedback/BusyIndicator'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { navigateToPendingBets } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\n\n// Place Bets\nexport const PlaceBetsButton = ({ disabled, isBusy }: { disabled: boolean; isBusy: boolean }) => (\n \n {isBusy ? (\n \n ) : (\n <>\n Place Bets \n \n )}\n \n)\n\n// Confirm\nexport const ConfirmBetsButton = ({\n disabled = false,\n isBusy,\n}: {\n disabled?: boolean\n isBusy: boolean\n}) => (\n \n {isBusy ? (\n \n ) : (\n <>\n Confirm \n \n )}\n \n)\n\n// Pending Bets\nconst handlePendingBetsClick = () => {\n OverlayClose()\n OnClose()\n navigateToPendingBets()\n}\nexport const PendingBetsButton = () => (\n \n Pending Bets\n \n)\n\n// Close Betslip\nconst handleCloseBetslip = () => {\n OverlayClose()\n OnClose()\n}\nexport const CloseButton = () => (\n \n Close\n \n)\n\n// Login\nexport const LoginButton = ({ isBusy }: { isBusy: boolean }) => (\n showLogin()}>\n {isBusy ? : 'Log in to place bet'}\n \n)\n\n// Edit Bets\nconst handleEditBetsClick = () => {\n EditBets()\n RefreshBetslip()\n}\nexport const EditBetsButton = ({ disabled }: { disabled: boolean }) => (\n \n Edit\n \n)\n\n// Deposit\nconst handleDepositClick = () => {\n OverlayClose()\n OnClose()\n openDeposit()\n}\nexport const DepositButton = () => (\n \n Deposit\n \n)\n\n// Keep Bets\nconst handleKeepBetsClick = () => {\n KeepBets()\n RefreshBetslip()\n}\nexport const KeepBetsButton = () => (\n \n Keep Bets\n \n)\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { BetErrorType } from '@core/Data/betting'\nimport { BetslipItem, BetslipState, state$ as betSlipState$ } from '../../driver'\nimport { BetsPlacedMessage } from '../Messages/BetsPlacedMessage'\nimport { ConfirmMessage } from '../Messages/ConfirmMessage'\nimport { DepositButtonComponent } from '@core/Areas/Quickbet/Components/Buttons/Buttons'\nimport { ErrorMessage } from '../Messages/ErrorMessage'\nimport { EstimatedReturn } from '../EstimatedReturn/EstimatedReturn'\nimport { getPriceChange, PriceChange } from '@core/Components/Text/utils'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { InvalidBetsMessage } from '../Messages/InvalidBetsMessage'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { openDepositModal } from '@core/Areas/Deposit'\nimport { ReviewChangesMessage } from '../Messages/ReviewChangesMessage'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { Text } from '@core/Components/Text'\nimport type { FobSelection } from '@mobi/betslip/types'\nimport {\n SummaryStyled,\n FooterStyled,\n MessagesContainerStyled,\n FooterSummaryHeadingStyled,\n FooterNoticeBoxWrapper,\n} from './FooterSummary.styles'\nimport {\n getBetsToPlace,\n isFatalErrorType,\n getBetsInMulti,\n isValidMulti,\n hasBetPlacementFault,\n isDuplicateBonusBetErrorType,\n isUnspecifiedErrorType,\n} from '../../helpers/state'\nimport {\n PlaceBetsButton,\n ConfirmBetsButton,\n PendingBetsButton,\n EditBetsButton,\n CloseButton,\n LoginButton,\n KeepBetsButton,\n} from './FooterSummaryButtons'\n\ntype FooterSummaryComponentProps = Pick<\n BetslipState,\n | 'items'\n | 'hasProposed'\n | 'isBusy'\n | 'apiErrorMessage'\n | 'multiInvestment'\n | 'multiReceipt'\n | 'multiBetError'\n> & { isLoggedIn: boolean }\n\nconst isPriceChangeDown = ({ selection }: BetslipItem): boolean => {\n if (!selection || !isFobSelection(selection)) {\n return false\n }\n const winPriceChange = getPriceChange(selection.winPriceLastSeen, selection.winPrice)\n const placePriceChange = selection.placePrice\n ? getPriceChange(selection.placePriceLastSeen, selection.placePrice)\n : PriceChange.None\n return winPriceChange === PriceChange.Decrease || placePriceChange === PriceChange.Decrease\n}\n\nexport class FooterSummaryComponent extends React.Component {\n public render() {\n const {\n items,\n multiInvestment,\n multiReceipt,\n multiBetError,\n hasProposed,\n isBusy,\n isLoggedIn,\n apiErrorMessage,\n } = this.props\n\n const isValidMultiPresent =\n !multiReceipt && isValidMulti(multiInvestment, multiBetError, getBetsInMulti(items))\n\n const singlesLeftToPlace = getBetsToPlace(items).count()\n const numberOfBets = singlesLeftToPlace + (isValidMultiPresent ? 1 : 0)\n\n const hasInsufficientFundsError =\n (hasProposed &&\n !!multiBetError &&\n multiBetError.betErrorType === BetErrorType.InsufficientFunds) ||\n items.some(x => x.betErrorType === BetErrorType.InsufficientFunds)\n const hasErrors =\n !!multiBetError ||\n items.some(x => x.betErrorType !== undefined || !!x.multiBetLegError || isPriceChangeDown(x))\n const hasPlacedBets = items.some(x => !!x.receipt) || !!multiReceipt\n\n const hasSeriousMultiError =\n !!multiBetError &&\n (isFatalErrorType(multiBetError.betErrorType) ||\n hasBetPlacementFault(multiBetError.betErrorType) ||\n isDuplicateBonusBetErrorType(multiBetError.betErrorType) ||\n isUnspecifiedErrorType(multiBetError.betErrorType))\n\n const hasMultiLeftToPlace = !multiReceipt && !hasSeriousMultiError && isValidMultiPresent\n const hasBetsLeftToPlace = singlesLeftToPlace > 0 || hasMultiLeftToPlace\n\n const isReadyToConfirm = hasBetsLeftToPlace || !hasPlacedBets\n const isBettingComplete = !hasBetsLeftToPlace && hasPlacedBets\n\n return (\n \n {(hasProposed || !!apiErrorMessage) && (\n \n \n {!!apiErrorMessage && }\n\n {!hasBetsLeftToPlace && !hasPlacedBets && }\n\n {hasProposed && hasBetsLeftToPlace && !hasErrors && }\n\n {hasBetsLeftToPlace && hasErrors && (\n \n )}\n\n {hasPlacedBets && }\n \n \n )}\n\n \n {(!hasProposed || hasBetsLeftToPlace) && (\n \n \n \n Total Bets {numberOfBets}\n \n \n \n \n \n \n )}\n\n \n {(() => {\n if (!isLoggedIn) {\n return (\n \n {hasProposed && (\n \n \n \n )}\n \n \n \n \n )\n }\n\n if (!hasProposed) {\n return (\n \n 0)} isBusy={isBusy} />\n \n )\n }\n\n if (isReadyToConfirm) {\n return (\n \n \n \n \n \n {hasInsufficientFundsError ? (\n {\n openDepositModal('quick-deposit')\n }}\n >\n Deposit\n \n ) : (\n \n )}\n \n \n )\n }\n\n if (isBettingComplete) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n return undefined\n })()}\n \n \n \n )\n }\n}\n\nconst footerSummaryState$ = Observable.combineLatest(\n betSlipState$,\n userAccountState$,\n (betslipRecord, userAccountRecord): FooterSummaryComponentProps => {\n const betslipState: BetslipState = betslipRecord.toJS()\n return {\n items: betslipRecord.items,\n multiInvestment: betslipState.multiInvestment,\n multiReceipt: betslipState.multiReceipt,\n multiBetError: betslipState.multiBetError,\n hasProposed: betslipState.hasProposed,\n isBusy: betslipState.isBusy,\n isLoggedIn: userAccountRecord.isLoggedIn ?? false,\n apiErrorMessage: betslipState.apiErrorMessage,\n }\n }\n)\n\nexport const FooterSummary = observeImmutable(\n footerSummaryState$,\n ({\n record: {\n items,\n multiBetError,\n multiInvestment,\n multiReceipt,\n hasProposed,\n isBusy,\n isLoggedIn,\n apiErrorMessage,\n },\n }) => (\n \n )\n)\n\n// Local Helpers\n\nfunction isFobSelection(selection: BetslipItem['selection']): selection is FobSelection {\n return !!(selection && 'winPrice' in selection)\n}\n","import styled from '@emotion/styled'\nimport { ExpandablePanelComponentTheme } from '@core/Components/ExpandablePanel/themes'\nimport { isEmpty } from '@core/Utils/object/object'\nimport { colors } from '@core/Settings'\n\ninterface Theme {\n theme?: ExpandablePanelComponentTheme\n}\n\nexport const BetslipExpandablePanelStyled = styled('div')(\n {\n position: 'relative',\n },\n ({ theme }) =>\n isEmpty(theme)\n ? {}\n : {\n color: theme.header.text.color,\n }\n)\n\ninterface BetslipExpandablePanelHeaderStyled extends Theme {\n isExpanded: boolean\n}\n\nexport const BetslipExpandablePanelHeaderStyled = styled(\n 'header'\n)(\n {\n cursor: 'pointer',\n padding: '1.4rem 1.5rem',\n },\n ({ theme, isExpanded }) =>\n isEmpty(theme)\n ? {}\n : {\n background: theme.header.background,\n color: theme.header.text.color,\n borderBottom: isExpanded\n ? `0.1rem solid ${theme.header.background}`\n : `0.1rem solid #666`,\n }\n)\n\nexport const BetslipExpandablePanelTitleStyled = styled('div')({\n fontWeight: 'bold',\n marginRight: '1rem',\n fontSize: '1.4rem',\n})\n\nexport const BetslipExpandablePanelToggleStyled = styled('div')({\n position: 'relative',\n})\n\nexport const BetslipExpandablePanelBadgeStyled = styled(BetslipExpandablePanelTitleStyled)({\n width: '2rem',\n height: '2rem',\n background: colors.betslip.expandable.badge.background,\n color: colors.betslip.expandable.badge.text,\n borderRadius: '50%',\n textAlign: 'center',\n})\n","import React from 'react'\nimport { ThemeProvider } from '@emotion/react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { darkTheme } from '@core/Components/ExpandablePanel/themes'\nimport { ExpandablePanelContent } from '@core/Components/ExpandablePanel/ExpandablePanelContent'\nimport {\n BetslipExpandablePanelStyled,\n BetslipExpandablePanelHeaderStyled,\n BetslipExpandablePanelToggleStyled,\n BetslipExpandablePanelTitleStyled,\n BetslipExpandablePanelBadgeStyled,\n} from './BetslipExpandablePanel.styles'\n\ninterface BetslipExpandablePanelProps {\n title: string\n count: number\n refreshButton?: React.ReactChild\n expanded?: boolean\n headerClicked?: () => void\n children?: React.ReactNode\n scrollIntoViewWhenOpened?: boolean\n}\n\nexport function BetslipExpandablePanel({\n title,\n count,\n expanded,\n headerClicked,\n children,\n scrollIntoViewWhenOpened = false,\n refreshButton,\n}: BetslipExpandablePanelProps): JSX.Element {\n const testTid = { [`data-tid-betslip-section-${title.toLowerCase()}`]: '' }\n return (\n \n \n \n \n \n \n \n \n \n \n \n {title || 'Please enter a title'}\n \n \n \n \n {count}\n \n \n {refreshButton && (\n \n {refreshButton}\n \n )}\n \n \n \n {children}\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { MoneyGroupedProps, MoneyGrouped } from '@core/Components/Text/MoneyGrouped'\nimport { Money } from '@core/Components/Text/Money'\nimport { PriceChange } from '@core/Components/Text/utils'\nimport { hexColors } from '@mobi/settings/src/hexColors'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\n\nexport interface BetInvestmentGroupStyledProps {\n isEditable: boolean\n}\n\nexport const BetInvestmentGroupStyled = styled('div')(\n {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n alignContent: 'stretch',\n justifyContent: 'space-between',\n flexWrap: 'nowrap',\n width: 'auto',\n height: '4rem',\n padding: '0 0.5rem',\n marginBottom: '0.5rem',\n border: `1px solid ${colors.betslip.investment.border}`,\n backgroundColor: colors.betslip.investment.background,\n boxShadow: `0 0.1rem 0.2rem ${colors.betslip.investment.boxShadow}`,\n fontSize: '1.4rem',\n cursor: 'pointer',\n },\n ({ isEditable }) => ({\n backgroundColor: !isEditable ? colors.betslip.investment.disabled.background : undefined,\n boxShadow: !isEditable ? 'none' : undefined,\n })\n)\n\nexport const BetEachWayInvestmentGroupStyled = styled(BetInvestmentGroupStyled)<{\n isEditable: boolean\n}>(\n {\n width: '100%',\n height: 'auto',\n minHeight: '4rem',\n flexDirection: 'column',\n flexWrap: 'nowrap',\n },\n ({ isEditable }) => ({\n backgroundColor: !isEditable ? colors.betslip.investment.disabled.background : undefined,\n boxShadow: !isEditable ? 'none' : undefined,\n })\n)\n\ntype InvestmentStyledProps = MoneyGroupedProps & {\n isEditable: boolean\n shouldHighlight?: boolean\n isBonusBet?: boolean\n}\n\nexport const InvestmentStyled = styled(MoneyGrouped)(\n {\n fontWeight: 'bold',\n fontSize: '1.6rem',\n zIndex: 'unset',\n },\n ({ isEditable, isBonusBet }) => ({\n color: isEditable ? colors.betslip.investment.text : colors.betslip.investment.disabled.text,\n backgroundColor: isBonusBet ? hexColors.orange : undefined,\n padding: isBonusBet ? '0.1em 0.5em' : undefined,\n borderRadius: isBonusBet ? '0.4em' : undefined,\n })\n)\n\nexport const InvestmentPriceStyled = styled(MoneyGrouped)(\n {\n fontWeight: 'normal',\n fontSize: '1.2rem',\n zIndex: 0,\n position: 'relative',\n alignItems: 'center',\n },\n ({ isEditable, priceChange, shouldHighlight }) => {\n let color: string | undefined = isEditable\n ? colors.betslip.investment.text\n : colors.betslip.investment.disabled.text\n\n // if price change and no highlight, leave color to be decided by it children\n if (priceChange && priceChange !== PriceChange.None && !shouldHighlight) {\n color = undefined\n }\n\n return shouldHighlight\n ? {\n color,\n fontWeight: 'bold',\n '&::before': {\n backgroundColor: colors.quickbet.investment.legInfo.boosted.background,\n borderRadius: '0.5rem',\n content: '\" \"',\n height: '100%',\n width: priceChange && priceChange !== PriceChange.None ? 'calc(100% + 1.5rem)' : '100%',\n top: '50%',\n left: '-0.2rem',\n right: '-0.2rem',\n padding: '0.1rem 0.2rem',\n position: 'absolute',\n transform: 'translateY(-50%)',\n zIndex: -1,\n },\n }\n : {\n color,\n }\n }\n)\n\nexport const InvestmentAmountStyled = styled(Money)<{ isEditable: boolean; isBonusBet?: boolean }>(\n {\n display: 'inline-block',\n fontWeight: 'bold',\n fontSize: '1.6rem',\n margin: 0,\n position: 'relative',\n color: colors.betslip.investment.text,\n },\n ({ isEditable, isBonusBet }) => ({\n color: !isEditable ? colors.betslip.investment.disabled.text : undefined,\n backgroundColor: isBonusBet ? hexColors.orange : undefined,\n padding: isBonusBet ? '0.1em 0.5em' : undefined,\n borderRadius: isBonusBet ? '0.4em' : undefined,\n })\n)\n\nexport const InvestmentTextStyled = styled('span')<{ isEditable: boolean }>(\n {\n paddingRight: '0.5rem',\n display: 'inline-block',\n fontSize: '1.2rem',\n margin: 0,\n position: 'relative',\n color: colors.betslip.investment.text,\n },\n ({ isEditable }) => ({\n color: !isEditable ? colors.betslip.investment.disabled.text : undefined,\n })\n)\n\nexport const GridCellStyled = styled(GridCell)({\n alignSelf: 'center',\n})\n","import React from 'react'\nimport { PriceChange } from '@core/Components/Text/utils'\nimport { MoneyGrouped } from '@core/Components/Text/MoneyGrouped'\n\ninterface MultiReturnComponentProps {\n price: number | null\n priceChange: PriceChange\n}\n\nexport const MultiReturn = ({ price, priceChange }: MultiReturnComponentProps) => {\n if (!price) {\n return N/A\n }\n return \n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const ListStyled = styled('ul')({\n listStyle: 'none',\n margin: 0,\n padding: '0.5rem',\n})\n\ninterface ItemStyledProps {\n hasFatalError: boolean\n}\n\nexport const BETSLIP_ITEM_PADDING = '1rem'\nexport const BETSLIP_ITEM_BOX_SHADOW = `0 0.1rem 0.2rem ${colors.betslip.item.boxShadow}`\n\nexport const ItemStyled = styled('li')(\n {\n marginBottom: '0.5rem',\n padding: BETSLIP_ITEM_PADDING,\n boxShadow: BETSLIP_ITEM_BOX_SHADOW,\n backgroundColor: colors.betslip.item.background,\n color: colors.betslip.item.text,\n\n '&:last-child': {\n marginBottom: 0,\n },\n },\n ({ hasFatalError = false }) =>\n hasFatalError && {\n backgroundColor: colors.betslip.item.disabled.background,\n color: colors.betslip.item.disabled.text,\n\n '& [data-tid-notice-box]': {\n marginBottom: 0,\n },\n\n '& [data-tid-betting-header]': {\n paddingBottom: '0.5rem',\n },\n\n '& [data-tid-remove-button]': {\n color: colors.betslip.removeButton.disabled.color,\n },\n }\n)\n\nexport const SingleItemNoticeWrapper = styled('div')({\n backgroundColor: colors.betslip.errors.noticeBox.background,\n color: colors.betslip.errors.noticeBox.text,\n})\n\nexport const TotalCostSectionStyled = styled('div')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '2.7rem',\n fontSize: '1.2rem',\n color: colors.betslip.multiDetails.label.color,\n})\n\nexport const TotalCostMoneyStyled = styled('span')({\n fontSize: '1.6rem',\n fontWeight: 'bold',\n color: colors.betslip.item.text,\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { BETSLIP_ITEM_PADDING } from '../SingleItemList/SingleItemList.styles'\nimport { Money } from '@core/Components/Text/Money'\n\nexport const ReceiptHeaderStyled = styled('div')({\n display: 'flex',\n alignItems: 'center',\n backgroundColor: colors.betslip.receipt.header.background,\n color: colors.betslip.receipt.header.color,\n padding: BETSLIP_ITEM_PADDING,\n margin: `-${BETSLIP_ITEM_PADDING} -${BETSLIP_ITEM_PADDING} 1rem -${BETSLIP_ITEM_PADDING}`,\n})\n\nexport const ReceiptHeaderTextStyled = styled('span')({\n fontWeight: 'bold',\n fontSize: '1.4rem',\n paddingLeft: '1rem',\n})\n\nexport const ReceiptMultiItemContainerStyled = styled('div')({\n marginBottom: '1rem',\n paddingBottom: '1rem',\n borderBottom: `1px solid ${colors.betslip.multiDetails.border}`,\n})\n\nexport const ReceiptListItemFixedMoneyStyled = styled(Money)({\n marginRight: '0.5rem',\n textAlign: 'right',\n width: '4rem',\n})\n","import styled from '@emotion/styled'\nimport colors from '@core/Settings/colors'\n\nexport const MultiItemStyled = styled('li')<{ hasFatalError: boolean }>(\n {\n marginBottom: '0.5rem',\n padding: '0.5rem 0',\n borderBottom: `0.1rem solid ${colors.betslip.item.border}`,\n color: colors.betslip.item.text,\n\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n ({ hasFatalError }) =>\n hasFatalError && {\n backgroundColor: colors.betslip.item.disabled.background,\n borderBottom: 'none',\n paddingRight: '0.5rem',\n color: colors.betslip.item.disabled.text,\n }\n)\n\nexport const ItemErrorTextStyled = styled('div')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n color: colors.betslip.errors.betLeg.color,\n})\n","import colors from '@core/Settings/colors'\n\ninterface ThemeSettings {\n background: string\n text: {\n color: string\n size: string | number\n weight: 'bold' | 'normal'\n }\n padding: string\n margin: string\n}\n\nexport interface BettingHeaderComponentTheme {\n container: ThemeSettings\n heading: ThemeSettings\n subheading: ThemeSettings\n pill: ThemeSettings\n selection: ThemeSettings\n removeButton?: ThemeSettings\n}\n\nexport const betslipBettingHeader: BettingHeaderComponentTheme = {\n container: {\n background: 'inherit',\n text: {\n color: 'inherit',\n size: '1.2rem',\n },\n padding: '0 0 1rem 0',\n } as ThemeSettings,\n heading: {\n text: {\n size: '1.4rem',\n weight: 'bold',\n },\n } as ThemeSettings,\n subheading: {\n text: {\n size: '1.2rem',\n },\n padding: '0 2.5rem 0.5rem 0',\n } as ThemeSettings,\n pill: {\n background: colors.betslip.pill.background,\n text: {\n color: colors.betslip.pill.text,\n size: '1.1rem',\n },\n } as ThemeSettings,\n selection: {\n text: {\n size: '1.6rem',\n },\n padding: '0.5rem 0 0',\n } as ThemeSettings,\n removeButton: {\n text: {\n color: colors.betslip.removeButton.color,\n },\n } as ThemeSettings,\n}\n\nexport const betslipSimpleBettingHeader: BettingHeaderComponentTheme = {\n ...betslipBettingHeader,\n heading: {\n text: {\n size: '1.2rem',\n weight: 'normal',\n },\n } as ThemeSettings,\n selection: {\n text: {\n size: '1.4rem',\n },\n padding: '0',\n } as ThemeSettings,\n container: {\n ...betslipBettingHeader.container,\n padding: '0',\n },\n}\n\nexport const quickbetBettingHeader: BettingHeaderComponentTheme = {\n container: {\n background: colors.quickbet.header.background,\n text: {\n color: colors.quickbet.header.text,\n size: '1.2rem',\n } as ThemeSettings['text'],\n padding: '2.2rem',\n } as ThemeSettings,\n heading: {\n text: {\n size: '1.4rem',\n weight: 'bold',\n } as ThemeSettings['text'],\n padding: '0 2.5rem 0.2rem 0',\n } as ThemeSettings,\n subheading: {\n text: {\n size: '1.2rem',\n } as ThemeSettings['text'],\n padding: '0 2.5rem 1.2rem 0',\n } as ThemeSettings,\n pill: {\n background: colors.quickbet.header.pill.background,\n text: {\n size: '1.1rem',\n } as ThemeSettings['text'],\n margin: '0 0 0 -1rem',\n } as ThemeSettings,\n selection: {\n text: {\n size: '1.6rem',\n } as ThemeSettings['text'],\n padding: '1.5rem 0 0',\n } as ThemeSettings,\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { BettingHeaderComponentTheme } from './themes'\n\ninterface Theme {\n theme?: BettingHeaderComponentTheme\n}\n\nexport const ContainerStyled = styled('div')(\n {\n position: 'relative',\n },\n\n ({ theme }) => ({\n backgroundColor: theme.container.background,\n fontSize: theme.container.text.size,\n color: theme.container.text.color,\n padding: theme.container.padding,\n })\n)\n\nexport const HeadingStyled = styled('div')(\n {\n lineHeight: 1.3,\n fontWeight: 'bold',\n },\n\n ({\n theme: {\n heading: { padding, text },\n },\n }) => ({\n fontSize: text.size,\n fontWeight: text.weight,\n padding,\n })\n)\n\nexport const SubheadingStyled = styled('div')(\n {\n lineHeight: 1,\n },\n\n ({ theme }) => ({\n fontSize: theme.subheading.text.size,\n padding: theme.subheading.padding,\n })\n)\n\nexport const PilledStyled = styled('div')(\n {\n borderRadius: '2rem',\n fontWeight: 'bold',\n lineHeight: 1,\n padding: '0.5rem 1rem',\n display: 'inline-block',\n maxWidth: '100%',\n boxSizing: 'border-box',\n },\n\n ({ theme }) => ({\n backgroundColor: theme.pill.background,\n color: theme.pill.text.color,\n fontSize: theme.pill.text.size,\n margin: theme.pill.margin,\n })\n)\n\nexport const SingleSelectionStyled = styled('div')(\n {\n fontWeight: 'bold',\n lineHeight: 'normal',\n },\n\n ({ theme }) => ({\n fontSize: theme.selection.text.size,\n })\n)\n\nexport const RemoveButtonStyled = styled('button')({\n cursor: 'pointer',\n padding: '0.4rem 0 0.4rem 0.4rem',\n border: 0,\n background: 'none',\n fontSize: '2rem',\n color: colors.betslip.removeButton.color,\n})\n","import React from 'react'\nimport { RemoveButtonStyled } from './BettingHeader.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\ninterface RemoveButtonProps {\n onClick: () => void\n}\n\nexport function RemoveButton({ onClick }: RemoveButtonProps) {\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport { ThemeProvider } from '@emotion/react'\nimport { BettingHeaderComponentTheme, betslipSimpleBettingHeader } from './themes'\nimport { OverflowEllipsis } from '../OverflowEllipsis'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n ContainerStyled,\n HeadingStyled,\n SubheadingStyled,\n PilledStyled,\n SingleSelectionStyled,\n} from './BettingHeader.styles'\nimport { RemoveButton } from './RemoveButton'\n\ntype BettingHeaderProps = SimpleBettingHeaderProps & {\n subheading: React.ReactNode\n pilled: React.ReactNode\n icon: React.ReactNode\n timeInfo?: React.ReactNode\n theme: BettingHeaderComponentTheme\n displayPill: boolean\n isEditable: boolean\n removeHandler?: () => void\n}\n\ninterface PilledContentStyledProps {\n displayPill: boolean\n pilledContent: React.ReactNode\n}\n\nfunction PilledContentStyled({\n displayPill,\n pilledContent,\n}: PilledContentStyledProps): JSX.Element {\n if (displayPill) {\n return (\n \n {pilledContent}\n \n )\n } else {\n return {pilledContent}\n }\n}\n\nexport function BettingHeader({\n icon,\n heading,\n subheading,\n pilled,\n timeInfo = null,\n selection,\n theme,\n removeHandler,\n displayPill,\n isEditable,\n}: BettingHeaderProps): JSX.Element {\n return (\n \n \n \n {icon}\n \n \n {heading}\n \n {subheading && (\n \n {subheading}\n \n )}\n \n {removeHandler && isEditable && (\n \n \n \n )}\n \n \n {pilled && (\n \n \n \n )}\n {timeInfo && (\n \n {timeInfo}\n \n )}\n \n \n {typeof selection === 'string' ? (\n {selection}\n ) : (\n selection\n )}\n \n \n \n )\n}\n\ninterface SimpleBettingHeaderProps {\n heading: React.ReactNode\n selection: React.ReactNode\n}\n\nexport function SimpleBettingHeader({ heading, selection }: SimpleBettingHeaderProps): JSX.Element {\n return (\n \n \n \n \n \n {heading}\n \n \n \n \n {selection}\n \n \n \n )\n}\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BettingHeader } from '@core/Components/BettingHeader/BettingHeader'\nimport { betslipBettingHeader } from '@core/Components/BettingHeader/themes'\n\ninterface ErroredBetInfoProps {\n message?: string\n details?: string\n removeHandler(): void\n}\n\nexport function ErroredBetInfo({\n removeHandler,\n message = 'There is a problem with your bet',\n details = 'We were unable to retrieve some details',\n}: ErroredBetInfoProps): JSX.Element {\n return (\n }\n heading={{message}}\n subheading={{details}}\n pilled={null}\n timeInfo={null}\n selection={null}\n theme={betslipBettingHeader}\n removeHandler={removeHandler}\n displayPill={false}\n isEditable={true}\n />\n )\n}\n","import React from 'react'\nimport type { FobDetails } from '@mobi/betslip/types'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BettingHeader, SimpleBettingHeader } from '@core/Components/BettingHeader/BettingHeader'\nimport { betslipBettingHeader } from '@core/Components/BettingHeader/themes'\n\ntype SelectionDetails = Pick<\n FobDetails,\n | 'eventName'\n | 'competitionName'\n | 'sportIconCode'\n | 'tournamentName'\n | 'propositionName'\n | 'marketName'\n | 'handicapName'\n>\n\nexport interface FobBetInfoProps {\n selectionDetails: SelectionDetails\n isSimpleView: boolean\n removeHandler: () => void\n hasFatalError: boolean\n hasProposed: boolean\n isBusy: boolean\n}\n\nexport function FobBetInfo({\n selectionDetails,\n isSimpleView,\n removeHandler,\n hasFatalError,\n hasProposed,\n isBusy,\n}: FobBetInfoProps): JSX.Element {\n const {\n competitionName,\n eventName,\n handicapName,\n marketName,\n propositionName,\n sportIconCode,\n tournamentName,\n } = selectionDetails\n\n const selection = hasFatalError ? null : (\n \n {propositionName}\n {handicapName ? ` ${handicapName}` : ''}\n \n )\n\n return isSimpleView ? (\n \n ) : (\n }\n theme={betslipBettingHeader}\n removeHandler={removeHandler}\n displayPill={false}\n pilled={marketName ? {marketName} : null}\n isEditable={!hasProposed && !isBusy}\n selection={selection}\n heading={\n tournamentName ? (\n \n {competitionName} {tournamentName}\n \n ) : (\n {competitionName}\n )\n }\n subheading={eventName !== marketName ? {eventName} : null}\n />\n )\n}\n","import React from 'react'\nimport type {\n Selection,\n ToteSelection,\n RaceDetails,\n BettingType,\n Acceptor,\n} from '@mobi/betslip/types'\nimport { isFobMatchedSelection, isFobPropositionSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { FixedOddsMarketCodes } from '@mobi/api-types'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BettingHeader, SimpleBettingHeader } from '@core/Components/BettingHeader/BettingHeader'\nimport { betslipBettingHeader } from '@core/Components/BettingHeader/themes'\nimport { RaceRecord, AcceptorRecord } from '@core/Data/Racing'\nimport { SelectionDisplay } from '@core/Areas/Quickbet/Components/Selection/Selection'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport {\n getMarketTitle,\n getFixedOrToteDisplay,\n} from '@core/Areas/Quickbet/Components/RaceInfo/RaceInfo'\nimport { addAcceptorNameToSingleSelection } from '@core/Areas/Quickbet/Components/Selection/helpers'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\n\nenum iconTypes {\n Races = 'races',\n Trots = 'trot',\n Dogs = 'dog',\n}\n\nexport const RaceBetInfo: React.FC<{\n item: BetslipItem\n isSimpleView: boolean\n isBusy?: boolean\n hasProposed?: boolean\n hasFatalError?: boolean\n removeHandler?: () => void\n}> = ({ item, hasProposed, isBusy, hasFatalError, isSimpleView, removeHandler }) => {\n const { selection } = item\n const bettingType: BettingType = item.bettingType === null ? 'tote-racing' : item.bettingType\n const { races = [], acceptors = [] } = (item.selectionDetails || {}) as RaceDetails\n\n const isEditable = !hasProposed && !isBusy\n\n let heading = Race information unavailable\n let raceStartTime: string | null = null\n let racingIconCode: string | undefined\n if (races && races.length && races[0]) {\n const { raceNumber, meetingName, raceTime, meetingCode } = races[0] as RaceRecord\n heading = (\n \n {meetingName + ': R' + raceNumber}\n {isSimpleView && getFixedOddsMarketName(selection, true)}\n \n )\n raceStartTime = raceTime\n racingIconCode = meetingCode\n }\n\n if (acceptors && acceptors.length && races[0]) {\n const { type } = acceptors[0] as AcceptorRecord\n racingIconCode = type\n }\n\n const fixedOrToteDisplay = getFixedOrToteDisplay(selection as Selection, bettingType)\n const selectionType =\n getMarketTitle(selection as ToteSelection) +\n (fixedOrToteDisplay.length > 0 ? ` ${fixedOrToteDisplay}` : '')\n\n const iconType = iconTypes[racingIconCode as keyof typeof iconTypes]\n\n return isSimpleView ? (\n \n ) : (\n }\n heading={heading}\n selection={\n hasFatalError ? null : (\n \n )\n }\n subheading={getFixedOddsMarketName(selection)}\n timeInfo={\n !hasFatalError && raceStartTime && \n }\n theme={betslipBettingHeader}\n removeHandler={removeHandler}\n displayPill={false}\n isEditable={isEditable}\n pilled={{selectionType}}\n />\n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getFixedOddsMarketName(selection: Selection | null, isMultiDisplay = false) {\n const isFobProposition = isFobPropositionSelection(selection)\n // Only display market name to add clarity where starter can appear in multiple markets\n const shouldDisplay =\n isFobProposition &&\n ((isMultiDisplay && selection.marketCode === FixedOddsMarketCodes.Concession) ||\n selection.marketCode === FixedOddsMarketCodes.RunnerVsField ||\n selection.marketCode === FixedOddsMarketCodes.HeadToHead)\n\n const marketName =\n shouldDisplay &&\n (FixedOddsMarketDisplayNames[\n selection.marketCode as keyof typeof FixedOddsMarketDisplayNames\n ] ||\n selection.marketName)\n\n return shouldDisplay ? `${isMultiDisplay ? ' - ' : ''}${marketName}` : null\n}\n\nfunction getFobSelectionText(\n selection: Selection,\n acceptors: Acceptor[]\n): string | null | undefined {\n if (isFobMatchedSelection(selection)) {\n return addAcceptorNameToSingleSelection(`${selection.acceptorNumber}`, acceptors)\n }\n\n if (!isFobPropositionSelection(selection)) {\n return null\n }\n\n const { number: sNumber, name } = selection.selectedAcceptors?.[0] || {}\n if (sNumber && name) {\n return `${sNumber} - ${name}`\n }\n\n return selection.displayName\n}\n","import React from 'react'\nimport { isFobSportsDetails, isFobSportsSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BettingHeader, SimpleBettingHeader } from '@core/Components/BettingHeader/BettingHeader'\nimport { betslipBettingHeader } from '@core/Components/BettingHeader/themes'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport type { BetslipItem } from '@core/Areas/Betslip/driver'\n\nexport const SportBetInfo: React.FC<{\n item: BetslipItem\n isSimpleView: boolean\n isBusy?: boolean\n hasProposed?: boolean\n hasFatalError?: boolean\n removeHandler?: () => void\n}> = ({ item, hasProposed, isBusy, hasFatalError, isSimpleView, removeHandler }) => {\n if (!isFobSportsSelection(item.selection) || !isFobSportsDetails(item.selectionDetails))\n return null\n\n const { sportName, tournamentName, eventName, marketName, advertisedStartTime } =\n item.selectionDetails\n const { propositionName } = item.selection\n\n const selection = hasFatalError ? null : {propositionName}\n\n return isSimpleView ? (\n \n ) : (\n }\n theme={betslipBettingHeader}\n removeHandler={removeHandler}\n displayPill={false}\n pilled={marketName ? {marketName} : null}\n isEditable={!hasProposed && !isBusy}\n selection={selection}\n timeInfo={\n !hasFatalError &&\n advertisedStartTime && \n }\n heading={\n \n {sportName} - {tournamentName}\n \n }\n subheading={eventName !== marketName ? {eventName} : null}\n />\n )\n}\n","import React from 'react'\nimport { isFobDetails, isFobSportsDetails, isRaceDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport { RemoveSingleBet } from '@core/Areas/Betslip/signals'\nimport { FobBetInfo, ErroredBetInfo, RaceBetInfo, SportBetInfo } from './Components'\n\ninterface BetInfoProps {\n item: BetslipItem\n isSimpleView: boolean\n hasFatalError?: boolean\n hasProposed?: boolean\n isBusy?: boolean\n}\n\nexport function BetInfo({\n item,\n isSimpleView,\n hasFatalError = false,\n hasProposed = false,\n isBusy = false,\n}: BetInfoProps): JSX.Element {\n const removeHandler = () => RemoveSingleBet(item)\n\n if (isFobDetails(item.selectionDetails)) {\n return (\n \n )\n }\n\n if (isRaceDetails(item.selectionDetails)) {\n return (\n \n )\n }\n\n if (isFobSportsDetails(item.selectionDetails)) {\n return (\n \n )\n }\n\n // should never happen, but at least we can handle it gracefully\n return \n}\n","import React from 'react'\nimport type { FobSelection, BetLegType } from '@mobi/betslip/types'\nimport { ToggleMultiLegBetType, ToggleMultiBet } from '@core/Areas/Betslip/signals'\nimport { GridCell, Grid } from '@mobi/component-library/Common/Grid'\nimport { Toggle, ToggleIndicator } from '@mobi/component-library/Common/Input'\nimport { InvestmentPriceStyled } from '@core/Areas/Betslip/Components/BetInvestment/BetInvestment.styles'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport { PriceChange, getPriceChange } from '@core/Components/Text/utils'\nimport {\n ItemErrorTextStyled,\n MultiItemStyled,\n} from '@core/Areas/Betslip/Components/MultiItem/MultiItem.styles'\nimport { BetInfo } from '@core/Areas/Betslip/Components/BetInfo/BetInfo'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { isNonHandledError, isFatalMultiBetLegError } from '@core/Areas/Betslip/helpers/state'\n\ninterface BetLegProps {\n showPlace: boolean\n showToggle: boolean\n multiLegBetType?: Extract\n disabled: boolean\n hasFatalError: boolean\n showPrice: number\n priceChange: PriceChange\n itemId: string | null\n}\n\nconst handleToggleMultiLegBetType = (id: string | null) => {\n ToggleMultiLegBetType(id)\n}\n\nfunction SuccessBetLeg({\n showPlace,\n showToggle,\n multiLegBetType,\n disabled,\n hasFatalError,\n showPrice,\n priceChange,\n itemId,\n}: BetLegProps) {\n return (\n <>\n \n {showPlace &&\n (showToggle ? (\n handleToggleMultiLegBetType(itemId)}\n isDisabled={disabled || hasFatalError}\n type='allgreen'\n />\n ) : (\n \n ))}\n \n \n \n \n \n )\n}\n\nfunction ErrorBetLeg({ error }: { error: string }) {\n return (\n \n {error}\n \n )\n}\n\ninterface MultiItemProps {\n item: BetslipItem\n disabled: boolean\n showBetTypeToggle: boolean\n isReceipt?: boolean\n}\n\nexport const MultiItem = ({\n item,\n disabled,\n showBetTypeToggle,\n isReceipt = false,\n}: MultiItemProps) => {\n const { id, isInMulti, multiLegBetType, shouldAllowPlaceInvestment } = item\n const hasMultiLegError =\n !!item.multiBetLegError && isNonHandledError(item.multiBetLegError.betErrorType)\n const prices = item.selection as FobSelection\n const priceToDisplay = multiLegBetType === 'P' ? prices.placePrice : prices.winPrice\n const priceChangeStatus =\n multiLegBetType === 'W'\n ? prices.winPriceLastSeen\n ? getPriceChange(prices.winPriceLastSeen, prices.winPrice)\n : PriceChange.None\n : prices.placePrice && prices.placePriceLastSeen\n ? getPriceChange(prices.placePriceLastSeen, prices.placePrice)\n : PriceChange.None\n\n if (isReceipt) {\n return (\n \n \n \n \n {!!item.multiBetLegError && isNonHandledError(item.multiBetLegError.betErrorType) ? (\n \n ) : (\n \n )}\n \n )\n }\n\n return (\n \n \n \n ToggleMultiBet(id)}\n />\n \n \n \n \n\n {hasMultiLegError ? (\n \n ) : (\n \n )}\n \n \n )\n}\n","import React from 'react'\nimport * as immutable from 'immutable'\nimport {\n ReceiptHeaderStyled,\n ReceiptHeaderTextStyled,\n ReceiptMultiItemContainerStyled,\n ReceiptListItemFixedMoneyStyled,\n} from './BetsliptReceipt.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { MultiItem } from '@core/Areas/Betslip/Components/MultiItem/MultiItem'\nimport { ReceiptItem, BetslipItem } from '../../driver'\nimport {\n ReceiptListStyled,\n ReceiptListRowStyled,\n ReceiptListItemTextStyled,\n ReceiptListItemStyled,\n ReceiptCampaignTextStyled,\n ReceiptSpecialIndicator,\n} from '@core/Areas/Quickbet/Components/Receipt/Receipt.styles'\nimport { Money } from '@core/Components/Text/Money'\nimport { calculateMultiReturn } from '../../helpers/calculator'\n\ninterface BetslipReceiptMultiProps {\n items: immutable.List\n receipt: ReceiptItem\n}\n\nexport class BetslipReceiptMulti extends React.Component {\n public shouldComponentUpdate() {\n return false\n }\n\n public render() {\n const {\n items,\n receipt: {\n numberOfCombinations,\n projectedWinPayout,\n formulaResponse,\n winInvestment,\n campaignActivatedInd,\n bonusBet: bonusValue,\n amountPaid,\n specialOffers,\n campaignType,\n ticketNumber,\n },\n } = this.props\n\n const isMultiOnly = numberOfCombinations === 1\n const isMultiFormulaOnly =\n numberOfCombinations && numberOfCombinations > 1 && formulaResponse && !formulaResponse.multi\n const isMultiWithFormula = !isMultiOnly && !isMultiFormulaOnly\n\n const multiReturn: number | null = !isMultiFormulaOnly\n ? calculateMultiReturn(items, { shouldRound: true })\n : 0\n const multiCost: number =\n (isMultiOnly\n ? winInvestment\n : isMultiWithFormula\n ? formulaResponse?.multi?.combinedStake\n : 0) ?? 0\n const isBonusBet = campaignType == 'BonusBetReward'\n\n return (\n <>\n \n {' '}\n Your multi bet has been placed\n \n {items\n .filter(x => x.isInMulti)\n .toArray()\n .map((item, i) => (\n \n \n \n ))}\n\n \n \n Projected Pay\n \n \n \n \n\n {!isMultiFormulaOnly && (\n <>\n \n Multi Return\n \n \n \n \n\n \n Multi Cost\n \n \n \n \n \n )}\n\n {!isMultiOnly && formulaResponse && (\n <>\n Formulas\n\n {formulaResponse.singles && (\n \n \n Singles{' '}\n \n (Combo x {formulaResponse.singles.numberOfCombinations})\n \n \n \n \n \n )}\n\n {formulaResponse.doubles && (\n \n \n Doubles{' '}\n \n (Combo x {formulaResponse.doubles.numberOfCombinations})\n \n \n \n \n \n )}\n\n {formulaResponse.trebles && (\n \n \n Trebles{' '}\n \n (Combo x {formulaResponse.trebles.numberOfCombinations})\n \n \n \n \n \n )}\n\n {formulaResponse.pick4 && (\n \n \n Pick 4{' '}\n \n (Combo x {formulaResponse.pick4.numberOfCombinations})\n \n \n \n \n \n )}\n\n {formulaResponse.pick5 && (\n \n \n Pick 5{' '}\n \n (Combo x {formulaResponse.pick5.numberOfCombinations})\n \n \n \n \n \n )}\n\n \n Total Cost\n \n \n \n \n \n )}\n\n {campaignActivatedInd && bonusValue && bonusValue > 0 && (\n \n \n \n {isBonusBet ? 'Bonus Bet' : 'Bonus Cash'}\n \n \n \n \n \n \n \n \n )}\n\n {campaignActivatedInd && bonusValue && bonusValue > 0 && (\n \n Amount Paid\n \n \n \n \n )}\n\n {specialOffers\n ? specialOffers.map((special, i) => (\n \n \n {special.title}\n \n \n \n \n \n ))\n : null}\n\n \n Ticket\n {ticketNumber}\n \n \n \n )\n }\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport {\n BETSLIP_ITEM_PADDING,\n BETSLIP_ITEM_BOX_SHADOW,\n ListStyled,\n} from '@core/Areas/Betslip/Components/SingleItemList/SingleItemList.styles'\nimport { BetInvestmentGroupStyled } from '@core/Areas/Betslip/Components/BetInvestment/BetInvestment.styles'\n\nexport const EmptyItemStyled = styled('div')({\n marginTop: '1.4rem',\n fontSize: '1.4rem',\n textAlign: 'center',\n color: colors.betslip.item.empty.text,\n})\n\nexport const MultiSectionStyled = styled('div')({\n margin: '0.5rem',\n padding: BETSLIP_ITEM_PADDING,\n boxShadow: BETSLIP_ITEM_BOX_SHADOW,\n backgroundColor: colors.betslip.item.background,\n})\n\nexport const MultiItemListStyled = styled(ListStyled)({\n padding: 0,\n marginBottom: '0.5rem',\n})\n\nexport const MultiSpendStyled = styled(BetInvestmentGroupStyled)({\n width: '100%',\n})\n\nexport const MultiDetailsStyled = styled('div')<{ isCenter?: boolean }>(\n {\n position: 'relative',\n fontSize: '1.2rem',\n lineHeight: 'normal',\n padding: '1rem 0 0.5rem 0',\n color: colors.betslip.multiDetails.label.color,\n },\n ({ isCenter = false }) => {\n if (!isCenter) {\n return undefined\n }\n\n return {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n width: '0.1rem',\n height: '2.6rem',\n left: '-1rem',\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: colors.betslip.multiDetails.border,\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: '0.1rem',\n height: '2.6rem',\n right: '-1rem',\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: colors.betslip.multiDetails.border,\n },\n }\n }\n)\n\nexport const MultiDetailsAmountStyled = styled('strong')({\n fontSize: '1.4rem',\n display: 'block',\n color: colors.betslip.multiDetails.amount.color,\n})\n\nexport const MultiTotalContainerStyled = styled('div')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n lineHeight: 1,\n padding: '1rem 0',\n fontSize: '1.2rem',\n color: colors.betslip.multiDetails.label.color,\n height: '2rem',\n borderTop: `0.1rem solid ${colors.betslip.item.border}`,\n})\n\nexport const MultiTotalAmountStyled = styled('span')({\n fontSize: '1.6rem',\n fontWeight: 'bold',\n color: colors.betslip.formulas.text,\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { BetInvestmentGroupStyled } from '@core/Areas/Betslip/Components/BetInvestment/BetInvestment.styles'\nimport {\n MultiDetailsStyled,\n MultiDetailsAmountStyled,\n} from '@core/Areas/Betslip/Components/MultiItemList/MultiItemList.styles'\n\nexport const MultiFormulaExpandablePanelStyled = styled('div')({\n borderTop: `0.1rem solid ${colors.betslip.formulas.border}`,\n marginTop: '0.25rem',\n})\n\nexport const FormulaTitleTextStyled = styled('strong')({\n fontSize: '1.2rem',\n display: 'block',\n color: colors.betslip.formulas.text,\n})\n\nexport const FormulaContainerStyled = styled('div')({\n marginTop: '0.5rem',\n})\n\nexport const FormulaItemStyled = styled('div')({\n marginBottom: '0.5rem',\n padding: '0.5rem 0',\n borderBottom: `0.1rem solid ${colors.betslip.item.border}`,\n\n '&:last-child': {\n borderBottom: 'none',\n marginBottom: 0,\n },\n})\n\nexport const FormulaComboTextStyled = styled(MultiDetailsStyled)({\n padding: 0,\n})\n\nexport const FormulaTextStyled = MultiDetailsAmountStyled\n\nexport const FormulaInvestmentStyled = styled(BetInvestmentGroupStyled)({\n justifyContent: 'flex-end',\n})\n\nexport const FormulaCostContainerStyled = styled('div')({\n display: 'flex',\n justifyContent: 'flex-end',\n})\n\nexport const FormulaCostChildStyled = styled('div')<{ isQuickEdit?: boolean }>(\n {\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n lineHeight: 1,\n fontSize: '1rem',\n height: '1.5rem',\n width: '33%',\n marginTop: '-0.2rem',\n },\n ({ isQuickEdit }) => ({\n color: isQuickEdit ? colors.quickbet.header.text : colors.betslip.multiDetails.label.color,\n })\n)\n\nexport const FormulaCostAmountStyled = styled('span')<{ isQuickEdit?: boolean }>(\n {\n fontSize: '1.2rem',\n },\n ({ isQuickEdit }) => ({\n color: isQuickEdit ? colors.quickbet.header.text : colors.betslip.formulas.text,\n })\n)\n","import styled from '@emotion/styled'\nimport { ellipsis } from 'polished'\nimport { colors } from '@core/Settings'\nimport { PillStyled } from '@core/Components/Pill'\nimport { BetInvestmentStyled } from '@core/Areas/Quickbet/Components/BetInvestment/BetInvestment.styles'\nimport { FormulaCostChildStyled } from '../MultiFormula/MultiFormula.styles'\n\nexport const QuickEditTitleStyled = styled('div')({\n ...ellipsis('100%'),\n width: 'calc(100% - 2.5rem)',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: 1.3,\n})\n\nexport const QuickEditSubTitleStyled = styled(PillStyled)({\n backgroundColor: colors.quickbet.header.pill.background,\n lineHeight: 1.2,\n padding: '0.3rem 0.7rem',\n boxSizing: 'border-box',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n marginLeft: '-0.7rem',\n maxWidth: 'calc(100% + 0.7rem)',\n whiteSpace: 'nowrap',\n marginTop: '0.1rem',\n})\n\nexport const QuickEditComboTitleStyled = styled('span')({\n fontSize: '1.4rem',\n color: colors.quickbet.header.text,\n})\n\nexport const QuickEditComboTextStyled = styled(QuickEditComboTitleStyled)({\n fontSize: '1.6rem',\n})\n\nexport const QuickEditFormulaInvestmentStyled = styled(BetInvestmentStyled)({\n padding: '0 1.5rem 2.5rem',\n})\n\nexport const QuickEditFormulaCostStyled = styled(FormulaCostChildStyled)({\n position: 'absolute',\n bottom: '-1.8rem',\n width: '100%',\n left: 0,\n})\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { Keypress, KeyPressed, KeypadModes } from '@core/Components/Keypad/KeyPress'\nimport { calculateInvestment } from '@core/Areas/Quickbet/helpers/calculator'\n\nexport interface QuickEditState {\n value: number\n lastKeyPressed: KeyPressed\n secondLastKeyPressed: KeyPressed\n isUsingBonusBet: boolean\n isUsingBonusCash: boolean\n bonusBet: BonusBet | null\n}\n\nexport interface BonusBet {\n campaignId: number\n value: number\n}\n\nexport const defaultQuickEditState: QuickEditState = {\n value: 0,\n lastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n secondLastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n isUsingBonusCash: true,\n isUsingBonusBet: false,\n bonusBet: null,\n}\n\nexport const InitialiseQuickEditState = createSignal('InitialiseQuickEditState')\nexport const SetQuickEditInvestment = createSignal('InitMultiFormulaInvestment')\nexport const ToggleBonusBet = createSignal('ToggleBonusBet')\nexport const ToggleBonusCash = createSignal('ToggleBonusCash')\nexport const SetBonusBet = createSignal('SetBonusBet')\nexport const SetQuickEditValue = createSignal('SetQuickEditValue')\n\nexport interface QuickEditStateRecord extends TypedRecord, QuickEditState {}\nexport const QuickEditStateFactory = makeTypedFactory(\n defaultQuickEditState\n)\n\nexport function quickEditDriver(\n state = QuickEditStateFactory(),\n signal: Signal\n): QuickEditStateRecord {\n switch (signal.tag) {\n case InitialiseQuickEditState: {\n return state.merge({\n ...defaultQuickEditState,\n })\n }\n\n case Keypress: {\n const currentState: QuickEditState = { ...state.toJS() }\n const lastKeyPressed = currentState.lastKeyPressed\n const secondLastKeyPressed = currentState.secondLastKeyPressed\n const currentValue = currentState.value\n const newValue = calculateInvestment(\n signal.data,\n currentValue,\n lastKeyPressed,\n secondLastKeyPressed\n )\n const newState: QuickEditState = {\n ...currentState,\n value: newValue,\n secondLastKeyPressed: lastKeyPressed,\n lastKeyPressed: signal.data,\n }\n return state.merge(newState)\n }\n\n case SetQuickEditInvestment: {\n return state.merge({\n ...defaultQuickEditState,\n value: signal.data,\n lastKeyPressed: {\n mode: KeypadModes.Denomination,\n value: 0,\n },\n })\n }\n\n case ToggleBonusBet: {\n const forcedValue = signal.data\n return state.merge({\n isUsingBonusBet: forcedValue != undefined ? forcedValue : !state.get('isUsingBonusBet'),\n value: 0,\n })\n }\n\n case ToggleBonusCash: {\n const forcedValue = signal.data\n return state.merge({\n isUsingBonusCash: forcedValue != undefined ? forcedValue : !state.get('isUsingBonusCash'),\n value: 0,\n })\n }\n\n case SetBonusBet: {\n const bonusBet = signal.data as BonusBet\n return state.merge({\n bonusBet: bonusBet,\n isUsingBonusBet: bonusBet ? true : state.isUsingBonusBet,\n value: bonusBet?.value ?? 0,\n })\n }\n\n case SetQuickEditValue: {\n return state.merge({\n value: signal.data,\n })\n }\n\n default: {\n return state\n }\n }\n}\n\nexport const state$ = attachDriver({\n path: 'betslipQuickEdit',\n driver: quickEditDriver,\n})\n","import React from 'react'\nimport { observeImmutable } from '../../../../../Components/HOCs'\nimport { Campaign, state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as quickEditState$ } from '../driver'\nimport { Observable } from 'rx'\nimport {\n BonusBetButtonComponent,\n BonusBetButtonStateProps,\n BonusBetExternalProps,\n} from '@core/Areas/Quickbet/Components/BonusBetButton/BonusBetButton'\n\nconst isBonusCampaign = (campaign: Campaign) =>\n campaign.rewardType === 'BonusBetReward' || campaign.rewardType === 'BonusCashReward'\n\nconst state$ = Observable.combineLatest(\n userAccountState$,\n quickEditState$,\n (userAccountState, quickEditState): BonusBetButtonStateProps => {\n return {\n isLoggedIn: userAccountState.isLoggedIn ?? false,\n isUsingBonusBet: quickEditState.isUsingBonusBet,\n isBusy: false,\n canConfirmBet: false,\n hasNotification: false,\n activeCampaigns: userAccountState.activeCampaigns?.filter(isBonusCampaign).toArray(),\n insufficientFundsForBet: false,\n }\n }\n)\n\nexport const BonusBetButton = observeImmutable(\n state$,\n ({ record, toggleBonusBet, trackBonusBetClick }) => {\n return (\n \n )\n }\n)\n","import React from 'react'\n\nimport { observeImmutable } from '../../../../../Components/HOCs'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { QuickEditState, state$ as quickEditState$ } from '../driver'\nimport { Observable } from 'rx'\nimport {\n BonusBetListComponent,\n BonusBetListExternalProps,\n BonusBetListStateProps,\n} from '@core/Areas/Quickbet/Components/BonusBetList/BonusBetList'\n\nconst state$ = Observable.combineLatest(\n userAccountState$,\n quickEditState$,\n (userAccountState, quickEditState): BonusBetListStateProps => {\n const quickEdit = quickEditState.toJS() as QuickEditState\n return {\n isBusy: false,\n canBet: true,\n campaigns: userAccountState.activeCampaigns\n ?.filter(x => x.rewardType == 'BonusBetReward')\n .toArray(),\n selectedBonusBetCampaignId: quickEdit.bonusBet?.campaignId,\n hasSelectedSuperPick: false,\n isEachWay: false,\n }\n }\n)\n\nexport const BonusBetList = observeImmutable(\n state$,\n ({ record: state, ...externalProps }) => {\n return state.canBet ? : null\n }\n)\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { useDispatch } from 'react-redux'\nimport { List } from 'immutable'\n\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackBonusBetEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n QuickEditTitleStyled,\n QuickEditComboTextStyled,\n QuickEditComboTitleStyled,\n QuickEditSubTitleStyled,\n QuickEditFormulaInvestmentStyled,\n QuickEditFormulaCostStyled,\n} from './QuickEdit.styles'\nimport {\n state$ as quickEditState$,\n ToggleBonusBet,\n SetBonusBet,\n BonusBet,\n QuickEditState,\n ToggleBonusCash,\n} from './driver'\nimport { BonusBetButton } from './BonusBet/BonusBetButton'\nimport { BonusBetList } from './BonusBet/BonusBetList'\nimport { FormulaCostAmountStyled } from '../MultiFormula/MultiFormula.styles'\nimport { UpdateMultiBetSpend, UpdateMultiBetSpendData } from '../../signals'\nimport { HeaderStyled } from '@core/Areas/Quickbet/Components/Header/Components/Common/Header.styles'\nimport { Swiper } from '@core/Components/Swiper'\nimport { Keypad } from '@core/Components/Keypad'\nimport { KeypadModes } from '@core/Components/Keypad/KeyPress'\nimport { QuickbetBodyStyled, QuickbetActionsStyled } from '@core/Areas/Quickbet/Quickbet.styles'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { Campaign, state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport {\n BetInvestmentStyled,\n BetInvestmentGroupStyled,\n InvestmentStyled,\n InvestmentContainerStyled,\n} from '@core/Areas/Quickbet/Components/BetInvestment/BetInvestment.styles'\nimport {\n LegInfoWrapperStyled,\n SingleLegTypeStyled,\n} from '@core/Areas/Quickbet/Components/LegInfo/LegInfo.styles'\nimport { QuickbetButtonStyled } from '@core/Areas/Quickbet/Components/Buttons/QuickbetButton.styles'\nimport { FormulaFields } from '@core/Areas/Betslip/Components/MultiFormula/MultiFormula'\nimport { BalanceInfoBar } from '@core/Areas/Quickbet/Components/BalanceBar/BalanceBar'\nimport { closeModal } from '@core/Components/Modal'\nimport { fetchCampaignsAsync } from '@core/State/UserAccount/async-signals'\nimport { isCampaignRedeemableWithBettingType } from '@core/Areas/Quickbet/helpers/campaignHelper'\nimport { Campaigns } from '@core/Areas/Quickbet/Components/Campaigns/Campaigns'\nimport { BonusBetListItem } from '@core/Areas/Quickbet/Components/BonusBetList/BonusBetListItem'\nimport { BetslipState, state$ as betslipDriverState$ } from '@core/Areas/Betslip/driver'\nimport { useFeature } from '@core/Utils/hooks/useFeature'\n\nexport enum QuickEditContentTypes {\n Multi = 'Multi',\n MultiFormula = 'MultiFormula',\n}\n\ninterface QuickEditProps {\n contentType: QuickEditContentTypes\n title: string\n subTitle: string\n combos?: number\n formulaField?: FormulaFields\n}\n\ntype QuickEditStateProps = {\n value: number\n isUsingBonusBet: boolean\n isUsingBonusCash: boolean\n bonusBet: BonusBet | null\n loggedIn: boolean\n accountNumber?: number | null\n accountBalance: number | null\n bonusBetBalance: number | null\n bonusCashBalance: number | null\n activeCampaigns: List | null\n hasFormula: boolean\n isEligibleForBonusBet: boolean\n}\n\ntype QuickEditComponentProps = QuickEditProps & QuickEditStateProps\n\nconst quickEdiState$ = Observable.combineLatest(\n quickEditState$,\n userAccountState$,\n betslipDriverState$,\n (quickEditRecord, userAccountRecord, betslipRecord): QuickEditStateProps => {\n const quickEditState = quickEditRecord.toJS() as QuickEditState\n const betslipState = betslipRecord.toJS() as BetslipState\n const multi = betslipState.multiInvestment\n\n return {\n activeCampaigns: userAccountRecord.activeCampaigns,\n value: quickEditState.value,\n isUsingBonusBet: quickEditState.isUsingBonusBet,\n isUsingBonusCash: quickEditState.isUsingBonusCash,\n bonusBet: quickEditState.bonusBet,\n loggedIn: userAccountRecord.isLoggedIn ?? false,\n accountNumber: userAccountRecord.accountNumber,\n accountBalance: userAccountRecord.accountBalance,\n bonusBetBalance: userAccountRecord.bonusBetBalance,\n bonusCashBalance: userAccountRecord.bonusCashBalance,\n isEligibleForBonusBet: !!(\n userAccountRecord.activeCampaigns?.count &&\n !userAccountRecord.activeCampaigns?.find(\n x =>\n x.rewardType != 'BonusBetReward' &&\n isCampaignRedeemableWithBettingType(x, 'fixed-odds-racing')\n )\n ),\n hasFormula: 0 < multi.f1 + multi.f2 + multi.f3 + multi.f4 + multi.f5,\n }\n }\n)\n\nexport const QUICK_EDIT_MODAL = 'QUICK_EDIT'\n\nexport function QuickEditComponent({\n value,\n loggedIn,\n accountNumber,\n accountBalance,\n bonusBetBalance,\n bonusCashBalance,\n isUsingBonusBet,\n isUsingBonusCash,\n bonusBet,\n title,\n subTitle,\n combos = 1,\n formulaField = FormulaFields.f1,\n contentType,\n activeCampaigns,\n hasFormula,\n}: QuickEditComponentProps) {\n const dispatch = useDispatch()\n const mustUseBonusCash = contentType !== QuickEditContentTypes.Multi\n\n const activeBonusCashCampaign = activeCampaigns\n ?.sort(x => x.rewardExpiry.valueOf())\n ?.find(x => x.rewardType === 'BonusCashReward')\n\n const hasBonusBet = activeCampaigns?.some(campaign => campaign.rewardType === 'BonusBetReward')\n const hasBonusCash = activeCampaigns?.some(\n campaign =>\n campaign.rewardType === 'BonusCashReward' &&\n (isCampaignRedeemableWithBettingType(campaign, 'fixed-odds-racing') ||\n isCampaignRedeemableWithBettingType(campaign, 'tote-racing'))\n )\n\n const isBonusCashImprovementsActive = useFeature('BONUS_CASH_IMPROVEMENTS')\n\n React.useEffect(() => {\n if (isBonusCashImprovementsActive && hasBonusCash) {\n ToggleBonusCash(false)\n }\n }, [isBonusCashImprovementsActive, hasBonusCash])\n\n React.useEffect(() => {\n if (loggedIn) {\n fetchCampaignsAsync()\n }\n }, [loggedIn])\n\n const handleDoneClick = () => {\n const data: UpdateMultiBetSpendData = {\n field: contentType === QuickEditContentTypes.Multi ? 'value' : formulaField,\n value,\n bonusBetId: bonusBet?.campaignId,\n isBonusCash: mustUseBonusCash ? true : isUsingBonusCash,\n }\n UpdateMultiBetSpend(data)\n dispatch(\n closeModal({\n id: QUICK_EDIT_MODAL,\n })\n )\n }\n\n const isCentsIncrementActive = useFeature('CENTS_INCREMENTS_BET')\n\n const shouldAllowDecimals =\n contentType === QuickEditContentTypes.Multi ||\n contentType === QuickEditContentTypes.MultiFormula\n\n const toggleBonusBet = () => {\n ToggleBonusBet()\n SetBonusBet(null)\n }\n\n const trackBonusBetClick = () => {\n const isActivated = isUsingBonusBet\n trackBonusBetEvent(\n isActivated ? keys.betslipBonusBetButtonDeactivated : keys.quickbetBonusBetButtonActivated,\n {\n accountNumber: accountNumber ?? '',\n accountBalance: accountBalance,\n bonusBetBalance: bonusBetBalance,\n bonusCashBalance: bonusCashBalance,\n }\n )\n }\n\n let shouldDisplayBonusButton = false\n if (mustUseBonusCash) {\n shouldDisplayBonusButton = false\n } else if (!!hasBonusBet || !!hasBonusCash) {\n if (isUsingBonusCash) {\n if (hasBonusCash) {\n shouldDisplayBonusButton = false\n } else {\n shouldDisplayBonusButton = true\n }\n } else {\n shouldDisplayBonusButton = true\n }\n }\n\n return (\n <>\n \n \n \n \n \n {title}\n \n \n \n \n {subTitle}\n \n \n \n \n\n {contentType === QuickEditContentTypes.Multi && (\n \n \n \n \n \n \n Spend\n \n \n \n \n \n \n \n {shouldDisplayBonusButton && (\n \n \n \n \n \n )}\n \n \n )}\n\n {contentType === QuickEditContentTypes.MultiFormula && (\n \n \n \n \n \n Combos\n \n \n x {combos}\n \n \n \n \n
      \n \n \n \n \n Cost{' '}\n \n ${(value * combos).toFixed(2)}\n \n \n
      \n
      \n
      \n
      \n )}\n\n {\n ToggleBonusCash(false)\n trackBonusBetEvent(keys.betslipBonusCashRemoved, {\n accountBalance,\n accountNumber: accountNumber || '',\n bonusBetBalance,\n bonusCashBalance,\n })\n }}\n showRemoveButton={!mustUseBonusCash && !hasFormula}\n />\n\n \n {!isUsingBonusBet && (\n \n \n \n \n )}\n {isUsingBonusBet && (\n \n {activeBonusCashCampaign && (\n {\n if (!isUsingBonusCash) {\n // We're turning bonus cash on, so clear any selected bonus bet.\n ToggleBonusBet(false)\n SetBonusBet(null)\n }\n\n ToggleBonusCash()\n }}\n />\n )}\n \n \n )}\n \n\n \n \n Done\n \n \n \n )\n}\n\nexport const QuickEdit = observeImmutable(\n quickEdiState$,\n function ({ record, ...props }) {\n return \n }\n)\n","import React from 'react'\nimport {\n BetslipState,\n BetslipStateRecord,\n state$ as betslipState$,\n} from '@core/Areas/Betslip/driver'\nimport {\n FormulaContainerStyled,\n FormulaTextStyled,\n FormulaComboTextStyled,\n FormulaInvestmentStyled,\n FormulaItemStyled,\n FormulaTitleTextStyled,\n FormulaCostChildStyled,\n FormulaCostAmountStyled,\n FormulaCostContainerStyled,\n MultiFormulaExpandablePanelStyled,\n} from '@core/Areas/Betslip/Components/MultiFormula/MultiFormula.styles'\nimport { GridCell, Grid, GridRow } from '@mobi/component-library/Common/Grid'\nimport { InvestmentAmountStyled } from '@core/Areas/Betslip/Components/BetInvestment/BetInvestment.styles'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport {\n QuickEdit,\n QUICK_EDIT_MODAL,\n QuickEditContentTypes,\n} from '@core/Areas/Betslip/Components/QuickEdit/QuickEdit'\nimport { SetQuickEditInvestment } from '@core/Areas/Betslip/Components/QuickEdit/driver'\nimport {\n MIN_LEGS_IN_MULTI,\n MAX_LEGS_FOR_MULTI_FORMULA,\n MULTI_FORMULA_COMBINATIONS,\n} from '@core/Areas/Betslip/constants'\nimport { getBetsInMulti, isValidMultiInvestmentForLegs } from '@core/Areas/Betslip/helpers/state'\nimport { store } from '@core/Store'\nimport { openModal } from '@core/Components/Modal'\nimport { FormulaExpandablePanelHeaderComponent } from '@core/Components/ExpandablePanel'\n\nenum FormulaTitles {\n f1 = 'Singles',\n f2 = 'Doubles',\n f3 = 'Trebles',\n f4 = 'Pick 4',\n f5 = 'Pick 5',\n}\n\ntype EnumLiteralsOf = T[keyof T]\nexport type FormulaFields = EnumLiteralsOf\nexport const FormulaFields = {\n f1: 'f1',\n f2: 'f2',\n f3: 'f3',\n f4: 'f4',\n f5: 'f5',\n} as const\n\ninterface InvestmentClickArgs {\n investment: number\n subTitle: string\n combos: number\n field: string\n isFieldEditable: boolean\n}\n\nconst handleInvestmentClick = ({\n investment = 0,\n subTitle,\n combos,\n field,\n isFieldEditable,\n}: InvestmentClickArgs): void => {\n if (!isFieldEditable) {\n return\n }\n SetQuickEditInvestment(investment)\n store.dispatch(\n openModal({\n id: QUICK_EDIT_MODAL,\n modalComponent: QuickEdit,\n modalComponentProps: {\n title: 'Formula',\n subTitle,\n combos,\n contentType: QuickEditContentTypes.MultiFormula,\n formulaField: field,\n },\n color: 'dark',\n })\n )\n}\n\ntype MultiFormulaProps = Pick & {\n isEditable: boolean\n multiItemsCount: number\n}\n\ntype MultiFormulaComboKeys =\n keyof (typeof MULTI_FORMULA_COMBINATIONS)[keyof typeof MULTI_FORMULA_COMBINATIONS]\n\nexport class MultiFormulaComponent extends React.PureComponent {\n public render() {\n const { multiItemsCount: count, isEditable, multiInvestment } = this.props\n\n const shouldEnableSingles = isValidMultiInvestmentForLegs(multiInvestment, count)\n\n if (multiInvestment.bonusBetId) {\n return `Formulas can't be used with Bonus Bet`\n }\n\n const formulaFields: JSX.Element[] = []\n for (let i = 1; i <= count - 1; i++) {\n const current: FormulaFields = FormulaFields[`f${i}` as keyof typeof FormulaFields]\n const formulaCombosForLegs =\n MULTI_FORMULA_COMBINATIONS[current][`legs${count}` as MultiFormulaComboKeys]\n const formulaTitle = FormulaTitles[current]\n const formulaInvestment = multiInvestment[current]\n\n const isFieldEditable = i === 1 ? shouldEnableSingles && isEditable : isEditable\n\n formulaFields.push(\n \n \n \n \n \n {formulaTitle}\n \n \n \n \n Combos{' '}\n \n x {formulaCombosForLegs}\n \n \n \n \n \n handleInvestmentClick({\n investment: formulaInvestment,\n subTitle: formulaTitle,\n combos: formulaCombosForLegs,\n field: current,\n isFieldEditable,\n })\n }\n >\n \n \n \n \n \n {formulaInvestment > 0 && (\n \n \n Cost{' '}\n \n ${(formulaInvestment * formulaCombosForLegs).toFixed(2)}\n \n \n \n )}\n \n )\n }\n\n return (\n <>\n \n {formulaFields}\n \n \n )\n }\n}\n\nexport const MultiFormula = observeImmutable(\n betslipState$,\n ({ record }) => {\n const betsInMulti = getBetsInMulti(record.items)\n const count = betsInMulti.count()\n\n if (!(count >= MIN_LEGS_IN_MULTI && count <= MAX_LEGS_FOR_MULTI_FORMULA)) {\n return null\n }\n\n return (\n \n \n \n \n )\n }\n)\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport * as immutable from 'immutable'\nimport {\n isRaceDetails,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport {\n state$ as betslipState$,\n MultiInvestment,\n BetslipItem,\n BetslipState,\n ReceiptItem,\n MultiBetError,\n BetslipExpandableTypes,\n BetslipStateRecord,\n} from '../../driver'\nimport { ToggleBetslipExpandable } from '../../signals'\nimport { BetslipExpandablePanel } from '../BetslipExpandablePanel/BetslipExpandablePanel'\nimport { InvestmentTextStyled, InvestmentStyled } from '../BetInvestment/BetInvestment.styles'\nimport { PriceChange, getPriceChange } from '@core/Components/Text/utils'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { MultiReturn } from '../MultiReturn/MultiReturn'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { MIN_LEGS_IN_MULTI } from '../../constants'\nimport { BetslipReceiptMulti } from '../BetslipReceipt/BetslipReceiptMulti'\nimport {\n calculateMultiProjectedPay,\n calclulateCombinedMultiInvestment,\n calculateMultiReturn,\n calculateLastSeenMultiReturn,\n} from '../../helpers/calculator'\nimport {\n MultiDetailsStyled,\n MultiDetailsAmountStyled,\n MultiSectionStyled,\n MultiItemListStyled,\n MultiSpendStyled,\n EmptyItemStyled,\n MultiTotalContainerStyled,\n MultiTotalAmountStyled,\n} from './MultiItemList.styles'\nimport { Money } from '@core/Components/Text/Money'\nimport { MultiFormula } from '@core/Areas/Betslip/Components/MultiFormula/MultiFormula'\nimport { MultiItem } from '@core/Areas/Betslip/Components/MultiItem/MultiItem'\nimport {\n SetBonusBet,\n SetQuickEditInvestment,\n SetQuickEditValue,\n ToggleBonusCash,\n} from '../QuickEdit/driver'\nimport { QUICK_EDIT_MODAL, QuickEdit, QuickEditContentTypes } from '../QuickEdit/QuickEdit'\nimport {\n getBetsInMulti,\n hasTooFewMultiLegs,\n hasTooManyMultiLegs,\n isValidMulti,\n isValidMultiInvestmentForLegs,\n} from '../../helpers/state'\nimport { openModal } from '@core/Components/Modal'\n\ninterface ItemListStateProps {\n items: immutable.List\n isExpanded: boolean\n disabled: boolean\n receipt?: ReceiptItem | null\n hasProposed: boolean\n multiBetError: MultiBetError | null\n multiInvestment: MultiInvestment\n}\n\nconst handleExpandablePanelClick = () => ToggleBetslipExpandable(BetslipExpandableTypes.multi)\n\nexport const MultiItemListComponent = ({\n items = immutable.List([]),\n isExpanded,\n receipt,\n disabled,\n hasProposed,\n multiBetError,\n multiInvestment,\n}: ItemListStateProps) => {\n const dispatch = useDispatch()\n const anyBetsPlaced = items.some(x => !!x.receipt) || !!receipt\n const selectedMultiItems = getBetsInMulti(items)\n\n const isMultiValid = isValidMulti(multiInvestment, multiBetError, selectedMultiItems)\n const isMultiInvestmentValid = isValidMultiInvestmentForLegs(\n multiInvestment,\n selectedMultiItems.count()\n )\n\n if (hasProposed && !isMultiValid && !multiBetError) {\n return null\n }\n\n const isRaceMulti = items.some(item => item.isInMulti && isRaceDetails(item.selectionDetails))\n const hasEnoughBets = items.count() >= MIN_LEGS_IN_MULTI\n const hasEnoughSelections = selectedMultiItems.count() >= MIN_LEGS_IN_MULTI\n const hasTooManyLegs = hasTooManyMultiLegs(selectedMultiItems)\n const showBetTypeToggle = !anyBetsPlaced && !hasProposed\n\n const multiTotalCost = calclulateCombinedMultiInvestment(selectedMultiItems, multiInvestment)\n const multiReturn = calculateMultiReturn(items, { shouldRound: true })\n const multiReturnLastSeen = calculateLastSeenMultiReturn(items, { shouldRound: true })\n const multiReturnPriceChange = multiReturnLastSeen\n ? getPriceChange(multiReturnLastSeen, multiReturn)\n : PriceChange.None\n\n const isValidNumberOfLegs = !hasTooFewMultiLegs(selectedMultiItems) && !hasTooManyLegs\n\n const handleInvestmentClick = () => {\n SetQuickEditInvestment(multiInvestment.value)\n ToggleBonusCash(multiInvestment.isBonusCash ?? true)\n SetBonusBet(\n multiInvestment.bonusBetId\n ? { campaignId: multiInvestment.bonusBetId, value: multiInvestment.value }\n : null\n )\n SetQuickEditValue(multiInvestment.value)\n dispatch(\n openModal({\n id: QUICK_EDIT_MODAL,\n modalComponent: QuickEdit,\n modalComponentProps: {\n title: 'Multi Bet',\n subTitle: `${selectedMultiItems.count()} Legs`,\n contentType: QuickEditContentTypes.Multi,\n },\n color: 'dark',\n })\n )\n }\n\n return (\n \n {!hasEnoughBets && Add more bets to create a Multi}\n {hasEnoughBets && (\n \n {!hasEnoughSelections && (\n \n )}\n\n {!multiBetError?.errorMessage && hasTooManyLegs && (\n <>\n {isRaceMulti ? (\n \n ) : (\n \n )}\n \n )}\n\n {multiBetError?.errorMessage && (\n -1 &&\n multiBetError.errorMessage.indexOf('must contain no more than') > -1\n ? 'Exceeded number of allowed legs for Multi bet. Please amend your bet.'\n : multiBetError.errorMessage\n }\n />\n )}\n\n {multiInvestment.f1 > 0 && !isMultiInvestmentValid && (\n \n )}\n\n {receipt ? (\n // Show Receipt\n \n ) : (\n // Show Active Multi\n <>\n \n {items.toArray().map(item => (\n \n ))}\n \n\n \n \n Spend\n \n \n \n\n \n \n \n Multi Rtn\n \n \n \n \n \n\n \n \n No. Legs\n \n {selectedMultiItems.count()}\n \n \n \n\n \n \n Proj. Pay\n \n \n \n \n \n \n\n \n\n {multiTotalCost > 0 && (\n \n Total Multi Cost\n \n ${multiTotalCost.toFixed(2)}\n \n \n )}\n \n )}\n \n )}\n \n )\n}\n\nexport const MultiItemList = observeImmutable(\n betslipState$,\n ({ record }) => {\n const { multiReceipt, hasProposed, isBusy, multiBetError, multiInvestment } =\n record.toJS() as BetslipState\n return (\n !isToteSelection(item.selection) && !isStartingPriceSelection(item.selection)\n )\n .toList()}\n isExpanded={record.isMultiExpanded}\n receipt={multiReceipt}\n disabled={hasProposed || isBusy || multiReceipt != null}\n hasProposed={hasProposed}\n multiBetError={multiBetError}\n multiInvestment={multiInvestment}\n />\n )\n }\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { colors } from '@core/Settings'\n\nconst SuperPickBadgeStyled = styled('div')({\n minHeight: '2.0rem',\n width: '12rem',\n border: '1px #e8e8e8 solid',\n borderRadius: '0.2rem',\n display: 'flex',\n alignItems: 'center',\n margin: '0.2rem 0',\n padding: '0.2rem',\n})\n\nexport const SelectedSuperPickBadgeStyled = styled(SuperPickBadgeStyled)({\n backgroundColor: colors.betslip.superPick.selected.background,\n borderColor: colors.betslip.superPick.selected.border,\n justifyContent: 'center',\n})\n\nexport const AvailableSuperPickBadgeStyled = styled(SuperPickBadgeStyled)<{ isEditable: boolean }>(\n {\n borderColor: colors.betslip.superPick.available.border,\n boxShadow: `0 0.1rem 0.2rem ${colors.betslip.item.boxShadow}`,\n },\n ({ isEditable }) => ({\n boxShadow: !isEditable ? 'none' : undefined,\n })\n)\n\nexport const DisabledSuperPickBadgeStyled = styled(SuperPickBadgeStyled)({\n color: colors.betslip.superPick.disabled.text,\n backgroundColor: colors.betslip.superPick.disabled.background,\n borderColor: colors.betslip.superPick.disabled.border,\n})\n\nexport const SuperPickRemovedButtonStyled = styled('button')({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: hexColors.black,\n color: hexColors.white,\n cursor: 'pointer',\n border: 0,\n padding: '0',\n borderRadius: '100%',\n width: '1.8rem',\n height: '1.8rem',\n})\n\nexport const SelectedSuperPickTextStyled = styled('div')({\n fontSize: '1.2rem',\n textAlign: 'center',\n lineHeight: '1.5rem',\n minHeight: '2.0rem',\n width: '9rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexFlow: 'column',\n})\n\nexport const AvailableSuperPickTextStyled = styled('span')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n textAlign: 'center',\n marginLeft: '1rem',\n})\n\nexport const AvailableSuperPickIconStyled = styled('div')({\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: '1rem',\n})\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { SuperPickRemovedButtonStyled } from './SuperPick.styles'\n\ninterface RemoveButtonProps {\n onClick: () => void\n}\n\nexport function RemoveButton({ onClick }: RemoveButtonProps) {\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport {\n SuperPickButtonTextStyled,\n SuperPickButtonSubTextStyled,\n} from '@core/Components/SuperPick/SuperPick.styles'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { BetslipState, state$ as betslipState$ } from '../../driver'\nimport { SelectedSuperPickBadgeStyled, SelectedSuperPickTextStyled } from './SuperPick.styles'\nimport { RemoveButton } from './RemoveButton'\n\ninterface SelectedSuperPickProps {\n label: string\n onDeselectClick(): void\n}\n\ntype SelectedSuperPickComponentProps = SelectedSuperPickProps & { isEditable: boolean }\n\nexport function SelectedSuperPickComponent({\n label,\n onDeselectClick,\n isEditable,\n}: SelectedSuperPickComponentProps) {\n const [title, subtitle] = label.split('-')\n return (\n \n \n {title}\n {subtitle ? {subtitle} : null}\n \n {isEditable && onDeselectClick()} />}\n \n )\n}\n\nexport const SelectedSuperPick = observeImmutable(\n // @ts-expect-error Legacy - use redux toolkit\n betslipState$,\n ({ record: { isBusy, hasProposed }, label, onDeselectClick }) => (\n \n )\n)\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '@core/Settings/index'\nimport {\n AvailableSuperPickBadgeStyled,\n DisabledSuperPickBadgeStyled,\n SelectedSuperPickTextStyled,\n AvailableSuperPickTextStyled,\n AvailableSuperPickIconStyled,\n} from './SuperPick.styles'\n\ninterface SuperPickAvailableProps {\n disabled?: boolean\n onClick: () => void\n isEditable: boolean\n}\nexport function SuperPickAvailable({ disabled, onClick, isEditable }: SuperPickAvailableProps) {\n if (disabled) {\n return (\n \n SuperPick\n \n )\n }\n return (\n \n \n \n \n SuperPick\n \n )\n}\n","import styled from '@emotion/styled'\nimport { Money } from '@core/Components/Text/Money'\nimport { colors } from '@core/Settings'\n\nexport const ProjectedReturnStyled = styled('div')({\n fontSize: '1.2rem',\n lineHeight: 'normal',\n padding: '0.5em 0 0.5rem 0',\n color: colors.betslip.multiDetails.label.color,\n})\n\nexport const ProjectedReturnMoneyStyled = styled(Money)({\n fontSize: '1.4rem',\n fontWeight: 'bold',\n color: colors.betslip.item.text,\n})\n","import React from 'react'\nimport { isStartingPriceSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { ProjectedReturnMoneyStyled, ProjectedReturnStyled } from './ProjectedReturn.styles'\nimport { calculateEstReturnSingleItem } from '@core/Areas/Betslip/helpers/calculator'\nimport { BetslipItem } from '../../driver'\n\nexport function ProjectedReturn({ item }: { item: BetslipItem }) {\n if (isStartingPriceSelection(item?.selection)) return null\n return (\n \n Proj. Return \n \n )\n}\n","import React from 'react'\nimport Decimal from 'decimal.js'\nimport * as immutable from 'immutable'\nimport type { FobSelection } from '@mobi/betslip/types'\nimport { isStartingPriceSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { BetslipItem } from '../../driver'\nimport { DeselectSuperPick } from '../../signals'\nimport { SelectedSuperPick } from '../SuperPick/SelectedSuperPick'\nimport { SuperPickAvailable } from '../SuperPick/SuperPickAvailable'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n InvestmentTextStyled,\n BetEachWayInvestmentGroupStyled,\n BetInvestmentGroupStyled,\n InvestmentPriceStyled,\n InvestmentAmountStyled,\n GridCellStyled,\n} from './BetInvestment.styles'\nimport { EditBetslipItemArgs } from './BetInvestment'\nimport { ProjectedReturn } from '../ProjectedReturn/ProjectedReturn'\nimport { InvestmentType } from '@core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver'\nimport { calculateBoosts } from '@core/Areas/Betslip/helpers/calculator'\nimport { isSpecialUsed } from '../../helpers/state'\nimport { getPriceChange, PriceChange } from '@core/Components/Text/utils'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { useFeature } from '@core/Utils/hooks'\n\ninterface FobInvestmentProps {\n item: BetslipItem\n isLoggedIn: boolean\n isEditable: boolean\n editBetslipItem: ({ item, investmentType, isEditable }: EditBetslipItemArgs) => void\n items: immutable.List\n}\n\nexport function FobInvestment({\n item,\n isLoggedIn,\n isEditable,\n editBetslipItem,\n items,\n}: FobInvestmentProps) {\n const canShowInducements = useInducementService()\n const is50cIncrementActive = useFeature('CENTS_INCREMENTS_BET')\n const decimalPlaces = is50cIncrementActive ? 2 : 0\n\n const deselectSuperPick = () => DeselectSuperPick(item)\n\n const { selectedSuperPickOffer, investment, selection } = item\n const prices = selection as FobSelection\n\n const winPriceChange = prices.winPriceLastSeen\n ? getPriceChange(prices.winPriceLastSeen, prices.winPrice)\n : PriceChange.None\n\n const placePriceChange =\n prices.placePriceLastSeen && prices.placePrice\n ? getPriceChange(prices.placePriceLastSeen, prices.placePrice)\n : PriceChange.None\n\n const [winBoost, placeBoost] = calculateBoosts(selectedSuperPickOffer ?? null)\n\n const hasWinPrice = !!prices.winPrice\n\n const hasPlacePrice = !!prices.placePrice\n const hasSecondaryDisplay = hasWinPrice && hasPlacePrice\n const isStartingPriceBet = isStartingPriceSelection(selection)\n\n const handleEditBetslipWin = () =>\n editBetslipItem({\n item,\n investmentType: InvestmentType.Win,\n isEditable,\n items,\n })\n const handleEditBetslipPlace = () =>\n editBetslipItem({\n item,\n investmentType: InvestmentType.Place,\n isEditable,\n items,\n })\n\n const isSuperPickAvailable =\n canShowInducements && isLoggedIn && !!item.specialOffers && item.specialOffers.length > 0\n const shouldShowSuperPickButton =\n isSuperPickAvailable && items.count() > 0 && !isSpecialUsed(item, items)\n const shouldShowSuperPickSelected = isSuperPickAvailable && !!selectedSuperPickOffer\n\n return (\n \n {item.isEachWayAvailable ? (\n \n \n \n \n \n \n W\n \n 0}\n />\n \n \n \n \n \n \n\n {item.isEachWay && (\n \n \n \n \n P\n \n 0}\n />\n \n \n \n \n \n \n )}\n \n \n ) : (\n \n {(hasWinPrice || isStartingPriceBet) && (\n \n \n \n \n \n W\n \n {isStartingPriceBet ? (\n \n SP\n \n ) : (\n 0}\n />\n )}\n \n \n \n \n \n \n \n )}\n\n {hasSecondaryDisplay && }\n\n {hasPlacePrice && (\n \n \n \n \n \n P\n \n 0}\n />\n \n \n \n \n \n \n \n )}\n \n )}\n\n \n \n {shouldShowSuperPickSelected && (\n \n )}\n\n {shouldShowSuperPickButton && !shouldShowSuperPickSelected && (\n \n )}\n\n {item.isEachWay ? (\n \n Each Way\n \n ) : null}\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport Decimal from 'decimal.js'\nimport type { ToteSelection } from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isNoveltyBetType,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { GridCell, Grid, GridRow } from '@mobi/component-library/Common/Grid'\nimport {\n BetInvestmentGroupStyled,\n InvestmentTextStyled,\n InvestmentAmountStyled,\n} from './BetInvestment.styles'\nimport { BetslipItem } from '../../driver'\nimport { InvestmentType } from '@core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver'\nimport { EditBetslipItemArgs } from './BetInvestment'\n\ninterface ToteInvestmentProps {\n item: BetslipItem\n isEditable: boolean\n editBetslipItem: ({ item, investmentType, isEditable }: EditBetslipItemArgs) => void\n}\n\nexport function ToteInvestment({ item, isEditable, editBetslipItem }: ToteInvestmentProps) {\n const { investment, selection, shouldAllowPlaceInvestment } = item\n const shouldDisplayFlexi = isToteSelection(selection) && isNoveltyBetType(selection.betType)\n const shouldDisplayNumberOfCombinations = isAllUpSelection(selection)\n\n const toteBetType = (item.selection as ToteSelection).betType\n const hasSecondaryDisplay =\n shouldAllowPlaceInvestment || shouldDisplayFlexi || shouldDisplayNumberOfCombinations\n\n let flexi\n if (shouldDisplayFlexi) {\n flexi = item.numberOfCombinations\n ? Math.floor(((investment.win.value * 100) / item.numberOfCombinations) * 100) / 100\n : 0\n }\n\n const handleEditBetslipWin = () =>\n editBetslipItem({\n item,\n investmentType: InvestmentType.Win,\n isEditable,\n items: null,\n })\n const handleEditBetslipPlace = () =>\n editBetslipItem({\n item,\n investmentType: InvestmentType.Place,\n isEditable,\n items: null,\n })\n\n return (\n \n \n \n \n \n \n {toteBetType === 'Win & Place' ? 'W' : 'Spend'}\n \n \n \n {investment !== undefined && (\n \n )}\n \n \n \n \n\n {hasSecondaryDisplay && }\n\n {shouldAllowPlaceInvestment && (\n \n \n \n \n P\n \n \n {investment !== undefined && (\n \n )}\n \n \n \n \n )}\n\n {shouldDisplayFlexi && (\n \n \n \n \n Flexi\n \n \n {flexi !== undefined && (\n {`${flexi}%`}\n )}\n \n \n \n \n )}\n\n {shouldDisplayNumberOfCombinations && (\n \n \n \n \n Combos\n \n \n {item.numberOfCombinations !== undefined && (\n \n {`${item.numberOfCombinations}`}\n \n )}\n \n \n \n \n )}\n \n )\n}\n","import React from 'react'\nimport * as immutable from 'immutable'\nimport { Observable } from 'rx'\nimport { isFobPropositionSelection, isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { Grid } from '@mobi/component-library/Common/Grid'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ as betslipState$, BetslipItem } from '../../driver'\nimport {\n ToggleBonusCashUsage,\n EditBetslipItem,\n QuickbetClosed,\n SetActiveInvestment,\n SetBonusBet,\n ToggleBonusBetUsage,\n} from '@core/Areas/Quickbet/signals'\nimport { Quickbet } from '@core/Areas/Quickbet/Quickbet'\nimport { QUICKBET_MODAL_ID } from '@core/Areas/Quickbet/constants'\nimport { InvestmentType } from '@core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { FobInvestment } from './FobInvestment'\nimport { ToteInvestment } from './ToteInvestment'\nimport { isFatalErrorType, isSpecialUsed } from '../../helpers/state'\nimport { store } from '@core/Store'\nimport { openModal } from '@core/Components/Modal'\n\ninterface BetInvestmentState {\n items: immutable.List\n isEditable: boolean\n isLoggedIn: boolean\n}\n\nexport interface EditBetslipItemArgs {\n item: BetslipItem\n investmentType: InvestmentType\n isEditable: boolean\n items: immutable.List | null\n}\n\n// This function is run to edit a betslip item\nconst editBetslipItem = ({\n item,\n investmentType = InvestmentType.Win,\n isEditable,\n items,\n}: EditBetslipItemArgs) => {\n if (!isFatalErrorType(item.betErrorType) && isEditable) {\n if (item.investment.win.isBonusBet) {\n SetActiveInvestment(InvestmentType.Win)\n } else if (item.investment.place.isBonusBet) {\n SetActiveInvestment(InvestmentType.Place)\n } else {\n SetActiveInvestment(investmentType)\n }\n\n EditBetslipItem(item)\n let shouldShowSuperPicks = !(\n isFobPropositionSelection(item.selection) && item.selection.marketCode === 'CON'\n )\n if (items !== null) {\n shouldShowSuperPicks = !isSpecialUsed(item, items)\n }\n if (item.investment.bonusBet) {\n ToggleBonusBetUsage()\n SetBonusBet(item.investment.bonusBet)\n }\n\n ToggleBonusCashUsage(item.isUsingBonusCash ?? true)\n\n store.dispatch(\n openModal({\n id: QUICKBET_MODAL_ID,\n modalComponent: Quickbet,\n modalComponentProps: {\n shouldShowSuperPicks,\n },\n onCloseCallback: QuickbetClosed,\n color: 'dark',\n })\n )\n }\n}\n\ninterface BetInvestmentComponentProps {\n item: BetslipItem\n isEditable: boolean\n isLoggedIn: boolean\n items: immutable.List\n}\n\nexport function BetInvestmentComponent({\n item,\n isEditable,\n isLoggedIn,\n items,\n}: BetInvestmentComponentProps) {\n if (!item.selection || isFatalErrorType(item.betErrorType)) {\n return null\n }\n\n return (\n
      \n {!item.receipt && (\n \n {isToteSelection(item.selection) ? (\n \n ) : (\n \n )}\n \n )}\n
      \n )\n}\n\nconst state$ = Observable.combineLatest(\n betslipState$,\n userAccountState$,\n (betslipStateRecord, userAccountRecord): BetInvestmentState => ({\n items: betslipStateRecord.items,\n isEditable: !betslipStateRecord.hasProposed && !betslipStateRecord.isBusy,\n isLoggedIn: !!userAccountRecord.isLoggedIn,\n })\n)\n\ntype BetInvestmentProps = Pick\n\nexport const BetInvestment = observeImmutable(\n state$,\n ({ record: { items, isEditable, isLoggedIn }, id }) => {\n const item = items.find(betInvestmentItem => betInvestmentItem.id === id)\n if (!item) {\n return null\n }\n return (\n \n )\n }\n)\n","import React from 'react'\nimport { QuickbetReceiptDetails } from '@core/Areas/Quickbet/Components/Receipt/QuickbetReceipt'\nimport { BetslipItem } from '../../driver'\n\ntype BetslipReceiptProps = Pick & {\n isTote: boolean\n isMystery: boolean\n isMysteryCombo: boolean\n isNoveltyBetType: boolean\n itemSelectionTag?: string\n}\n\nexport function BetslipReceipt({\n receipt,\n isTote,\n isMystery,\n isMysteryCombo,\n isNoveltyBetType,\n itemSelectionTag,\n}: BetslipReceiptProps): JSX.Element | null {\n if (!receipt) {\n return null\n }\n\n const {\n accountBalance,\n ticketNumber,\n winInvestment,\n placeInvestment,\n betCost,\n projectedWinPayout,\n projectedPlacePayout,\n specialOffers,\n bonusBet,\n campaignActivatedInd,\n campaignType,\n amountPaid,\n divXAnnotations,\n } = receipt\n\n return (\n \n )\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { RefreshIcon } from '@core/Components/Icons'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { RefreshBetslip } from '@core/Areas/Betslip/signals'\nimport { state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport { RefreshButtonStyled } from './Buttons.styles'\n\ninterface RefreshBetslipButtonComponentProps {\n isLoggedIn: boolean\n isBusy: boolean\n}\n\nexport function RefreshBetslipButtonComponent({\n isLoggedIn,\n isBusy,\n}: RefreshBetslipButtonComponentProps): JSX.Element | null {\n const isDisabledRef = React.useRef(false)\n\n const refreshBetslip = (event: React.MouseEvent) => {\n event.stopPropagation()\n\n if (!isDisabledRef.current && !isBusy) {\n isDisabledRef.current = true\n RefreshBetslip()\n\n setTimeout(() => {\n isDisabledRef.current = false\n }, 30000)\n }\n }\n\n return isLoggedIn ? (\n \n \n \n ) : null\n}\n\nconst state$ = Observable.combineLatest(\n userAccountState$,\n betslipState$,\n (userAccountState, betslipState) => ({\n isLoggedIn: userAccountState.isLoggedIn,\n isBusy: betslipState.isBusy,\n })\n)\n\nexport const RefreshBetslipButton = observeImmutable(state$, ({ record }) => (\n \n))\n","export default class Exception {\n public message: string\n constructor(message: string) {\n this.message = message\n }\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SingleAllUpFormulaContainerStyled = styled('ul')({\n listStyle: 'none',\n margin: '0 0 0.5rem',\n padding: '0.5rem 0 0.5rem 0',\n display: 'flex',\n justifyContent: 'flex-end',\n lineHeight: 1.2,\n borderBottom: `0.1rem solid ${hexColors.gainsboro}`,\n})\n\nexport const SingleAllUpFormulaItemStyled = styled('li')({\n width: `calc(100% / 6)`,\n fontSize: '1.1rem',\n textAlign: 'center',\n color: hexColors.nero,\n boxSizing: 'border-box',\n borderRight: `0.1rem solid ${hexColors.gainsboro}`,\n\n '&:last-child': {\n borderRight: 'none',\n },\n})\n\nexport const SingleAllUpFormulaTitleStyled = styled('span')({\n display: 'block',\n})\n","import React from 'react'\nimport type { AllUpSelection } from '@mobi/betslip/types'\nimport {\n SingleAllUpFormulaContainerStyled,\n SingleAllUpFormulaItemStyled,\n SingleAllUpFormulaTitleStyled,\n} from './SingleAllUpFormula.styles'\n\nconst FORMULA_NAME_MAP = {\n F1: 'Singles',\n F2: 'Doubles',\n F3: 'Trebles',\n F4: 'Pick 4',\n F5: 'Pick 5',\n F6: 'Pick 6',\n}\n\nexport function SingleAllUpFormula({ selection }: { selection: AllUpSelection }) {\n return (\n \n {selection.formulas.map(\n ({ formula, isSelected, numberOfCombinations }) =>\n isSelected && (\n \n \n {FORMULA_NAME_MAP[`F${formula}` as keyof typeof FORMULA_NAME_MAP]}\n {' '}\n x{numberOfCombinations}\n \n )\n )}\n \n )\n}\n","import React from 'react'\nimport * as immutable from 'immutable'\nimport type { ToteSelection, AllUpSelection } from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isMysteryComboBetType,\n isMysterySelection,\n isNoveltyBetType,\n isRaceDetails,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { observeImmutable } from '@core/Components/HOCs'\nimport { state$, BetslipItem, BetslipExpandableTypes } from '../../driver'\nimport { ToggleBetslipExpandable } from '../../signals'\nimport { BetInfo } from '../BetInfo/BetInfo'\nimport { BetInvestment } from '../BetInvestment/BetInvestment'\nimport { BetslipExpandablePanel } from '../BetslipExpandablePanel/BetslipExpandablePanel'\nimport {\n ItemStyled,\n ListStyled,\n SingleItemNoticeWrapper,\n TotalCostMoneyStyled,\n TotalCostSectionStyled,\n} from './SingleItemList.styles'\nimport { BetslipReceipt } from '../BetslipReceipt/BetslipReceipt'\nimport { RefreshBetslipButton } from '../Buttons/RefreshButton'\nimport {\n ReceiptHeaderStyled,\n ReceiptHeaderTextStyled,\n} from '../BetslipReceipt/BetsliptReceipt.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n isFatalErrorType,\n isNonHandledError,\n hasInvestment,\n hasErrors,\n hasBeenPlaced,\n} from '../../helpers/state'\nimport Exception from '@classic/Betting-v2/Exceptions/Exception'\nimport { SingleAllUpFormula } from '../SingleAllUpFormula/SingleAllUpFormula'\n\ninterface ItemListProps {\n items: immutable.List\n isExpanded: boolean\n hasProposed: boolean\n isBusy: boolean\n}\n\nconst handleExpandablePanelClick = () => ToggleBetslipExpandable(BetslipExpandableTypes.single)\n\nexport function SingleItemListComponent({ items, isExpanded, hasProposed, isBusy }: ItemListProps) {\n let filteredItems = items.concat().toList() // Create new iterable before mutating\n\n if (hasProposed) {\n filteredItems = filteredItems\n .filter(item => hasErrors(item) || hasBeenPlaced(item) || hasInvestment(item))\n .toList()\n }\n\n if (!items || filteredItems.isEmpty()) {\n return null\n }\n\n // check if the local storage is the latest or throw expeption\n const hasOldSchema =\n items\n .toArray()\n .filter(\n item =>\n item.selectionDetails !== null &&\n React.hasOwnProperty.call(item.selectionDetails, 'raceKeys')\n ).length > 0\n\n if (hasOldSchema) {\n throw new Exception('Old schema please refresh')\n }\n\n const itemCount = filteredItems.count()\n\n return (\n }\n >\n \n {filteredItems.toArray().map(item => {\n const { id, receipt } = item\n\n const isTote = isToteSelection(item.selection)\n const isMystery = isMysterySelection(item.selection)\n const isMysteryCombo = isMystery && isMysteryComboBetType(item.selection)\n const isNovelty = isTote\n ? isNoveltyBetType((item.selection as ToteSelection).betType)\n : false\n const isAllUp = isAllUpSelection(item.selection)\n const isWinPlaceBet = !isAllUp\n const isNotDefaultAllUp =\n isAllUp &&\n (item.selection as AllUpSelection).formulas\n .slice(0, -1)\n .some(formula => formula.isSelected)\n const isRace = isRaceDetails(item.selectionDetails)\n\n const allUpTotalCost = isAllUp\n ? item.investment.win.value * (item.numberOfCombinations || 0)\n : 0\n\n let itemSelectionTag = ''\n\n if (isRace && isWinPlaceBet && !isNovelty) {\n if (item.investment.win.value > 0 && item.investment.place.value > 0) {\n itemSelectionTag = 'Win & Place'\n } else if (item.investment.win.value > 0) {\n itemSelectionTag = 'Win'\n } else if (item.investment.place.value > 0) {\n itemSelectionTag = 'Place'\n }\n }\n\n const hasFatalError = isFatalErrorType(item.betErrorType) || false\n\n return (\n \n {!!receipt && (\n \n {' '}\n Your bet has been placed\n \n )}\n\n \n\n {isNonHandledError(item.betErrorType) && (\n \n \n \n )}\n\n {!hasFatalError && }\n\n {isAllUp && isNotDefaultAllUp && (\n \n )}\n\n {isAllUp && allUpTotalCost > 0 && !receipt && (\n \n Total Cost\n ${allUpTotalCost.toFixed(2)}\n \n )}\n\n \n \n )\n })}\n \n \n )\n}\n\nexport const SingleItemList = observeImmutable(state$, ({ record }) => (\n \n))\n","import React from 'react'\nimport {\n ScrollTo,\n UpdateBetslipItemPrice,\n OnOpen,\n OnClose,\n RefreshBetslip,\n RemoveBonusBetsFromBetslip,\n} from '@core/Areas/Betslip/signals'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { state$ as navigationState$ } from '@core/State/Navigation/driver'\nimport { event$, FobPriceChangedPushEvent, isFobPriceChangedPushEvent } from '@core/State/PushData'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { deregisterBodyScrollLock, registerBodyScrollLock } from '@mobi/utils/functions'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { OverlayCloseButtonStyled } from '@core/Components/Overlay/Overlay.styles'\nimport { useHapticFeedbackOnBetSuccess } from '@core/Utils/hooks/useHapticFeedbackOnBetSuccess'\nimport { useTrackOptimoveBetslipAbandoned } from '@core/Services/Optimove/hooks/useTrackOptimoveBetslipAbandoned'\n\nimport { registerAnalyticsSubscriptions } from './analytics'\nimport {\n BetslipMainContainerStyled,\n BetslipOverlayHeaderStyled,\n BetslipOverlayHeaderTextStyled,\n BetslipOverlayStyled,\n EmptyBetslipMessageStyled,\n} from './Betslip.styles'\nimport { AccountBalance } from './Components/AccountBalance/AccountBalance'\nimport { ClearBetslipButton } from './Components/Buttons/ClearBetslipButton'\nimport { BetslipErrorBoundary } from './Components/ErrorBoundaries/BetslipErrorBoundary'\nimport { FooterSummary } from './Components/FooterSummary/FooterSummary'\nimport { MultiItemList } from './Components/MultiItemList/MultiItemList'\nimport { SingleItemList } from './Components/SingleItemList/SingleItemList'\nimport { state$ as betslipDriverState$ } from './driver'\nimport { getBetsInMulti } from './helpers/state'\nimport { useServerConfig } from '@core/Data/ServerConfig/useServerConfig'\n\nexport const Betslip = (): JSX.Element => {\n const containerElementRef = React.useRef(null)\n const mainElementRef = React.useRef(null)\n\n const { scrollPosition, hasProposed, isBusy, items } = useObservableImmutable(\n betslipDriverState$,\n ['isBusy', 'items', 'hasProposed', 'scrollPosition']\n )\n useHapticFeedbackOnBetSuccess('betslip')\n useTrackOptimoveBetslipAbandoned()\n\n const serverConfig = useServerConfig()\n\n React.useEffect(() => {\n if (!serverConfig?.enableAnalytics) return\n const { dispose } = registerAnalyticsSubscriptions()\n return dispose\n }, [serverConfig?.enableAnalytics])\n\n React.useEffect(() => {\n OnOpen()\n\n const containerElement = containerElementRef.current\n if (containerElement) registerBodyScrollLock(containerElement)\n\n const fobPriceChangedSubscription = event$\n .filter(e => isFobPriceChangedPushEvent(e.payload))\n .map(e => e.payload as FobPriceChangedPushEvent)\n .groupBy(e => e.propositionId)\n .flatMap(group => group.debounce(2500))\n .subscribe(({ propositionId, winPrice, placePrice }) => {\n if (winPrice) {\n UpdateBetslipItemPrice({\n propositionId: propositionId.toString(),\n winPrice,\n placePrice,\n priceSource: 'push',\n })\n }\n })\n\n const navigationSubscription = navigationState$\n .map(navState => navState.toJS().currentUrl)\n .skip(1)\n .distinctUntilChanged()\n .subscribe(handleCloseButtonClick)\n\n const loggedInSubscription = userAccountState$\n .pluck('isLoggedIn')\n .distinctUntilChanged()\n .subscribe(isLoggedIn => {\n if (isLoggedIn) RefreshBetslip()\n else RemoveBonusBetsFromBetslip()\n })\n\n return () => {\n ScrollTo('top')\n OnClose()\n fobPriceChangedSubscription.dispose()\n navigationSubscription.dispose()\n loggedInSubscription.dispose()\n\n if (containerElement) deregisterBodyScrollLock(containerElement)\n }\n }, [])\n\n React.useEffect(() => {\n if (scrollPosition === 'multi' && getBetsInMulti(items).count() > 1) {\n mainElementRef.current?.scrollIntoView?.()\n }\n }, [scrollPosition, items])\n\n const hasItems = items && !items.isEmpty()\n const showClear = hasItems && !hasProposed && !isBusy\n\n return (\n \n \n Betslip\n \n \n \n \n \n\n \n \n {hasItems ? (\n <>\n \n
      \n \n
      \n \n ) : (\n \n Your Betslip is Empty\n \n )}\n\n {showClear && (\n \n \n \n \n \n \n \n )}\n \n\n \n
      \n
      \n )\n}\n\n// Local Helpers\n\nfunction handleCloseButtonClick() {\n OverlayClose()\n OnClose()\n}\n","import { isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { trackLoadedBetBetslip } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Betslip } from '@core/Areas/Betslip/Betslip'\nimport { state$, BetslipItem } from '@core/Areas/Betslip/driver'\nimport { AddSinglesToBetslip, RemoveSingleBet, ScrollTo } from '@core/Areas/Betslip/signals'\nimport { OverlayOpen } from '@core/Components/Overlay'\nimport { promptUserAndReturnDecision } from '@core/Utils/betting/loadBet/Components/PromptBetslipChange/helpers'\nimport { buildBaseBetSelection, isSportBetDetails } from '../buildBetItem/buildBaseBetSelection'\nimport { BetDetails, FOOBetDetails, LoadBetDetails, LoadBetErrors } from '../types'\nimport { createItemForLegacyBetslip } from '@core/Areas/Betslip/helpers/addToBetslip'\nimport { getErrorMessage } from './loadBet'\nimport { zip } from '@mobi/utils/functions/zip'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\n\nconst enum LocalConstants {\n PlaceBetType = 'Place - Fixed',\n}\n\n/** Betslip: handle non-empty betslip, build items and open in Betslip (Multi ONLY) */\nexport async function addToLegacyBetslip(\n incomingBets: LoadBetDetails[],\n source?: LoadBetSource,\n // pass in existing bet selection to avoid loading from api again\n prebuiltBets?: QuickbetSelection[] | null\n): Promise {\n let whatToDoWithExisting = 'emptyBetslip'\n const zipped = zip(incomingBets, prebuiltBets || [])\n // old bet slip cant handle sports\n const bets = zipped.filter(bet => !isSportBetDetails(bet[0])) as [\n BetDetails | FOOBetDetails,\n QuickbetSelection | null,\n ][]\n\n if (bets.length === 0 && incomingBets.length > 0) {\n throw new Error(LoadBetErrors.NoSportsInLegacy)\n }\n\n if (hasExistingBetslipItems()) {\n whatToDoWithExisting = await promptUserAndReturnDecision()\n\n switch (whatToDoWithExisting) {\n case 'cancel':\n return { total: bets.length, success: 0 }\n case 'add':\n break\n case 'replace': {\n removeFixedOddsBetslipItemsLegacy()\n break\n }\n }\n }\n\n const createBetslipItemResults = await Promise.allSettled(\n bets.map(async ([bet, qbSelection]) => {\n const item = qbSelection || (await buildBaseBetSelection(bet))\n const betslipItem = createItemForLegacyBetslip(item)\n betslipItem.multiLegBetType = bet.betType === LocalConstants.PlaceBetType ? 'P' : 'W'\n return betslipItem\n })\n )\n const betsReadyForBetslip = createBetslipItemResults\n .filter(isFulfilled)\n .map(result => result.value)\n\n if (betsReadyForBetslip.length === 0) {\n const isBettingClosedOnBets = createBetslipItemResults\n .filter(isRejected)\n .map(result => result.reason)\n .some(err => getErrorMessage(err) === LoadBetErrors.BettingClosed)\n throw Error(isBettingClosedOnBets ? LoadBetErrors.BettingClosed : LoadBetErrors.Default)\n }\n\n AddSinglesToBetslip(betsReadyForBetslip)\n OverlayOpen(Betslip)\n ScrollTo('multi')\n\n source &&\n trackLoadedBetBetslip({\n source,\n action: whatToDoWithExisting,\n betsToAdd: betsReadyForBetslip.length,\n })\n\n return { total: incomingBets.length, success: betsReadyForBetslip.length }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction removeFixedOddsBetslipItemsLegacy() {\n state$.take(1).subscribe(state => {\n state.items\n .filter(item => !isToteSelection(item.selection))\n .forEach(item => item && RemoveSingleBet(item))\n })\n}\n\nfunction hasExistingBetslipItems(): boolean {\n let hasBetslipItems = false\n state$.take(1).subscribe(state => {\n hasBetslipItems = state.items.filter(item => !isToteSelection(item.selection)).count() > 0\n })\n return hasBetslipItems\n}\n\nfunction isFulfilled(input: PromiseSettledResult): input is PromiseFulfilledResult {\n return input.status === 'fulfilled'\n}\nfunction isRejected(input: PromiseSettledResult): input is PromiseRejectedResult {\n return input.status === 'rejected'\n}\n\n// =====\n// Types\n// =====\n\ninterface AddToBetslipReturn {\n total: number\n success: number\n}\n\ntype LoadBetSource = 'share-bet' | 'rebet' | 'blackbook'\n","import dayjs from 'dayjs'\nimport type { RacingBetType } from '@mobi/betslip/types'\nimport { PlanSeq } from '@mobi/api-types'\nimport { FeatureFlags } from '@mobi/settings'\nimport { isActive } from '@core/State/LaunchDarklyFeatures/helpers/isActive'\nimport { InvestmentType } from '@core/Areas/Quickbet/Components/BetInvestment/betInvestmentDriver'\nimport { QuickbetSelection, SetActiveInvestment } from '@core/Areas/Quickbet/signals'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { logError } from '@core/Utils'\nimport {\n buildBaseBetSelection,\n getFOOEventType,\n isFOOBetDetails,\n isSportBetDetails,\n} from '../buildBetItem/buildBaseBetSelection'\nimport { LoadBetDetails, LoadBetErrors } from '../types'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\nimport { getToteBetType } from '../buildBetItem/getToteBetType'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\nimport { addToBetSlip } from './addToBetSlip'\nimport { addToLegacyBetslip } from './addToLegacyBetslip'\n\nconst SUPPORTED_TOTE_BET_TYPES: RacingBetType[] = [\n 'Win & Place',\n 'Quinella',\n 'Exacta',\n 'Trifecta',\n 'First 4',\n 'Double',\n 'Quaddie',\n]\n\nexport const isLoadBetSupported = (planSeq: number): boolean => {\n if (planSeq === PlanSeq.FOBRacing) return true\n\n if (planSeq === PlanSeq.FOBSports) return true\n\n const betType = getToteBetType(planSeq)\n if (!betType) return false\n\n return SUPPORTED_TOTE_BET_TYPES.includes(betType)\n}\n\nexport const loadBet = async (\n betPayload: LoadBetDetails[],\n source?: LoadBetSource,\n prebuiltBets?: QuickbetSelection[] | null\n): Promise => {\n try {\n if (prebuiltBets && prebuiltBets.length !== betPayload.length) {\n // invalid data. clear it\n prebuiltBets = null\n }\n if (betPayload.length === 1) {\n await addToQuickbet(betPayload[0], { betSource: source }, prebuiltBets?.[0])\n return\n }\n\n if (betPayload.length > 1) {\n const isNewBetSlipFeatureActive = await isActive(FeatureFlags.NEW_BET_SLIP_DESIGN.key)\n\n if (isNewBetSlipFeatureActive) {\n await addToBetSlip(betPayload, source, prebuiltBets)\n } else {\n await addToLegacyBetslip(betPayload, source, prebuiltBets)\n }\n return\n }\n\n throw new Error('No bets provided')\n } catch (error) {\n const message = getErrorMessage(error)\n\n RegisterToast({\n id: 'failed-bet-creation',\n timeout: 0,\n type: 'error',\n position: 'bottom',\n message,\n })\n\n if (message !== LoadBetErrors.BettingClosed) logError(error as Error, true)\n }\n}\n\n/** Quickbet: build item and open in Quickbet */\nexport async function addToQuickbet(\n bet: LoadBetDetails,\n opts: Partial = {},\n prebuiltBet?: QuickbetSelection\n): Promise {\n if (opts.shouldNavigateToRace) {\n handleNavigateToBet(bet)\n }\n const selection = prebuiltBet || (await buildBaseBetSelection(bet))\n selection.betSource = opts.betSource\n\n if (isSportBetDetails(bet)) {\n handleBetSelection({\n betFlow: {\n location: 'BetSlipNew',\n },\n selection: selection,\n })\n return\n }\n\n handleBetSelection({\n betFlow: {\n location: 'Quickbet',\n options: {\n setUp: () => {\n SetActiveInvestment(\n bet.betType === 'Place - Fixed' ? InvestmentType.Place : InvestmentType.Win\n )\n },\n quickbetProps: {\n // setting this to false will force superpicks off, if true they will show only if\n // available. For now we force it off for starting price\n shouldShowSuperPicks: bet.betType !== FixedOddsMarketDisplayNames.SP,\n },\n },\n },\n selection: selection,\n })\n}\n\nexport function getErrorMessage(error: unknown): string {\n let errorMessage = LoadBetErrors.Default\n if (isErrorInstance(error) && error.message === LoadBetErrors.BettingClosed) {\n errorMessage = LoadBetErrors.BettingClosed\n }\n return errorMessage\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst isErrorInstance = (error: unknown): error is Error => error instanceof Error\n\nasync function handleNavigateToBet(bet: LoadBetDetails) {\n if (isSportBetDetails(bet)) {\n // const uri = buildEventPageURL(bet.sportId, bet.tournamentId, bet.eventId)\n // window.location.href = `#${uri.replace(/^\\//, '')}` // convert to hash route\n return\n }\n\n if (isFOOBetDetails(bet)) {\n const { competitionSeq, eventStartDateTime, sportName } = bet\n const event = getFOOEventType(sportName)\n const date = convertToFixtureDate(eventStartDateTime)\n window.location.href = `#fobracing/propositions/${event}/races/${competitionSeq}?selectionDate=${date}`\n return\n }\n\n const { fixtureId, races, fixtureDate } = bet\n window.location.href = `#tote/meetings/${fixtureId}/${races[0]}?date=${convertToFixtureDate(\n fixtureDate\n )}`\n}\n\nconst convertToFixtureDate = (date: Date | string) => dayjs(date).format('YYYY-MM-DD')\n\n// =====\n// Types\n// =====\n\ntype LoadBetSource = 'share-bet' | 'rebet' | 'blackbook'\n\ninterface AddToQuickbetOptions {\n shouldNavigateToRace: boolean\n betSource: LoadBetSource\n}\n","import { get, post } from '@classic/Foundation/Services/ApiService'\nimport type { LoadBetDetails } from '@core/Utils/betting/loadBet/types'\n\nexport const postShareBetDataAndGenerateLink = (\n bets: LoadBetDetails[]\n): Promise<{ message: string; link: string }> => {\n return post({\n url: '/api/sharebet/share-bet',\n body: {\n data: bets,\n },\n })\n}\n\nexport const getShareBetDataWithKey = (\n key: string\n): Promise<{ message: string; key: string; data: LoadBetDetails[]; accountNumber: string }> => {\n return get({\n url: `/api/sharebet/share-bet?key=${key}`,\n })\n}\n","import type { EventDetails } from '@mobi/betslip/types'\nimport { isRaceDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackEvent, trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { QuickbetClosed } from '@core/Areas/Quickbet/signals'\nimport { QuickbetState, state$ as quickbetState$ } from '@core/Areas/Quickbet/driver'\nimport { ConfirmAllBetsSuccessful, OnClose } from '@core/Areas/Betslip/signals'\nimport { state$ as receiptState$ } from '@core/Areas/Quickbet/Components/Receipt/driver'\nimport { BetslipState, state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as navigationState$ } from '@core/State/Navigation/driver'\n\nexport function trackShareBetLinkOpen(data: {\n origin: string\n betType: 'single' | 'multi' | 'multi-partial' | 'closed'\n}) {\n trackEvent(keys.shareBetLinkOpen, data)\n if (data.betType == 'closed') return\n\n if (data.betType.includes('multi')) {\n setupBetslipListeners()\n } else {\n setupQuickbetListeners()\n }\n}\n\n// Local Helpers\n\nconst trackShareBetLinkPlaced = (data: {\n amountPaid: number\n hasSpecialOffer: boolean\n legs: number\n meetingCode: string\n}) => {\n trackEvent(keys.shareBetLinkPlaced, data)\n}\n\nfunction setupQuickbetListeners() {\n const cleanupSignupSubscription = listenForLoginOrAcquisition()\n QuickbetClosed.signal$\n .take(1)\n .withLatestFrom(quickbetState$, receiptState$, (_: unknown, quickbetState, receiptState) => ({\n quickbetState,\n receiptState,\n }))\n .subscribe(({ quickbetState, receiptState }) => {\n cleanupSignupSubscription()\n const quickbetStateJs: QuickbetState = quickbetState.toJS()\n if (!quickbetStateJs.betPlaced) return\n\n const amountPaid = receiptState.amountPaid || 0\n const hasSpecialOffer = !!receiptState.hasSpecialOffer\n const meetingCode = getMeetingCode(quickbetStateJs.selectionDetails)\n\n trackShareBetLinkPlaced({ amountPaid, hasSpecialOffer, legs: 1, meetingCode })\n })\n}\n\nfunction setupBetslipListeners() {\n const cleanupSubscription = listenForLoginOrAcquisition()\n\n const betPlacedSubscription = ConfirmAllBetsSuccessful.signal$\n .withLatestFrom(betslipState$, (_: unknown, betslipState) => ({\n betslipState,\n }))\n .subscribe(({ betslipState }) => {\n const betslipStateJS: BetslipState = betslipState.toJS()\n const amountPaid = betslipStateJS.multiReceipt?.amountPaid || 0\n const hasSpecialOffer = !!betslipStateJS.multiReceipt?.hasSpecialOffer\n\n const meetingCode = betslipStateJS.items.reduce((prev, curr) => {\n const currMeetingCode = getMeetingCode(curr.selectionDetails)\n return !prev || prev === currMeetingCode ? currMeetingCode : 'other'\n }, '')\n\n trackShareBetLinkPlaced({\n amountPaid,\n hasSpecialOffer,\n legs: betslipState.items.size,\n meetingCode,\n })\n })\n\n OnClose.signal$.take(1).subscribe(() => {\n betPlacedSubscription.dispose()\n cleanupSubscription()\n })\n}\n\nfunction listenForLoginOrAcquisition() {\n let hasTracked = false\n const loginSubscription = userAccountState$\n .map(state => state.isLoggedIn)\n .pairwise()\n .distinctUntilChanged()\n .subscribe(([prevIsLoggedIn, newIsLoggedIn]) => {\n if (!prevIsLoggedIn && newIsLoggedIn && !hasTracked) {\n trackKey(keys.shareBetLinkLogin)\n hasTracked = true\n }\n })\n\n const navSubscription = navigationState$.subscribe(navState => {\n const currentUrl = navState.get('currentUrl')\n if (currentUrl && currentUrl.toLowerCase().includes('signup')) {\n trackKey(keys.shareBetLinkAcquisition)\n }\n })\n\n const cleanupSubscriptions = () => {\n loginSubscription.dispose()\n setTimeout(() => {\n navSubscription.dispose()\n }, 3000)\n }\n return cleanupSubscriptions\n}\n\nfunction getMeetingCode(selectionDetails: EventDetails | null): string {\n if (!selectionDetails || !isRaceDetails(selectionDetails)) return 'other'\n return selectionDetails.races[0]?.meetingCode || 'other'\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, FeatureFlags, hexColors } from '@mobi/settings'\nimport { store } from '@core/Store'\nimport { H3 } from '@core/Components/Text/Heading.styles'\nimport { closeModal } from '@core/Components/Modal'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport {\n addToLegacyBetslip,\n addToQuickbet,\n getErrorMessage,\n} from '@core/Utils/betting/loadBet/helpers'\nimport { LoadBetErrors } from '@core/Utils/betting/loadBet/types'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { getShareBetDataWithKey } from './helpers/api'\nimport { trackShareBetLinkOpen } from './helpers/analytics'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { addToBetSlip } from '@core/Utils/betting/loadBet/helpers/addToBetSlip'\nimport { getNewBetSlipSetting } from '@core/Areas/Settings/Store/selectors'\n\nexport const ShareBetIncoming: React.FC = ({ shareId }) => {\n const betslipPartialValuesRef = React.useRef({ total: 0, success: 0 })\n const [state, setState] = React.useState<'loading' | LoadBetErrors | 'error' | 'partial-multi'>(\n 'loading'\n )\n\n React.useEffect(() => {\n featureState$\n .combineLatest(userAccountState$, (featureState, userState) => ({\n featureState,\n userState,\n }))\n .skipWhile(\n x =>\n !x.userState.hasEvaluatedUserAuth ||\n !x.featureState.isLdInitialized ||\n !!(x.userState.isLoggedIn && x.featureState.isUserAnonymous)\n )\n .take(1)\n .subscribe(x => {\n const isNewBetSlipFeatureActive = x.featureState.features.get(\n FeatureFlags.NEW_BET_SLIP_DESIGN.key\n )\n const isNewBetSlipFeaturSettingActive = getNewBetSlipSetting(store.getState())\n // eslint-disable-next-line no-console\n console.log(isNewBetSlipFeatureActive, isNewBetSlipFeaturSettingActive)\n openSharedBet(shareId, isNewBetSlipFeatureActive && isNewBetSlipFeaturSettingActive)\n .then(({ total, success, isClosed }) => {\n if (isClosed) {\n setState(LoadBetErrors.BettingClosed)\n return\n }\n if (success > 0 && total !== success) {\n betslipPartialValuesRef.current = { total, success }\n setState('partial-multi')\n return\n }\n dismiss(shareId)\n })\n .catch(e => {\n if (e?.message === LoadBetErrors.NoSportsInLegacy) {\n setState(e.message)\n } else {\n setState('error')\n }\n })\n })\n }, [shareId])\n\n return (\n \n

      Opening a Shared Bet

      \n\n {state === 'loading' && (\n
      \n \n
      \n )}\n\n {state === 'partial-multi' && (\n <>\n \n \n \n )}\n\n {state === LoadBetErrors.BettingClosed && (\n <>\n \n \n \n )}\n\n {state === LoadBetErrors.NoSportsInLegacy && (\n <>\n \n \n \n )}\n {state === 'error' && (\n <>\n \n \n \n )}\n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nasync function openSharedBet(\n shareId: string,\n isNewBetslipActive: boolean\n): Promise {\n const { data, accountNumber: origin } = await getShareBetDataWithKey(shareId)\n\n if (!data || data.length == 0) {\n throw new Error('No Bets Provided')\n }\n\n try {\n if (data.length === 1) {\n await addToQuickbet(data[0], { shouldNavigateToRace: true, betSource: 'share-bet' })\n\n trackShareBetLinkOpen({ origin, betType: 'single' })\n return { total: 1, success: 1 }\n }\n } catch (error) {\n if (getErrorMessage(error) == LoadBetErrors.BettingClosed) {\n trackShareBetLinkOpen({ origin, betType: 'closed' })\n return { total: 1, success: 0, isClosed: true }\n }\n throw error\n }\n\n try {\n let addToBetslipResult: Awaited> | null = null\n\n if (isNewBetslipActive) {\n addToBetslipResult = await addToBetSlip(data, 'share-bet')\n } else {\n addToBetslipResult = await addToLegacyBetslip(data, 'share-bet')\n }\n\n if (!addToBetslipResult) return { total: 0, success: 0 }\n\n trackShareBetLinkOpen({\n origin,\n betType: addToBetslipResult.success !== addToBetslipResult.total ? 'multi-partial' : 'multi',\n })\n\n return addToBetslipResult\n } catch (error) {\n if (error == LoadBetErrors.BettingClosed) {\n trackShareBetLinkOpen({ origin, betType: 'closed' })\n return { total: data.length, success: 0, isClosed: true }\n }\n throw error\n }\n}\n\nfunction dismiss(shareId: string) {\n store.dispatch(closeModal({ id: shareId }))\n}\n\nconst CloseButton = ({ shareId }: Pick) => (\n dismiss(shareId)}>\n Close\n \n)\n\n// ================\n// Styled Component\n// ================\n\nconst Wrapper = styled.div({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n minHeight: '10rem',\n background: colors.brand.primary,\n padding: '1rem',\n color: hexColors.white,\n\n h3: {\n margin: 0,\n textAlign: 'center',\n marginBottom: '0.5rem',\n color: hexColors.white,\n fontWeight: 'bold',\n },\n\n 'div[aria-busy=\"true\"]': {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '0.5rem',\n },\n\n button: {\n marginTop: 'auto',\n },\n})\n\n// =====\n// Types\n// =====\ninterface ShareIncomingProps {\n shareId: string\n}\n\ninterface OpenSharedBetReturn {\n total: number\n success: number\n isClosed?: boolean\n}\n","import React from 'react'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { store } from '@core/Store'\nimport { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { closeModal } from '@core/Components/Modal'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { useAddToBlackbook } from '@core/Areas/Blackbook/Hooks/useAddToBlackbook'\n\nexport const ShareBlackbookIncoming: React.FC = ({ type, name, id }) => {\n const { isLoading, isLoadingRunners, clickHandler, matchedRunnerInBlackbook } = useAddToBlackbook(\n { starterName: name, starterType: type, source: 'share' }\n )\n\n // Automatically navigate to Blackbook and highlight runner\n React.useEffect(() => {\n if (!matchedRunnerInBlackbook) return\n store.dispatch(closeModal({ id }))\n clickHandler()\n }, [matchedRunnerInBlackbook, clickHandler, id])\n\n const isBusy = isLoading || isLoadingRunners\n\n return (\n
      \n \n

      \n Add {toTitleCase(name)} to your Blackbook?\n

      \n
      \n\n \n \n \n store.dispatch(closeModal({ id }))}\n color='secondary'\n disabled={isBusy}\n >\n Cancel\n \n \n\n \n \n {isBusy ? : 'Add to Blackbook'}\n \n \n \n \n
      \n )\n}\n\n// =====\n// Types\n// =====\n\ntype ShareBlackbookProps = { type: RaceCodes; name: string; id: string }\n","import React from 'react'\nimport { openModal } from '@core/Components/Modal'\nimport { store } from '@core/Store'\nimport { ShareBetIncoming } from './ShareBet'\nimport { ShareBlackbookIncoming } from './ShareBlackbook'\n\nconst enum LocalConstants {\n ShareBetSearchKey = 'share-bet',\n ShareBackbookRunnerSearchKey = 'share-blackbook',\n}\n\nexport const useShareIncomingListener = () => {\n const query = useQuery()\n\n React.useEffect(() => {\n const shareBetId = query.get(LocalConstants.ShareBetSearchKey)\n if (shareBetId) {\n cleanSearchParamsFromUrl()\n store.dispatch(\n openModal({\n id: shareBetId,\n modalComponent: ShareBetIncoming,\n modalComponentProps: { shareId: shareBetId },\n isDismissable: false,\n position: 'middle',\n cornerStyle: 'round',\n })\n )\n return\n }\n\n const shareBlackbookPayload = query.get(LocalConstants.ShareBackbookRunnerSearchKey)\n if (shareBlackbookPayload) {\n cleanSearchParamsFromUrl()\n const type = shareBlackbookPayload.slice(0, shareBlackbookPayload.indexOf(','))\n const name = shareBlackbookPayload.slice(shareBlackbookPayload.indexOf(',') + 1)\n if (!type || !name) return\n\n store.dispatch(\n openModal({\n id: shareBlackbookPayload,\n modalComponent: ShareBlackbookIncoming,\n modalComponentProps: { type, name, id: shareBlackbookPayload },\n isDismissable: false,\n position: 'middle',\n cornerStyle: 'round',\n })\n )\n return\n }\n }, [query])\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction cleanSearchParamsFromUrl() {\n window.history.replaceState('', document.title, '/#')\n}\n\nfunction useQuery() {\n const search = window.location.search\n return React.useMemo(() => new URLSearchParams(search), [search])\n}\n","import React from 'react'\nimport { Notification } from './Components/Notification/Notification'\nimport { Banner } from '@core/Components/Banner'\nimport { HomeNavigation } from './Components/HomeNavigation'\nimport { HomeNextRaces } from './Components/HomeNextRaces'\nimport { FeaturedItems } from './Components/FeaturedItems'\nimport { resetMatchedRaceBetTypePersist } from '@classic/Betting-v2/Components/Pages/Workflow/BettingStateManagerViewModel'\nimport { ActivitySummary } from '@core/Areas/ResponsibleWagering/ActivitySummary'\nimport { HomeNextSuperPicks } from './Components/HomeNextSuperPicks'\nimport { HomeFooter } from './Components/Footer/HomeFooter'\nimport {\n HomeMainContainerStyled,\n BannerCardStyled,\n HomeScrollWrapperStyled as ScrollerWrapper,\n} from './Home.styles'\nimport { TrendingBetsToggled } from './Components/TrendingBets/TrendingBetsToggled'\nimport { useShareIncomingListener } from '@core/Services/ShareIncoming/useShareIncomingListener'\n\nexport const Home = (): JSX.Element => {\n useShareIncomingListener()\n\n React.useEffect(() => {\n resetMatchedRaceBetTypePersist()\n }, [])\n\n return (\n \n \n\n \n \n \n \n\n \n \n \n \n {' '}\n \n \n\n \n\n \n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const JackpotTitleStyled = styled('strong')({\n textTransform: 'uppercase',\n fontWeight: 'bold',\n fontSize: '1em',\n margin: '0 0 0.2em',\n})\n\nexport const JackpotTextStyled = styled('p')({\n fontSize: '1em',\n margin: '0 0 0.2em',\n padding: 0,\n})\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nexport function JackpotLoading() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { isLoading, isErrored } from 'rwwa-data-access'\nimport dayjs from 'dayjs'\nimport type { Race } from '@mobi/betslip/types'\nimport { hexColors } from '@mobi/settings'\n\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ListBadge, ListTime } from '@core/Components/List'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Money } from '@core/Components/Text/Money'\nimport { ListLink } from '@core/Components/List/ListLink'\nimport { connect } from '@core/Components/HOCs/connect'\nimport { JackpotTitleStyled, JackpotTextStyled } from './Jackpot.styles'\nimport { JackpotLoading } from './JackpotLoading' // separate import here to fix tests TODO: dont do this\nimport {\n Races,\n Pools,\n FavouriteNumberPool,\n RacingPool,\n TippingPool,\n isFavouriteNumbersPool,\n isRacingPool,\n isTippingPool,\n} from '@core/Data/Racing'\n\nfunction ErroredJackpot() {\n return Error loading jackpot\n}\n\nexport const Jackpot = connect({ pool: Pools })(({ pool }) => {\n if (isLoading(pool)) {\n return \n }\n\n if (isErrored(pool)) {\n return \n }\n\n if (isRacingPool(pool)) {\n return \n }\n\n return \n})\n\nconst JackpotWithRace = connect({ race: Races })<{ loadedPool: RacingPool }>(({\n loadedPool,\n race,\n}) => {\n if (isLoading(race)) {\n return \n }\n\n if (isErrored(race)) {\n return \n }\n\n return \n})\n\nexport function LoadedJackpot({\n pool,\n race,\n}: {\n pool: TippingPool | RacingPool | FavouriteNumberPool\n race?: Race\n}): JSX.Element {\n if (isRacingPool(pool) && !!race) {\n let codeIcon\n\n switch (pool.fixtureType) {\n case 'Races':\n codeIcon = \n break\n case 'Dogs':\n codeIcon = \n break\n case 'Trots':\n codeIcon = \n break\n default:\n return \n }\n\n return (\n \n )\n }\n\n if (isFavouriteNumbersPool(pool)) {\n return (\n }\n netJackpotAmount={pool.netJackpotAmount}\n />\n )\n }\n\n if (isTippingPool(pool)) {\n return (\n }\n netJackpotAmount={pool.netJackpotAmount}\n />\n )\n }\n\n return \n}\n\nfunction getDisplayEndTime(endTime: Date) {\n const dayjsEndTime = dayjs(endTime)\n return (\n \n {dayjsEndTime.isSame(Date.now(), 'd')\n ? dayjsEndTime.format('HH:mm')\n : dayjsEndTime.format('D MMM')}\n \n )\n}\n\ninterface JackpotContentProps {\n title: string\n subTitle: string\n endTime?: Date\n prefix?: string\n badgeText: string\n href: string\n icon: JSX.Element\n netJackpotAmount: number\n}\n\nfunction JackpotContent({\n title,\n subTitle,\n endTime,\n prefix,\n badgeText,\n href,\n icon,\n netJackpotAmount,\n}: JackpotContentProps): JSX.Element {\n return (\n \n \n \n \n {badgeText}\n \n {endTime ? getDisplayEndTime(endTime) : ''}\n \n \n {icon}\n \n \n {title}\n {subTitle}\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { isLoading, isErrored, LoadingInstance, ErroredInstance } from 'rwwa-data-access'\nimport { List as ImmutableList } from 'immutable'\n\nimport { connect } from '../../Components/HOCs/connect'\nimport { List, ListItem } from '../../Components/List'\nimport { Message, ErrorMessage } from '../../Components/Messages'\nimport { Jackpot, JackpotLoading } from './Components/Jackpot'\nimport { MainContainer } from '../../Components/Containers'\nimport { ContentHeader } from '../../Components/ContentHeader'\n\nimport { PoolKeys } from '../../Data/Racing/pools'\n\nexport const Jackpots = () => \n\nconst ConnectedJackpots = connect({ poolKeys: PoolKeys })(({ poolKeys }) => (\n \n))\n\nfunction JackpotsComponent({\n poolKeys,\n}: {\n poolKeys: ImmutableList | typeof LoadingInstance | typeof ErroredInstance\n}) {\n const testId = { 'data-tid-jackpots-container': '' }\n return (\n \n \n \n \n )\n}\n\nfunction JackpotsList({\n poolKeys,\n}: {\n poolKeys: ImmutableList | typeof LoadingInstance | typeof ErroredInstance\n}) {\n if (isLoading(poolKeys)) {\n return (\n \n \n \n \n \n )\n }\n\n if (isErrored(poolKeys)) {\n return Error loading Jackpots\n }\n\n if (!poolKeys.size) {\n return No Jackpots for today\n }\n\n const jackpotListItems = poolKeys.toArray().map(poolKey => {\n return (\n \n \n \n )\n })\n\n return {jackpotListItems}\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport type { useMeetingsData } from '@core/Areas/Meetings/hooks'\n\nexport const DataError: React.FC = ({ refetch }) => {\n return (\n \n )\n}\n\ntype DataErrorProps = Pick['data'], 'refetch'>\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const Loading: React.FC = () => {\n return (\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// Styles\n// ======\n\nconst LoadingWrapperStyled = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n marginTop: '2.5rem',\n\n '& > div': {\n display: 'flex',\n alignItems: 'center',\n minHeight: '5rem',\n background: hexColors.white,\n borderBottom: `0.1rem solid ${hexColors.gainsboro}`,\n\n paddingLeft: '5rem',\n },\n})\n","import { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackKey, trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\n// Calendar Actions\nexport const trackMeetingsCalendarNextMonth = () => trackKey(keys.meetingsCalendarNextMonth)\nexport const trackMeetingsCalendarPrevMonth = () => trackKey(keys.meetingsCalendarPrevMonth)\nexport const trackMeetingsCalendarOpened = () => trackKey(keys.meetingsCalendarOpened)\nexport const trackMeetingsCalendarSelectMonth = ({ selectedMonth }: { selectedMonth: string }) =>\n trackEvent(keys.meetingsCalendarSelectMonth, { selectedMonth })\nexport const trackMeetingsCalendarSelectedDay = () => trackKey(keys.meetingsCalendarSelectedDay)\n\n// Favourite Actions\nexport const trackMeetingsFavouriteAdded = ({\n meetingName,\n meetingRaceCode,\n}: {\n meetingName: string\n meetingRaceCode: string\n}) => trackEvent(keys.meetingsFavouriteAdded, { meetingName, meetingRaceCode })\nexport const trackMeetingsFavouriteRemoved = () => trackKey(keys.meetingsFavouriteRemoved)\nexport const trackMeetingsFavouriteUsed = () => trackKey(keys.meetingsFavouriteUsed)\n\n// Meetings Nav Actions\nexport const trackMeetingsRaceCodeToggle = ({ raceCode }: { raceCode: string }) =>\n trackEvent(keys.meetingsRaceCodeToggle, { raceCode })\nexport const trackMeetingsDayQuickSelect = ({ label }: { label: string }) =>\n trackEvent(keys.meetingsDayQuickSelect, { label })\nexport const trackMeetingsDayPrevArrow = () => trackKey(keys.meetingsDayPrevArrow)\nexport const trackMeetingsDayNextArrow = () => trackKey(keys.meetingsDayNextArrow)\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { useDispatch } from 'react-redux'\nimport { hexColors } from '@mobi/settings'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport { getNextRaceTimeDisplayOptions } from '@core/Areas/Racing/helpers/getNextRaceTimeDisplayOptions'\nimport { toggleMeetingsFavourite } from '@core/Areas/Meetings/Store'\nimport {\n trackMeetingsFavouriteAdded,\n trackMeetingsFavouriteRemoved,\n trackMeetingsFavouriteUsed,\n} from '@core/Areas/Meetings/analytics'\nimport type { useMeetingsData } from '@core/Areas/Meetings/hooks'\n\nconst enum LocalConstants {\n ActiveFavouriteClass = 'meetings__meeting__favourited',\n RacePendingClass = 'meetings__meeting__pending',\n RowStatusRaceMinWidth = '10rem',\n}\n\nexport const MeetingRow: React.FC<{\n meeting: Meeting\n newFavRef: React.MutableRefObject\n isFavourite?: boolean\n}> = ({ meeting, isFavourite, newFavRef }) => {\n const dispatch = useDispatch()\n\n const { name, geoLocationCode } = getNameAndGeoLocationCode(meeting)\n const linkParamsForMeeting = getMeetingLinkParams(meeting)\n const linkToNextRace = getLinkToNextRace(meeting)\n\n const handleToggleFavourite = () => {\n dispatch(toggleMeetingsFavourite(meeting.name))\n newFavRef.current = isFavourite ? undefined : meeting\n if (isFavourite) trackMeetingsFavouriteRemoved()\n else trackMeetingsFavouriteAdded({ meetingName: meeting.name, meetingRaceCode: meeting.code })\n }\n\n const raceTimeOptions = meeting.nextRaceAst && getNextRaceTimeDisplayOptions(meeting.nextRaceAst)\n\n return (\n \n \n \n \n\n \n \n {name}\n \n\n
      \n {geoLocationCode && {geoLocationCode}}\n\n {!linkToNextRace && (\n \n {meeting.status === 'Finished' ? 'Resulted' : meeting.status}\n \n )}\n
      \n \n\n {linkToNextRace && (\n
      \n \n
      \n \n \n R{meeting.nextRaceNumber}\n \n \n\n {raceTimeOptions &&\n (raceTimeOptions.showCountDown ? (\n \n ) : (\n \n {dayjs(raceTimeOptions.advertisedStartTime).format('HH:mm')}\n \n ))}\n
      \n \n
      \n )}\n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst getNameAndGeoLocationCode = (meeting: Meeting): Pick => {\n let name = meeting.name\n let geoLocationCode = meeting.geoLocationCode\n\n const matchResult = meeting.name.match(/ - [A-Za-z]{2,3}$/)\n if (matchResult) {\n name = meeting.name.replace(/ - [A-Za-z]{2,3}$/, '')\n geoLocationCode = matchResult[0].replace('-', '').trim()\n }\n\n return { name: toTitleCase(name), geoLocationCode }\n}\n\nconst getMeetingLinkParams = (meeting: Meeting): string => {\n const toteSpecificParams = `&meetingId=${\n /^[A-Z][RTD][A-Z]?$/.test(meeting.id) ? meeting.id : '-'\n }`\n const fixedSpecificParams = meeting.fixed\n ? '&product=' +\n meeting.fixed.racingProduct.toLowerCase() +\n '&compSeq=' +\n meeting.fixed.competitionId\n : '&compSeq=0'\n\n return `?date=${dayjs(meeting.date).format(\n 'YYYY-MM-DD'\n )}${toteSpecificParams}${fixedSpecificParams}`\n}\n\nconst getLinkToNextRace = (meeting: Meeting): string => {\n if (!meeting.nextRaceNumber) return ''\n\n const date = dayjs(meeting.date).format('YYYY-MM-DD')\n\n if (meeting.fixed != null && meeting.id === meeting.fixed.competitionId) {\n const product = meeting.fixed.racingProduct.toLowerCase()\n const event = meeting.fixed.nextRaceEventId\n return `/fobracing/propositions/${product}/races/${event}?selectionDate=${date}&meetingSeq=${meeting.fixed.competitionId}`\n }\n\n return `/tote/meetings/${meeting.id}/${meeting.nextRaceNumber}?date=${date}`\n}\n\n// ======\n// Styles\n// ======\n\nconst MeetingRowStyled = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: '5rem',\n background: hexColors.white,\n borderBottom: `0.1rem solid ${hexColors.gainsboro}`,\n\n '@keyframes scale-easeOutElastic': {\n '0%': { transform: 'scale(0.6) rotate(-30deg)' },\n '70%': { transform: 'rotate(0)' },\n '100%': { transform: 'scale(1)' },\n },\n\n // Fav button\n 'button:first-of-type': {\n border: 0,\n background: 0,\n height: '5rem',\n width: '4rem',\n color: hexColors.veryLightGrey,\n\n [`&.${LocalConstants.ActiveFavouriteClass}`]: {\n color: hexColors.orange,\n animation: 'cubic-bezier(0.18,0.89,0.32,1.27) scale-easeOutElastic .8s',\n },\n },\n\n // Meeting (link)\n '& > a': {\n flex: 1,\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n overflow: 'hidden',\n lineHeight: 1,\n textDecoration: 'none',\n color: hexColors.nero,\n\n // Name\n '& > span': {\n flex: 1,\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n fontWeight: 'normal',\n fontSize: '1.4rem',\n lineHeight: 2,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n\n span: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n\n // Tags & Status\n '& > div': {\n alignSelf: 'stretch',\n marginLeft: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '1.2rem',\n\n 'span, strong': {\n boxSizing: 'border-box',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n lineHeight: 1,\n height: '2rem',\n padding: '0.2rem',\n },\n\n span: {\n marginRight: '0.5rem',\n minWidth: '4rem',\n color: hexColors.darkGrey,\n borderRadius: '0.2rem',\n },\n\n strong: {\n minWidth: LocalConstants.RowStatusRaceMinWidth,\n\n span: {\n width: '100%',\n border: '0.1rem solid ' + hexColors.gainsboro,\n background: hexColors.whiteSmoke,\n color: hexColors.nero,\n },\n },\n },\n },\n\n // Next race\n '& > div': {\n alignSelf: 'stretch',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n minWidth: LocalConstants.RowStatusRaceMinWidth,\n\n a: {\n flex: 1,\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n marginRight: '0.5rem',\n color: hexColors.black,\n textDecoration: 'none',\n fontSize: '1.2rem',\n\n '& > div': {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n boxSizing: 'border-box',\n height: '3.5rem',\n padding: '0.2rem 0.4rem',\n lineHeight: 1,\n borderRadius: '0.5rem',\n border: '0.1rem solid ' + hexColors.blueDiamond90L,\n background: hexColors.blueDiamond97L,\n\n // Race number\n '& > span': {\n color: hexColors.amethyst,\n\n [`&.${LocalConstants.RacePendingClass}`]: {\n color: hexColors.darkGrey,\n },\n },\n },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype Meeting = NonNullable['data']['meetings']>[0]\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { dayjs } from '@mobi/utils'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { sortMeetings } from '@core/Areas/Meetings/helpers/sortMeetings'\nimport type { useMeetingsData } from '@core/Areas/Meetings/hooks'\nimport { DataError, Loading, MeetingRow } from './Components'\n\nconst enum LocalConstants {\n PushAustralianListDownClassName = 'meetings__push-aust-down',\n}\n\nexport const MeetingsList: React.FC, 'handlers'>> = ({\n data,\n state,\n}) => {\n const newFavRef = React.useRef[0]>()\n const favouriteMeetings = useAppSelector(state => state.meetings.favourites)\n\n if (data.isError) return \n if (data.isLoading) return \n\n const { AustralianMeetings, InternationalMeetings } = sortMeetings(\n getMeetingsForCode(state.raceCode, data.meetings)\n )\n\n const favouriteList = favouriteMeetings.length\n ? AustralianMeetings.concat(InternationalMeetings)\n .filter(meeting => favouriteMeetings.includes(meeting.name))\n .sort((a, b) => a.name.localeCompare(b.name))\n : []\n\n const australianList = AustralianMeetings.filter(\n meeting => !favouriteList.includes(meeting)\n ).sort(sortOpenToTop)\n const internationalList = InternationalMeetings.filter(\n meeting => !favouriteList.includes(meeting)\n ).sort(sortOpenToTop)\n\n const shouldReverseAustAndIntOrder =\n dayjs(state.currentDate).isSameOrAfter(dayjs().format('YYYY/MM/DD')) &&\n australianList.every(meet => !meet.nextRaceNumber) &&\n internationalList.some(meet => !!meet.nextRaceNumber)\n\n return (\n \n {!AustralianMeetings.length && !InternationalMeetings.length ? (\n \n No Meetings Available\n \n ) : (\n <>\n {!!favouriteList.length && (\n
      \n

      Favourites

      \n {favouriteList.map(meeting => (\n \n ))}\n
      \n )}\n\n {!!australianList.length && (\n \n

      \n Australian {getRaceCodeLabel(state.raceCode)} Racing\n

      \n {australianList.map(meeting => (\n \n ))}\n \n )}\n\n {!!internationalList.length && (\n
      \n

      \n International {getRaceCodeLabel(state.raceCode)} Racing\n

      \n {internationalList.map(meeting => (\n \n ))}\n
      \n )}\n \n )}\n
      \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getMeetingsForCode(\n code: RaceCodesLowerCase,\n allMeetings?: Meetings\n): NonNullable[0][] {\n if (!allMeetings) return []\n return Object.values(allMeetings).filter(meeting => meeting.code.toLowerCase() === code)\n}\n\nconst getRaceCodeLabel = (code: RaceCodesLowerCase): string => {\n switch (code) {\n case 'dogs':\n return 'Greyhound'\n case 'races':\n return 'Horse'\n case 'trots':\n return 'Harness'\n }\n}\n\nfunction sortOpenToTop(a: Meeting, b: Meeting): -1 | 0 | 1 {\n if (a.status === 'Open' && b.status === 'Open') return 0\n if (a.status === 'Open') return -1\n if (b.status === 'Open') return 1\n return 0\n}\n\n// ======\n// Styles\n// ======\n\nconst MeetingsListWrapperStyled = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '5rem',\n marginTop: '-0.5rem',\n\n '& > strong': {\n padding: '2rem 0',\n textAlign: 'center',\n fontSize: '1.2rem',\n },\n\n h3: {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n height: '3rem',\n margin: 0,\n marginTop: '1rem',\n padding: '0 1rem',\n lineHeight: 1,\n fontWeight: 'normal',\n fontSize: '1.2rem',\n textTransform: 'capitalize',\n background: 'none',\n color: hexColors.nero,\n },\n\n [`& > div.${LocalConstants.PushAustralianListDownClassName}`]: {\n order: 5, // NOTE: if more items are added this number will affect layout\n },\n})\n\n// =====\n// Types\n// =====\n\ntype Meetings = ReturnType['data']['meetings']\ntype Meeting = NonNullable[0]\n","const range = (length: number): number[] =>\n Array(length)\n .fill(null)\n .map((_, i) => i)\n\nexport const sameDays = (d1: Date, d2: Date): boolean => {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n )\n}\n\nexport const deltaDate = (date: Date, yearDelta: number, monthDelta = 0, dayDelta = 0): Date => {\n return new Date(\n date.getFullYear() + yearDelta,\n date.getMonth() + monthDelta,\n date.getDate() + dayDelta\n )\n}\n\nexport const getFirstDayOfMonth = (date: Date): Date => {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nexport const getFirstDayOfWeek = (date: Date, weekStart: number): Date => {\n const diff = (date.getDay() < weekStart ? 7 : 0) + date.getDay() - weekStart\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() - diff)\n}\n\nexport const getLastDayOfMonth = (date: Date): Date => {\n return deltaDate(new Date(date.getFullYear(), date.getMonth() + 1, 1), 0, 0, -1)\n}\n\nexport const generateMatrix = (date: Date, weekStart: number): Date[][] => {\n const firstDayOfMonth = getFirstDayOfMonth(date)\n const startDate = getFirstDayOfWeek(firstDayOfMonth, weekStart)\n\n return range(6).map((_, i) => {\n return range(7).map((__, j) => {\n return new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i * 7 + j\n )\n })\n })\n}\n\nexport const dayNamesOrderedByWeekStart = (dayNames: string[], weekStart: number): string[] => {\n return range(7).map(index => {\n const dayIndex = index + weekStart\n return dayIndex >= 7 ? dayNames[dayIndex - 7] : dayNames[dayIndex]\n })\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nexport const DateNavigationContainerStyled = styled('div')({\n marginBottom: '1.25rem',\n padding: '0',\n})\n\nexport const DatePickerStyled = styled('div')<{ isOpen?: boolean }>(\n {\n boxSizing: 'border-box',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n padding: '0.8rem 1rem',\n margin: '0 1rem',\n textAlign: 'center',\n position: 'relative',\n transition: 'background-color 0.25s ease-in-out',\n backgroundPosition: 'right 1rem top 50%',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '1rem',\n },\n ({ isOpen }) => ({\n backgroundColor: isOpen\n ? colors.meetingList.dateNavigation.activeBackground\n : colors.meetingList.dateNavigation.background,\n color: isOpen\n ? colors.meetingList.dateNavigation.activeText\n : colors.meetingList.dateNavigation.text,\n border: isOpen\n ? `1px solid ${colors.meetingList.dateNavigation.activeBorder}`\n : `1px solid ${colors.meetingList.dateNavigation.border}`,\n })\n)\n\nexport const DatePickerIcon = styled(Icon)<{ isOpen?: boolean }>(\n {\n marginRight: '0.75rem',\n },\n ({ isOpen }) => ({\n color: isOpen\n ? colors.meetingList.dateNavigation.activeText\n : colors.meetingList.dateNavigation.text,\n })\n)\n\nexport const CalendarDatePickerHolderStyled = styled('div')({\n backgroundColor: colors.meetingList.calendar.baseBackground,\n position: 'absolute',\n left: '0',\n right: '0',\n maxWidth: '42rem',\n margin: '0 auto',\n zIndex: 2,\n\n animationName: 'fadeIn',\n animationDuration: '0.2s',\n animationTimingFunction: 'ease-in-out',\n visibility: 'visible',\n boxShadow: `0 1.2rem 2.1rem rgba(0,0,0,0.2)`,\n})\n","import styled from '@emotion/styled'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { colors } from '@core/Settings'\n\ninterface SingleDayStyledProps {\n isInThisMonth?: boolean\n isDayToday?: boolean\n isSelected?: boolean\n}\n\nexport const CalendarDatePickerContainerStyled = styled('div')({\n textAlign: 'center',\n margin: '0 auto',\n\n '&:focus': {\n outline: 'none',\n },\n})\n\nexport const CalendarDatePickerArrow = styled('a')({\n color: colors.meetingList.calendar.directionalArrow,\n})\n\nexport const DaysOfTheWeekStyled = styled('span')({\n fontSize: '1.2rem',\n color: colors.meetingList.calendar.headerText,\n lineHeight: '4rem',\n})\n\nexport const SingleDayStyled = styled('span')(\n {\n display: 'flex',\n height: '4rem',\n fontSize: '1.2rem',\n justifyContent: 'center',\n alignItems: 'center',\n\n '&:hover': {\n backgroundColor: colors.meetingList.calendar.days.hoverBackground,\n color: colors.meetingList.calendar.days.hoverText,\n },\n },\n\n ({ isInThisMonth }) => ({\n color: isInThisMonth\n ? colors.meetingList.calendar.days.inThisMonth.inText\n : colors.meetingList.calendar.days.inThisMonth.outText,\n backgroundColor: isInThisMonth\n ? colors.meetingList.calendar.days.inThisMonth.inBackground\n : colors.meetingList.calendar.days.inThisMonth.outBackground,\n boxShadow: isInThisMonth\n ? `0 0 0 1px ${colors.meetingList.calendar.days.inThisMonth.boxShadow}`\n : `0 0 0 1px ${colors.meetingList.calendar.days.inThisMonth.boxShadow}`,\n }),\n\n ({ isDayToday, isSelected }) => ({\n backgroundColor:\n isDayToday && isSelected ? colors.meetingList.calendar.days.isDayToday.background : undefined,\n color:\n isDayToday && isSelected\n ? colors.meetingList.calendar.days.isDayToday.text\n : colors.meetingList.calendar.days.isDayToday.isNotText,\n fontWeight: isDayToday && isSelected ? 800 : 0,\n }),\n\n ({ isSelected }) => ({\n backgroundColor: isSelected\n ? colors.meetingList.calendar.days.isSelected.background\n : undefined,\n color: isSelected ? colors.meetingList.calendar.days.isSelected.text : undefined,\n }),\n\n ({ isDayToday, isSelected }) => ({\n fontWeight: isDayToday && !isSelected ? 800 : 0,\n })\n)\n\nexport const MatrixStyled = styled(GridCell)({\n backgroundColor: colors.meetingList.calendar.matrix.background,\n})\n\nexport const SelectStyled = styled('select')({\n display: 'inline-block',\n fontSize: '1.4rem',\n padding: '0.5rem 2rem 0.5rem 0.5rem',\n margin: '0.5rem 0.1rem',\n border: `0px solid ${colors.meetingList.calendar.select.border}`,\n borderRadius: '0',\n backgroundColor: colors.meetingList.calendar.select.background,\n backgroundImage: `url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjU2cHgiIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTYgMjU2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRpdGxlPmFycm93ZG93bjwvdGl0bGU+PGcgaWQ9ImFycm93ZG93biI+PHBhdGggZD0iTTI1Niw4MGwtMzItMzJsLTk2LDk2TDMyLDQ4TDAsODBsMTI4LDEyOEwyNTYsODB6Ii8+PC9nPjwvc3ZnPg==),\n linear-gradient(to bottom, #FFF 0%,#FFF 100%)`,\n backgroundRepeat: 'no-repeat, repeat',\n backgroundPosition: 'right 0.7rem top 50%, 0 0',\n backgroundSize: '0.85rem auto, 100%',\n appearance: 'none',\n})\n\nexport const YearStyled = styled('div')({\n display: 'inline-block',\n fontSize: '1.4rem',\n padding: '0.5rem 2rem 0.5rem 0.5rem',\n margin: '0.5rem 0.1rem',\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\n\nimport { sameDays } from '../utils'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { SingleDayStyled } from '../DatePicker.styles'\n\ninterface DayProps extends React.TdHTMLAttributes {\n day: Date\n value: Date\n screen: Date\n onClick: () => void\n isInThisMonth?: boolean\n isDayToday?: boolean\n isSelected?: boolean\n}\n\nexport const Day: React.FunctionComponent = ({\n day,\n value,\n screen,\n onClick,\n ...props\n}) => {\n const isPrevMonth =\n screen.getMonth() === 0 ? day.getMonth() === 11 : day.getMonth() === screen.getMonth() - 1\n const isNextMonth =\n screen.getMonth() === 11 ? day.getMonth() === 0 : day.getMonth() === screen.getMonth() + 1\n const isInThisMonth = !isPrevMonth && !isNextMonth\n\n const isSelected = sameDays(day, value)\n const isDayToday = sameDays(day, new Date())\n\n const tomorrow = dayjs().add(1, 'days').toDate()\n const isDayTomorrow = sameDays(day, tomorrow)\n\n return (\n \n \n {day.getDate()}\n \n \n )\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { dayNamesOrderedByWeekStart } from '../utils'\nimport { DaysOfTheWeekStyled } from '../DatePicker.styles'\n\ninterface AbbreviationsProps extends React.HTMLAttributes {\n weekStart: number\n}\n\nexport const Abbreviations: React.FunctionComponent = ({\n weekStart,\n ...props\n}) => {\n return (\n \n {dayNamesOrderedByWeekStart(dayjs.weekdaysShort(), weekStart).map((day: string) => (\n \n {day}\n \n ))}\n \n )\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { DirectionalIcon } from '@core/Components/Icons'\nimport { CalendarDatePickerArrow, SelectStyled, YearStyled } from '../DatePicker.styles'\nimport {\n trackMeetingsCalendarNextMonth,\n trackMeetingsCalendarPrevMonth,\n trackMeetingsCalendarSelectMonth,\n} from '@core/Areas/Meetings/analytics'\n\nexport const MonthYearSelect: React.FC<{\n currentDate: dayjs.Dayjs\n setCurrentDate: React.Dispatch>\n areaName?: 'meetings'\n}> = ({ currentDate, setCurrentDate, areaName }) => {\n const currentYear = currentDate.year()\n\n const handlePrevMonthChange = () => {\n if (areaName && areaName === 'meetings') trackMeetingsCalendarPrevMonth()\n setCurrentDate(currentDate => dayjs(currentDate).subtract(1, 'months'))\n }\n\n const handleNextMonthChange = () => {\n if (areaName && areaName === 'meetings') trackMeetingsCalendarNextMonth()\n setCurrentDate(currentDate => dayjs(currentDate).add(1, 'months'))\n }\n\n const handleMonthSelect: React.ChangeEventHandler = e => {\n const selectedMonth = e.currentTarget.value\n if (areaName && areaName === 'meetings') trackMeetingsCalendarSelectMonth({ selectedMonth })\n setCurrentDate(\n dayjs(`${selectedMonth} ${currentDate.format('DD')} ${currentYear}`, 'MMMM DD YYYY')\n )\n }\n\n return (\n \n \n \n \n \n \n\n \n \n {dayjs.months().map(month => (\n \n ))}\n {' '}\n {currentYear}\n \n\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { generateMatrix } from './utils'\nimport { CalendarDatePickerHolderStyled } from '../DateNavigation/DateNavigation.styles'\nimport { CalendarDatePickerContainerStyled, MatrixStyled } from './DatePicker.styles'\nimport { GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Day } from './Components/DayCell'\nimport { Abbreviations } from './Components/WeekDayHeaders'\nimport { MonthYearSelect } from './Components/MonthYearSelect'\nimport { trackMeetingsCalendarSelectedDay } from '@core/Areas/Meetings/analytics'\n\nconst DefaultStartDay = 1\n\ninterface CalendarDatePickerProps {\n value: Date\n onChange: (value: Date) => void\n areaName?: 'meetings'\n}\n\nexport const CalendarDatePicker: React.FC = ({\n value,\n onChange,\n areaName,\n}) => {\n const [currentDate, setCurrentDate] = React.useState(() => dayjs(value))\n\n const onChangeLocal = (value: Date) => {\n setCurrentDate(dayjs(value))\n if (areaName && areaName === 'meetings') trackMeetingsCalendarSelectedDay()\n onChange(value)\n }\n\n const matrix = generateMatrix(currentDate.toDate(), DefaultStartDay)\n\n return (\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n {matrix.map(row => (\n \n {row.map(day => (\n onChangeLocal(day)}\n />\n ))}\n \n ))}\n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, hexColors } from '@mobi/settings'\nimport { dayjs } from '@mobi/utils'\nimport { DirectionalIcon } from '@core/Components/Icons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { CalendarDatePicker } from '@core/Components/DatePicker/DatePicker'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport {\n trackMeetingsCalendarOpened,\n trackMeetingsDayNextArrow,\n trackMeetingsDayPrevArrow,\n trackMeetingsDayQuickSelect,\n} from '@core/Areas/Meetings/analytics'\nimport type { useMeetingsData } from '@core/Areas/Meetings/hooks'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nconst enum LocalConstants {\n TabLabelSize = '1.4rem',\n TabCalendarClass = 'meetings__tabs__calendar',\n TabCalendarOpenClass = 'meetings__tabs__calendar--open',\n TabActiveClass = 'meetings__tabs__tab--active',\n DateFormat = 'YYYY-MM-DD',\n}\n\nexport const PrimaryDateNavigation: React.FC = ({ data, state, handlers }) => {\n const dateTabsElRef = React.useRef(null)\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false)\n\n React.useEffect(() => {\n setIsCalendarOpen(false)\n }, [state.currentDate])\n\n // Scroll active tab into view\n React.useEffect(() => {\n if (data.isLoading || !dateTabsElRef.current) return\n const activeTabEl = document.querySelector('.' + LocalConstants.TabActiveClass)\n if (!activeTabEl) return\n\n const parentEl = dateTabsElRef.current\n const childRect = activeTabEl.getBoundingClientRect()\n const parentRect = parentEl.getBoundingClientRect()\n\n if (childRect.left < parentRect.left)\n parentEl.scrollLeft = -(parentRect.left - childRect.left + childRect.width)\n\n if (childRect.right > parentRect.right)\n parentEl.scrollLeft = parentRect.right - childRect.left + childRect.width\n }, [state.currentDate, data.isLoading])\n\n const handleCalendarClick = () => {\n trackMeetingsCalendarOpened()\n setIsCalendarOpen(curr => !curr)\n }\n\n const tabDates = sortTabDates(data.dates, state.raceCode, state.currentDate)\n\n return (\n <>\n \n
      \n {\n trackMeetingsDayPrevArrow()\n handlers.setDate(\n dayjs(state.currentDate).subtract(1, 'day').format(LocalConstants.DateFormat)\n )\n }}\n data-testid='meetings-date-previous-day'\n >\n \n \n\n \n \n \n\n {\n trackMeetingsDayNextArrow()\n handlers.setDate(\n dayjs(state.currentDate).add(1, 'day').format(LocalConstants.DateFormat)\n )\n }}\n data-testid='meetings-date-next-day'\n >\n \n \n
      \n\n
      \n {data.isLoading ? (\n <>\n \n \n \n \n ) : (\n tabDates.map(({ date, label }) => (\n {\n trackMeetingsDayQuickSelect({ label })\n handlers.setDate(date)\n }}\n className={state.currentDate === date ? LocalConstants.TabActiveClass : ''}\n >\n {label}\n \n ))\n )}\n
      \n
      \n\n {isCalendarOpen && (\n {\n setIsCalendarOpen(false)\n handlers.setDate(value)\n }}\n />\n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst sortTabDates: SortTabDates = (dates, raceCode, currentDate) => {\n const datesForCode = dates?.[toFirstLetterUppercase(raceCode)] || []\n const datesForCodeMapped = datesForCode.map(date => ({ date, label: getDateLabel(date) }))\n\n if (!dayjs(currentDate).isYesterday()) {\n datesForCodeMapped.unshift({\n date: dayjs().subtract(1, 'day').format(LocalConstants.DateFormat),\n label: 'Yesterday',\n })\n datesForCodeMapped.sort((a, b) => (dayjs(a.date).isBefore(dayjs(b.date)) ? -1 : 1))\n }\n\n if (!datesForCode.includes(currentDate)) {\n const isDateSuppliedInOtherCodes = Object.values(dates || {})\n .flat()\n .includes(currentDate)\n\n if (isDateSuppliedInOtherCodes)\n datesForCodeMapped.push({ date: currentDate, label: getDateLabel(currentDate) })\n else datesForCodeMapped.unshift({ date: currentDate, label: getDateLabel(currentDate, true) })\n }\n\n return datesForCodeMapped\n}\n\nfunction getDateLabel(date: string, forceExplicitDate = false): string {\n if (dayjs(date).isToday()) return 'Today'\n if (dayjs(date).isTomorrow()) return 'Tomorrow'\n if (dayjs(date).isYesterday()) return 'Yesterday'\n\n if (\n forceExplicitDate ||\n dayjs(date).isBefore(dayjs()) ||\n dayjs(date).isAfter(dayjs().add(6, 'day'))\n ) {\n if (dayjs(date).year() !== dayjs().year()) return dayjs(date).format('ddd MMM Do YYYY')\n return dayjs(date).format('ddd MMM Do')\n }\n\n return dayjs(date).format('dddd')\n}\n\nconst toFirstLetterUppercase = (input: string): string =>\n input.charAt(0).toUpperCase() + input.slice(1)\n\n// ======\n// Styles\n// ======\n\nconst DateTabsWrapperStyled = styled('div')({\n display: 'flex',\n background: hexColors.white,\n borderBottom: '0.1rem solid ' + hexColors.veryLightGrey,\n minHeight: '5rem',\n\n '& > div:nth-of-type(1)': {\n flexShrink: 0,\n display: 'flex',\n borderRight: '0.1rem solid ' + hexColors.gainsboro,\n },\n\n '& > div:nth-of-type(2)': {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n\n overflowX: 'auto',\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n\n button: {\n position: 'relative',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '5rem',\n padding: '0 1rem',\n fontSize: LocalConstants.TabLabelSize,\n color: hexColors.nero,\n whiteSpace: 'nowrap',\n background: 'white',\n userSelect: 'none',\n border: 0,\n\n [`&.${LocalConstants.TabCalendarClass}`]: {\n width: '4rem',\n minWidth: '4rem',\n padding: 0,\n\n svg: {\n transition: 'transform ease 0.1s',\n\n [`&.${LocalConstants.TabCalendarOpenClass}`]: {\n transform: 'rotate(12deg) translateY(0.2rem)',\n color: colors.brand.primary,\n },\n },\n },\n\n [`&.${LocalConstants.TabActiveClass}`]: {\n color: colors.brand.primary,\n\n '&::after': {\n content: 'attr(data-label)',\n display: 'block',\n overflow: 'hidden',\n position: 'absolute',\n left: '50%',\n bottom: 0,\n transform: 'translateX(-50%)',\n width: 'auto',\n height: '0.5rem',\n fontSize: LocalConstants.TabLabelSize,\n background: colors.brand.primary,\n color: colors.brand.primary,\n borderRadius: '0.25rem',\n },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype DateTabNavProps = ReturnType\n\ntype SortTabDates = (\n dates: DateTabNavProps['data']['dates'],\n raceCode: DateTabNavProps['state']['raceCode'],\n currentDate: DateTabNavProps['state']['currentDate']\n) => { date: string; label: string }[]\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { useDispatch } from 'react-redux'\nimport { colors, hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { trackMeetingsRaceCodeToggle } from '@core/Areas/Meetings/analytics'\nimport type { useMeetingsData } from '@core/Areas/Meetings/hooks'\nimport { setMeetingsRaceCode } from '@core/Areas/Meetings/Store'\n\nconst enum LocalConstants {\n NavActiveClass = 'meetings__navigation--active',\n}\n\nexport const SecondaryCodeNavigation: React.FC<\n Pick, 'state'>\n> = ({ state }) => {\n const dispatch = useDispatch()\n const simplifiedDate = dayjs(state.currentDate).format('YYYY-MM-DD')\n\n const createRaceCodeToggle = (raceCode: RaceCodesLowerCase) => () => {\n trackMeetingsRaceCodeToggle({ raceCode })\n dispatch(setMeetingsRaceCode(raceCode))\n }\n\n return (\n \n
      \n \n \n \n\n \n \n \n\n \n \n \n
      \n\n
      \n \n Futures\n \n\n {state.raceCode === 'races' && (\n \n Jockey Challenge\n \n )}\n\n {state.raceCode === 'dogs' && (\n \n Greys Box Challenge\n \n )}\n
      \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst RaceCodeNavigationStyled = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n alignItems: 'center',\n minHeight: '5rem',\n overflowX: 'auto',\n\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n WebkitTapHighlightColor: 'transparent',\n\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n\n div: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n margin: '0 0.5rem',\n },\n\n 'div:first-of-type': {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n height: '3rem',\n marginRight: 0,\n background: hexColors.white,\n borderRadius: '2rem',\n border: `0.1rem solid ${hexColors.veryLightGrey}`,\n\n button: {\n border: 0,\n background: 'transparent',\n height: '3rem',\n minWidth: '6rem',\n borderRadius: '1.5rem',\n color: colors.brand.primary,\n\n [`&.${LocalConstants.NavActiveClass}`]: {\n background: colors.brand.primary,\n color: hexColors.white,\n },\n },\n },\n\n 'div:last-of-type': {\n height: '3rem',\n\n a: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 1rem',\n marginRight: '0.5rem',\n borderRadius: '1.5rem',\n border: `0.1rem solid ${hexColors.veryLightGrey}`,\n background: hexColors.white,\n whiteSpace: 'nowrap',\n fontSize: '1.3rem',\n textDecoration: 'none',\n lineHeight: 1,\n color: colors.brand.primary,\n },\n },\n})\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport * as QueryString from 'query-string'\nimport { useLocation } from 'react-router-dom'\nimport { dayjs } from '@mobi/utils'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { setMeetingsRaceCode } from '@core/Areas/Meetings/Store'\nimport { useMeetingsQuery } from '@core/Areas/Racing/Hooks/useMeetings/useMeetingsQuery'\n\nexport const useMeetingsData = () => {\n const dispatch = useDispatch()\n const { date: entryDate, code: entryCode } = QueryString.parse(useLocation().search) as {\n date: string\n code: RaceCodesLowerCase\n }\n const raceCode = useAppSelector(rootState => rootState.meetings.currentCodeTab)\n\n const [currentDate, setCurrentDate] = React.useState(() => cleanDate(entryDate))\n\n // Capture search params with code\n React.useEffect(() => {\n if (!entryCode) return\n dispatch(setMeetingsRaceCode(cleanRaceCode(entryCode)))\n window.history.replaceState('', document.title, '/#tote')\n }, [entryCode, dispatch])\n\n const { isLoading, isError, data, refetch } = useMeetingsQuery(currentDate)\n\n const meetingsData = data ? data[currentDate] : undefined\n\n const setDate = React.useCallback((date: Date | string) => setCurrentDate(cleanDate(date)), [])\n\n return {\n data: {\n isLoading,\n isError,\n refetch,\n dates: meetingsData?.dates,\n meetings: meetingsData?.meetings,\n fixedProducts: meetingsData?.fixedProducts,\n },\n handlers: {\n setDate,\n },\n state: {\n raceCode,\n currentDate,\n },\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst cleanDate = (date: string | Date): string =>\n !date || !dayjs(date).isValid()\n ? dayjs(Date.now()).utcOffset('+0800').format('YYYY-MM-DD')\n : dayjs(date).format('YYYY-MM-DD')\n\nconst cleanRaceCode = (code: RaceCodesLowerCase): RaceCodesLowerCase => {\n const validCodes: RaceCodesLowerCase[] = ['races', 'trots', 'dogs']\n return validCodes.includes(code?.toLowerCase() as unknown as RaceCodesLowerCase) ? code : 'races'\n}\n","import React from 'react'\nimport { Banner } from '@core/Components/Banner'\nimport { MainContainerStyled } from '@core/Components/Containers/MainContainer.styles'\nimport { MeetingsList, PrimaryDateNavigation, SecondaryCodeNavigation } from './Components'\nimport { useMeetingsData } from './hooks'\n\nexport const MeetingsPage: React.FC = () => {\n const { state, handlers, data } = useMeetingsData()\n\n return (\n \n \n\n \n \n\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const NextRaceFilterContainer = styled('div')({\n padding: '0.5rem 0.5rem 0.5rem 1rem',\n fontSize: '1.2rem',\n backgroundColor: colors.nextEvents.toggle.background,\n})\n\nexport const NextEventMeetingNameStyled = styled('div')({\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: '2.1rem',\n})\n\nexport const NextEventRaceTextStyled = styled('div')({\n fontSize: '1.4rem',\n lineHeight: '2.1rem',\n})\n\nexport const NextEventRaceDistanceStyled = styled('div')({\n color: colors.nextEvents.distance.text,\n display: 'inline-block',\n marginLeft: '0.5rem',\n})\n\ninterface NextEventCodeFilterButton {\n selected?: boolean\n}\n\nexport const NextEventCodeFilterButtonStyled = styled('button')(\n {\n fontSize: '1.2rem',\n fontFamily: 'inherit',\n height: '4rem',\n lineHeight: 1.5,\n position: 'relative',\n width: '100%',\n textAlign: 'center',\n padding: 0,\n margin: 0,\n },\n\n ({ selected }) => ({\n background: selected\n ? colors.nextEvents.toggle.selected.background\n : colors.nextEvents.toggle.unselected.background,\n color: selected\n ? colors.nextEvents.toggle.selected.text\n : colors.nextEvents.toggle.unselected.text,\n border: selected ? 'none' : `1px solid ${colors.nextEvents.toggle.unselected.border}`,\n })\n)\n","import React from 'react'\nimport { SkyTvBadge } from '@mobi/component-library/Racing/SkyTvIndicator'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ListItem } from '@core/Components/List'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { colors } from '@core/Settings'\nimport { useFeature } from '@core/Utils/hooks'\nimport { NextRace as NextRaceData } from '@core/Data/Racing/nextRaces'\nimport { isThoroughbredNextRaceInWA } from '@core/Areas/Racing/helpers/liveVideoFeedHelpers'\nimport { getVisionChannelForDisplay } from '@core/Areas/SkyVideoPlayer/helpers'\nimport { getNextRaceTimeDisplayOptions, buildToteRaceUri } from '@core/Areas/Racing/helpers'\nimport { TimeToJumpComponent } from '../TimeToJump/TimeToJump'\nimport {\n NextEventMeetingNameStyled,\n NextEventRaceTextStyled,\n NextEventRaceDistanceStyled,\n} from '../../NextRaces.styles'\n\nexport const IconTypes: Record = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport function NextRace({ race, keyValue }: { race: NextRaceData; keyValue: string }) {\n const isRacingWAFeatureActive = useFeature('RACING_WA_VISION_CHANNEL')\n\n const startDetails = getNextRaceTimeDisplayOptions(race.AdvertisedStartTime)\n\n const href = buildToteRaceUri({\n meetingId: race.MeetingID,\n raceNumber: race.RaceNumber,\n meetingDate: race.MeetingDate,\n })\n\n const shouldDisplayRacingWA = isRacingWAFeatureActive && isThoroughbredNextRaceInWA(race)\n\n return (\n \n \n \n \n \n \n \n \n \n {race.MeetingName}\n \n R{race.RaceNumber}{' '}\n {race.Distance}m\n \n \n \n {race.HasJackpot && }\n \n\n {race.SkyTvChannelId != null && (\n \n \n \n )}\n \n \n )\n}\n","import React from 'react'\n\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nimport { NextEventCodeFilterButtonStyled, NextRaceFilterContainer } from '../../NextRaces.styles'\nimport { NextEventsFilter } from '../../utils'\nimport { IconTypes } from '../NextRace/NextRace'\n\nexport const NextRacesFilter: React.FC<{\n filter: NextEventsFilter\n setFilter: (filter: NextEventsFilter) => void\n}> = ({ filter, setFilter }) => {\n return (\n \n \n \n \n Filter by:\n \n \n \n setFilter({\n ...filter,\n Races: !filter.Races,\n })\n }\n selected={filter.Races}\n aria-label='races'\n >\n \n \n \n\n \n \n setFilter({\n ...filter,\n Trots: !filter.Trots,\n })\n }\n selected={filter.Trots}\n aria-label='trots'\n >\n \n \n \n\n \n \n setFilter({\n ...filter,\n Dogs: !filter.Dogs,\n })\n }\n selected={filter.Dogs}\n aria-label='dogs'\n >\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { NextRaceLoading } from '../NextRaceLoading/NextRaceLoading'\nimport { MaxNumberOfRaces } from '../../utils'\nimport { Flex } from '@mobi/component-library/Common/Flex'\n\nexport function NextRacesLoading(): JSX.Element {\n const races = Array.apply(0, new Array(MaxNumberOfRaces)).map((_, i: number) => (\n \n ))\n\n return {races}\n}\n","import React from 'react'\nimport { isToteRacePushEvent, ToteRaceEventPushEvent } from 'tabtouch-push-contract'\n\nimport { ListUnstyled } from '@core/Components/List'\nimport { ErrorMessage, Message } from '@core/Components/Messages'\nimport { NextRace as NextRaceType } from '@core/Data/Racing/nextRaces'\nimport { event$ } from '@mobi/utils/awsiot'\n\nimport { NextRace } from './Components/NextRace/NextRace'\nimport { NextRacesFilter } from './Components/NextRacesFilter/NextRacesFilter'\nimport { NextRacesLoading } from './Components/NextRacesLoading/NextRaceLoading'\nimport {\n isToteRaceChangePushEvent,\n MaxNumberOfRaces,\n NextEventsFilter,\n nextEventsfilters,\n setNextEventFilters,\n useNextRaces,\n} from './utils'\n\nexport const NextRaces: React.FC = () => {\n const { isLoading, error, data, refetch } = useNextRaces()\n const [filter, setFilter] = React.useState(nextEventsfilters)\n\n const filterIsValid = (newFilter: NextEventsFilter) =>\n !Object.values(newFilter).every(x => x === false)\n\n React.useEffect(() => {\n return () => setNextEventFilters(filter)\n }, [filter])\n\n React.useEffect(() => {\n const iotSubscription = event$\n .filter(x => isToteRacePushEvent(x.payload))\n .filter(x => isToteRaceChangePushEvent((x.payload as ToteRaceEventPushEvent).status))\n .subscribe(() => {\n refetch()\n })\n\n return () => iotSubscription.dispose()\n }, [refetch])\n\n if (!data || isLoading) {\n return \n }\n\n if (error) {\n return Error loading next races.\n }\n\n const nextRaces = filterNextRaces(data, filter)\n if (nextRaces.length === 0) {\n return No next races.\n }\n\n return (\n <>\n filterIsValid(f) && setFilter(f)}\n />\n \n {nextRaces.map(race => {\n const keyValue = `${race.MeetingDate.toString().substr(0, 10)}_${race.MeetingID}_${\n race.RaceNumber\n }`\n return \n })}\n \n \n )\n}\n\nexport function filterNextRaces(\n nextRaces: NextRaceType[],\n filters: NextEventsFilter\n): NextRaceType[] {\n let races = nextRaces\n\n if (races instanceof Array) {\n races = races.filter(x => filters[x.RaceType] === true).slice(0, MaxNumberOfRaces)\n }\n\n return races\n}\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\n\nimport { NextRaces } from './NextRaces'\n\nexport const NextEventsPage = () => {\n return (\n \n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { ButtonBlockStyled, ButtonStyled } from '@mobi/component-library/Common/Buttons'\n\nexport const FavNumbersNavigationStyled = styled.ul({\n display: 'flex',\n justifyContent: 'center',\n height: '4rem',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n background: hexColors.nero,\n\n li: {\n margin: 0,\n\n a: {\n display: 'flex',\n alignItems: 'center',\n height: '4rem',\n padding: '0 1rem',\n color: hexColors.lightGrey,\n fontSize: '1.4rem',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n textDecoration: 'none',\n },\n\n '&[data-js-favnum-active=\"true\"] a': {\n backgroundColor: hexColors.charCoal,\n color: hexColors.white,\n },\n },\n})\n\nexport const HeaderStyled = styled.h3({\n color: hexColors.white,\n backgroundColor: hexColors.nightRider,\n margin: 0,\n})\n\nexport const NumberButtonsStyled = styled('div')({\n margin: '0 auto',\n maxWidth: '30em',\n clear: 'both',\n})\n\nexport const NumberButtonStyled = styled(ButtonStyled)({\n display: 'inline-block',\n width: '3.5em',\n minHeight: '3.5em',\n margin: '0.25em',\n textAlign: 'center',\n fontWeight: 'bold',\n fontSize: '1.5em',\n verticalAlign: 'top',\n border: '1px solid #cecece',\n})\n\nexport const PoolSelectionButtonStyled = styled(ButtonStyled)({\n width: '100%',\n marginTop: '1em',\n textAlign: 'left',\n textTransform: 'uppercase',\n fontSize: '1.4em',\n minHeight: '4rem',\n})\n\nexport const PoolSelectionColumn = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n width: '50%',\n padding: '1em',\n '& > button:nth-of-type(1)': {\n minHeight: '6em',\n },\n})\n\nexport const PoolGroupHeader = styled('div')({\n fontWeight: 'bold',\n textAlign: 'center',\n fontSize: '1.6em',\n})\n\nexport const ShowAllPoolsButton = styled(ButtonBlockStyled)({\n width: '14rem',\n})\n\nexport const FavouriteNumbersFlex = styled('div')({\n textAlign: 'center',\n display: 'flex',\n})\n\nexport const FavouriteNumbersSection = styled('div')({\n padding: '1em',\n textAlign: 'center',\n})\n\nexport const FavouriteNumbersPoolTotalStyled = styled('div')({\n alignItems: 'center',\n display: 'flex',\n fontWeight: 'normal',\n})\n\nexport const FavouriteNumbersDataTable = styled('div')({\n padding: '1em',\n})\n\nexport const FavouriteNumbersRow = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n width: '100%',\n textAlign: 'left',\n fontSize: '1.4em',\n marginBottom: '0.5em',\n borderBottom: '1px solid #eee',\n padding: '0.2em 0',\n '&:last-child': {\n border: 0,\n marginBottom: 0,\n },\n})\n\nexport const FavouriteNumbersColumn = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n flexBasis: '100%',\n flex: 1,\n})\n\nexport const Filler = styled('div')({\n minWidth: '0.8em',\n float: 'left',\n})\n\nexport const PotLuckNumbersStyled = styled('div')({\n margin: '0 auto',\n textAlign: 'center',\n maxWidth: '30em',\n padding: '1em',\n})\n\nexport const PotLuckNumbersButtonStyled = styled(ButtonStyled)({\n minHeight: '3em',\n margin: '0.5em',\n width: '9.4em',\n fontSize: '1.4em',\n})\n\nexport const PotLuckNumberButtonStyled = styled('div')({\n flexBasis: 'column',\n width: '20%',\n})\n\nexport const PotLuckNumberCostStyled = styled('div')({\n flexBasis: 'column',\n width: '80%',\n textAlign: 'right',\n fontWeight: 'normal',\n})\n\nexport const MyNumbersButtonStyled = styled(Button)({\n margin: '0 0.25em 0.5em',\n height: '4rem',\n float: 'right',\n})\n\nexport const SaveNumbersButtonStyled = styled(MyNumbersButtonStyled)({\n float: 'left',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { BaseButtonStyled } from '@mobi/component-library/Common/Buttons'\n\ninterface ButtonGroupButtonProps {\n selected: boolean\n disabled?: boolean\n}\n\nexport const ButtonGroupStyled = styled('div')({\n display: 'flex',\n '& > button:not(:last-of-type)': {\n marginRight: '0.25rem',\n },\n '& > button:first-of-type': {\n borderRadius: '0.5rem 0 0 0.5rem',\n },\n '& > button:last-of-type': {\n borderRadius: '0px 0.5rem 0.5rem 0',\n },\n})\n\nexport const ButtonGroupItemStyled = styled(BaseButtonStyled)(\n {\n flex: '1',\n height: '4rem',\n },\n\n ({ selected, disabled }) => ({\n background: selected && !disabled ? hexColors.charCoal : hexColors.white,\n color: selected && !disabled ? hexColors.white : hexColors.grey,\n border:\n selected && !disabled ? `1px solid transparent` : `1px solid ${hexColors.veryLightGrey}`,\n }),\n\n ({ disabled }) =>\n disabled && {\n opacity: 0.3,\n }\n)\n","import { attachDriver, createSignal, Signal } from 'rwwa-rx-state-machine'\nimport { setInLocalStorage, getFromLocalStorage, removeFromLocalStorage } from '@mobi/utils/storage'\nimport { StateMap } from 'typings/immutable'\nimport { fromJS } from 'immutable'\n\nconst LOCAL_STOREAGE_KEY = 'savedFavouriteNumbers'\n\ninterface SaveFavouriteNumbersProps {\n numbers: number[]\n game: number\n}\n\nexport const SaveFavouriteNumbers = createSignal('SaveFavouriteNumbers')\n\ninterface SavedFavouriteNumbers {\n gameOne: number[]\n gameTwo: number[]\n}\n\nconst defaultState: SavedFavouriteNumbers = {\n gameOne: [],\n gameTwo: [],\n}\n\ntype SavedFavouriteNumbersStateMap = StateMap\n\nfunction driver(\n state = fromJS(FromLocalStorage()) || fromJS(defaultState),\n signal: Signal\n): SavedFavouriteNumbersStateMap {\n switch (signal.tag) {\n case SaveFavouriteNumbers: {\n const theState =\n signal.data.game == 1\n ? state.merge({ gameOne: signal.data.numbers })\n : state.merge({ gameTwo: signal.data.numbers })\n toLocalStorage(theState)\n return theState\n }\n }\n return state\n}\n\nexport const state$ = attachDriver({\n driver,\n path: `saved-favourite-numbers`,\n}).map(s => s.toJS())\n\nfunction toLocalStorage(state: SavedFavouriteNumbers): void {\n //any errors are caught from stream-driver.js - compositeDriver() during driver reduce\n setInLocalStorage(LOCAL_STOREAGE_KEY, JSON.stringify(state))\n}\n\nfunction FromLocalStorage(): SavedFavouriteNumbers | null {\n //any errors are caught from stream-driver.js - compositeDriver() during driver reduce\n const payloadString = getFromLocalStorage(LOCAL_STOREAGE_KEY)\n if (!payloadString) return null\n try {\n const payloadObj = JSON.parse(payloadString)\n if (!payloadObj) return null\n return payloadObj\n } catch {\n removeFromLocalStorage(LOCAL_STOREAGE_KEY)\n return null\n }\n}\n","import React, { useState } from 'react'\nimport {\n ButtonGroupItemStyled,\n ButtonGroupStyled,\n} from '@core/Components/Buttons/ButtonGroup.styles'\nimport {\n NumberButtonsStyled,\n NumberButtonStyled,\n FavouriteNumbersSection,\n MyNumbersButtonStyled,\n SaveNumbersButtonStyled,\n} from './FavouriteNumbers.styles'\nimport { LoadNumbers, state$, ToggleGameNumber } from './driver'\nimport { SaveFavouriteNumbers, state$ as savedState$ } from './savedFavouriteNumbers'\nimport { useObservableProperties } from '@core/Utils/hooks'\n\nexport function NumberSelection(): JSX.Element | null {\n const [game, setGame] = useState(1)\n\n const { gameOne, gameTwo } = useObservableProperties(state$, ['gameOne', 'gameTwo'], {\n gameOne: [],\n gameTwo: [],\n })\n\n const favourites = useObservableProperties(savedState$, ['gameOne', 'gameTwo'], {\n gameOne: [],\n gameTwo: [],\n })\n\n const selectedNumbers = game === 1 ? gameOne : gameTwo\n const usingSavedNumbers =\n (game == 1 && favourites.gameOne.length > 0 && gameOne.join() == favourites.gameOne.join()) ||\n (game == 2 && favourites.gameTwo.length > 0 && gameTwo.join() == favourites.gameTwo.join())\n\n const showMyNumbersButton =\n (game == 1 && favourites.gameOne.length > 0) || (game == 2 && favourites.gameTwo.length > 0)\n\n const isSaveButtonDisabled = selectedNumbers.length === 0 && !showMyNumbersButton\n const isDeleteButtonAvailable = selectedNumbers.length === 0 && showMyNumbersButton\n\n return (\n \n \n {\n setGame(1)\n }}\n selected={game === 1}\n {...{ 'data-tid-game1button': '' }}\n >\n GAME 1\n \n {\n setGame(2)\n }}\n selected={game === 2}\n {...{ 'data-tid-game2button': '' }}\n >\n GAME 2 (OPTIONAL)\n \n \n

      Select between 7 & 16 numbers

      \n \n SaveFavouriteNumbers({ numbers: selectedNumbers, game: game })}\n disabled={isSaveButtonDisabled}\n >\n {isDeleteButtonAvailable ? 'Delete Saved No.s' : 'Save My Numbers'}\n \n {showMyNumbersButton && (\n \n LoadNumbers({\n numbers: !usingSavedNumbers\n ? game == 1\n ? favourites.gameOne\n : favourites.gameTwo\n : [],\n game: game,\n })\n }\n >\n Use My Saved Numbers\n \n )}\n {\n ToggleGameNumber({ game: game, number: number })\n }}\n />\n \n
      \n )\n}\n\nexport function NumberButtons({\n numbers,\n selectedNumbers,\n onClickHandler,\n}: {\n numbers: number\n selectedNumbers: readonly number[]\n onClickHandler: (number: number) => void\n}): JSX.Element | null {\n return (\n \n {Array(numbers)\n .fill('')\n .map((x, i) => {\n const number = ++i\n const isSelected = selectedNumbers.indexOf(number) >= 0\n const testId = { 'data-tid-number-button': number }\n return (\n onClickHandler(number)}\n >\n {number}\n \n )\n })}\n \n )\n}\n","import { Icon } from '@mobi/component-library/Common/Icon'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { Money } from '@core/Components/Text/Money'\nimport React, { useEffect, useState } from 'react'\nimport { isErrored, isLoading } from 'rwwa-data-access/dist/data-access'\nimport {\n FavouriteNumberBettingPool,\n FavouriteNumbersPools,\n UpcomingPoolsKey,\n} from '@core/Data/favouriteNumbers'\nimport {\n PoolSelectionButtonStyled,\n PoolSelectionColumn,\n PoolGroupHeader,\n FavouriteNumbersPoolTotalStyled,\n ShowAllPoolsButton,\n FavouriteNumbersFlex,\n FavouriteNumbersSection,\n FavouriteNumbersColumn,\n FavouriteNumbersRow,\n FavouriteNumbersDataTable,\n} from './FavouriteNumbers.styles'\nimport { DeselectPool, SetShowAll, state$, TogglePool } from './driver'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { useObservableProperties, useDataAccess } from '@core/Utils/hooks'\nimport dayjs from 'dayjs'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\ninterface PoolSelectionProps {\n weekendPools: FavouriteNumberBettingPool[]\n midweekPools: FavouriteNumberBettingPool[]\n selectedPoolDates: Date[]\n showAll: boolean\n}\n\nexport function PoolSelection(): JSX.Element | null {\n const { pools: selectedPoolDates, showAllPools: showAll } = useObservableProperties(\n state$,\n ['pools', 'showAllPools'],\n { pools: [], showAllPools: false }\n )\n\n const state = useDataAccess(FavouriteNumbersPools, UpcomingPoolsKey)\n\n if (isLoading(state.data)) {\n return \n }\n\n if (isErrored(state.data)) {\n return Unable to load Favourite Number Pools\n }\n\n const pools = [...state.data.weekendPools, ...state.data.midweekPools].map(x => x.poolDate)\n selectedPoolDates.forEach(selectedPoolDate => {\n if (pools.indexOf(selectedPoolDate) < 0) {\n DeselectPool({ pool: selectedPoolDate })\n }\n })\n\n return (\n \n )\n}\n\nfunction PoolSelectionComponent({\n weekendPools,\n midweekPools,\n selectedPoolDates,\n showAll,\n}: PoolSelectionProps): JSX.Element | null {\n const [hasPools, setHasPools] = useState(false)\n useEffect(() => {\n const hasPools = weekendPools.length > 0 || midweekPools.length > 0\n // default pools (if none selected)\n if (hasPools && selectedPoolDates.length === 0) {\n if (weekendPools.length > 0) {\n TogglePool({ pool: weekendPools[0].poolDate })\n } else if (midweekPools.length > 0) {\n TogglePool({ pool: midweekPools[0].poolDate })\n }\n }\n setHasPools(hasPools)\n }, [selectedPoolDates, selectedPoolDates.length, midweekPools, weekendPools])\n\n const toggleShowAll = () => {\n SetShowAll(!showAll)\n }\n\n let earliestSelectedPool: FavouriteNumberBettingPool | undefined\n if (selectedPoolDates.length > 0) {\n const earliestPoolDate = selectedPoolDates[0]\n earliestSelectedPool = [...weekendPools, ...midweekPools].find(\n pool => pool.poolDate === earliestPoolDate\n )\n }\n\n const expectedCloseTime = `${dayjs(earliestSelectedPool?.expectedCloseTime).format(\n 'DD/MM/YYYY'\n )} at ${dayjs(earliestSelectedPool?.expectedCloseTime).format('HH:mm')}`\n\n const earliestUpdateTime = dayjs(earliestSelectedPool?.lastUpdated).format('DD/MM/YYYY HH:mm')\n\n return (\n <>\n {!hasPools && }\n {hasPools && (\n \n \n \n SATURDAY\n {PoolButtons(weekendPools, showAll, selectedPoolDates, 'weekend')}\n \n \n MIDWEEK\n {PoolButtons(midweekPools, showAll, selectedPoolDates, 'midweek')}\n \n \n {!showAll && (weekendPools.length > 1 || midweekPools.length > 1) && (\n \n SHOW ALL POOLS\n \n )}\n \n \n \n 1st selected pool closes\n \n {earliestSelectedPool && (\n \n {expectedCloseTime}\n \n )}\n \n \n \n Updated at\n \n {earliestSelectedPool && (\n \n {earliestUpdateTime}\n \n )}\n \n \n \n )}\n \n )\n}\n\nfunction NoPools(): JSX.Element {\n return (\n
      \n )\n}\n\nfunction PoolSelectionButton({\n pool,\n isSelected,\n showPoolTotal,\n}: {\n pool: FavouriteNumberBettingPool\n isSelected: boolean\n showPoolTotal: boolean\n}): JSX.Element {\n return (\n {\n TogglePool({ pool: pool.poolDate })\n }}\n >\n {dayjs(pool.poolDate).format('DD MMM YYYY')}\n {showPoolTotal && (\n
      \n {\n \n \n \n }\n {pool.hasJackpot && (\n \n \n \n \n )}\n
      \n )}\n \n )\n}\n\nfunction PoolButtons(\n pools: readonly FavouriteNumberBettingPool[],\n showAll: boolean,\n selectedPools: readonly Date[],\n poolType: 'midweek' | 'weekend'\n): React.ReactNode {\n return pools\n .filter((p, i) => i == 0 || showAll)\n .map((pool, index) => {\n return (\n = 0}\n showPoolTotal={index === 0}\n />\n )\n })\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport type { FavouriteNumbersSelection } from '@mobi/betslip/types'\nimport { hasLoadedWithoutError } from 'rwwa-data-access'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { state$, defaultState } from './driver'\nimport { useObservable, useDataAccess } from '@core/Utils/hooks'\nimport {\n FavouriteNumbersPools,\n UpcomingPoolsKey,\n FavouriteNumberBettingPool,\n} from '@core/Data/favouriteNumbers'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nexport const FavouriteNumbersBettingDrawer = ({ open }: { open: boolean }): JSX.Element => {\n const { gameOne, gameTwo, pools, potLuckBets } = useObservable(state$, defaultState)\n const data = useDataAccess(FavouriteNumbersPools, UpcomingPoolsKey)\n\n const onQuickbetClick = (): void => {\n if (hasLoadedWithoutError(data.data)) {\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: createFavouriteNumberSelection(gameOne, gameTwo, pools, potLuckBets, [\n ...data.data.midweekPools,\n ...data.data.weekendPools,\n ]),\n })\n }\n }\n\n return \n}\n\n// =============\n// Local Helpers\n// =============\n\nconst createFavouriteNumberSelection = (\n gameOne: number[],\n gameTwo: number[],\n pools: Date[],\n numberOfBets: number,\n poolDetails: FavouriteNumberBettingPool[]\n): QuickbetSelection => {\n const bets: FavouriteNumbersSelection['bets'] = []\n const selectedPoolDetails: FavouriteNumberBettingPool[] = []\n\n for (const pool of pools) {\n for (let betNumber = 1; betNumber <= numberOfBets; betNumber++) {\n const foundPoolDetails = poolDetails.find(p => p.poolDate === pool)\n if (foundPoolDetails) {\n selectedPoolDetails.push(foundPoolDetails)\n bets.push({\n fixtureDate: dayjs(pool).format('YYYY-MM-DD'),\n game1Selections: gameOne,\n game2Selections: gameTwo,\n })\n }\n }\n }\n\n return {\n bettingType: 'favourite-numbers',\n selection: { bets },\n selectionDetails: { pools: selectedPoolDetails },\n presetInvestment: true,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment: false,\n promptForInvestment: false,\n }\n}\n","import { Money } from '@core/Components/Text/Money'\nimport React from 'react'\nimport { defaultState, state$, FavouriteNumbersBettingState } from './driver'\nimport {\n FavouriteNumbersColumn,\n FavouriteNumbersDataTable,\n FavouriteNumbersRow,\n FavouriteNumbersSection,\n Filler,\n} from './FavouriteNumbers.styles'\nimport { useObservable } from '@core/Utils/hooks/useObservable'\nimport { calculateEasyBetCost, calculatePotLuckCost, costCalculator } from './calculator'\nimport { FavouriteNumbersBettingDrawer } from './FavouriteNumbersBettingDrawer'\nimport styled from '@emotion/styled'\n\nconst EmptyBettingDrawerStyled = styled('div')({\n height: '8rem',\n})\ninterface FavouriteNumbersBetSummaryProps {\n mode: 'easyBet' | 'potLuck'\n}\n\nfunction isGameSelectionValid(numberOfSelections: number): boolean {\n return numberOfSelections >= 7 && numberOfSelections <= 16\n}\n\nexport function isEasyBetValid(\n gameOneSelections: number,\n gameTwoSelections: number,\n poolSelections: number\n): boolean {\n return (\n poolSelections > 0 &&\n isGameSelectionValid(gameOneSelections) &&\n (isGameSelectionValid(gameTwoSelections) || gameTwoSelections == 0)\n )\n}\n\nfunction isPotLuckBetValid(potLuckNumbers: number, potLuckBets: number, numberOfPools: number) {\n return potLuckNumbers > 0 && potLuckBets > 0 && numberOfPools > 0\n}\n\nexport function FavouriteNumbersBetSummary({\n mode,\n}: FavouriteNumbersBetSummaryProps): JSX.Element | null {\n const { gameOne, gameTwo, pools, potLuckBets } = useObservable(state$, defaultState)\n\n return (\n \n )\n}\n\nfunction FavouriteNumbersBetSummaryComponent({\n gameOne,\n gameTwo,\n pools,\n potLuckBets,\n mode,\n}: Pick &\n FavouriteNumbersBetSummaryProps): JSX.Element {\n const gameOneNumbers = Math.min(gameOne.length, 16)\n const gameTwoNumbers = Math.min(gameTwo.length, 16)\n const numberOfPools = pools.length\n const potLuckNumbers = gameOne[0] ?? 0\n const betCost =\n mode === 'easyBet'\n ? calculateEasyBetCost(gameOneNumbers, gameTwoNumbers, numberOfPools)\n : calculatePotLuckCost(potLuckNumbers, potLuckBets, numberOfPools)\n const isValidBet =\n mode === 'easyBet'\n ? isEasyBetValid(gameOne.length, gameTwo.length, numberOfPools)\n : isPotLuckBetValid(potLuckNumbers, potLuckBets, numberOfPools)\n\n return (\n \n \n {mode == 'easyBet' && (\n \n \n Game 1 - {gameOneNumbers} numbers\n \n \n \n  \n \n \n \n \n )}\n {mode == 'easyBet' && (\n \n \n Game 2 - {gameTwoNumbers} numbers\n \n \n \n +\n \n \n \n \n )}\n {mode == 'potLuck' && (\n \n \n {potLuckNumbers} numbers\n \n \n \n  \n \n \n \n \n )}\n \n \n Number of pool dates\n \n \n \n x {numberOfPools}\n \n \n \n {mode == 'potLuck' && (\n \n \n Number of bets\n \n \n \n x {potLuckBets}\n \n \n \n )}\n \n Bet cost\n \n \n  \n \n \n \n \n \n \n {isValidBet && }\n \n )\n}\n","import { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { FavouriteNumbersPools, UpcomingPoolsKey } from '@core/Data/favouriteNumbers'\nimport { useDataAccess } from '@core/Utils/hooks'\nimport React from 'react'\nimport { isLoading } from 'rwwa-data-access'\nimport { HeaderStyled } from './FavouriteNumbers.styles'\n\nexport function HeaderWithLoadingIndicator({ title }: { title: string }): JSX.Element {\n const state = useDataAccess(FavouriteNumbersPools, UpcomingPoolsKey)\n\n return (\n
      \n {isLoading(state.data) && }\n {!isLoading(state.data) && {title}}\n
      \n )\n}\n","import React from 'react'\nimport { HeaderStyled } from './FavouriteNumbers.styles'\nimport { NumberSelection } from './NumberSelection'\nimport { PoolSelection } from './PoolSelection'\nimport { FavouriteNumbersBetSummary } from './FavouriteNumbersBetSummary'\nimport { ClearSelections } from './driver'\nimport { HeaderWithLoadingIndicator } from './HeaderWithLoader'\n\nexport const EasyBetTab = (): JSX.Element => {\n React.useEffect(() => {\n return ClearSelections\n })\n\n return (\n
      \n \n \n SELECT POOL DATES\n \n BET SUMMARY\n \n
      \n )\n}\n","import React from 'react'\nimport {\n HeaderStyled,\n PotLuckNumbersButtonStyled,\n FavouriteNumbersFlex,\n PotLuckNumberButtonStyled,\n PotLuckNumberCostStyled,\n PotLuckNumbersStyled,\n FavouriteNumbersSection,\n} from './FavouriteNumbers.styles'\nimport { PoolSelection } from './PoolSelection'\nimport { ClearSelections, state$, SetNumberOfBets, SetPotLuckNumbers } from './driver'\nimport { NumberButtons } from './NumberSelection'\nimport { useObservableProperties } from '@core/Utils/hooks/useObservable'\nimport { FavouriteNumbersBetSummary } from './FavouriteNumbersBetSummary'\nimport { Money } from '@core/Components/Text/Money'\nimport { ComboLookup, costCalculator } from './calculator'\nimport { HeaderWithLoadingIndicator } from './HeaderWithLoader'\n\nexport const PotLuckTab = (): JSX.Element => {\n React.useEffect(() => {\n return ClearSelections\n })\n\n return (\n
      \n \n \n SELECT POOL DATES\n \n NUMBER OF BETS\n \n BET SUMMARY\n \n
      \n )\n}\n\nconst NumberOfBets = (): JSX.Element => {\n const { potLuckBets } = useObservableProperties(state$, ['potLuckBets'], {\n potLuckBets: 1,\n })\n\n return (\n \n {\n SetNumberOfBets(number)\n }}\n />\n \n )\n}\n\nconst PotLuckNumbers = (): JSX.Element => {\n const { gameOne } = useObservableProperties(state$, ['gameOne'], {\n gameOne: [],\n })\n\n React.useEffect(() => {\n if (gameOne.length === 0) {\n SetPotLuckNumbers(7)\n }\n }, [gameOne, gameOne.length])\n\n return (\n \n {Object.keys(ComboLookup).map(key => {\n const numbers = Number.parseInt(key)\n const isSelected = gameOne.length > 0 && gameOne[0] === numbers\n return (\n SetPotLuckNumbers(numbers)}\n color={isSelected ? 'dark' : 'secondary'}\n >\n \n {numbers}\n \n \n \n \n \n )\n })}\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const NumberResultsTabStyled = styled('div')({\n marginTop: '1rem',\n background: '#fff',\n height: '77rem',\n})\n\nexport const PrevButtonStyled = styled('div')<{ isPreviousAvailable: boolean }>(\n {\n backgroundColor: '#689f38',\n width: '8.5rem',\n left: '1rem',\n margin: '0 0.5rem',\n },\n ({ isPreviousAvailable }) => ({\n backgroundColor: isPreviousAvailable ? '#689f38' : '#ccc',\n color: isPreviousAvailable ? '#fff' : '#eee',\n })\n)\n\nexport const NextButtonStyled = styled('div')<{ isNextAvailable: boolean }>(\n {\n backgroundColor: '#689f38',\n width: '8.5rem',\n margin: '0 0.5rem',\n },\n ({ isNextAvailable }) => ({\n backgroundColor: isNextAvailable ? '#689f38' : '#ccc',\n color: isNextAvailable ? '#fff' : '#eee',\n })\n)\n\nexport const DateComponentStyled = styled('div')({\n color: '#000',\n fontWeight: 'bold',\n width: '13rem',\n backgroundColor: '#ccc',\n})\n\nexport const NavComponentStyled = styled('div')({\n display: 'flex',\n width: '100%',\n height: '4rem',\n fontSize: '1.4rem',\n color: '#fff',\n lineHeight: '4rem',\n textAlign: 'center',\n justifyContent: 'center',\n marginBottom: '2rem',\n})\n\nexport const PoolInfoComponentStyled = styled('div')({\n margin: '1rem 0',\n fontSize: '1.4rem',\n lineHeight: '3rem',\n})\n\nexport const PoolInfoLineStyled = styled('div')({\n borderTop: '1px solid #eee',\n display: 'flex',\n})\n\nexport const PoolInfoLineLeftStyled = styled('div')({\n marginLeft: '2rem',\n width: '40%',\n})\n\nexport const PoolInfoLineRightStyled = styled('div')({\n display: 'flex',\n width: '60%',\n})\nexport const JackpotStyled = styled('span')({\n marginLeft: '1rem',\n display: 'flex',\n alignItems: 'center',\n})\n\nexport const DetailtextStyled = styled('div')({\n margin: '0',\n textAlign: 'center',\n fontSize: '1.4rem',\n})\n\ninterface ResultButtonStyledProps {\n isLive: boolean\n isWinner: boolean\n}\n\nexport const ResultButtonStyled = styled('li')(\n {\n margin: '0.6rem',\n textAlign: 'center',\n border: '1px solid #cecece',\n width: '5rem',\n minHeight: '5rem',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n lineHeight: '1.4rem',\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'center',\n boxSizing: 'border-box',\n },\n ({ isLive, isWinner }) => ({\n backgroundColor: isLive ? '#e9e9e9' : isWinner ? '#689f38' : '#cc0404',\n border: isWinner ? '0.5rem solid #680202' : '1px solid #cecece',\n color: isLive ? '#000' : '#fff',\n })\n)\n\nexport const OrderStyled = styled('div')({\n margin: '0',\n})\n\nexport const RaceStyled = styled('div')({\n margin: '0',\n})\n\nexport const SubStyled = styled('div')({\n margin: '0',\n})\n\nexport const ResultLegendComponentStyled = styled('div')({\n width: '31rem',\n margin: '1rem 0rem',\n border: '1px solid #cecece',\n boxSizing: 'border-box',\n display: 'flex',\n padding: '1rem',\n backgroundColor: '#F4F4F4',\n})\n\nexport const ResultTitleStyled = styled('div')({\n fontSize: '1.6rem',\n margin: '2rem',\n fontWeight: 'bold',\n})\n\nexport const ResultLiStyled = styled('div')({\n textAlign: 'center',\n fontWeight: 'bold',\n})\n\nexport const FavnumberResultListStyled = styled('div')({\n width: '31rem',\n margin: '1rem 0rem',\n padding: '0rem',\n listStyle: 'none',\n display: 'flex',\n flexWrap: 'wrap',\n})\n\nexport const ResultsStyled = styled('div')({\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n})\n","import { declareResourceType, IKeyMap } from 'rwwa-data-access'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\n\ninterface FavouriteNumberPool {\n carryover: string\n dividendPayable: string\n isNextAvailable: boolean\n isPreviousAvailable: boolean\n jackpotAmount: string\n legs: Leg[]\n numbersRequired: string\n poolDate: string\n poolResultDisplayDate: string\n poolResultDisplayDateTitle: string\n poolTotal: string\n winningEntries: number\n}\n\ninterface Leg {\n race: string\n isLive: boolean\n isWinner: boolean\n isSub: boolean\n}\n\nexport const FavouriteNumberPoolResults = declareResourceType<\n FavouriteNumberPool,\n FavouriteNumberPool\n>({\n fetchSingle,\n typeKey: 'poolResults',\n maxToKeep: 10,\n softTimeToLive: 120000,\n})\n\nasync function fetchSingle(key: string): Promise>> {\n let action = ''\n let body = {}\n const splitKey = key.split('|')\n if (splitKey.length == 2) {\n action = splitKey[0] == 'prev' ? 'prev-pool' : 'next-pool'\n body = splitKey[1]\n } else {\n action = 'current-pool'\n }\n\n const data = await apiService.post({\n url: `/api/favourite-numbers/${action}`,\n body: body,\n })\n\n return { poolResults: { [key]: data } }\n}\n","import { Icon } from '@mobi/component-library/Common/Icon'\nimport React from 'react'\nimport { HeaderStyled } from './FavouriteNumbers.styles'\nimport {\n DateComponentStyled,\n DetailtextStyled,\n FavnumberResultListStyled,\n JackpotStyled,\n NavComponentStyled,\n NextButtonStyled,\n NumberResultsTabStyled,\n OrderStyled,\n PoolInfoComponentStyled,\n PoolInfoLineLeftStyled,\n PoolInfoLineRightStyled,\n PoolInfoLineStyled,\n PrevButtonStyled,\n RaceStyled,\n ResultButtonStyled,\n ResultLegendComponentStyled,\n ResultLiStyled,\n ResultsStyled,\n ResultTitleStyled,\n SubStyled,\n} from './NumberResultsTab.styles'\nimport { Leg } from './NumberResultsPools'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { useDataAccess } from '@core/Utils/hooks/useDataAccess'\nimport { FavouriteNumberPoolResults } from '@core/Data/favouriteNumbersResults'\nimport { isErrored, isLoading } from 'rwwa-data-access/dist/data-access'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { SetResultKey } from './driver'\nimport { state$ } from './driver'\nimport { useObservableProperties } from '@core/Utils/hooks/useObservable'\n\nexport const NumberResultsTab = () => {\n const { resultKey } = useObservableProperties(state$, ['resultKey'], {\n resultKey: 'current',\n })\n const state = useDataAccess(FavouriteNumberPoolResults, resultKey)\n\n if (isErrored(state.data)) {\n return Unable to retrieve results\n }\n\n if (isLoading(state.data)) {\n return (\n
      \n \n
      \n )\n }\n\n const currentPool = state.data\n const isNextAvailable = currentPool.isNextAvailable\n const isPreviousAvailable = currentPool.isPreviousAvailable\n\n const handletPreviousButtonClick = () => {\n if (currentPool.isPreviousAvailable) {\n SetResultKey(`prev|${currentPool.poolDate}`)\n }\n }\n\n const handleNextButtonClick = () => {\n if (currentPool.isNextAvailable) {\n SetResultKey(`next|${currentPool.poolDate}`)\n }\n }\n\n if (!currentPool) {\n return null\n }\n const isNumberAllocated = !!currentPool.legs\n\n return (\n \n \n \n POOL INFO\n \n \n \n NUMBERS AND RESULTS\n \n {isNumberAllocated && (\n <>\n \n \n \n \n \n \n )}\n {!isNumberAllocated && (\n
      \n \n
      \n )}\n
      \n )\n}\n\ninterface ResultDetailsProps {\n requiredNumber: string\n dividendPayable: string\n carryover: string\n winningEntries: number\n}\n\nfunction ResultDetails({\n requiredNumber,\n dividendPayable,\n carryover,\n winningEntries,\n}: ResultDetailsProps) {\n let winningEntriesText = 'There are no winning entries.'\n\n if (winningEntries == 1) {\n winningEntriesText = 'There is 1 winning entry.'\n } else if (winningEntries > 1) {\n winningEntriesText = `There are ${winningEntries.toLocaleString()} winning entries.`\n }\n\n const showDividendPayable = dividendPayable && dividendPayable.length > 0 && requiredNumber\n\n return (\n <>\n {showDividendPayable && (\n \n {requiredNumber} numbers required for a dividend of {dividendPayable}.\n \n )}\n {carryover && (\n \n There is a carryover of {carryover}.\n \n )}\n {showDividendPayable && (\n \n {winningEntriesText}\n \n )}{' '}\n \n )\n}\n\nfunction FavnumberResultList({ legs }: { legs: Leg[] }) {\n const resultBoxList = legs.map((data, index) => {\n return (\n \n )\n })\n return {resultBoxList}\n}\n\ninterface ResultButtonProps {\n order: number\n race: string\n isLive: boolean\n isWinner: boolean\n isSub: boolean\n}\n\nfunction ResultLegendComponent() {\n return (\n \n Legend\n
        \n \n \n Won\n \n \n \n Lost\n \n \n \n Live\n \n
      \n
      \n )\n}\n\nfunction ResultButton({ order, race, isLive, isWinner, isSub }: ResultButtonProps): JSX.Element {\n return (\n \n {order}\n {race}\n {isSub && (SUB)}\n \n )\n}\n\nfunction NavComponent({\n isPreviousAvailable,\n isNextAvailable,\n poolDate,\n handletPreviousButtonClick,\n handleNextButtonClick,\n}: {\n isPreviousAvailable: boolean\n isNextAvailable: boolean\n poolDate: string\n handletPreviousButtonClick: () => void\n handleNextButtonClick: () => void\n}) {\n return (\n \n \n {'< '}PREV\n \n {poolDate}\n \n NEXT{' >'}\n \n \n )\n}\n\ninterface PoolInfoComponentProps {\n poolTotal: string\n poolResultDisplayDateTitle: string\n poolResultDisplayDate: string\n jackpotAmount: string\n}\n\nfunction PoolInfoComponent({\n poolTotal,\n poolResultDisplayDateTitle,\n poolResultDisplayDate,\n jackpotAmount,\n}: PoolInfoComponentProps) {\n return (\n \n \n \n Pool Total\n \n \n {poolTotal}\n {jackpotAmount && (\n \n \n {jackpotAmount}\n \n )}\n \n \n \n \n {poolResultDisplayDateTitle}\n \n \n {poolResultDisplayDate}\n \n \n \n )\n}\n","import React, { useState } from 'react'\nimport * as QueryString from 'query-string'\nimport { useLocation } from 'react-router-dom'\nimport type { State } from 'rwwa-data-access'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { EasyBetTab } from './EasyBet'\nimport { PotLuckTab } from './PotLuck'\nimport { NumberResultsTab } from './NumberResultsTab'\nimport {\n FavouriteNumbersPools,\n UpcomingFavouriteNumberPools,\n UpcomingPoolsKey,\n} from '@core/Data/favouriteNumbers'\nimport { FavouriteNumberPoolResults } from '@core/Data/favouriteNumbersResults'\nimport { useObservableProperties } from '@core/Utils/hooks/useObservable'\nimport { FavNumbersNavigationStyled } from './FavouriteNumbers.styles'\nimport { state$ } from './driver'\n\ntype Selection = 'easyBet' | 'potLuck' | 'numberResults'\n\nconst useQuery = () => QueryString.parse(useLocation().search)\n\nconst SelectedTab = (selection: Selection) => {\n switch (selection) {\n case 'numberResults':\n return \n case 'potLuck':\n return \n default:\n return \n }\n}\n\nexport const FavouriteNumbersPage = (): JSX.Element => {\n const { code = 'easyBet' }: { code: Selection } = useQuery()\n\n const [selection, setSelection] = useState(code)\n const { resultKey } = useObservableProperties(state$, ['resultKey'], {\n resultKey: 'current',\n })\n\n const onEasyBetSelection = () => {\n setSelection('easyBet')\n }\n\n const onPotLuckTabSelection = () => {\n setSelection('potLuck')\n }\n\n const onNumberResultsTabSelection = () => {\n setSelection('numberResults')\n }\n\n const doRefresh = () => {\n const repo = selection === 'numberResults' ? FavouriteNumberPoolResults : FavouriteNumbersPools\n const key = selection === 'numberResults' ? resultKey : UpcomingPoolsKey\n repo.hardInvalidate(null as unknown as State, key)\n }\n\n return (\n \n \n \n
    • \n \n Easy Bet\n \n
    • \n
    • \n \n Pot Luck\n \n
    • \n
    • \n \n NO.S & Results\n \n
    • \n
      \n {SelectedTab(selection)}\n
      \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst playerIcons: Record = {\n close: 'SolidXClose',\n docked: 'SolidScale02',\n exitfullscreen: 'LineMinimize02',\n floating: 'CustomScale02',\n fullscreen: 'LineMaximize02',\n mute: 'LineVolumeX',\n play: 'SolidPlayCircle',\n volume: 'LineVolumeMax',\n replay: 'SolidRefreshCw01',\n pause: 'SolidPauseCircle',\n back15: 'SolidSkipBack15',\n forward15: 'SolidSkipForward15',\n}\n\nexport const PlayerButton: React.FC<{ type: ButtonTypes; onClick: () => void }> = ({\n type,\n onClick,\n}) => (\n {\n e.stopPropagation()\n onClick()\n }}\n >\n \n \n)\n\nexport const ResizeIcon = () => (\n \n \n \n)\n\n// ======\n// Styles\n// ======\n\nexport const PlayerControlButtonStyled = styled.button({\n zIndex: 2,\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '3.6rem',\n width: '3.6rem',\n padding: 0,\n border: 0,\n borderRadius: radius.md,\n fontSize: 'inherit',\n textDecoration: 'none',\n color: colors.white,\n background: 'rgba(0,0,0,0.6)',\n pointerEvents: 'auto',\n})\n\nconst ResizeWrapperStyled = styled(PlayerControlButtonStyled)({\n transform: 'rotate(90deg)',\n pointerEvents: 'unset',\n}).withComponent('span')\n\n// =====\n// Types\n// =====\n\ntype ButtonTypes = keyof typeof playerIcons\ntype IconPaths = React.ComponentProps['name']\n","import { useQuery } from 'react-query'\nimport { useFeature } from '@core/Utils/hooks'\nimport {\n racingPendingTicketsPollingQuery,\n racingPendingTicketsQuery,\n} from '@core/Data/Account/PendingTicketsCount/queries'\n\nexport const usePendingTicketsCount = (isEnabled: boolean) => {\n const isAppHeaderPendingBetsFeatureActive = useFeature('PENDING_BETS_BUTTON_IN_APP_HEADER')\n\n const { data } = useQuery({\n ...(isAppHeaderPendingBetsFeatureActive\n ? racingPendingTicketsPollingQuery\n : racingPendingTicketsQuery),\n enabled: isEnabled,\n })\n\n const pendingBets = data?.pendingTicketsCount ?? 0\n\n return {\n pendingBetsCount: Math.min(pendingBets, 99),\n }\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { setIsPendingBetsDrawerOpen } from '@core/Areas/SkyVideoPlayer/Store'\nimport {\n selectCanRenderPendingBetsDrawer,\n selectIsPendingBetsDrawerOpen,\n} from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { PlayerControlButtonStyled } from '../Buttons'\nimport { usePendingTicketsCount } from './Hooks/usePendingBetsCount'\n\nconst enum LocalConstants {\n activeButtonClassName = 'pending-bets-button-active',\n}\n\nexport const PendingBetsDrawerButton = () => {\n const dispatch = useAppDispatch()\n const isPendingBetsOpen = useAppSelector(selectIsPendingBetsDrawerOpen)\n const canRenderPendingBetsDrawer = useAppSelector(selectCanRenderPendingBetsDrawer)\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n dispatch(setIsPendingBetsDrawerOpen(!isPendingBetsOpen))\n }\n\n const { pendingBetsCount } = usePendingTicketsCount(canRenderPendingBetsDrawer)\n\n if (!canRenderPendingBetsDrawer) return null\n\n return (\n \n \n Pending Bets
      {pendingBetsCount}
      \n \n
      \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst PendingBetsDrawerButtonStyled = styled.div<{ isPendingBetsOpen: boolean }>({\n flex: 1,\n display: 'flex',\n justifyContent: 'flex-end',\n\n '> button': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minWidth: 'min-content',\n marginLeft: '0.5rem',\n paddingLeft: spacing.smx1,\n paddingRight: spacing.smx1,\n gap: spacing.smx2,\n\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.medium,\n whiteSpace: 'nowrap',\n\n color: colors.white,\n cursor: 'pointer',\n\n '> div': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '2.2rem',\n height: '2.2rem',\n background: colors.white,\n color: colors.black,\n borderRadius: '50%',\n letterSpacing: '-1px',\n },\n\n ['&.' + LocalConstants.activeButtonClassName]: {\n background: colors.white,\n color: colors.black,\n\n '> div': {\n background: 'rgba(0,0,0,0.8)',\n color: colors.white,\n },\n },\n },\n})\n","import React from 'react'\nimport { store } from '@core/Store'\nimport { setIsControlShowing, type SkyVideoPlayerState } from '@core/Areas/SkyVideoPlayer/Store'\nimport { useAppDispatch } from '@core/Store/hooks'\n\nconst enum LocalConstants {\n TimeToHideControlsSec = 5000,\n}\n\nexport const useControlToggle = ({\n isPlaying,\n isMuted,\n isFullscreen,\n isControlShowing,\n selectedChannel,\n topBarElement,\n centerBarElement,\n bottomBarElement,\n isInteractingWithProgressBar,\n}: {\n isPlaying: boolean\n isMuted: boolean\n isFullscreen: boolean\n isControlShowing: boolean\n selectedChannel: SkyVideoPlayerState['selectedChannel']\n topBarElement: HTMLDivElement | null\n centerBarElement: HTMLDivElement | null\n bottomBarElement: HTMLDivElement | null\n isInteractingWithProgressBar: boolean\n}) => {\n const timerIdRef = React.useRef()\n const dispatch = useAppDispatch()\n\n // remove queued hie control on unmount\n React.useEffect(() => () => clearTimeout(timerIdRef.current), [])\n\n // show controls when play is started (or paused/resumed in the case of replay)\n React.useEffect(() => {\n dispatch(setIsControlShowing(true))\n }, [isPlaying, dispatch])\n\n // reset queue hide controls timer when a button is clicked or progress bar is being used\n React.useEffect(() => {\n if (!isInteractingWithProgressBar) {\n queueHideControls(timerIdRef)\n }\n }, [isPlaying, isMuted, isFullscreen, selectedChannel, dispatch, isInteractingWithProgressBar])\n\n // queue hide control when the controls are shown (unless user is interacting), e,g, video clicked, window resize, drag, etc.\n React.useEffect(() => {\n if (isInteractingWithProgressBar) {\n clearTimeout(timerIdRef.current)\n } else if (isControlShowing) {\n queueHideControls(timerIdRef)\n }\n }, [isInteractingWithProgressBar, isControlShowing])\n\n // show/hide controls\n React.useEffect(() => {\n if (topBarElement)\n topBarElement.style.transform = `translateY(${isControlShowing ? '0' : '-100%'})`\n if (bottomBarElement)\n bottomBarElement.style.transform = `translateY(${isControlShowing ? '0' : '100%'})`\n if (centerBarElement)\n centerBarElement.style.transform = `translateX(${isControlShowing ? '0' : '-100%'})`\n }, [isControlShowing, topBarElement, centerBarElement, bottomBarElement])\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction queueHideControls(timerIdRef: React.MutableRefObject) {\n clearTimeout(timerIdRef.current)\n\n timerIdRef.current = window.setTimeout(hideControls, LocalConstants.TimeToHideControlsSec)\n}\n\nfunction hideControls() {\n store.dispatch(setIsControlShowing(false))\n}\n","import React from 'react'\nimport { VIDEO_PLAYER_PARENT_ID } from '../VideoPlayer'\nimport { store } from '@core/Store'\nimport { setIsFullscreen } from '@core/Areas/SkyVideoPlayer/Store'\n\n// ==========================\n// Method Listening to Events\n// ==========================\nexport const handleFullscreenChange = () => {\n const videoEl = getVisionVideoEl()\n\n if (videoEl?.webkitSupportsPresentationMode) {\n if (videoEl.webkitPresentationMode === 'picture-in-picture') {\n exitPresentationModeFullscreen()\n return\n }\n store.dispatch(setIsFullscreen(isVideoElInPresentationModeFullscreen(videoEl)))\n return\n }\n\n store.dispatch(setIsFullscreen(isElementInFullscreen()))\n}\n\n// ===============\n// Main React Hook\n// ===============\nexport const useFullscreen = (isFullscreen: boolean) => {\n React.useEffect(() => {\n // On unmount Exit Fullscreen\n return () => exitFullscreen()\n }, [])\n\n React.useEffect(() => {\n if (isFullscreen) {\n try {\n enterFullscreen()\n } catch {\n store.dispatch(setIsFullscreen(false))\n }\n }\n\n if (!isFullscreen) {\n exitFullscreen()\n }\n }, [isFullscreen])\n}\n\n// ===============\n// General Helpers\n// ===============\n\nfunction getVisionVideoEl() {\n return document.querySelector(`#${VIDEO_PLAYER_PARENT_ID} video`) as HTMLVideoElement | null\n}\n\nfunction getVisionParentEl() {\n return document.getElementById(VIDEO_PLAYER_PARENT_ID) as HTMLDivElement | null\n}\n\nfunction enterFullscreen() {\n const wasPresentationMode = enterPresentationModeFullscreen()\n if (!wasPresentationMode) enterElementFullscreen()\n}\n\nfunction exitFullscreen() {\n if (!isFullscreenActive()) {\n return\n }\n const wasStandardFullscreen = exitElementFullscreen()\n if (!wasStandardFullscreen) exitPresentationModeFullscreen()\n}\n\nfunction isFullscreenActive() {\n if (isElementInFullscreen()) {\n return true\n }\n const videoEl = getVisionVideoEl()\n return videoEl && isVideoElInPresentationModeFullscreen(videoEl)\n}\n\n// ==========================\n// Element Fullscreen Helpers\n// ==========================\nfunction isElementInFullscreen() {\n return (\n !!document.fullscreenElement ||\n !!document.webkitFullscreenElement ||\n !!document.webkitCurrentFullScreenElement\n )\n}\n\nfunction enterElementFullscreen() {\n const parentEl = getVisionParentEl()\n if (!parentEl) {\n return false\n }\n if (parentEl.requestFullscreen) {\n parentEl.requestFullscreen()\n return true\n }\n if (parentEl.webkitRequestFullscreen) {\n parentEl.webkitRequestFullscreen()\n return true\n }\n if (parentEl.webkitRequestFullScreen) {\n parentEl.webkitRequestFullScreen()\n return true\n }\n return false\n}\n\nfunction exitElementFullscreen() {\n if (document.exitFullscreen) {\n document.exitFullscreen()\n return true\n }\n if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen()\n return true\n }\n if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen()\n return true\n }\n return false\n}\n\n// =========================\n// Presentation Mode Helpers\n// =========================\n// https://developer.apple.com/documentation/webkitjs/htmlvideoelement\nfunction isVideoElInPresentationModeFullscreen(videoEl: HTMLVideoElement): boolean {\n return videoEl.webkitPresentationMode === 'fullscreen'\n}\n\nfunction exitPresentationModeFullscreen() {\n const videoEl = getVisionVideoEl()\n if (videoEl && videoEl.webkitPresentationMode) {\n videoEl.webkitSetPresentationMode('inline')\n return true\n }\n return false\n}\n\nfunction enterPresentationModeFullscreen(): boolean {\n const videoEl = getVisionVideoEl()\n if (videoEl && videoEl.webkitPresentationMode) {\n videoEl.webkitSetPresentationMode('fullscreen')\n return true\n }\n return false\n}\n","export function findAndStartChildVideoElement(parent?: HTMLDivElement) {\n const videoElements = parent?.getElementsByTagName('video')\n const videoElement = videoElements && videoElements[0]\n\n if (videoElement && videoElement.paused) {\n videoElement.play()?.catch(e => {\n // eslint-disable-next-line no-console\n console.error('Could not start
    \n \n\n
    \n \n
    \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n '> header': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingBottom: spacing.smx1,\n margin: 0,\n\n '> h3': {\n display: 'flex',\n alignItems: 'center',\n background: 0,\n color: colors.black,\n margin: 0,\n padding: 0,\n fontFamily: font.family.primary,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.semibold,\n },\n },\n\n '> div:first-of-type': {\n padding: 0,\n\n '> ul': { listStyle: 'none', padding: 0, margin: 0 },\n\n '> ul > li': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n margin: 0,\n marginBottom: spacing.smx1,\n padding: spacing.smx1,\n borderRadius: radius.sm,\n border: '0.5px solid ' + colors.neutral[200],\n\n '&:last-of-type': { marginBottom: 0 },\n\n '> section': {\n display: 'flex',\n alignItems: 'center',\n\n '> div:first-of-type': {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '3rem',\n height: '3rem',\n borderRadius: '50%',\n marginRight: '1rem',\n background: hexColors.gainsboro,\n color: hexColors.dimGrey,\n\n [`&.${LocalConstants.DogsSilkClass}`]: {\n background: 'none',\n },\n },\n\n '> div:last-of-type': {\n h4: {\n padding: 0,\n margin: 0,\n textAlign: 'left',\n fontFamily: font.family.primary,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.semibold,\n },\n\n span: {\n fontFamily: font.family.primary,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.regular,\n },\n },\n },\n },\n },\n\n '> footer': {\n paddingTop: spacing.smx2,\n },\n})\n","import React from 'react'\nimport { PlanSeq } from '@mobi/api-types'\nimport { dayjs } from '@mobi/utils/date'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport {\n getStatusText,\n isTippingTicket,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\n\nexport const CountdownStatus: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({\n ticket,\n status,\n}) => {\n const isPreviewMode = React.useContext(TicketDisplayContext).type === 'share-preview'\n\n const isPendingTab = status === 'Pending'\n const isTipping = isTippingTicket(ticket)\n const isMulti = !isTipping && ticket.legs.length > 1\n const isFavouriteNumbers = ticket.planSeq === PlanSeq.FavouriteNumbers\n\n const countdownDate =\n (isPendingTab || isPreviewMode) &&\n !isFavouriteNumbers &&\n !isTipping &&\n getCountdownDate(ticket, isMulti)\n\n return (\n <>\n {countdownDate &&\n (isPreviewMode ? (\n !isMulti && (\n \n {dayjs(countdownDate).format('D MMM | H:mm')}\n \n )\n ) : (\n \n ))}\n\n {status !== 'Pending' && (\n \n {getStatusText(status)}\n \n )}\n \n )\n}\n\n// =======\n// Helpers\n// =======\n\nfunction getCountdownDate(ticket: Ticket, isMulti: boolean): string {\n if (!isMulti) return ticket.legs[0].advertisedStartTime\n\n const currentTime = dayjs()\n const timesFromNow = ticket.legs.map(leg => {\n const diff = currentTime.diff(leg.advertisedStartTime)\n // Allow time if within 2min\n if (diff < 1000 * 60 * 2) return diff\n return -Infinity\n })\n\n const closestTime = Math.max(...timesFromNow)\n const indexOfClosest = timesFromNow.findIndex(time => time === closestTime)\n\n if (indexOfClosest === -1) return ticket.legs[0].advertisedStartTime\n\n return ticket.legs[indexOfClosest].advertisedStartTime\n}\n","import React from 'react'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { getRaceLink } from '@core/Areas/Racing/helpers/getRaceLink'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { CountdownStatus } from '../Common/CountdownStatus'\n\nexport const FavouriteNumbers: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({\n ticket,\n status,\n}) => {\n const ticketContext = React.useContext(TicketDisplayContext)\n\n const leg = ticket.legs[0]\n\n const shouldProvideLink = !!(\n (ticketContext.type === 'account-activity' || ticketContext.type === 'pending-bets-drawer') &&\n leg.fixtureId &&\n leg.fixtureDate &&\n leg.raceNumber\n )\n\n const linkInfo = shouldProvideLink\n ? {\n pathname: getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: leg.raceNumber,\n isFOO: false,\n }),\n }\n : undefined\n\n return (\n <>\n ({ raceNumber }))}\n meetingName={leg.meetingName}\n isMultipleRaceSelection\n />\n ) : (\n leg.eventName\n )\n }\n statusComponent={}\n />\n\n (\n \n {header} - {selectionDetails[0].selectionString}\n
    \n
    \n ))}\n linkInfo={linkInfo}\n iconComponent={}\n />\n \n )\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils/date'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { CountdownStatus } from '../Common/CountdownStatus'\nimport { Currency } from '@mobi/utils/money'\n\nexport const Multi: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({ ticket, status }) => {\n const formulaText = ticket.formula?.formulaString ? ` · ${ticket.formula.formulaString}` : ''\n\n const isPending = status === 'Pending'\n const finishedLegAst = !isPending ? getMultiFinishedLegAst(ticket, status) : null\n const headingText = isPending\n ? 'Next leg begins in:'\n : finishedLegAst\n ? `Finished on ${dayjs(finishedLegAst).format('ddd Do MMM')}`\n : undefined\n\n return (\n <>\n }\n iconComponent={null}\n />\n\n \n {ticket.legs.map(leg => {\n const { name, number } = leg.selections[0].selectionDetails[0].acceptorDetails[0]\n return (\n \n {`${number ? number + ' - ' : ''}${name}`}\n
    \n
    \n )\n })}\n \n }\n priceWin={ticket.combinedDividend ? new Currency(ticket.combinedDividend).format() : ''}\n iconComponent={}\n />\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getMultiFinishedLegAst(ticket: Ticket, status: TicketStatus): string | null {\n if (status === 'Won') {\n const latestAst = ticket.legs.reduce(reduceCallbackToGetLatestAst, '')\n return latestAst\n }\n\n if (status === 'NoPayout') {\n const latestAst = ticket.legs\n .filter(leg => leg.result === 'LOSE')\n .reduce(reduceCallbackToGetLatestAst, '')\n return latestAst\n }\n\n return null\n}\n\nfunction reduceCallbackToGetLatestAst(latestAst: string, curr: Ticket['legs'][0]) {\n if (!latestAst) return curr.advertisedStartTime\n if (dayjs(latestAst).isBefore(curr.advertisedStartTime)) return curr.advertisedStartTime\n return latestAst\n}\n","import React from 'react'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Icon as IconLegacy } from '@mobi/component-library/Common/Icon'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { getRaceLink } from '@core/Areas/Racing/helpers/getRaceLink'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport {\n sameRaceMultiPositionToText,\n sortSameRaceMultiTicketLegs,\n} from '@core/Areas/AccountActivity/helpers'\nimport { CountdownStatus } from '../Common/CountdownStatus'\n\nexport const SameRaceMulti: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({\n ticket,\n status,\n}) => {\n const ticketContext = React.useContext(TicketDisplayContext)\n\n const sortedLegs = sortSameRaceMultiTicketLegs(ticket)\n\n const leg = sortedLegs[0]\n\n const isContextPendingBetsDrawer = ticketContext.type === 'pending-bets-drawer'\n const shouldHideEventDetails = isContextPendingBetsDrawer && ticketContext.data.isSkyRaceMatch\n\n const shouldProvideLink = !!(\n (ticketContext.type === 'account-activity' || isContextPendingBetsDrawer) &&\n leg.fixtureId &&\n leg.fixtureDate &&\n leg.raceNumber\n )\n const linkInfo = shouldProvideLink\n ? {\n pathname: getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: leg.raceNumber,\n isFOO: false,\n }),\n }\n : undefined\n\n return (\n <>\n {!shouldHideEventDetails && (\n \n ) : (\n ticket.legs[0].eventName\n )\n }\n statusComponent={}\n iconComponent={}\n linkInfoPrimary={linkInfo}\n />\n )}\n\n {\n const { selectionDetails } = srmLeg.selections[0]\n const { name, srmPosition, number } = selectionDetails[0].acceptorDetails[0]\n const srmPositionText = sameRaceMultiPositionToText(srmPosition)\n return (\n \n {srmPositionText}: {number} - {name}\n
    \n
    \n )\n })}\n priceWin={ticket.combinedDividend?.toFixed(2)}\n iconComponent={}\n linkInfo={linkInfo}\n />\n \n )\n}\n","import React from 'react'\nimport { PlanSeq } from '@mobi/api-types'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport { meetingIdToContestType } from '@core/Areas/Racing/helpers/meetingIdToContestType'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { getRaceLink } from '@core/Areas/Racing/helpers/getRaceLink'\nimport { SilkFallback } from '../../../Common/SilkFallback'\nimport { CountdownStatus } from '../Common/CountdownStatus'\n\nexport const SingleMultiple: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({\n ticket,\n status,\n}) => {\n const ticketContext = React.useContext(TicketDisplayContext)\n\n const contestType = meetingIdToContestType(ticket.legs[0].fixtureId)\n const isMultipleRaceSelection = shouldDisplayRaceNumbers(ticket.planSeq)\n const [title, productName] = getSelectionTitles(ticket)\n\n const leg = ticket.legs[0]\n\n const isContextPendingBetsDrawer = ticketContext.type === 'pending-bets-drawer'\n const shouldHideEventDetails = isContextPendingBetsDrawer && ticketContext.data.isSkyRaceMatch\n\n const shouldProvideLink =\n !isMultipleRaceSelection &&\n !!(\n (ticketContext.type === 'account-activity' || ticketContext.type === 'pending-bets-drawer') &&\n leg.fixtureId &&\n leg.fixtureDate &&\n leg.raceNumber\n )\n\n const linkInfo = shouldProvideLink\n ? {\n pathname: getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: leg.raceNumber,\n isFOO: false,\n }),\n }\n : undefined\n\n return (\n <>\n {!shouldHideEventDetails && (\n ({ raceNumber }))\n : [{ raceNumber: leg.raceNumber }]\n }\n meetingName={leg.meetingName}\n isMultipleRaceSelection={isMultipleRaceSelection}\n />\n ) : (\n ticket.legs[0].eventName\n )\n }\n statusComponent={}\n iconComponent={}\n linkInfoPrimary={linkInfo}\n />\n )}\n\n {title}}\n subHeading={(() => {\n if (ticket.formula?.formulaString) {\n return ticket.formula.formulaString\n }\n\n if (productName) {\n return productName\n }\n\n if ([PlanSeq.Mystery$3Combo, PlanSeq.Mystery$10Combo].includes(ticket.planSeq)) {\n return ticket.legs[0].selections.map(selection => {\n const mysterySelectionTitle = `${selection.header} ${selection.selectionDetails[0].selectionString}`\n return (\n \n {mysterySelectionTitle}\n
    \n
    \n )\n })\n }\n return null\n })()}\n iconComponent={}\n linkInfo={linkInfo}\n />\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getSelectionTitles(ticket: Ticket): [title: string, productName?: string] {\n const selectionString = ticket.legs[0].selectionString\n if (!selectionString || [PlanSeq.AllUp].includes(ticket.planSeq)) return [ticket.productName]\n return [buildSelectionString(ticket.legs[0], selectionString), ticket.productName]\n}\n\nfunction buildSelectionString(leg: Ticket['legs'][0], selectionString: string): string {\n // Instead of showing all acceptor numbers, use shorter selection string containing FD, S1, S2 etc\n if (\n leg.selections.length > 1 &&\n leg.selections.every(selection => !!selection.selectionDetails[0].selectionString)\n ) {\n return leg.selections\n .map(selection => selection.selectionDetails[0].selectionString)\n .join(selectionString.includes('/') ? '/' : '.')\n }\n return selectionString\n}\n\nfunction shouldDisplayRaceNumbers(planSeq: number): boolean {\n return [\n PlanSeq.Double,\n PlanSeq.Quaddie,\n PlanSeq.AllUp,\n PlanSeq.MysteryDouble1,\n PlanSeq.MysteryDouble2,\n PlanSeq.MysteryDouble3,\n PlanSeq.MysteryDouble4,\n PlanSeq.MysteryDouble5,\n PlanSeq.MysteryDouble6,\n PlanSeq.MysteryDouble7,\n PlanSeq.MysteryQuaddie1,\n PlanSeq.MysteryQuaddie2,\n PlanSeq.MysteryQuaddie3,\n PlanSeq.MysteryQuaddie4,\n PlanSeq.MysteryQuaddie5,\n PlanSeq.MysteryQuaddie6,\n PlanSeq.MysteryQuaddie7,\n ].includes(planSeq)\n}\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport type { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport {\n getSingleTicketTitle,\n getTitleOdds,\n shouldUseFallbackIcon,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { getRaceLink, meetingIdToContestType } from '@core/Areas/Racing/helpers'\nimport { SilkFallback } from '@core/Areas/AccountActivity/Components/Ticket/Components'\nimport { SilkImageContained } from '@core/Components/SilkImage/SilkImageContained'\nimport { RunnerNumber } from '@core/Areas/RaceCard/Components'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\nimport { CountdownStatus } from '../Common/CountdownStatus'\nimport { getIconTypeFromMeetingCode } from '@core/Areas/Quickbet/helpers/IconTypeHelper'\n\nexport const SingleSingle: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({\n ticket,\n status,\n}) => {\n const ticketContext = React.useContext(TicketDisplayContext)\n const isPreviewMode = ticketContext.type === 'share-preview'\n\n const leg = ticket.legs[0]\n\n const runnerCode = meetingIdToContestType(leg.fixtureId, true)\n const contestType = runnerCode?.toLowerCase() as RaceCodesLowerCase\n\n const isStartingPrice = leg.betType === FixedOddsMarketDisplayNames.SP\n const shouldHideSilk = shouldUseFallbackIcon(leg, ticket.planSeq)\n\n const productName =\n (leg.betType === FixedOddsMarketDisplayNames.H2H && `${leg.betType} - ${leg.runners}`) ||\n (isStartingPrice && 'Starting Price') ||\n ticket.productName\n\n const { title, runnerNumber } = getSingleTicketTitle(\n leg,\n ticket.planSeq,\n !isPreviewMode && !!runnerCode\n )\n\n const shouldDisplayPrice =\n ticket.return !== null && (!isStartingPrice || (isStartingPrice && ticket.return > 0))\n\n const { priceWin, pricePlace } = shouldDisplayPrice\n ? getTitleOdds(ticket.investment.lines)\n : { priceWin: undefined, pricePlace: undefined }\n\n const runnerNameForBlackbook =\n runnerNumber && runnerCode && leg.selections[0]?.selectionDetails[0]?.acceptorDetails[0]?.name\n\n const isContextPendingBetsDrawer = ticketContext.type === 'pending-bets-drawer'\n const shouldHideEventDetails = isContextPendingBetsDrawer && ticketContext.data.isSkyRaceMatch\n\n const shouldProvideLink = !!(\n (ticketContext.type === 'account-activity' || ticketContext.type === 'pending-bets-drawer') &&\n leg.fixtureId &&\n leg.fixtureDate &&\n leg.raceNumber\n )\n\n const linkInfo = shouldProvideLink\n ? {\n pathname: getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: leg.raceNumber,\n isFOO: false,\n }),\n }\n : undefined\n\n return (\n <>\n {!shouldHideEventDetails && (\n \n ) : (\n ticket.legs[0].eventName\n )\n }\n statusComponent={}\n iconComponent={\n \n }\n linkInfoPrimary={linkInfo}\n />\n )}\n\n \n {runnerNumber && runnerCode && runnerNameForBlackbook && (\n <>\n \n  - \n \n )}\n {title}\n \n }\n subHeading={productName}\n priceWin={priceWin}\n pricePlace={pricePlace}\n iconComponent={\n shouldHideSilk ? (\n \n ) : (\n \n )\n }\n linkInfo={linkInfo}\n />\n \n )\n}\n","import React from 'react'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { CountdownStatus } from '../Common/CountdownStatus'\n\nexport const Sports: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({ ticket, status }) => {\n const leg = ticket.legs[0]\n const selection = leg.selections[0].selectionDetails[0]\n\n return (\n <>\n }\n iconComponent={}\n />\n\n \n }\n />\n \n )\n}\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { CountdownStatus } from '../Common/CountdownStatus'\n\nexport const Tipping: React.FC<{ ticket: Ticket; status: TicketStatus }> = ({ ticket, status }) => {\n const numberOfGames = ticket.legs.length\n return (\n <>\n 1 ? 's' : ''}`}\n statusComponent={}\n iconComponent={}\n />\n\n }\n />\n \n )\n}\n","import React from 'react'\nimport { PlanSeq } from '@mobi/api-types'\nimport { Banner } from '@mobi/component-library/Common/V2/Banner'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport type { TicketLayoutType } from '../../helpers/legTypes'\nimport {\n FavouriteNumbers,\n Multi,\n SameRaceMulti,\n SingleSingle,\n SingleMultiple,\n Sports,\n Tipping,\n} from './Components'\n\nexport const BetInfo = React.memo(\n ({\n ticket,\n status,\n ticketLayoutType,\n }: {\n ticket: Ticket\n status: TicketStatus\n ticketLayoutType: TicketLayoutType\n }) => {\n if (PlanSeq.FavouriteNumbers === ticket.planSeq) {\n return \n }\n\n if (ticketLayoutType === 'same-race-multi') {\n return \n }\n\n if (ticketLayoutType === 'single-single') {\n return \n }\n\n if (ticketLayoutType === 'single-multiple') {\n return \n }\n\n if (ticketLayoutType === 'multi') {\n return \n }\n\n if (ticketLayoutType == 'tipping') {\n return \n }\n\n if (ticketLayoutType === 'sports') {\n return \n }\n\n return \n },\n (prev, next) => prev.ticket.ticketSequence === next.ticket.ticketSequence\n)\n\nBetInfo.displayName = 'BetInfo'\n","import React from 'react'\nimport type { NextSkyRace } from '@core/Areas/RaceCardSky/types'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { BetInfo } from '@core/Areas/AccountActivity/Components/Ticket/Components/BetInfo'\nimport { Investment } from '@core/Areas/AccountActivity/Components/Ticket/Components/Investment'\nimport {\n getTicketLayoutType,\n getTicketStatus,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { SkyRaceHeader } from '../SkyRaceHeader'\nimport { getMatchedSkyRaceForTicketLeg } from '../../helpers/getMatchedSkyRaceForTicketLeg'\n\nexport const GeneralTicket: React.FC<{\n ticket: Ticket\n nextSkyRaces: NextSkyRace[]\n ticketType: ReturnType\n}> = ({ ticket, nextSkyRaces, ticketType }) => {\n const isSingleRaceTicket =\n ticketType === 'single-single' ||\n ticketType === 'single-multiple' ||\n ticketType === 'same-race-multi'\n\n const matchedSkyRace =\n isSingleRaceTicket && getMatchedSkyRaceForTicketLeg(ticket.legs[0], nextSkyRaces)\n\n const isSkyRaceMatch = !!matchedSkyRace\n\n const status = getTicketStatus(ticket, 'pending')\n const ticketLayoutType = getTicketLayoutType(ticket)\n\n return (\n \n {isSkyRaceMatch && isSingleRaceTicket && }\n\n \n\n \n \n )\n}\n","import React from 'react'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport type { NextSkyRace } from '@core/Areas/RaceCardSky/types'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { getTicketLayoutType } from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { MultiTicket } from './Components/MultiTicket'\nimport { GeneralTicket } from './Components/GeneralTicket'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\n\nexport const SkyPendingTicket: React.FC<{ ticket: Ticket; nextSkyRaces: NextSkyRace[] }> = ({\n ticket,\n nextSkyRaces,\n}) => {\n const ticketType = getTicketLayoutType(ticket)\n const isMulti = ticketType === 'multi'\n\n return (\n \n \n {isMulti ? (\n \n ) : (\n \n )}\n \n \n )\n}\n","import React from 'react'\nimport type { TicketResponseData } from '@core/Areas/AccountActivity/types'\nimport { getIdFromSortedString, isFauxTicketTransaction } from '@core/Areas/AccountActivity/helpers'\nimport { useNextSkyRaces } from '@core/Areas/RaceCardSky/Hooks'\nimport { SkyPendingTicket } from '../SkyPendingTicket'\n\nexport const PendingTicketsPage: React.FC<{ pageData: TicketResponseData }> = ({ pageData }) => {\n const { nextRaces } = useNextSkyRaces({ refetchOnMount: false })\n\n if (pageData.sortedIds.length === 0) return null\n\n return (\n <>\n {pageData.sortedIds.map(ticketID => {\n const item = pageData.ticketsById[getIdFromSortedString(ticketID)]\n\n if (isFauxTicketTransaction(item)) return null\n\n return \n })}\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/V2'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport { trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useAccountActivityData } from '@core/Areas/AccountActivity/Hooks'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { useShrinkSkyOnLocationChange } from './Hooks/useShrinkSkyOnLocationChange'\nimport { PendingTicketsPage } from './Components/PendingTicketsPage'\n\nconst enum LocalConstants {\n AnimationTimingMs = 400,\n PendingBetsDrawerEmptyClassname = 'js-pending-bets-drawer__empty',\n}\n\nexport const PendingBetsDrawer = React.forwardRef((...args) => {\n const isPendingBetsOpen = useAppSelector(state => state.skyVideoPlayer.isPendingBetsDrawerOpen)\n const shouldRenderPendingBetsDrawer = useRenderTimeoutControl({\n shouldRender: isPendingBetsOpen,\n timeoutMs: LocalConstants.AnimationTimingMs as number,\n })\n\n return (\n \n {shouldRenderPendingBetsDrawer && }\n \n )\n})\n\n// ===============\n// Local Component\n// ===============\n\nconst PendingBetsDrawerContent = () => {\n const { data, isLoading, LoadMoreButton, SkeletonLoader, isFinalPage, isEmptyState } =\n useAccountActivityData({ activeTab: 'pending', isOrderByEventStart: true })\n\n useShrinkSkyOnLocationChange()\n\n React.useEffect(() => {\n trackKey('sky_pending_bets_open')\n return () => trackKey('sky_pending_bets_closed')\n }, [])\n\n return (\n \n
    \n

    Pending Bets

    \n
    \n\n
    \n {isLoading ? (\n \n ) : (\n <>\n {data?.pages.map(pageData => (\n \n ))}\n\n {isFinalPage ? (\n isEmptyState ? (\n
    \n
    \n \n
    \n No Pending Bets\n
    \n ) : (\n

    End of Pending Bets

    \n )\n ) : (\n \n )}\n \n )}\n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst DrawerWrapStyled = styled.div({\n position: 'absolute',\n right: 0,\n top: 0,\n bottom: 0,\n boxSizing: 'border-box',\n width: '25rem',\n minWidth: '25rem',\n padding: '0 ' + spacing.sm,\n\n overflowY: 'scroll',\n scrollbarWidth: 'thin',\n scrollBehavior: 'smooth',\n backgroundColor: colors.surface[50],\n})\n\nconst ContentStyled = styled.div({\n '> header': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n\n h2: {\n margin: 0,\n padding: `${spacing.sm} 0 ${spacing.smx1} 0`,\n fontFamily: font.family.primary,\n fontWeight: font.weight.semibold,\n color: colors.black,\n textTransform: 'unset',\n ...font.size.md,\n textShadow: 'none',\n },\n },\n\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n position: 'relative',\n minHeight: '80vh',\n\n ['> div.' + LocalConstants.PendingBetsDrawerEmptyClassname]: {\n textAlign: 'center',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n height: '80vh',\n\n '> div': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: colors.neutral[100],\n borderRadius: '50%',\n width: '11.6rem',\n height: '11.6rem',\n },\n\n '> span': {\n color: colors.black,\n marginTop: spacing.sm,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.semibold,\n },\n },\n },\n})\n","import React from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setSkyVideoPlayerStatus } from '@core/Areas/SkyVideoPlayer/Store'\n\nexport const useShrinkSkyOnLocationChange = () => {\n const dispatch = useAppDispatch()\n const location = useLocation()\n\n const currentLocationRef = React.useRef(location)\n\n React.useEffect(() => {\n if (location !== currentLocationRef.current) {\n dispatch(setSkyVideoPlayerStatus({ playerStatus: 'floating' }))\n }\n }, [dispatch, location])\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, layering, radius } from '@mobi/component-library/Theme/Common'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { PendingBetsDrawer } from './Components/PendingBetsDrawer'\nimport { VideoPlayer } from '../VideoPlayer/VideoPlayer'\nimport {\n useFullscreenNativeInterop,\n useCanRenderPendingBetsCheck,\n usePendingBetsOpenToggle,\n useSwipeActions,\n} from './Hooks'\n\nconst enum LocalConstants {\n DrawerWidthRem = 25,\n}\n\nexport const FullscreenPlayer: React.FC = () => {\n const fullscreenContainerRef = React.useRef(null)\n\n useCanRenderPendingBetsCheck(LocalConstants.DrawerWidthRem)\n const pendingBetsContainerRef = usePendingBetsOpenToggle(LocalConstants.DrawerWidthRem)\n\n useFullscreenNativeInterop()\n useSwipeActions(fullscreenContainerRef, pendingBetsContainerRef)\n const pendingBetsDrawerRef = useBodyScrollLock()\n\n return (\n \n
    \n \n
    \n\n
    \n \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst FullscreenPlayerWrapperStyled = styled.div({\n position: 'fixed',\n zIndex: layering.skyVideoPlayerFloating,\n display: 'flex',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: colors.black,\n\n // Video Player Container\n '> div:first-of-type': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignSelf: 'center',\n maxWidth: '100%',\n maxHeight: '100%',\n },\n\n // Pending Bets Drawer Container\n '> div:last-of-type': {\n flexShrink: 0,\n position: 'relative',\n zIndex: layering.overlayHigh,\n overflow: 'hidden',\n display: 'flex',\n\n transition: 'width 400ms ease-in-out',\n background: colors.surface[300],\n borderTopLeftRadius: radius.lgx3,\n borderBottomLeftRadius: radius.lgx3,\n },\n})\n","import React from 'react'\nimport { debounceFn } from '@mobi/utils/functions'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { checkIfIsInIPad } from '@core/Settings/Components/GlobalCss/helpers'\nimport { setCanRenderPendingBetsDrawer } from '@core/Areas/SkyVideoPlayer/Store'\n\nconst enum LocalConstants {\n MinVideoWidthRem = 43,\n}\n\n/** Monitors device screen width, if not enough space to render, will disable display */\nexport const useCanRenderPendingBetsCheck = (drawerWidthRem: number) => {\n const dispatch = useAppDispatch()\n\n React.useEffect(() => {\n if (!window.ResizeObserver) return\n const isInIpad = checkIfIsInIPad()\n const remMultiplier = isInIpad ? 16 : 10\n\n const determineShouldEnablePendingBetsDrawer = debounceFn(() => {\n const isDisplayWideEnoughForPendingBets =\n window.innerWidth >\n drawerWidthRem * remMultiplier + LocalConstants.MinVideoWidthRem * remMultiplier\n\n dispatch(setCanRenderPendingBetsDrawer(isDisplayWideEnoughForPendingBets))\n }, 200)\n\n determineShouldEnablePendingBetsDrawer()\n\n const observer = new ResizeObserver(determineShouldEnablePendingBetsDrawer)\n observer.observe(document.body)\n\n return () => observer.disconnect()\n }, [dispatch, drawerWidthRem])\n}\n","import React from 'react'\nimport { useAppSelector } from '@core/Store/hooks'\nimport {\n selectCanRenderPendingBetsDrawer,\n selectIsPendingBetsDrawerOpen,\n} from '@core/Areas/SkyVideoPlayer/Store/selectors'\n\nexport const usePendingBetsOpenToggle = (drawerWidth: number) => {\n const pendingBetsDrawerRef = React.useRef(null)\n\n const isPendingBetsOpen = useAppSelector(selectIsPendingBetsDrawerOpen)\n const canRenderBetsDrawer = useAppSelector(selectCanRenderPendingBetsDrawer)\n\n React.useEffect(() => {\n if (!pendingBetsDrawerRef.current) return\n\n if (!canRenderBetsDrawer || !isPendingBetsOpen) {\n pendingBetsDrawerRef.current.style.width = '0'\n return\n }\n\n pendingBetsDrawerRef.current.style.width = drawerWidth + 'rem'\n }, [isPendingBetsOpen, canRenderBetsDrawer, pendingBetsDrawerRef, drawerWidth])\n\n return pendingBetsDrawerRef\n}\n","import React from 'react'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setSkyVideoPlayerStatus } from '@core/Areas/SkyVideoPlayer/Store'\n\n/** Native App Only - Force landscape orientation, exit fullscreen on portrait orientation */\nexport const useFullscreenNativeInterop = () => {\n const dispatch = useAppDispatch()\n\n React.useEffect(() => {\n if (!isReactNativeApp) return\n sendToNative('LOCK_LANDSCAPE_ORIENTATION')\n return () => sendToNative('UNLOCK_ORIENTATION_LOCKS')\n }, [])\n\n // Exit fullscreen on orientation change back to portrait\n React.useEffect(() => {\n if (!isReactNativeApp) return\n const portrait = window.matchMedia('(orientation: portrait)')\n const handleOrientationChange = (e: MediaQueryListEvent) => {\n if (e.matches) dispatch(setSkyVideoPlayerStatus({}))\n }\n portrait.addEventListener('change', handleOrientationChange)\n return () => portrait.removeEventListener('change', handleOrientationChange)\n }, [dispatch])\n}\n","import React from 'react'\nimport anime from 'animejs'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport {\n selectCanRenderPendingBetsDrawer,\n selectIsPendingBetsDrawerOpen,\n} from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport {\n setIsPendingBetsDrawerOpen,\n setSkyVideoPlayerStatus,\n} from '@core/Areas/SkyVideoPlayer/Store'\n\nconst enum LocalConstants {\n MinMoveThreshold = 40,\n XSuccessThreshold = 100,\n YSuccessThreshold = 200,\n}\n\nexport const useSwipeActions = (\n fullscreenElRef: React.RefObject,\n pendingBetsElRef: React.RefObject\n) => {\n const dispatch = useAppDispatch()\n\n const canRenderPendingBetsRef = React.useRef(false)\n const isPendingBetsOpenRef = React.useRef(false)\n\n const canRenderPendingBets = useAppSelector(selectCanRenderPendingBetsDrawer)\n const isPendingBetsOpen = useAppSelector(selectIsPendingBetsDrawerOpen)\n\n canRenderPendingBetsRef.current = canRenderPendingBets\n isPendingBetsOpenRef.current = isPendingBetsOpen\n\n React.useEffect(() => {\n const fullscreenEl = fullscreenElRef.current\n const pendingBetsEl = pendingBetsElRef.current\n if (!fullscreenEl || !pendingBetsEl) return\n\n let startX = 0\n let startY = 0\n let moveX = 0\n let moveY = 0\n let moveAxis: 'y' | 'x' | null = null\n let moveSign: '-' | '+' | null = null\n let wasYActionSuccessful = false\n let wasXActionSuccessful = false\n\n // ===========\n // TOUCH START\n // ===========\n const handleTouchStart = (e: TouchEvent) => {\n startX = e.touches[0].clientX\n startY = e.touches[0].clientY\n moveX = 0\n moveY = 0\n moveAxis = null\n moveSign = null\n wasYActionSuccessful = false\n wasXActionSuccessful = false\n }\n\n // ==========\n // TOUCH MOVE\n // ==========\n const handleTouchMove = (e: TouchEvent) => {\n moveX = Math.round(e.touches[0].clientX - startX)\n moveY = Math.round(e.touches[0].clientY - startY)\n\n const moveXAbs = Math.abs(moveX)\n const moveYAbs = Math.abs(moveY)\n\n const hasMoveSatisfiedThreshold =\n Math.max(moveXAbs, moveYAbs) > LocalConstants.MinMoveThreshold\n\n if (wasXActionSuccessful || (!moveAxis && hasMoveSatisfiedThreshold)) return\n\n moveAxis ??= moveXAbs < moveYAbs ? 'y' : 'x'\n const signEval = moveAxis === 'y' ? moveYAbs / moveY : moveXAbs / moveX\n const currMoveSign = Math.sign(signEval) == -1 ? '-' : '+'\n moveSign ??= currMoveSign\n\n if (currMoveSign !== moveSign) return\n\n // Handle sky fullscreen video player swipe move\n if (moveAxis === 'y' && !isPendingBetsOpenRef.current) {\n e.preventDefault()\n\n const movePosition = moveYAbs - LocalConstants.MinMoveThreshold\n anime.set(fullscreenEl, { translateY: `${moveSign}${movePosition}px` })\n wasYActionSuccessful =\n moveYAbs > Math.min(LocalConstants.YSuccessThreshold, innerHeight / 2)\n return\n }\n\n // Handle pending bets drawer swipe actions\n if (\n moveAxis === 'x' &&\n canRenderPendingBetsRef.current &&\n moveXAbs > LocalConstants.XSuccessThreshold\n ) {\n wasXActionSuccessful = true\n e.preventDefault()\n\n if (isPendingBetsOpenRef.current && moveSign === '+') {\n dispatch(setIsPendingBetsDrawerOpen(false))\n return\n }\n\n if (!isPendingBetsOpenRef.current && moveSign === '-') {\n dispatch(setIsPendingBetsDrawerOpen(true))\n return\n }\n }\n }\n\n // =========\n // TOUCH END\n // =========\n const handleTouchEnd = () => {\n if (wasYActionSuccessful) {\n // Animate out, change player status\n anime({\n targets: fullscreenEl,\n translateY: [\n `${moveY + LocalConstants.MinMoveThreshold * (moveSign === '-' ? 1 : -1)}px`,\n `${moveSign}${innerHeight * 1.5}px`,\n ],\n duration: 200,\n easing: 'cubicBezier(0.3, 0.0, 0.8, 0.15)',\n })\n setTimeout(() => dispatch(setSkyVideoPlayerStatus({})), 300)\n } else {\n // Cancelled swipe, reset fullscreen component position\n anime({\n targets: fullscreenEl,\n translateY: '0px',\n duration: 150,\n easing: 'cubicBezier(0.4, 0.0, 0.2, 1)',\n })\n }\n }\n\n fullscreenEl.addEventListener('touchstart', handleTouchStart, { passive: true })\n fullscreenEl.addEventListener('touchmove', handleTouchMove, { passive: false })\n fullscreenEl.addEventListener('touchend', handleTouchEnd, { passive: true })\n return () => {\n fullscreenEl.removeEventListener('touchstart', handleTouchStart)\n fullscreenEl.removeEventListener('touchmove', handleTouchMove)\n fullscreenEl.removeEventListener('touchend', handleTouchEnd)\n }\n }, [fullscreenElRef, pendingBetsElRef, dispatch])\n}\n","import React from 'react'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { useLogon } from '@core/Utils/hooks'\nimport { useNativeInterop } from './Hooks'\nimport { FloatingPlayer } from './Components/FloatingPlayer/FloatingPlayer'\nimport { FullscreenPlayer } from './Components/FullscreenPlayer/FullscreenPlayer'\n\n/** SkyVideoPlayer controls:\n * - Render of Floating + Fullscreen video\n * - Native comms for all sky video player states (floating | fullscreen | docked)\n *\n * This component does NOT control render of Docked, see ``\n */\nexport const SkyVideoPlayer: React.FC = () => {\n const isPlayerOpen = useAppSelector(state => state.skyVideoPlayer.isPlayerOpen)\n const playerStatus = useAppSelector(state => state.skyVideoPlayer.playerStatus)\n\n const { isLoggedIn } = useLogon()\n\n const isVideoPlayerRunning = isPlayerOpen && !!isLoggedIn\n useNativeInterop(isVideoPlayerRunning)\n\n if (!isVideoPlayerRunning) return null\n\n if (playerStatus === 'floating') return \n if (playerStatus === 'fullscreen') return \n\n return null\n}\n","import React from 'react'\nimport { subscribeToNative, isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { navigateToSkyRacePage } from '@core/Areas/RaceCardSky/helpers/navigateToSkyRacePage'\nimport { useAppSelector } from '@core/Store/hooks'\n\nexport const useNativeInterop = (isPlayerOpen: boolean): void => {\n const playerStatus = useAppSelector(state => state.skyVideoPlayer.playerStatus)\n\n // Handle \"Sky Racing\" bottom tab click\n React.useEffect(() => {\n if (!isReactNativeApp) return undefined\n const { dispose } = subscribeToNative('VISION_FLOAT_TOGGLE', navigateToSkyRacePage)\n return () => {\n dispose()\n }\n })\n\n // Send \"Sky Racing\" bottom tab status to native\n React.useEffect(() => {\n if (!isReactNativeApp) return\n sendToNative('VISION_FLOAT_STATUS', isPlayerOpen ? 'Open' : 'Closed')\n }, [isPlayerOpen])\n\n // Send \"Fake Fullscreen\" status to native\n React.useEffect(() => {\n if (!isReactNativeApp) return\n sendToNative('FULLSCREEN_ACTIVE', isPlayerOpen && playerStatus === 'fullscreen')\n }, [playerStatus, isPlayerOpen])\n}\n","import React from 'react'\nimport { SvgIconStyled } from '@mobi/component-library/Common/Icon/Icon.styles'\n\nexport function PlayIcon() {\n return (\n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { SvgIconStyled } from '@mobi/component-library/Common/Icon/Icon.styles'\n\nexport function TabRadioIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { matchPath, RouteProps, useLocation } from 'react-router-dom'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { useRadio } from '@core/Areas/Navigation/Components/TabNavigation/Components/WebOnlyNav/hooks/useRadio'\nimport { selectIsSkyVideoPlayerOpen } from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport { PlayIcon } from '@core/Components/Icons/PlayIcon'\nimport { TabRadioIcon } from '@core/Components/Icons/TabRadioIcon'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { trackOnRadioToggle } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { selectIsRadioPlaying } from './Store/selectors'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\n\nexport const FloatingTabRadioButton: React.FC<{ visibleRoutes: RouteProps[] }> = ({\n visibleRoutes,\n}) => {\n const isRadioPlayingSelector = useAppSelector(selectIsRadioPlaying)\n const isSkyVideoPlayerOpen = useAppSelector(selectIsSkyVideoPlayerOpen)\n\n const { isRadioPlaying, handleRadioToggle } = useRadio(isSkyVideoPlayerOpen)\n\n const toggleRadio = () => {\n handleRadioToggle()\n trackOnRadioToggle(\n isRadioPlayingSelector,\n 'floating-nav',\n `${location.pathname}${location.search}`\n )\n }\n\n const location = useLocation()\n const isVisible = visibleRoutes.some(route => matchPath(location.pathname, route))\n\n return (\n \n \n \n \n\n {isRadioPlaying && (\n
    \n \n
    \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst FloatingTabRadioButtonContainerStyled = styled.div({\n width: '5rem',\n height: '5rem',\n background: 'linear-gradient(180deg, #8246AF 24.48%, #6A3A8F 48.96%, #512D6D 74.48%);',\n borderRadius: '1rem',\n zIndex: '3',\n position: 'fixed',\n display: 'flex',\n right: 'calc(max(1rem, 50vw - 40rem + 1rem))',\n filter: 'drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.25))',\n alignItems: 'center',\n bottom: isReactNativeApp ? '2rem' : 'calc(7rem + env(safe-area-inset-bottom, 0px))',\n\n button: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n padding: 0,\n color: hexColors.white,\n width: '100%',\n fontSize: '3em',\n },\n\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n position: 'absolute',\n right: '0.2rem',\n top: '0.2rem',\n color: hexColors.white,\n pointerEvents: 'none',\n },\n})\n","export const RangeBoundaries = {\n minDaysSinceLastStart: 1,\n maxDaysSinceLastStart: 60,\n minDaysSinceLastWin: 1,\n maxDaysSinceLastWin: 60,\n minStartsSinceLastSpell: 1,\n maxStartsSinceLastSpell: 60,\n minPercentage: 0,\n maxPercentage: 100,\n minFixedOddsPrice: 1,\n maxFixedOddsPrice: 30,\n}\n","import { StructuredSearchTrack } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport { SelectedTrackType } from '../../Driver/StructuredSearchDriver'\n\nexport interface ModalTrack extends StructuredSearchTrack {\n selected: boolean\n}\n\nexport function getModalTracks(\n availableTracks: StructuredSearchTrack[] | null,\n selectedTracks: string[] | null\n): ModalTrack[] {\n let modalTracks: ModalTrack[] = []\n\n if (availableTracks) {\n modalTracks = availableTracks.map(track => {\n let selected = false\n if (selectedTracks) {\n selected = selectedTracks.includes(track.id)\n }\n\n return {\n ...track,\n selected,\n } as ModalTrack\n })\n }\n\n return modalTracks\n}\n\nexport function getFilteredTracks(\n availableTracks: StructuredSearchTrack[] | null,\n selectedTracks: string[] | null\n): StructuredSearchTrack[] {\n let tracks: StructuredSearchTrack[] = []\n\n if (selectedTracks && availableTracks) {\n tracks = []\n selectedTracks.forEach(selectedTrack => {\n availableTracks.forEach(availableTrack => {\n if (availableTrack.id === selectedTrack) {\n tracks?.push(availableTrack)\n }\n })\n })\n }\n\n return tracks\n}\n\nexport function filterSelectedTracksTrackIds(\n availableTracks: StructuredSearchTrack[] | null,\n selectedTracks: SelectedTrackType\n): SelectedTrackType {\n const results = getFilteredTracks(availableTracks, selectedTracks).map(track => track.id)\n\n return results.length === 0 ? null : results\n}\n","import { attachDriver, createSignal, Signal } from 'rwwa-rx-state-machine'\nimport {\n StructuredSearchResult,\n StructuredSearchAggregations,\n} from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport { StateMap } from 'typings/immutable'\nimport { fromJS } from 'immutable'\nimport { RangeBoundaries } from '../RangeBoundaries'\nimport { filterSelectedTracksTrackIds } from '../Components/StructuredSearchLocation/track-utils'\n\nexport type StructuredSearchValueChangedType = string | boolean | Date | number | SelectedTrackType\n\nexport const StructuredSearchValueChanged = createSignal<{\n field: keyof StructuredSearchFields\n value: StructuredSearchValueChangedType\n}>('StructuredSearchValueChanged')\n\nexport const StructuredSearchResults =\n createSignal('StructuredSearchResults')\n\nexport const StructuredSearchSetState = createSignal(\n 'StructuredSearchSetState'\n)\n\nexport const StructuredSearchSetSelectedTracks = createSignal(\n 'StructuredSearchSetSelectedTracks'\n)\n\nexport type SelectedTrackType = string[] | null\n\nexport interface StructuredSearchFields {\n contestTypeRace: boolean\n contestTypeTrot: boolean\n contestTypeDogs: boolean\n dateToday: boolean\n dateTomorrow: boolean\n dateBeyondTomorrow: boolean\n wonLastStart: boolean\n placedLastStart: boolean\n gearChange: boolean\n firstUp: boolean\n secondUp: boolean\n careerPrizeMoney: string\n careerWinPercentage: number\n trackWinPercentage: number\n distanceWinPercentage: number\n trackdistanceWinPercentage: number\n barrierNumberOneToFive: boolean\n barrierNumberSixPlus: boolean\n boxNumberOneToFour: boolean\n boxNumberFivePlus: boolean\n apprentice: boolean\n favouriteLastStart: boolean\n weightChangedUp: boolean\n weightChangedDown: boolean\n weightNotChanged: boolean\n distanceChangedUp: boolean\n distanceChangedDown: boolean\n distanceNotChanged: boolean\n minFixedOddsPrice: number\n maxFixedOddsPrice: number\n minDaysSinceLastStart: number\n maxDaysSinceLastStart: number\n minDaysSinceLastWin: number\n maxDaysSinceLastWin: number\n minStartsSinceLastSpell: number\n maxStartsSinceLastSpell: number\n winTrackConditionFirm: boolean\n winTrackConditionGood: boolean\n winTrackConditionHeavy: boolean\n winTrackConditionSoft: boolean\n winTrackConditionSynthetic: boolean\n locationCountryAustralia: boolean\n locationCountryNewZealand: boolean\n locationCountryInternational: boolean\n selectedTracks: SelectedTrackType\n}\n\nexport interface IStructuredSearchResults {\n results: StructuredSearchResult[]\n totalResultCount: number\n aggregations: StructuredSearchAggregations | null\n}\n\nexport interface StructuredSearchState {\n searchCriteria: StructuredSearchFields\n searchResults: IStructuredSearchResults\n}\n\nexport type StructuredSearchStateMap = StateMap\n\nexport const defaultStructuredSearchFieldState: Readonly = {\n contestTypeRace: false,\n contestTypeTrot: false,\n contestTypeDogs: false,\n dateToday: false,\n dateTomorrow: false,\n dateBeyondTomorrow: false,\n wonLastStart: false,\n placedLastStart: false,\n gearChange: false,\n firstUp: false,\n secondUp: false,\n careerPrizeMoney: '',\n careerWinPercentage: RangeBoundaries.minPercentage,\n trackWinPercentage: RangeBoundaries.minPercentage,\n distanceWinPercentage: RangeBoundaries.minPercentage,\n trackdistanceWinPercentage: RangeBoundaries.minPercentage,\n barrierNumberOneToFive: false,\n barrierNumberSixPlus: false,\n boxNumberOneToFour: false,\n boxNumberFivePlus: false,\n apprentice: false,\n favouriteLastStart: false,\n weightChangedUp: false,\n weightChangedDown: false,\n weightNotChanged: false,\n distanceChangedUp: false,\n distanceChangedDown: false,\n distanceNotChanged: false,\n winTrackConditionFirm: false,\n winTrackConditionGood: false,\n winTrackConditionHeavy: false,\n winTrackConditionSoft: false,\n winTrackConditionSynthetic: false,\n locationCountryAustralia: false,\n locationCountryNewZealand: false,\n locationCountryInternational: false,\n selectedTracks: null,\n ...RangeBoundaries,\n}\n\nconst defaultStructuredSearchResultsState: Readonly = {\n results: [],\n totalResultCount: 0,\n aggregations: null,\n}\n\nexport const defaultState: Readonly = {\n searchCriteria: {\n ...defaultStructuredSearchFieldState,\n },\n searchResults: {\n ...defaultStructuredSearchResultsState,\n },\n}\n\nexport function structuredSearchDriver(\n state = fromJS(defaultState),\n signal: Signal\n): StructuredSearchStateMap {\n switch (signal.tag) {\n case StructuredSearchValueChanged: {\n const { field, value } = signal.data\n return state.setIn(['searchCriteria', field], value)\n }\n case StructuredSearchResults: {\n const { results, totalResultCount, aggregations } = signal.data as IStructuredSearchResults\n\n let searchResult = state\n .setIn(['searchResults', 'totalResultCount'], fromJS(totalResultCount))\n .setIn(['searchResults', 'results'], fromJS(results))\n\n if (aggregations) {\n let selectedTracks: SelectedTrackType = state.getIn(['searchCriteria', 'selectedTracks'])\n if (aggregations.tracks) {\n const tracks = aggregations.tracks\n selectedTracks = filterSelectedTracksTrackIds(tracks, selectedTracks)\n }\n searchResult = searchResult\n .setIn(['searchResults', 'aggregations'], fromJS(aggregations))\n .setIn(['searchCriteria', 'selectedTracks'], fromJS(selectedTracks))\n }\n return searchResult\n }\n case StructuredSearchSetState: {\n const searchCriteria = signal.data as StructuredSearchFields\n return state.set('searchCriteria', fromJS(searchCriteria))\n }\n case StructuredSearchSetSelectedTracks: {\n return state.setIn(['searchCriteria', 'selectedTracks'], fromJS(signal.data))\n }\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n driver: structuredSearchDriver,\n path: 'structured-search',\n})\n\nexport const observableSearchCriteria = (): Rx.Observable => {\n return state$\n .map(x => {\n return x.toJS().searchCriteria\n })\n .debounce(500)\n .distinctUntilChanged()\n}\n","import React from 'react'\nimport { ButtonGroupItemStyled, ButtonGroupStyled } from '../Buttons/ButtonGroup.styles'\n\nexport const Races = 'races'\nexport const Trots = 'trots'\nexport const Dogs = 'dogs'\n\ninterface CallbackProps {\n field: string\n value: boolean\n}\nexport interface CodeSelectionFilter {\n racesSelected: boolean\n trotsSelected: boolean\n dogsSelected: boolean\n selectionChangedCallback: ({ field, value }: CallbackProps) => void\n testId: string\n}\n\nexport function CodeSelectionFilter({\n racesSelected,\n trotsSelected,\n dogsSelected,\n selectionChangedCallback,\n testId,\n}: CodeSelectionFilter) {\n const toggleButtonHandler = (field: string, value: boolean) => {\n selectionChangedCallback({ field, value })\n }\n\n return (\n \n toggleButtonHandler(Races, !racesSelected)}\n selected={racesSelected}\n aria-label='Races'\n data-tid-races={testId}\n >\n Races\n \n\n toggleButtonHandler(Trots, !trotsSelected)}\n selected={trotsSelected}\n aria-label='Trots'\n data-tid-trots={testId}\n >\n Trots\n \n\n toggleButtonHandler(Dogs, !dogsSelected)}\n selected={dogsSelected}\n aria-label='Dogs'\n data-tid-dogs={testId}\n >\n Dogs\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { colors } from '@core/Settings'\n\nexport const PillStyled = styled.span({\n background: hexColors.whiteSmoke,\n borderRadius: '0.25rem',\n color: hexColors.grey,\n display: 'inline-block',\n fontSize: '1.0rem',\n lineHeight: '0.8',\n margin: '0 0.5rem 0 auto',\n padding: '0.5rem',\n textAlign: 'center',\n width: '2.8rem',\n})\n\nexport const StructuredSearchContainerStyled = styled.div({\n backgroundColor: colors.structuredSearch.container.background,\n})\n\nexport const StructureSearchGroupHeader = styled.div({\n color: colors.structuredSearch.groupheader.text,\n fontSize: '1.4rem',\n fontWeight: 700,\n padding: '0.25rem 0 0.5rem 0',\n})\n\nexport const StructureSearchGroupSubHeader = styled.div({\n color: colors.structuredSearch.groupheader.text,\n fontSize: '1.4rem',\n padding: '1rem 0 0.75rem 0',\n fontWeight: 700,\n})\n\nexport const StructureSearchGroup = styled.div({\n backgroundColor: colors.structuredSearch.section.background,\n fontSize: '1.4rem',\n margin: '0.25rem 0.5rem',\n padding: '0.25rem 0.5rem',\n})\n\nexport const StructuredSearchTabListContainerStyled = styled.div({\n backgroundColor: colors.structuredSearch.tabs.background,\n})\n\nexport const TabLabelResultsStyled = styled.span({\n backgroundColor: colors.structuredSearch.tabs.count.background,\n border: '0.3rem',\n color: colors.structuredSearch.tabs.count.text,\n marginLeft: '0.5rem',\n padding: '0.25rem 0.5rem',\n})\n\nexport const CriteriaSubtitleLabelStyled = styled.span({\n display: 'block',\n padding: '0.75rem 0',\n})\n\nexport const CriteriaFixedFooterStyled = styled.div({\n position: 'fixed',\n bottom: 0,\n left: 0,\n width: '100%',\n backgroundColor: 'rgba(256, 256, 256, 0.9)',\n display: 'flex',\n justifyContent: 'space-evenly',\n padding: '0.25rem 0.5rem',\n boxSizing: 'border-box',\n zIndex: layering.overlayLow,\n})\n\nexport const ToggleBlockStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '1rem',\n})\n\nexport const ToggleNoLabelBlockStyled = styled(ToggleBlockStyled)({\n marginBottom: '0.25rem',\n})\n\nexport const ToggleFirstBlockStyled = styled(ToggleBlockStyled)({\n marginTop: '1rem',\n})\n\nexport const ToggleLabelStyled = styled.div({\n fontSize: '1.4rem',\n})\n\nexport const ToggleSubLabelStyled = styled.div({\n fontSize: '1.2rem',\n color: colors.structuredSearch.toggle.text,\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const RangeInputContainerStyled = styled('div')({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n padding: '2.2rem 2.5rem 0rem 2.5rem',\n})\n\nexport const RangeInputBackgroundTrackStyled = styled('div')({\n height: '3.6rem',\n display: 'flex',\n width: '100%',\n})\n\nexport const RangeInputRenderThumbStyled = styled('div')({\n height: '2.2rem',\n width: '2.2rem',\n borderRadius: '1rem',\n backgroundColor: colors.rangeInput.indicator.notdragged,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n boxShadow: `0px 2px 6px ${colors.rangeInput.indicator.shadow}`,\n outline: 'none',\n})\n\nexport const RangeInputRenderTooltipStyled = styled('div')({\n position: 'absolute',\n top: '-2.6rem',\n color: colors.rangeInput.tooltip.color,\n fontSize: '1.2rem',\n fontWeight: 'bold',\n padding: '0rem 0.5rem',\n borderRadius: '0.5rem',\n minWidth: '2.2rem',\n textAlign: 'center',\n backgroundColor: colors.rangeInput.tooltip.background,\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: '1.1rem',\n top: '1.6em',\n width: '0',\n height: '0',\n borderLeft: '0.5rem solid transparent',\n borderRight: '0.5rem solid transparent',\n borderTop: `0.5rem solid ${colors.rangeInput.tooltip.background}`,\n clear: 'both',\n },\n})\n\ninterface RangeInputDragIndicatorProps {\n isDragged: boolean\n}\n\nexport const RangeInputDragIndicatorStyled = styled('div')(\n {\n height: '2.2rem',\n width: '2.2rem',\n borderRadius: '1rem',\n },\n ({ isDragged }) => ({\n backgroundColor: isDragged\n ? colors.rangeInput.indicator.notdragged\n : colors.rangeInput.indicator.dragged,\n })\n)\n","import React from 'react'\nimport { GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Range, getTrackBackground } from 'react-range'\nimport {\n RangeInputContainerStyled,\n RangeInputBackgroundTrackStyled,\n RangeInputRenderThumbStyled,\n RangeInputRenderTooltipStyled,\n RangeInputDragIndicatorStyled,\n} from './RangeInput.styles'\nimport { colors } from '@core/Settings'\n\ninterface RangeInputProps {\n step: number\n values: number[]\n minRange: number\n maxRange: number\n minChangedCallback: (value: number) => void\n maxChangedCallback?: (value: number) => void\n testId: string\n id: string\n isMaxInfinite?: boolean\n isCurrency?: boolean\n isPercentage?: boolean\n}\n\nexport function RangeInput({\n step,\n values,\n minRange,\n maxRange,\n minChangedCallback,\n maxChangedCallback,\n testId,\n id,\n isMaxInfinite,\n isCurrency,\n isPercentage,\n}: RangeInputProps): JSX.Element {\n const changedCallback = (newValues: number[]) => {\n if (newValues[0] !== values[0]) {\n minChangedCallback(newValues[0])\n }\n\n if (newValues[1] !== values[1]) {\n if (maxChangedCallback) maxChangedCallback(newValues[1])\n }\n }\n\n return (\n
    \n \n \n \n \n \n
    \n )\n}\n\ninterface RangeInputComponentProps {\n step: number\n id: string\n values: number[]\n changedCallback: (value: number[]) => void\n minRange: number\n maxRange: number\n testId: string\n isMaxInfinite?: boolean\n isCurrency?: boolean\n isPercentage?: boolean\n}\n\nexport const RangeInputComponent: React.FC = ({\n step,\n values,\n id,\n testId,\n maxRange,\n minRange,\n changedCallback,\n isMaxInfinite,\n isCurrency,\n isPercentage,\n}) => {\n const inputTestId = testId ? { [`data-tid-${testId}`]: '' } : {}\n\n return (\n \n changedCallback(newValues)}\n renderTrack={({ props, children }) => (\n \n 1\n ? [\n colors.rangeInput.track.background,\n colors.rangeInput.track.foreground,\n colors.rangeInput.track.background,\n ]\n : [colors.rangeInput.track.background, colors.rangeInput.track.foreground],\n min: minRange,\n max: maxRange,\n }),\n alignSelf: 'center',\n }}\n >\n {children}\n \n \n )}\n renderThumb={({ index, props, isDragged }) => {\n const inputTestThumbId = testId ? { [`data-tid-${testId}-thumb`]: index } : {}\n\n let label: string | number = values[index]\n if (index === 1 && isMaxInfinite && values[index] === maxRange) {\n label = `${values[index]}+`\n }\n\n return (\n \n \n {isCurrency ? '$' : ''}\n {label}\n {isPercentage ? '%' : ''}\n \n\n \n \n )\n }}\n />\n \n )\n}\n","import styled from '@emotion/styled'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { AppHeaderButtonStyled } from '../AppHeader/Components/Buttons/Buttons.styles'\nimport { colors } from '@core/Settings'\nimport { MainContainer } from '@core/Components/Containers'\n\nexport const SearchOverlayStyled = styled.div({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n background: colors.search.background,\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const SearchOverlayHeaderStyled = styled.div({\n position: 'fixed',\n width: '100%',\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n height: measurements.mobi.headerHeight,\n minHeight: measurements.mobi.headerHeight,\n background: colors.search.header.background,\n})\n\nexport const CloseButtonStyled = styled(AppHeaderButtonStyled)({\n marginLeft: 'auto',\n})\n\nexport const SearchResultsContainerStyled = styled(MainContainer)({\n overflowY: 'scroll', // scroll, not auto for momentum scroll to work\n WebkitOverflowScrolling: 'touch', // enables momentum scroll < IOS11\n minHeight: 0,\n flex: 1,\n background: colors.search.list.background,\n marginTop: measurements.mobi.headerHeight,\n '&::after': {\n content: '\"\"',\n display: 'block',\n paddingBottom: '22rem', // Height of footer and notification(s)\n },\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { darken } from 'polished'\n\nexport interface ChipsTypes {\n hollow: ChipsType\n filled: ChipsType\n}\n\nconst chipsColors: ChipsTypes = {\n hollow: {\n text: hexColors.grey,\n background: hexColors.white,\n border: hexColors.veryLightGrey,\n hover: {\n background: darken(0.1, hexColors.grey),\n },\n },\n filled: {\n text: hexColors.white,\n background: hexColors.charCoal,\n border: 'transparent',\n hover: {\n background: darken(0.1, hexColors.charCoal),\n },\n },\n}\n\nexport interface ChipProps {\n color?: keyof ChipsTypes\n selected?: boolean\n}\n\nconst ChipBaseButtonStyled = styled('button')({\n alignItems: 'center',\n boxSizing: 'border-box',\n border: '1px solid',\n display: 'inline-block',\n fontSize: '1.2rem',\n lineHeight: '1.8',\n padding: '0.3rem 1.25rem 0.3rem 0.75rem',\n textAlign: 'center',\n transition: 'background-color 200ms',\n verticalAlign: 'middle',\n touchAction: 'manipulation',\n borderRadius: '2rem',\n})\n\nexport const ChipStyled = styled(ChipBaseButtonStyled)(({ color = 'hollow' }) => ({\n backgroundColor: chipsColors[color].background,\n borderColor: chipsColors[color].border,\n color: chipsColors[color].text,\n userSelect: 'none',\n '&:hover': {\n backgroundColor: chipsColors[color].background,\n },\n}))\n\nexport const ChipContainerStyled = styled('div')({\n marginBottom: '-1rem',\n '> *': {\n marginBottom: '0.75rem',\n marginRight: '0.5rem',\n },\n})\n\ninterface ChipsType {\n text: string\n background: string\n border: string\n hover: {\n background: string\n }\n}\n","import React from 'react'\nimport { ChipStyled, ChipsTypes } from './Chips.styles'\n\nexport interface ChipProps extends React.ButtonHTMLAttributes {\n onClick: (T: React.FormEvent) => void\n children: React.ReactNode\n color?: keyof ChipsTypes\n testId?: string\n}\n\nexport function Chip({ onClick, children, color = 'hollow', ...ChipProps }: ChipProps) {\n return (\n \n {children}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { colors } from '@core/Settings'\nimport { Chip } from '@core/Components/Buttons/Chips/Chips'\nimport { MainContainer } from '@core/Components/Containers'\n\nexport const StructuredSearchLocationTrackModalHeaderTextStyled = styled.h1({\n textTransform: 'uppercase',\n fontSize: '1.8rem',\n color: colors.structuredSearchLocationModal.header.text,\n textAlign: 'center',\n flex: '1',\n})\n\nexport const StructuredSearchTrackModalMainContainerStyled = styled(MainContainer)({\n overflowY: 'scroll', // scroll, not auto for momentum scroll to work\n WebkitOverflowScrolling: 'touch', // enables momentum scroll < IOS11\n minHeight: 0,\n flex: 1,\n background: colors.search.list.background,\n marginTop: measurements.mobi.headerHeight,\n '&::after': {\n content: '\"\"',\n display: 'block',\n paddingBottom: '6rem', // Height of footer and notification(s)\n },\n})\n\nexport const StructuredSearchResultComponentStyled = styled.div({\n fontSize: '1.4rem',\n backgroundColor: colors.search.result.background,\n padding: '1rem 0rem 1rem 1rem',\n borderBottom: `1px solid ${colors.search.result.border}`,\n})\n\nexport const ChipWithRightIcon = styled(Chip)({\n padding: '0.3rem 0.75rem 0.3rem 1.25rem',\n})\n\nexport const CheckboxInResultStyled = styled.div({\n marginTop: '-0.2rem',\n})\n\nexport const CloseChipIcon = styled(Icon)({\n marginLeft: '0.75rem',\n verticalAlign: 'middle',\n})\n\nexport const AddChipIcon = styled(Icon)({\n marginRight: '0.5rem',\n verticalAlign: 'middle',\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const StructuredSearchResultPrimaryInfoStyled = styled('span')({\n fontSize: '1.2rem',\n display: 'block',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n})\n\nexport const StructuredSearchResultSecondaryInfoStyled = styled('span')({\n color: colors.search.result.secondary,\n display: 'block',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontSize: '1.0rem',\n})\n\nexport const StructuredSearchResultInfoHeaderStyled = styled('div')({\n borderBottom: `1px solid ${colors.search.result.border}`,\n textAlign: 'right',\n padding: '0.25rem 1rem',\n})\n\nexport const StructuredSearchFixedOddsLabelStyled = styled('span')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n color: colors.structuredSearch.resultDetails.fixed,\n})\n\nexport const DriverStyled = styled(StructuredSearchResultSecondaryInfoStyled)({\n marginRight: '3px',\n display: 'inline',\n})\n\nexport const StructuredSearchResultStyled = styled('div')({\n fontSize: '1.2rem',\n backgroundColor: colors.search.result.background,\n padding: '0.5rem 0.75rem',\n borderBottom: `1px solid ${colors.search.result.border}`,\n})\n\nexport const NoResultsStyled = styled('div')({\n fontSize: '1.8rem',\n transform: 'translate(0%, 90%)',\n textAlign: 'center',\n})\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport enum StructuredSearchTextLabelFontSize {\n Small,\n Large,\n}\n\ninterface StructuredSearchTextLabelStyledProps {\n size?: StructuredSearchTextLabelFontSize\n}\n\nexport const StructuredSearchTextLabelStyled = styled('span')(\n ({ size }) => ({\n fontSize: getTextFontSize(size),\n color: colors.structuredSearch.initialText,\n textAlign: 'center',\n display: 'block',\n margin: '1rem 0 0.25rem 0',\n })\n)\n\nfunction getTextFontSize(size?: StructuredSearchTextLabelFontSize): string {\n let sizeString: string\n switch (size) {\n case StructuredSearchTextLabelFontSize.Large:\n sizeString = '1.8rem'\n break\n case StructuredSearchTextLabelFontSize.Small:\n sizeString = '1.2rem'\n break\n default:\n sizeString = '1.6rem'\n }\n return sizeString\n}\n","import React from 'react'\nimport {\n StructuredSearchTextLabelStyled,\n StructuredSearchTextLabelFontSize,\n} from './StructuredSearchTextLabelStyled.styles'\n\ninterface StructuredSearchTextLabelProps {\n children: React.ReactNode\n size?: StructuredSearchTextLabelFontSize\n}\n\nexport function StructuredSearchTextLabel({ children, size }: StructuredSearchTextLabelProps) {\n return {children}\n}\n","import React from 'react'\nimport { SearchOverlayStyled, SearchOverlayHeaderStyled } from '@core/Areas/Search/Search.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport {\n StructuredSearchLocationTrackModalHeaderTextStyled,\n StructuredSearchTrackModalMainContainerStyled,\n StructuredSearchResultComponentStyled,\n CheckboxInResultStyled,\n} from './StructuredSearchLocation.styles'\n\nimport {\n state$ as structuredSearchState$,\n SelectedTrackType,\n StructuredSearchSetSelectedTracks,\n} from '../../Driver/StructuredSearchDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { GridRow, GridCell, Grid } from '@mobi/component-library/Common/Grid'\nimport { getModalTracks, ModalTrack } from './track-utils'\n\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { colors } from '@core/Settings'\nimport { AppHeaderButtonStyled } from '@core/Areas/AppHeader/Components/Buttons/Buttons.styles'\nimport { CriteriaFixedFooterStyled, PillStyled } from '../../StructuredSearch.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoResultsStyled } from '../../Results/StructuredSearchResults.styles'\nimport { StructuredSearchTextLabel } from '../../Results/StructuredSearchTextLabel'\nimport { StructuredSearchTextLabelFontSize } from '../../Results/StructuredSearchTextLabelStyled.styles'\n\nconst TRACKS = 'Tracks'\nconst NOTRACKS = 'No Tracks'\n\ninterface IconTypes {\n Races: keyof typeof iconPaths\n Trots: keyof typeof iconPaths\n Dogs: keyof typeof iconPaths\n}\n\nexport const IconTypes: IconTypes = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport function StructuredSearchTrackModal(): JSX.Element {\n const [modalTracks, setModalTracks] = React.useState([])\n let tracks: JSX.Element | JSX.Element[] | null = null\n let dataTid: string = NOTRACKS\n\n const { searchResults, searchCriteria } = useObservableImmutable(structuredSearchState$, [\n 'searchResults',\n 'searchCriteria',\n ])\n const availableTracks = searchResults?.get('aggregations')?.get('tracks')\n const selectedTracks = searchCriteria?.get('selectedTracks')\n\n React.useEffect(() => {\n if (availableTracks) {\n setModalTracks(getModalTracks(availableTracks.toJS(), selectedTracks?.toJS() ?? []))\n }\n }, [availableTracks, selectedTracks])\n\n const handleClearButtonClick = () => {\n // Clear the selections here\n\n let updatedTracks = modalTracks\n\n updatedTracks = updatedTracks.map(track => {\n track.selected = false\n return track\n })\n setModalTracks(updatedTracks)\n }\n\n const handleCloseButtonClick = (doSave: boolean) => {\n if (doSave) {\n // Update the driver\n\n let selectedTracks: SelectedTrackType = []\n\n selectedTracks = modalTracks.filter(track => track.selected).map(track => track.id)\n\n if (selectedTracks.length === 0) {\n selectedTracks = null\n }\n\n StructuredSearchSetSelectedTracks(selectedTracks)\n }\n // Close the overlay\n OverlayClose()\n }\n\n const selectCheckBox = (id: string) => {\n // Flip checkbox state here\n // setModalTracks()\n let updatedTracks: ModalTrack[] = modalTracks\n\n updatedTracks = updatedTracks.map(track => {\n if (track.id === id) {\n track.selected = !track.selected\n }\n return track\n })\n setModalTracks(updatedTracks)\n }\n\n if (modalTracks) {\n dataTid = TRACKS\n tracks = modalTracks.map(track => {\n const iconType = IconTypes[track.contestType as keyof typeof IconTypes]\n return (\n \n \n \n {track.name}\n \n {track.isDuplicate ? (\n \n ) : null}\n \n \n {track.location}\n \n \n \n selectCheckBox(track.id)}\n size={2.2}\n />\n \n \n \n \n \n )\n })\n } else {\n dataTid = NOTRACKS\n }\n\n return (\n \n \n handleCloseButtonClick(false)}\n data-tid-search-button-back\n >\n \n \n \n Tracks\n \n\n handleCloseButtonClick(false)}\n data-tid-search-button-close\n >\n \n \n \n \n <>{modalTracks && modalTracks.length > 0 && tracks} \n <>\n {!modalTracks ||\n (modalTracks && modalTracks.length === 0 && (\n \n ))}{' '}\n \n \n {modalTracks && modalTracks.length > 0 && (\n \n \n \n \n \n Clear\n \n \n \n handleCloseButtonClick(true)}\n testId={'structured-search-submit-button'}\n data-tid-search-modal-button-close\n >\n Done\n \n \n \n \n \n )}\n \n )\n}\n\nfunction StructuredSearchLocationTrackModalNoTracks(): JSX.Element {\n return (\n \n \n \n No Tracks Found\n \n \n Try making your criteria less specific\n \n \n )\n}\n","import React from 'react'\nimport {\n StructureSearchGroupHeader,\n StructureSearchGroupSubHeader,\n} from '../../StructuredSearch.styles'\nimport {\n ButtonGroupItemStyled,\n ButtonGroupStyled,\n} from '@core/Components/Buttons/ButtonGroup.styles'\nimport {\n state$ as structuredSearchState$,\n StructuredSearchFields,\n StructuredSearchValueChanged,\n defaultState,\n StructuredSearchSetSelectedTracks,\n} from '../../Driver/StructuredSearchDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { OverlayOpen } from '@core/Components/Overlay'\nimport { StructuredSearchTrackModal, IconTypes } from './StructuredSearchLocationTrackModal'\nimport { Chip } from '@core/Components/Buttons/Chips/Chips'\nimport { ChipContainerStyled } from '@core/Components/Buttons/Chips/Chips.styles'\nimport { getFilteredTracks } from './track-utils'\nimport { CloseChipIcon, AddChipIcon, ChipWithRightIcon } from './StructuredSearchLocation.styles'\nimport { colors } from '@core/Settings'\n\nexport function StructuredSearchLocation(): JSX.Element {\n const { searchResults, searchCriteria } = useObservableImmutable(structuredSearchState$, [\n 'searchResults',\n 'searchCriteria',\n ])\n const searchCriteriaJs = searchCriteria?.toJS()\n const aus = searchCriteriaJs\n ? searchCriteriaJs.locationCountryAustralia\n : defaultState.searchCriteria.locationCountryAustralia\n const nz = searchCriteriaJs\n ? searchCriteriaJs.locationCountryNewZealand\n : defaultState.searchCriteria.locationCountryNewZealand\n const int = searchCriteriaJs\n ? searchCriteriaJs.locationCountryInternational\n : defaultState.searchCriteria.locationCountryInternational\n const selectedTracks = searchCriteriaJs\n ? searchCriteriaJs.selectedTracks\n : defaultState.searchCriteria.selectedTracks\n\n const onChangeCallback = (\n field: keyof StructuredSearchFields,\n value: string | boolean | Date\n ) => {\n StructuredSearchValueChanged({ field, value })\n }\n\n const addTrack = () => {\n OverlayOpen(StructuredSearchTrackModal)\n }\n\n const removeTrack = (id: string) => {\n if (selectedTracks) {\n const newSelectedTracks = selectedTracks.filter(track => track != id)\n StructuredSearchSetSelectedTracks(newSelectedTracks)\n }\n }\n\n const aggregations = searchResults?.get('aggregations')\n const availableTracks = aggregations ? aggregations.get('tracks').toJS() : null\n\n let mappedChips = null\n\n if (selectedTracks) {\n const selectedTracksJS = selectedTracks\n const displayableTracks = getFilteredTracks(availableTracks, selectedTracksJS)\n if (displayableTracks) {\n mappedChips = displayableTracks.map(track => {\n const iconType = IconTypes[track.contestType as keyof typeof IconTypes]\n return (\n removeTrack(track.id)}\n color='filled'\n key={track.id}\n data-tid-structured-search-location-chip={track.id}\n >\n {track.name}\n {!track.isAustralian && <> ({track.location})}\n\n {track.isDuplicate && (\n \n )}\n\n \n \n )\n })\n }\n }\n\n return (\n <>\n Location\n \n onChangeCallback('locationCountryAustralia', !aus)}\n >\n Australia\n \n onChangeCallback('locationCountryNewZealand', !nz)}\n >\n New Zealand\n \n onChangeCallback('locationCountryInternational', !int)}\n >\n International\n \n \n\n Track\n\n \n {mappedChips}\n \n Add a Track\n \n \n \n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport {\n state$ as structuredSearchState$,\n StructuredSearchFields,\n StructuredSearchValueChanged,\n StructuredSearchSetState,\n defaultState,\n} from '../Driver/StructuredSearchDriver'\nimport { CodeSelectionFilter, Races, Trots, Dogs } from '@core/Components/CodeSelector/CodeSelector'\nimport { GridRow, Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport {\n StructuredSearchContainerStyled,\n StructureSearchGroup,\n CriteriaFixedFooterStyled,\n StructureSearchGroupHeader,\n CriteriaSubtitleLabelStyled,\n ToggleBlockStyled,\n ToggleLabelStyled,\n ToggleSubLabelStyled,\n ToggleFirstBlockStyled,\n ToggleNoLabelBlockStyled,\n} from '../StructuredSearch.styles'\n\nimport { RangeInput } from '../Components/RangeInput/RangeInput'\nimport {\n ButtonGroupStyled,\n ButtonGroupItemStyled,\n} from '@core/Components/Buttons/ButtonGroup.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { RangeBoundaries } from '../RangeBoundaries'\nimport { StructuredSearchLocation } from '../Components/StructuredSearchLocation/StructuredSearchLocation'\nimport { Toggle } from '@mobi/component-library/Common/Input'\nimport { FeatureFlag } from '@core/State/LaunchDarklyFeatures/Components/FeatureFlag'\nimport { FeatureFlags } from '@mobi/settings'\n\nexport function StructuredSearchCriteria({\n selectTabIndex,\n}: {\n selectTabIndex: (x: number) => void\n}): JSX.Element {\n const { searchCriteria, searchResults } = useObservableImmutable(structuredSearchState$, [\n 'searchCriteria',\n 'searchResults',\n ])\n const totalResultCount = searchResults?.get('totalResultCount')\n\n // ideally move/hide the defaultState handling within the driver and/or side effects\n // - may require a re-think about side-effects assigning default values before this component subscribes to handle Rx.DistinctUntilChanged from useObservableImmutable\n const sc = searchCriteria ? searchCriteria.toJS() : defaultState.searchCriteria\n\n const onChangeCallback = (\n field: keyof StructuredSearchFields,\n value: string | boolean | Date | number\n ) => {\n StructuredSearchValueChanged({ field, value })\n }\n\n const resetCallback = () => {\n StructuredSearchSetState(defaultState.searchCriteria)\n }\n\n const contestTypeChangedCallback = ({ field, value }: { field: string; value: boolean }) => {\n let driverField: keyof StructuredSearchFields | null = null\n switch (field) {\n case Races:\n driverField = 'contestTypeRace'\n break\n case Trots:\n driverField = 'contestTypeTrot'\n break\n case Dogs:\n driverField = 'contestTypeDogs'\n break\n }\n if (driverField) {\n StructuredSearchValueChanged({ field: driverField, value })\n }\n }\n\n return (\n \n \n \n \n \n Racing Code\n \n \n \n \n\n \n \n \n Date\n \n onChangeCallback('dateToday', !sc.dateToday)}\n >\n Today\n \n onChangeCallback('dateTomorrow', !sc.dateTomorrow)}\n >\n Tomorrow\n \n onChangeCallback('dateBeyondTomorrow', !sc.dateBeyondTomorrow)}\n >\n Later\n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n \n Last Start\n\n \n
    \n Won Last Start\n
    \n onChangeCallback('wonLastStart', !sc.wonLastStart)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n \n
    \n Placed Last Start\n
    \n onChangeCallback('placedLastStart', !sc.placedLastStart)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n \n
    \n Favourite Last Start\n
    \n onChangeCallback('favouriteLastStart', !sc.favouriteLastStart)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n Days Since Last Start\n {\n onChangeCallback('minDaysSinceLastStart', value)\n }}\n maxChangedCallback={(value: number) => {\n onChangeCallback('maxDaysSinceLastStart', value)\n }}\n isMaxInfinite={true}\n />\n\n Days Since Last Win\n {\n onChangeCallback('minDaysSinceLastWin', value)\n }}\n maxChangedCallback={(value: number) => {\n onChangeCallback('maxDaysSinceLastWin', value)\n }}\n isMaxInfinite={true}\n />\n Starts Since Last Spell\n {\n onChangeCallback('minStartsSinceLastSpell', value)\n }}\n maxChangedCallback={(value: number) => {\n onChangeCallback('maxStartsSinceLastSpell', value)\n }}\n isMaxInfinite={true}\n />\n
    \n\n \n This Start\n \n Fixed Odds Price\n {\n onChangeCallback('minFixedOddsPrice', value)\n }}\n maxChangedCallback={(value: number) => {\n onChangeCallback('maxFixedOddsPrice', value)\n }}\n isMaxInfinite={true}\n />\n \n\n \n
    \n First Up\n First start since a spell\n
    \n onChangeCallback('firstUp', !sc.firstUp)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n \n
    \n Second Up\n Second start since a spell\n
    \n onChangeCallback('secondUp', !sc.secondUp)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n \n
    \n Gear Change\n Gear changed since last start\n
    \n onChangeCallback('gearChange', !sc.gearChange)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n \n
    \n Apprentice\n Apprentice riding\n
    \n onChangeCallback('apprentice', !sc.apprentice)}\n isDisabled={false}\n type='inverted'\n />\n
    \n\n Position (Races)\n\n \n \n onChangeCallback('barrierNumberOneToFive', !sc.barrierNumberOneToFive)\n }\n >\n Barrier 1-5\n \n\n onChangeCallback('barrierNumberSixPlus', !sc.barrierNumberSixPlus)}\n >\n Barrier 6+\n \n \n\n Position (Dogs)\n\n \n onChangeCallback('boxNumberOneToFour', !sc.boxNumberOneToFour)}\n >\n Box 1-4\n \n\n onChangeCallback('boxNumberFivePlus', !sc.boxNumberFivePlus)}\n >\n Box 5-8\n \n \n\n Weight Change\n\n \n onChangeCallback('weightChangedUp', !sc.weightChangedUp)}\n >\n Up\n \n\n onChangeCallback('weightChangedDown', !sc.weightChangedDown)}\n >\n Down\n \n\n onChangeCallback('weightNotChanged', !sc.weightNotChanged)}\n >\n Same\n \n \n\n Distance Change\n\n \n onChangeCallback('distanceChangedUp', !sc.distanceChangedUp)}\n >\n Up\n \n\n onChangeCallback('distanceChangedDown', !sc.distanceChangedDown)}\n >\n Down\n \n\n onChangeCallback('distanceNotChanged', !sc.distanceNotChanged)}\n >\n Same\n \n \n\n
    \n\n Lifetime\n\n Conditions\n \n \n onChangeCallback('winTrackConditionGood', !sc.winTrackConditionGood)\n }\n >\n Good\n \n\n \n onChangeCallback('winTrackConditionFirm', !sc.winTrackConditionFirm)\n }\n >\n Firm\n \n\n \n onChangeCallback('winTrackConditionSoft', !sc.winTrackConditionSoft)\n }\n >\n Soft\n \n\n \n onChangeCallback('winTrackConditionHeavy', !sc.winTrackConditionHeavy)\n }\n >\n Heavy\n \n\n \n onChangeCallback('winTrackConditionSynthetic', !sc.winTrackConditionSynthetic)\n }\n >\n Synthetic\n \n \n
    \n
    \n
    \n\n \n \n \n Career Win Percentage\n {\n onChangeCallback('careerWinPercentage', value)\n }}\n isMaxInfinite={false}\n isPercentage={true}\n />\n\n Track Win Percentage\n {\n onChangeCallback('trackWinPercentage', value)\n }}\n isMaxInfinite={true}\n isPercentage={true}\n />\n\n Distance Win Percentage\n {\n onChangeCallback('distanceWinPercentage', value)\n }}\n isMaxInfinite={true}\n isPercentage={true}\n />\n\n \n Track/Distance Win Percentage\n \n {\n onChangeCallback('trackdistanceWinPercentage', value)\n }}\n isMaxInfinite={true}\n isPercentage={true}\n />\n \n \n \n
    \n\n {ReactDOM.createPortal(\n \n \n \n \n \n Clear\n \n \n \n selectTabIndex(1)}\n testId='structured-search-submit-button'\n >\n Results ({totalResultCount})\n \n \n \n \n ,\n document.body\n )}\n\n
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { lessThan } from '@mobi/component-library/Utils/media'\nimport { SilkImage } from '@core/Components/SilkImage/SilkImage'\nimport { getImageUrlWithSizes } from '@core/Components/SilkImage/utils'\n\nconst StructuredSearchSilkContainer = styled('span')({\n width: '2.5rem',\n verticalAlign: 'middle',\n display: 'block',\n padding: '0 0.5rem 0 0',\n marginTop: '0.5rem',\n marginRight: '0.25rem',\n\n [lessThan('px350')]: {\n display: 'none',\n },\n})\n\ninterface StructuredSearchSilkImageProps {\n meetingId: string\n meetingDate: string\n raceNo: number\n isDogsSilk: boolean\n isTrots: boolean\n imageSize?: string\n acceptorNumber: number\n}\n\nexport function StructuredSearchSilkImage({\n meetingId,\n meetingDate,\n raceNo,\n isDogsSilk,\n isTrots,\n acceptorNumber,\n}: StructuredSearchSilkImageProps) {\n const imageUrlWithSizes = getImageUrlWithSizes({ meetingId, meetingDate, isTrots, raceNo })\n\n const xOffset = acceptorNumber - 1\n\n return (\n \n \n \n )\n}\n","import { colors } from '@core/Settings'\nimport styled from '@emotion/styled'\n\nexport const StructuredLocationTimeStyled = styled('div')({\n fontSize: '1rem',\n display: 'flex',\n})\n\nexport const StructuredRaceNumberStyled = styled('span')({\n paddingLeft: '0.25rem',\n verticalAlign: 'middle',\n})\n\nexport const StructuredSearchResultIconStyled = styled('span')({\n marginLeft: '0',\n})\n\nexport const StructuredSearchLocationNameContainerStyled = styled('div')({\n marginLeft: 'auto',\n color: colors.structuredSearch.resultDetails.text,\n})\n\nexport const StructuredSearchResultASTTimerSTyled = styled('div')({\n 'div > strong': {\n fontWeight: 400,\n fontSize: '1rem',\n color: colors.structuredSearch.resultDetails.text,\n },\n})\n\nexport const StructuredSearchLocationNameStyled = styled('span')({\n display: 'inline-block',\n verticalAlign: 'middle',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n maxWidth: '7.2rem',\n})\n\nexport const StructuredSearchResultPricesStyled = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n})\n","import { AcceptorDetail, RaceDetail, RacingCode } from '../StructuredSearch/StructuredSearchResult'\n\nexport type SearchResult =\n | SearchResultRace\n | SearchResultAcceptor\n | SearchResultSport\n | SearchResultFobEvent\n | SearchResultFobProposition\n\ninterface Error {\n message: string\n}\n\nexport type SearchResultType = SearchResult[] | Error\n\nexport interface RawSearchResults {\n statistics: {\n count: number\n raceCount: number\n acceptorCount: number\n sportsCount: number\n hitCount: number\n minScore: number\n maxScore: number\n }\n results: SearchResult[]\n}\n\nexport enum ResultType {\n Acceptor = 'AcceptorResult',\n Race = 'RaceResult',\n Sport = 'SportResult',\n Bet = 'BetResult',\n FobEvent = 'FobEvent',\n FobProposition = 'FobProposition',\n}\n\nexport interface HighlightToken {\n value: string\n isMatch: boolean\n}\n\ntype HighlightResult = HighlightToken[]\n\ntype MetaDataDictionary = Record\n\nexport type MetaDataHighlight = MetaDataDictionary\n\ninterface Metadata {\n score?: number\n highlights: MetaDataHighlight\n}\n\ninterface SportDetail {\n name: string\n locationName: string\n advertisedStartTime: string\n}\n\ninterface FobEvent {\n sequence: number\n raceCourseSequence?: number\n raceCourse: string\n contestType?: RacingCode\n country: string\n name: string\n number?: number\n competition: string\n competitionSeq: number\n startTime: string\n productCode: string\n isBettable: boolean\n isSelling: boolean\n isSettled: boolean\n isAbandoned: boolean\n isLateStart: boolean\n isSuspended: boolean\n isStartTimeRelevant: boolean\n status: string\n result: string\n}\n\ninterface FobMarket {\n sequence: number\n name: string\n openedDateTime?: string\n isSelling: boolean\n isSettled: boolean\n isLateStart: boolean\n isEwAvail: boolean\n isSuspended: boolean\n isResulted: boolean\n isDelayedStart: boolean\n}\n\ninterface PropositionPrice {\n changeTimestamp: string\n providerTimestamp?: string\n winPrice?: number\n placePrice?: number\n handicapValue?: number\n}\n\ninterface FobProposition {\n sequence: number\n name: string\n number: number\n isBettable?: boolean\n isSettled: boolean\n isAbandoned: boolean\n isSuspended: boolean\n isResulted: boolean\n isScratched: boolean\n isVoid: boolean\n isStartTimeRelevant: boolean\n scratchingTime?: string\n status: string\n result: string\n price: PropositionPrice\n fobMarket: FobMarket\n fobEvent: FobEvent\n}\n\ninterface SearchResultCommon {\n id: string\n metadata: Metadata\n kind: ResultType\n}\n\nexport interface SearchResultRace extends SearchResultCommon {\n race: RaceDetail\n}\n\nexport interface SearchResultAcceptor extends SearchResultCommon {\n acceptor: AcceptorDetail\n}\n\nexport interface SearchResultSport extends SearchResultCommon {\n sport: SportDetail\n}\n\nexport interface SearchResultFobEvent extends SearchResultCommon {\n fobEvent: FobEvent\n}\n\nexport interface SearchResultFobProposition extends SearchResultCommon {\n fobProposition: FobProposition\n}\n\nexport function isSearchResultRace(result: SearchResult): result is SearchResultRace {\n return (result as SearchResultRace).race !== undefined\n}\n\nexport function isSearchResultAcceptor(result: SearchResult): result is SearchResultAcceptor {\n return (result as SearchResultAcceptor).acceptor !== undefined\n}\n\nexport function isSearchResultSport(result: SearchResult): result is SearchResultSport {\n return (result as SearchResultSport).sport !== undefined\n}\n\nexport function isSearchResultFobEvent(result: SearchResult): result is SearchResultFobEvent {\n return (result as SearchResultFobEvent).fobEvent !== undefined\n}\n\nexport function isSearchResultFobProposition(\n result: SearchResult\n): result is SearchResultFobProposition {\n return (result as SearchResultFobProposition).fobProposition !== undefined\n}\n","import {\n SearchResult,\n isSearchResultAcceptor,\n isSearchResultRace,\n isSearchResultSport,\n SearchResultAcceptor,\n SearchResultRace,\n isSearchResultFobEvent,\n isSearchResultFobProposition,\n SearchResultFobEvent,\n SearchResultFobProposition,\n} from '@core/Data/Search/Search'\nimport dayjs from 'dayjs'\n\nexport const ONE_HOUR = 3598_000 // Fudge it less than an hour so it only shows 59m, not 1hr\nexport const ONE_DAY = 86_400_000\n\ninterface GetAstDetailsInterface {\n advertisedStartTime: Date\n showCountDown: boolean\n showDay: boolean\n}\n\nexport function getAstDetails(date: string, currentDateMilli: number): GetAstDetailsInterface {\n const advertisedStartTime = new Date(date)\n const milliToAst = advertisedStartTime.getTime() - currentDateMilli\n const showCountDown: boolean = milliToAst < ONE_HOUR\n const showDay: boolean = milliToAst > ONE_DAY\n\n return {\n advertisedStartTime,\n showCountDown,\n showDay,\n }\n}\n\nexport function getRedirectUrl(searchResult: SearchResult): string {\n if (isSearchResultAcceptor(searchResult)) {\n const acceptorResult = searchResult as SearchResultAcceptor\n return `#tote/meetings/${acceptorResult.acceptor.race.fixture.id}/${acceptorResult.acceptor.race.number}?date=${acceptorResult.acceptor.race.fixture.date}`\n }\n\n if (isSearchResultRace(searchResult)) {\n const raceResult = searchResult as SearchResultRace\n return `#tote/meetings/${raceResult.race.fixture.id}/${raceResult.race.number}?date=${raceResult.race.fixture.date}`\n }\n\n if (isSearchResultSport(searchResult)) {\n return '#sports'\n }\n\n if (isSearchResultFobEvent(searchResult)) {\n const { fobEvent } = searchResult as SearchResultFobEvent\n if (!fobEvent) return '#'\n\n const { startTime, productCode, contestType, sequence, competitionSeq } = fobEvent\n const date = dayjs(startTime).format('YYYY-MM-DD')\n\n if (productCode === 'FR')\n return `#fobracing/propositions/FR/${contestType}/${sequence}?selectiondate=${date}`\n if (productCode === 'CLG')\n return `#fobracing/propositions/CLG/${contestType}/${sequence}?selectiondate=${date}`\n if (productCode === 'FOO')\n return `#fobracing/propositions/FOO/${contestType}/${sequence}?selectiondate=${date}&meetingSeq=${competitionSeq}`\n if (productCode === 'FFF')\n return `#fobracing/propositions/FFF/${contestType}/${sequence}?selectiondate=${date}&meetingSeq=${competitionSeq}`\n\n return `#`\n }\n\n if (isSearchResultFobProposition(searchResult)) {\n const { fobProposition } = searchResult as SearchResultFobProposition\n const { contestType, productCode, sequence, startTime, competitionSeq } =\n fobProposition.fobEvent\n const date = dayjs(startTime).format('YYYY-MM-DD')\n\n return `#fobracing/propositions/${productCode}/${contestType}/${sequence}?selectiondate=${date}&meetingSeq=${competitionSeq}`\n }\n\n return ''\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\nimport {\n StructuredSearchResultASTTimerSTyled,\n StructuredLocationTimeStyled,\n StructuredSearchLocationNameStyled,\n StructuredRaceNumberStyled,\n StructuredSearchResultIconStyled,\n StructuredSearchLocationNameContainerStyled,\n} from './StructuredLocationTime.styles'\nimport { getAstDetails } from '../../Search/Components/SearchResultsContainers/utils'\n\nexport interface StructuredLocationTimeProps {\n locationName: string\n raceNumber?: number\n code?: RaceCodes\n advertisedStartTime: string\n currentDateMilli: number\n status?: string\n scratchedStatus?: string\n}\n\nexport function StructuredLocationTime({\n locationName,\n raceNumber,\n code,\n advertisedStartTime,\n currentDateMilli,\n}: StructuredLocationTimeProps) {\n const astDetails = getAstDetails(advertisedStartTime, currentDateMilli)\n\n return (\n \n \n {astDetails.showDay ? (\n {dayjs(advertisedStartTime).format('DD MMM hh:mm A')}\n ) : (\n \n )}\n \n \n \n {locationName}\n \n \n \n \n )\n}\n\ntype RaceLocationProps = Pick\n\nfunction RaceLocation({ raceNumber, code }: RaceLocationProps) {\n let codeIcon\n\n switch (code) {\n case 'Races':\n codeIcon = \n break\n case 'Dogs':\n codeIcon = \n break\n case 'Trots':\n codeIcon = \n break\n default:\n codeIcon = null\n }\n\n const raceNumberString = `R${raceNumber}`\n\n return (\n <>\n {raceNumberString}{' '}\n {codeIcon}\n \n )\n}\n","import React from 'react'\nimport { StructuredSearchSilkImage } from './StructuredSearchSilkImage'\nimport {\n RacingCode,\n StructuredSearchResult,\n} from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport {\n DriverStyled,\n StructuredSearchResultPrimaryInfoStyled,\n StructuredSearchResultSecondaryInfoStyled,\n} from './StructuredSearchResults.styles'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { StructuredLocationTime } from './StructuredLocationTime'\nimport { StructuredSearchResultPricesStyled } from './StructuredLocationTime.styles'\n\ninterface SearchStructuredResultComponentProps {\n result: StructuredSearchResult\n currentDateMilli: number\n}\n\nexport function StructuredSearchResultComponent({\n result,\n currentDateMilli,\n}: SearchStructuredResultComponentProps): JSX.Element {\n let driver = null\n\n switch (result.acceptor.race.fixture.contestType) {\n case RacingCode.Races:\n if (result.acceptor.riderName && result.acceptor.riderName !== '') {\n driver = (\n \n <>J: \n {result.acceptor.riderName}\n \n )\n }\n break\n case RacingCode.Trots:\n if (result.acceptor.driverName && result.acceptor.driverName !== '') {\n driver = (\n \n <>D: \n {result.acceptor.driverName}\n \n )\n }\n break\n default:\n driver = null\n }\n\n let trainer = null\n\n if (result.acceptor.trainerName && result.acceptor.trainerName !== '') {\n trainer = (\n \n <>T: \n {result.acceptor.trainerName}\n \n )\n }\n\n let spacer = null\n\n if (driver && trainer) {\n spacer = <> \n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n {result.acceptor.numberOrBox}\n <> - \n {result.acceptor.name}\n \n \n {driver}\n {spacer}\n {trainer}\n \n \n\n \n {!result.acceptor.fixedOddsPrices ? (\n '-'\n ) : (\n \n \n {!result.acceptor.fixedOddsPrices.win.isValid\n ? '-'\n : result.acceptor.fixedOddsPrices.win?.dividend?.toFixed(2)}\n \n \n {!result.acceptor.fixedOddsPrices.place.isValid\n ? '-'\n : result.acceptor.fixedOddsPrices.place?.dividend?.toFixed(2)}\n \n \n )}\n \n \n \n \n )\n}\n","import React from 'react'\nimport { state$ as structuredSearchState$ } from '../Driver/StructuredSearchDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport * as DateTimeProvider from '@classic/Foundation/DateTimeProvider'\nimport { StructuredSearchResult } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport {\n StructuredSearchResultStyled,\n NoResultsStyled,\n StructuredSearchFixedOddsLabelStyled,\n StructuredSearchResultInfoHeaderStyled,\n} from './StructuredSearchResults.styles'\nimport { getRedirectUrl } from './utils'\nimport { StructuredSearchResultComponent } from './StructuredSearchResult'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '@core/Settings'\nimport { StructuredSearchTextLabel } from './StructuredSearchTextLabel'\nimport { StructuredSearchTextLabelFontSize } from './StructuredSearchTextLabelStyled.styles'\n\nfunction handleClick(searchResult: StructuredSearchResult) {\n const url = getRedirectUrl(searchResult)\n window.location.href = url\n}\n\nexport function StructuredSearchResults(): JSX.Element | null {\n const { searchResults } = useObservableImmutable(structuredSearchState$, ['searchResults'])\n const results = searchResults?.get('results')\n const currentDateMilli = DateTimeProvider.now()\n\n if (!results) {\n return null\n }\n\n if (results.count() === 0) {\n return \n }\n\n const mappedResults = results.toJS().map(result => (\n handleClick(result)}\n data-tid-structured-search-result={result.id}\n >\n \n \n ))\n\n return (\n
    \n \n Fixed\n \n {mappedResults}\n
    \n )\n}\n\nexport function NoResults(): JSX.Element {\n return (\n \n \n \n No Results Found\n \n \n Try making your criteria less specific\n \n \n )\n}\n","import { StructuredSearchResult } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport dayjs from 'dayjs'\n\nexport const ONE_HOUR = 3598_000 // Fudge it less than an hour so it only shows 59m, not 1hr\nexport const ONE_DAY = 86_400_000\n\ninterface GetAstDetailsInterface {\n advertisedStartTime: Date\n showCountDown: boolean\n showDay: boolean\n}\n\nexport function getAstDetails(date: string, currentDateMilli: number): GetAstDetailsInterface {\n const advertisedStartTime = new Date(date)\n const milliToAst = advertisedStartTime.getTime() - currentDateMilli\n const showCountDown: boolean = milliToAst < ONE_HOUR\n const showDay: boolean = milliToAst > ONE_DAY\n\n return {\n advertisedStartTime,\n showCountDown,\n showDay,\n }\n}\n\nexport function getRedirectUrl(searchResult: StructuredSearchResult): string {\n let url = ''\n\n const acceptorResult = searchResult as StructuredSearchResult\n const formattedDate = dayjs(acceptorResult.acceptor.race.fixture.date).format('YYYY-MM-DD')\n\n url = `#tote/meetings/${acceptorResult.acceptor.race.fixture.id}/${acceptorResult.acceptor.race.number}?date=${formattedDate}`\n\n return url\n}\n","import styled from '@emotion/styled'\nimport { TabList, Tab } from 'react-tabs'\nimport { hexColors } from '@mobi/settings'\n\nconst tabPadding = 1 // rem\nconst selectedTabBorderWidth = 0.4 // rem\n\nexport interface TabListProps {\n colorscheme?: 'light' | 'dark'\n uppercaseText?: boolean\n fontWeight?: React.CSSProperties['fontWeight']\n}\n\nexport const TabListStyled = styled(TabList)(\n {\n display: 'flex',\n flexWrap: 'nowrap',\n margin: '0rem',\n padding: 0,\n },\n ({ colorscheme, uppercaseText, fontWeight }: TabListProps) => ({\n fontWeight: fontWeight,\n textTransform: uppercaseText ? 'uppercase' : undefined,\n ['[role=\"tab\"]']: {\n background: colorscheme === 'dark' ? hexColors.nero : hexColors.gainsboro,\n color: colorscheme === 'dark' ? hexColors.lightGrey : hexColors.dimGrey,\n margin: colorscheme === 'dark' ? 0 : '0 0.5rem',\n fontSize: colorscheme === 'dark' ? '1.4rem' : '1.2rem',\n '&.selected': {\n paddingBottom: colorscheme === 'dark' ? 0 : `${tabPadding - selectedTabBorderWidth}rem`,\n borderBottom:\n colorscheme === 'dark' ? 0 : `${selectedTabBorderWidth}rem solid ${hexColors.chocolate}`,\n color: colorscheme === 'dark' ? hexColors.white : hexColors.chocolate,\n background: colorscheme === 'dark' ? hexColors.charCoal : hexColors.gainsboro,\n },\n },\n })\n)\n// Unfortunately typings for react-tabs are out of date, but `tabsRole` is required to use\n// react-tabs in combination with emotion (styled components).\n// See: https://github.com/reactjs/react-tabs#custom-components\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n;(TabListStyled as any).tabsRole = 'TabList'\n\nexport const TabStyled = styled(Tab)({\n cursor: 'pointer',\n flex: '1 0',\n listStyle: 'none',\n padding: `${tabPadding}rem`,\n textAlign: 'center',\n width: '50%',\n})\n// Adding a custom class name for the `select` state in order to style it above.\nTabStyled.defaultProps = { selectedClassName: 'selected' }\n\n// Unfortunately typings for react-tabs are out of date, but `tabsRole` is required to use\n// react-tabs in combination with emotion (styled components).\n// See: https://github.com/reactjs/react-tabs#custom-components\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n;(TabStyled as any).tabsRole = 'Tab'\n","import {\n StructuredSearchResult,\n RacingCode,\n RawStructuredSearchResults,\n StructuredSearchAggregations,\n} from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport { StructuredSearchFields, StructuredSearchResults } from '../Driver/StructuredSearchDriver'\nimport { logError } from '@classic/Foundation/Services/LoggingService'\nimport { assignStructuredSearch } from '@classic/Foundation/Analytics/Analytics'\nimport { StructuredSearchData } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { getTimezoneOffsetHours } from '@classic/Foundation/DateTimeProvider'\nimport { RangeBoundaries } from '../RangeBoundaries'\n\nexport type StructuredSearchReturnType = StructuredSearchResult[]\n\nexport const CONTEST_TYPES = 'contestTypes'\nexport const EVENT_DATES = 'eventDates'\nexport const BARRIER_NUMBERS = 'barrierNumbers'\nexport const BOX_NUMBERS = 'boxNumbers'\nexport const ONE_TO_FOUR = 'oneToFour'\nexport const ONE_TO_FIVE = 'oneToFive'\nexport const FIVE_PLUS = 'fivePlus'\nexport const SIX_PLUS = 'sixPlus'\nexport const WEIGHT_CHANGE = 'weightChange'\nexport const DISTANCE_CHANGE = 'distanceChange'\nexport const UP = 'up'\nexport const DOWN = 'down'\nexport const SAME = 'same'\nexport const TODAY = 'today'\nexport const TOMORROW = 'tomorrow'\nexport const BEYOND = 'beyond'\nexport const TIMEZONE_OFFSET = 'timeZoneOffset'\nexport const WIN_TRACK_CONDITIONS = 'winTrackConditions'\nexport const WIN_TRACK_FIRM = 'firm'\nexport const WIN_TRACK_GOOD = 'good'\nexport const WIN_TRACK_HEAVY = 'heavy'\nexport const WIN_TRACK_SOFT = 'soft'\nexport const WIN_TRACK_SYNTHETIC = 'synthetic'\nexport const LOCATION_GROUPS = 'locationGroups'\nexport const LOCATION_GROUP_AUSTRALIA = 'AUS'\nexport const LOCATION_GROUP_NEW_ZEALAND = 'NZ'\nexport const LOCATION_GROUP_INTERNATIONAL = 'INT'\nexport const TRACK_ID = 'trackIds'\n\nexport function buildQueryToken(fieldName: string, value: string | number | boolean): string {\n return `${fieldName}=${encodeURIComponent(value)}`\n}\n\nexport function buildUrl(parameters: StructuredSearchFields): string {\n const queryTokens: string[] = []\n let urlString = ''\n\n // If the structure of th criteria node changes, you will need to ensure that Google Ananlytics handles the change\n const structuredSearchData: StructuredSearchData = {\n criteria: null,\n }\n\n // Declaring it this way stops lint warnings from typescript\n structuredSearchData.criteria = {}\n\n const offset: number = getTimezoneOffsetHours()\n\n queryTokens.push(buildQueryToken(TIMEZONE_OFFSET, offset))\n\n if (parameters) {\n if (!(parameters.contestTypeRace && parameters.contestTypeTrot && parameters.contestTypeDogs)) {\n const contestTypeArray = []\n\n if (parameters.contestTypeRace) {\n queryTokens.push(buildQueryToken(CONTEST_TYPES, RacingCode.Races.toLocaleLowerCase()))\n contestTypeArray.push(RacingCode.Races.toLocaleLowerCase())\n }\n\n if (parameters.contestTypeTrot) {\n queryTokens.push(buildQueryToken(CONTEST_TYPES, RacingCode.Trots.toLocaleLowerCase()))\n contestTypeArray.push(RacingCode.Trots.toLocaleLowerCase())\n }\n\n if (parameters.contestTypeDogs) {\n queryTokens.push(buildQueryToken(CONTEST_TYPES, RacingCode.Dogs.toLocaleLowerCase()))\n contestTypeArray.push(RacingCode.Dogs.toLocaleLowerCase())\n }\n\n if (contestTypeArray.length > 0) {\n structuredSearchData.criteria.contestType = contestTypeArray\n }\n }\n\n if (!(parameters.dateToday && parameters.dateTomorrow && parameters.dateBeyondTomorrow)) {\n const dateArray = []\n if (parameters.dateToday) {\n queryTokens.push(buildQueryToken(EVENT_DATES, TODAY))\n dateArray.push(TODAY)\n }\n if (parameters.dateTomorrow) {\n queryTokens.push(buildQueryToken(EVENT_DATES, TOMORROW))\n dateArray.push(TOMORROW)\n }\n if (parameters.dateBeyondTomorrow) {\n queryTokens.push(buildQueryToken(EVENT_DATES, BEYOND))\n dateArray.push(BEYOND)\n }\n\n if (dateArray.length > 0) {\n structuredSearchData.criteria.date = dateArray\n }\n }\n\n if (parameters.firstUp) {\n queryTokens.push(buildQueryToken('spellFirstUp', true))\n structuredSearchData.criteria.firstUp = true\n }\n\n if (parameters.secondUp) {\n queryTokens.push(buildQueryToken('spellSecondUp', true))\n structuredSearchData.criteria.secondUp = true\n }\n\n if (parameters.gearChange) {\n queryTokens.push(buildQueryToken('gearChange', true))\n structuredSearchData.criteria.gearChange = true\n }\n\n if (parameters.wonLastStart) {\n queryTokens.push(buildQueryToken('lastStartWin', true))\n structuredSearchData.criteria.wonLastStart = true\n }\n\n if (parameters.placedLastStart) {\n queryTokens.push(buildQueryToken('lastStartPlace', true))\n structuredSearchData.criteria.placedLastStart = true\n }\n\n if (parameters.careerWinPercentage) {\n queryTokens.push(buildQueryToken('winPercentageCareer', parameters.careerWinPercentage))\n structuredSearchData.criteria.careerWinPercentage = parameters.careerWinPercentage\n }\n\n if (parameters.trackWinPercentage) {\n queryTokens.push(buildQueryToken('winPercentageTrack', parameters.trackWinPercentage))\n structuredSearchData.criteria.trackWinPercentage = parameters.trackWinPercentage\n }\n\n if (parameters.distanceWinPercentage) {\n queryTokens.push(buildQueryToken('winPercentageDistance', parameters.distanceWinPercentage))\n structuredSearchData.criteria.distanceWinPercentage = parameters.distanceWinPercentage\n }\n\n if (parameters.trackdistanceWinPercentage) {\n queryTokens.push(\n buildQueryToken('winPercentageDistanceTrack', parameters.trackdistanceWinPercentage)\n )\n structuredSearchData.criteria.trackdistanceWinPercentage =\n parameters.trackdistanceWinPercentage\n }\n\n if (!(parameters.barrierNumberOneToFive && parameters.barrierNumberSixPlus)) {\n const barrierArray = []\n if (parameters.barrierNumberOneToFive) {\n queryTokens.push(buildQueryToken(BARRIER_NUMBERS, ONE_TO_FIVE))\n barrierArray.push(ONE_TO_FIVE)\n }\n\n if (parameters.barrierNumberSixPlus) {\n queryTokens.push(buildQueryToken(BARRIER_NUMBERS, SIX_PLUS))\n barrierArray.push(SIX_PLUS)\n }\n if (barrierArray.length > 0) {\n structuredSearchData.criteria.barrierNumber = barrierArray\n }\n }\n\n if (!(parameters.boxNumberOneToFour && parameters.boxNumberFivePlus)) {\n const boxArray = []\n if (parameters.boxNumberOneToFour) {\n queryTokens.push(buildQueryToken(BOX_NUMBERS, ONE_TO_FOUR))\n boxArray.push(ONE_TO_FOUR)\n }\n\n if (parameters.boxNumberFivePlus) {\n queryTokens.push(buildQueryToken(BOX_NUMBERS, FIVE_PLUS))\n boxArray.push(FIVE_PLUS)\n }\n if (boxArray.length > 0) {\n structuredSearchData.criteria.boxNumber = boxArray\n }\n }\n\n if (parameters.apprentice) {\n queryTokens.push(buildQueryToken('apprentice', true))\n structuredSearchData.criteria.apprentice = true\n }\n\n if (parameters.favouriteLastStart) {\n queryTokens.push(buildQueryToken('lastStartFavourite', true))\n structuredSearchData.criteria.favouriteLastStart = true\n }\n\n if (\n !(parameters.weightChangedUp && parameters.weightChangedDown && parameters.weightNotChanged)\n ) {\n const weightChangedArray = []\n if (parameters.weightChangedUp) {\n queryTokens.push(buildQueryToken(WEIGHT_CHANGE, UP))\n weightChangedArray.push(UP)\n }\n\n if (parameters.weightChangedDown) {\n queryTokens.push(buildQueryToken(WEIGHT_CHANGE, DOWN))\n weightChangedArray.push(DOWN)\n }\n\n if (parameters.weightNotChanged) {\n queryTokens.push(buildQueryToken(WEIGHT_CHANGE, SAME))\n weightChangedArray.push(SAME)\n }\n if (weightChangedArray.length > 0) {\n structuredSearchData.criteria.weightChanged = weightChangedArray\n }\n }\n\n if (\n !(\n parameters.distanceChangedUp &&\n parameters.distanceChangedDown &&\n parameters.distanceNotChanged\n )\n ) {\n const distanceChangedArray = []\n if (parameters.distanceChangedUp) {\n queryTokens.push(buildQueryToken(DISTANCE_CHANGE, UP))\n distanceChangedArray.push(UP)\n }\n\n if (parameters.distanceChangedDown) {\n queryTokens.push(buildQueryToken(DISTANCE_CHANGE, DOWN))\n distanceChangedArray.push(DOWN)\n }\n\n if (parameters.distanceNotChanged) {\n queryTokens.push(buildQueryToken(DISTANCE_CHANGE, SAME))\n distanceChangedArray.push(SAME)\n }\n\n if (distanceChangedArray.length > 0) {\n structuredSearchData.criteria.distanceChanged = distanceChangedArray\n }\n }\n\n if (\n parameters.minDaysSinceLastWin > RangeBoundaries.minDaysSinceLastWin ||\n parameters.maxDaysSinceLastWin < RangeBoundaries.maxDaysSinceLastWin\n ) {\n structuredSearchData.criteria.daysSinceLastWin = {}\n if (parameters.minDaysSinceLastWin > RangeBoundaries.minDaysSinceLastWin) {\n queryTokens.push(buildQueryToken('daysSinceLastWinMin', parameters.minDaysSinceLastWin))\n structuredSearchData.criteria.daysSinceLastWin.min = parameters.minDaysSinceLastWin\n }\n\n if (parameters.maxDaysSinceLastWin < RangeBoundaries.maxDaysSinceLastWin) {\n queryTokens.push(buildQueryToken('daysSinceLastWinMax', parameters.maxDaysSinceLastWin))\n structuredSearchData.criteria.daysSinceLastWin.max = parameters.maxDaysSinceLastWin\n }\n }\n\n if (\n parameters.minDaysSinceLastStart > RangeBoundaries.minDaysSinceLastStart ||\n parameters.maxDaysSinceLastStart < RangeBoundaries.maxDaysSinceLastStart\n ) {\n structuredSearchData.criteria.daysSinceLastStart = {}\n if (parameters.minDaysSinceLastStart > RangeBoundaries.minDaysSinceLastStart) {\n queryTokens.push(buildQueryToken('daysSinceLastStartMin', parameters.minDaysSinceLastStart))\n structuredSearchData.criteria.daysSinceLastStart.min = parameters.minDaysSinceLastStart\n }\n\n if (parameters.maxDaysSinceLastStart < RangeBoundaries.maxDaysSinceLastStart) {\n queryTokens.push(buildQueryToken('daysSinceLastStartMax', parameters.maxDaysSinceLastStart))\n structuredSearchData.criteria.daysSinceLastStart.max = parameters.maxDaysSinceLastStart\n }\n }\n\n if (\n parameters.minStartsSinceLastSpell > RangeBoundaries.minStartsSinceLastSpell ||\n parameters.maxStartsSinceLastSpell < RangeBoundaries.maxStartsSinceLastSpell\n ) {\n structuredSearchData.criteria.startsSinceLastSpell = {}\n if (parameters.minStartsSinceLastSpell > RangeBoundaries.minStartsSinceLastSpell) {\n queryTokens.push(\n buildQueryToken('startsSinceLastSpellMin', parameters.minStartsSinceLastSpell)\n )\n structuredSearchData.criteria.startsSinceLastSpell.min = parameters.minStartsSinceLastSpell\n }\n\n if (parameters.maxStartsSinceLastSpell < RangeBoundaries.maxStartsSinceLastSpell) {\n queryTokens.push(\n buildQueryToken('startsSinceLastSpellMax', parameters.maxStartsSinceLastSpell)\n )\n structuredSearchData.criteria.startsSinceLastSpell.max = parameters.maxStartsSinceLastSpell\n }\n }\n\n if (\n parameters.minFixedOddsPrice > RangeBoundaries.minFixedOddsPrice ||\n parameters.maxFixedOddsPrice < RangeBoundaries.maxFixedOddsPrice\n ) {\n structuredSearchData.criteria.fixedOddsPrice = {}\n if (parameters.minFixedOddsPrice > RangeBoundaries.minFixedOddsPrice) {\n queryTokens.push(buildQueryToken('fixedOddsPriceMin', parameters.minFixedOddsPrice))\n structuredSearchData.criteria.fixedOddsPrice.min = parameters.minFixedOddsPrice\n }\n\n if (parameters.maxFixedOddsPrice < RangeBoundaries.maxFixedOddsPrice) {\n queryTokens.push(buildQueryToken('fixedOddsPriceMax', parameters.maxFixedOddsPrice))\n structuredSearchData.criteria.fixedOddsPrice.max = parameters.maxFixedOddsPrice\n }\n }\n\n if (\n !(\n parameters.winTrackConditionFirm &&\n parameters.winTrackConditionGood &&\n parameters.winTrackConditionHeavy &&\n parameters.winTrackConditionSoft &&\n parameters.winTrackConditionSynthetic\n )\n ) {\n const winTrackConditionsArray = []\n\n if (parameters.winTrackConditionFirm) {\n queryTokens.push(buildQueryToken(WIN_TRACK_CONDITIONS, WIN_TRACK_FIRM))\n winTrackConditionsArray.push(WIN_TRACK_FIRM)\n }\n\n if (parameters.winTrackConditionGood) {\n queryTokens.push(buildQueryToken(WIN_TRACK_CONDITIONS, WIN_TRACK_GOOD))\n winTrackConditionsArray.push(WIN_TRACK_GOOD)\n }\n\n if (parameters.winTrackConditionSoft) {\n queryTokens.push(buildQueryToken(WIN_TRACK_CONDITIONS, WIN_TRACK_SOFT))\n winTrackConditionsArray.push(WIN_TRACK_SOFT)\n }\n\n if (parameters.winTrackConditionHeavy) {\n queryTokens.push(buildQueryToken(WIN_TRACK_CONDITIONS, WIN_TRACK_HEAVY))\n winTrackConditionsArray.push(WIN_TRACK_HEAVY)\n }\n\n if (parameters.winTrackConditionSynthetic) {\n queryTokens.push(buildQueryToken(WIN_TRACK_CONDITIONS, WIN_TRACK_SYNTHETIC))\n winTrackConditionsArray.push(WIN_TRACK_SYNTHETIC)\n }\n\n if (winTrackConditionsArray.length > 0) {\n structuredSearchData.criteria.winTrackConditions = winTrackConditionsArray\n }\n }\n\n if (\n !(\n parameters.locationCountryAustralia &&\n parameters.locationCountryInternational &&\n parameters.locationCountryNewZealand\n )\n ) {\n const locationGroup = []\n if (parameters.locationCountryAustralia) {\n queryTokens.push(buildQueryToken(LOCATION_GROUPS, LOCATION_GROUP_AUSTRALIA))\n locationGroup.push(LOCATION_GROUP_AUSTRALIA)\n }\n if (parameters.locationCountryNewZealand) {\n queryTokens.push(buildQueryToken(LOCATION_GROUPS, LOCATION_GROUP_NEW_ZEALAND))\n locationGroup.push(LOCATION_GROUP_NEW_ZEALAND)\n }\n if (parameters.locationCountryInternational) {\n queryTokens.push(buildQueryToken(LOCATION_GROUPS, LOCATION_GROUP_INTERNATIONAL))\n locationGroup.push(LOCATION_GROUP_INTERNATIONAL)\n }\n\n if (locationGroup.length > 0) {\n structuredSearchData.criteria.location = { locationGroup, trackIds: null }\n }\n }\n\n if (parameters.selectedTracks && parameters.selectedTracks.length > 0) {\n parameters.selectedTracks.forEach(trackId =>\n queryTokens.push(buildQueryToken(TRACK_ID, trackId))\n )\n\n if (structuredSearchData.criteria.location) {\n structuredSearchData.criteria.location.trackIds = parameters.selectedTracks\n } else {\n structuredSearchData.criteria.location = {\n locationGroup: null,\n trackIds: parameters.selectedTracks,\n }\n }\n }\n }\n\n if (\n Object.keys(structuredSearchData.criteria).length === 0 &&\n structuredSearchData.criteria.constructor === Object\n ) {\n structuredSearchData.criteria = null\n }\n\n if (queryTokens.length > 0) {\n urlString = queryTokens.join('&')\n }\n\n assignStructuredSearch(structuredSearchData)\n\n const url = `/api/search/structured${urlString ? `?${urlString}` : ''}`\n\n return url\n}\n\nexport async function performStructuredSearch(parameters: StructuredSearchFields): Promise {\n let data: RawStructuredSearchResults\n const url = buildUrl(parameters)\n\n try {\n const response: Response = await fetch(url, {\n method: 'GET',\n })\n\n if (!response.ok) {\n throw new Error(`Did not receive a valid response: ${response.status}`)\n }\n\n data = await response.json()\n\n const results: StructuredSearchResult[] = data.results\n const totalResultCount: number = data.statistics.hitCount\n const aggregations: StructuredSearchAggregations = data.aggregations\n\n StructuredSearchResults({ results, totalResultCount, aggregations })\n } catch (e) {\n logError(`Error retrieving data: ${e}`)\n }\n}\n","import React, { useRef, useState } from 'react'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { StructuredSearchCriteria } from './Criteria/StructuredSearchCriteria'\nimport { StructuredSearchResults } from './Results/StructuredSearchResults'\nimport {\n TabLabelResultsStyled,\n StructuredSearchTabListContainerStyled,\n} from './StructuredSearch.styles'\nimport { Tabs, TabPanel, Tab, TabList } from '@core/Components/Tabs'\nimport {\n defaultState,\n state$,\n StructuredSearchSetState,\n observableSearchCriteria,\n} from './Driver/StructuredSearchDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\nimport { RangeBoundaries } from './RangeBoundaries'\nimport { logError } from '@core/Utils/logging/logging'\nimport { performStructuredSearch } from './Service/StructuredSearchService'\n\nexport const StructuredSearchStorageKey = 'structured-search-criteria'\n\nexport function StructuredSearchPage(): JSX.Element {\n const testId = { 'data-tid-structured-search-container': '' }\n const { searchResults } = useObservableImmutable(state$, ['searchResults'])\n const totalResultCount = searchResults?.get('totalResultCount')\n const [selectedTabIndex, setSelectedTabIndex] = useState(0)\n const componentDidMount = useRef(true)\n\n React.useEffect(() => {\n const initialiseSearchCriteriaFromLocalStorage = () => {\n let savedSearchCriteria: Record | null = null\n try {\n const savedStorageFilter: string | null = getFromLocalStorage(StructuredSearchStorageKey)\n if (savedStorageFilter) {\n savedSearchCriteria = JSON.parse(savedStorageFilter)\n if (savedSearchCriteria) {\n const rangeValues: Record = RangeBoundaries\n // Need this code to handle the fact that we originally stored data as string for these fields when they were textboxes\n // Using a string causes the UI not to render, hence forcing to be a number (in this case, the default value)\n Object.keys(rangeValues).forEach((key: string) => {\n if (\n savedSearchCriteria &&\n Object.prototype.hasOwnProperty.call(savedSearchCriteria, key) &&\n typeof savedSearchCriteria[key] !== 'number'\n ) {\n savedSearchCriteria[key] = rangeValues[key]\n }\n })\n }\n }\n } catch (e) {\n logError(`Error parsing local storage state data: ${e}`)\n } finally {\n const newState = { ...defaultState.searchCriteria, ...savedSearchCriteria }\n StructuredSearchSetState(newState)\n }\n }\n\n initialiseSearchCriteriaFromLocalStorage()\n\n const observer = observableSearchCriteria().subscribe(newState => {\n performStructuredSearch(newState)\n if (!componentDidMount.current) {\n // read from LS so no need to set in LS on component did mount\n setInLocalStorage(\n StructuredSearchStorageKey,\n JSON.stringify(newState, Object.keys(newState).sort())\n )\n }\n componentDidMount.current = false\n })\n\n return () => {\n observer.dispose()\n }\n }, [])\n\n return (\n \n \n\n \n \n \n Criteria\n \n Results{' '}\n \n {totalResultCount}\n \n \n \n \n \n setSelectedTabIndex(x)} />\n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const useSwipeClose = ({\n drawerElRef,\n onDismiss,\n position,\n}: {\n drawerElRef: React.RefObject\n position: 'left' | 'right'\n onDismiss?: () => void\n}) => {\n React.useEffect(() => {\n const drawer = drawerElRef.current\n if (!onDismiss || !drawer) return\n\n const controller = new AbortController()\n\n let startX = 0\n let startY = 0\n let moveX = 0\n let moveY = 0\n\n let isScrolling: boolean | null = null\n\n // TOUCH START\n const handleTouchStart = (e: TouchEvent) => {\n startX = e.touches[0].clientX\n startY = e.touches[0].clientY\n\n moveX = 0\n moveY = 0\n isScrolling = null\n }\n\n // TOUCH MOVE\n const handleTouchMove = (e: TouchEvent) => {\n const { clientX, clientY } = e.touches[0]\n if (position === 'left' && startX < clientX) return\n if (position === 'right' && startX > clientX) return\n\n moveX = clientX - startX\n moveY = clientY - startY\n\n isScrolling ??= !!(Math.abs(moveX) < Math.abs(moveY))\n\n if (isScrolling) return\n\n e.preventDefault()\n\n drawer.style.transform = `translateX(${moveX}px)`\n drawer.style.transition = 'transform linear 0s'\n }\n\n // TOUCH END\n const handleTouchEnd = () => {\n const cancel = () => {\n drawer.style.transition = 'transform 0.3s ease-out'\n requestAnimationFrame(() => {\n drawer.style.transform = 'translateX(0)'\n })\n }\n\n if (isScrolling) {\n isScrolling = false\n cancel()\n return\n }\n\n const hasMovedEnoughToTriggerSwipe = Math.abs(moveX) > 50\n if (!hasMovedEnoughToTriggerSwipe) {\n cancel()\n return\n }\n\n requestAnimationFrame(onDismiss)\n }\n\n // KEY PRESS\n const keyPressHandler = (e: KeyboardEvent) => e.key === 'Escape' && onDismiss()\n\n document.addEventListener('keydown', keyPressHandler, { signal: controller.signal })\n document.addEventListener('touchstart', handleTouchStart, { signal: controller.signal })\n document.addEventListener('touchmove', handleTouchMove, { signal: controller.signal })\n document.addEventListener('touchend', handleTouchEnd, { signal: controller.signal })\n\n return () => controller.abort()\n }, [drawerElRef, onDismiss, position])\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport { colors, layering, shadow, measurements } from '@mobi/component-library/Theme/Common'\nimport { useSwipeClose } from './hooks/useSwipeClose'\n\nexport const Drawer: React.FC<{\n isOpen: boolean\n children: React.ReactNode\n maxWidth?: string\n position?: 'left' | 'right'\n onDismiss?: () => void\n shouldUseBodyScrollLock?: boolean\n}> = ({\n isOpen,\n children,\n onDismiss,\n maxWidth,\n position = 'right',\n shouldUseBodyScrollLock = true,\n}) => {\n const shouldRenderDrawer = useRenderTimeoutControl({\n shouldRender: isOpen,\n timeoutMs: 300,\n })\n\n if (!shouldRenderDrawer) return null\n\n return (\n \n {children}\n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst DrawerContent: React.FC<{\n children: React.ReactNode\n isUnmounting: boolean\n maxWidth?: string\n position?: 'left' | 'right'\n onDismiss?: () => void\n shouldUseBodyScrollLock?: boolean\n}> = ({\n isUnmounting,\n children,\n shouldUseBodyScrollLock,\n onDismiss,\n maxWidth = '48rem',\n position = 'right',\n}) => {\n const drawerElRef = React.useRef(null)\n\n const scrollContainerRef = useBodyScrollLock(shouldUseBodyScrollLock)\n useSwipeClose({ drawerElRef, onDismiss, position })\n\n return (\n \n
    \n
    \n {children}\n
    \n
    \n\n
    \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n position: 'fixed',\n zIndex: layering.overlayHigh,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden',\n\n '> article': {\n boxSizing: 'border-box',\n zIndex: 2,\n position: 'fixed',\n top: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n minWidth: measurements.mobi.minWidth,\n pointerEvents: 'auto',\n background: colors.white,\n boxShadow: shadow.lg,\n\n touchAction: 'none',\n willChange: 'transform',\n transition: 'transform 0.4s cubic-bezier(0.32, 0.72, 0, 1)',\n animationDuration: '0.4s',\n animationTimingFunction: 'cubic-bezier(0.32, 0.72, 0, 1)',\n\n ['&[data-position=\"left\"]']: { left: 0, animationName: 'slideFromLeft' },\n ['&[data-position=\"right\"]']: { right: 0, animationName: 'slideFromRight' },\n\n // Children container\n '> div': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n scrollBehavior: 'smooth',\n },\n },\n\n // Background dimmer\n '& > div': {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n backdropFilter: 'blur(1px)',\n backgroundColor: 'rgba(0,0,0,0.5)',\n animation: 'fadeIn 0.4s ease forwards',\n },\n\n ['&[data-state=\"closing\"]']: {\n '> article': {\n animationDuration: '0.3s',\n animationTimingFunction: 'ease-out',\n animationFillMode: 'forwards',\n\n ['&[data-position=\"left\"]']: { left: 0, animationName: 'slideToLeft' },\n ['&[data-position=\"right\"]']: { right: 0, animationName: 'slideToRight' },\n },\n\n '> div': {\n animation: 'fadeOut 0.3s ease forwards',\n },\n },\n\n '@keyframes fadeIn': { from: { opacity: 0 }, to: { opacity: 1 } },\n '@keyframes fadeOut': { to: { opacity: 0 } },\n\n '@keyframes slideFromLeft': {\n from: { transform: 'translate3d(-100%, 0, 0)' },\n to: { transform: 'translate3d(0, 0, 0)' },\n },\n '@keyframes slideToLeft': { to: { transform: 'translate3d(-100%, 0, 0)' } },\n\n '@keyframes slideFromRight': {\n from: { transform: 'translate3d(100%, 0, 0)' },\n to: { transform: 'translate3d(0, 0, 0)' },\n },\n '@keyframes slideToRight': { to: { transform: 'translate3d(100%, 0, 0)' } },\n})\n","import styled from '@emotion/styled'\nimport { transparentize } from 'polished'\nimport { layering, measurements } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { ToastItem } from './ToastDriver'\n\nexport const ToastContainerStyled = styled.div<{ bottom?: boolean; isHeaderVisible?: boolean }>(\n {\n position: 'fixed',\n zIndex: layering.toasts,\n pointerEvents: 'none',\n margin: '0 auto',\n left: 0,\n right: 0,\n maxWidth: measurements.mobi.maxWidth,\n width: '100%',\n boxSizing: 'border-box',\n overflow: 'hidden',\n padding: '1rem',\n },\n ({ bottom, isHeaderVisible }) => ({\n top: bottom ? undefined : 0,\n bottom: bottom ? 0 : undefined,\n paddingTop: bottom ? 0 : undefined,\n transition: bottom ? undefined : 'all 125ms ease',\n transform: isHeaderVisible ? 'translateY(6rem)' : 'translateY(0)',\n })\n)\n\ntype ToastStyledTypes = Exclude\nexport const ToastStyled = styled.div<{ type: ToastStyledTypes }>(\n {\n pointerEvents: 'all',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '1rem',\n marginBottom: '0.5rem',\n boxShadow: '0 0.5rem 0.5rem 0.2rem rgba(0,0,0,0.2)',\n borderRadius: '0.2rem',\n minHeight: '5rem',\n },\n ({ type = 'default' }: { type: ToastStyledTypes }) => toastTypeStyles[type]\n)\n\nconst toastTypeStyles: Record = {\n default: {\n background: transparentize(0.05, hexColors.charCoal),\n },\n error: {\n background: transparentize(0.05, hexColors.freeSpeechRed),\n },\n}\n\nexport const ToastCloseIconStyled = styled.span({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n height: '4rem',\n marginLeft: '0.5rem',\n color: hexColors.white,\n opacity: 0.8,\n})\n\nexport const ToastTextStyled = styled.span({\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: '1.6rem',\n color: hexColors.white,\n textAlign: 'center',\n})\n\nexport const ToastSpinnerStyled = styled(SpinnerInlineStyled)({\n marginRight: '0.5rem',\n})\n","import React from 'react'\nimport anime from 'animejs'\nimport { ToastStateRecord, RemoveToast, ToastItem } from './ToastDriver'\nimport {\n ToastContainerStyled,\n ToastStyled,\n ToastCloseIconStyled,\n ToastTextStyled,\n ToastSpinnerStyled,\n} from './Toast.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nconst ANIMATION_DURATION = 400\n\nexport const ToastComponent: React.FC<{\n items: ToastStateRecord['items']\n isHeaderVisible?: boolean\n}> = ({ items, isHeaderVisible }) => {\n if (items.isEmpty()) return null\n\n const itemsOnTop = items.filter(item => item.position === 'top')\n const itemsOnBottom = items.filter(item => item.position === 'bottom')\n\n return (\n <>\n {!itemsOnTop.isEmpty() && (\n \n {itemsOnTop.toArray().map(item => (\n \n ))}\n \n )}\n\n {!itemsOnBottom.isEmpty() && (\n \n {itemsOnBottom.toArray().map(item => (\n \n ))}\n \n )}\n \n )\n}\n\n// =======\n// Message\n// =======\n\nexport const ToastMessage: React.FC<{ item: ToastItem }> = ({ item }) => {\n const toastRef = React.useRef(null)\n\n React.useEffect(() => {\n const { position, timeout = 0.6 } = item\n\n const isPositionTop = position === 'top'\n const isClickable = timeout === 0\n const animateStartPoint = isPositionTop ? '-150%' : '100%'\n\n anime({\n targets: toastRef.current,\n opacity: [0, 1],\n translateY: [animateStartPoint, 0],\n duration: ANIMATION_DURATION,\n direction: isClickable ? 'normal' : 'alternate',\n delay: 200,\n endDelay: isClickable ? undefined : timeout * 500,\n complete: () => {\n if (!isClickable) RemoveToast(item.id)\n },\n })\n }, [item])\n\n const handleToastClick = () => {\n if (item.timeout !== 0) return\n\n const isPositionTop = item.position === 'top'\n const animateStartPoint = isPositionTop ? '-150%' : '100%'\n\n anime({\n targets: toastRef.current,\n opacity: [1, 0],\n translateY: [0, animateStartPoint],\n duration: ANIMATION_DURATION,\n direction: 'normal',\n complete: () => RemoveToast(item.id),\n })\n }\n\n const isClickable = item.timeout === 0\n\n return (\n \n \n {item.spinner ? : null}\n {item.message}\n \n {isClickable && (\n \n \n \n )}\n \n )\n}\n","import React from 'react'\nimport { observeImmutable } from '../HOCs'\nimport { state$, ToastStateRecord } from './ToastDriver'\nimport { ToastComponent } from './Toast'\n\nexport default observeImmutable(\n state$,\n ({ record, isHeaderVisible = false }) => (\n \n )\n)\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { hexColors } from '@mobi/settings'\n\nexport const SearchFieldStyled = styled.div({\n marginLeft: '1rem',\n color: colors.search.container.text,\n backgroundColor: colors.search.container.background,\n display: 'flex',\n flex: '1',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0.25rem 0.75rem',\n borderRadius: '0.35em',\n})\n\nexport const SearchInputStyled = styled.input({\n backgroundColor: 'transparent',\n border: 'none',\n margin: '0 1rem',\n padding: '0.5rem 0',\n fontSize: '1.4rem',\n color: colors.search.input.text,\n width: '100%',\n '&::placeholder': {\n color: colors.search.input.placeholder,\n },\n '&:focus': {\n outline: 'none',\n },\n type: 'search',\n})\n\nexport const SearchClearButtonStyled = styled(Button)({\n backgroundColor: 'transparent',\n border: 'none',\n color: hexColors.white,\n fontWeight: 'normal',\n paddingRight: '0',\n fontSize: '1.4rem',\n '&:focus': {\n backgroundColor: 'transparent',\n },\n\n '&:active': {\n backgroundColor: 'transparent',\n },\n\n '&:hover': {\n backgroundColor: 'transparent',\n },\n})\n\nexport const SearchFormContainerStyled = styled.form({\n display: 'contents',\n\n // adapted from MeetingsDropdown.tsx\n position: 'relative',\n\n '@keyframes animateIn': {\n from: { transform: 'translateY(2rem)', opacity: 0 },\n to: { transform: 'translateY(0)', opacity: 1 },\n },\n\n '& > div': {\n backgroundColor: hexColors.grey1,\n borderRadius: '0.5rem',\n boxShadow: '0 0.5rem 0.3rem rgba(0, 0, 0, 0.25)',\n color: 'black',\n overflow: 'hidden',\n position: 'absolute',\n top: '100%',\n animation: 'ease animateIn .2s',\n transform: 'translateY(0)',\n zIndex: 5,\n\n padding: '1rem',\n overflowY: 'auto',\n width: '50vw',\n margin: '0px',\n maxWidth: '60rem',\n left: '4rem',\n\n ul: {\n listStyle: 'none',\n margin: 0,\n maxHeight: '70vh',\n padding: '0',\n top: '5rem',\n\n li: {\n alignItems: 'center',\n display: 'flex',\n lineHeight: 1,\n height: '3rem',\n whiteSpace: 'nowrap',\n\n 'span.title': {\n color: hexColors.nero,\n fontWeight: 'bold',\n },\n\n button: {\n flex: 1,\n paddingLeft: 0,\n textAlign: 'left',\n fontSize: '1.4rem',\n fontWeight: 'normal',\n color: hexColors.nero,\n backgroundColor: hexColors.grey1,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n borderWidth: '0',\n },\n },\n },\n },\n})\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\nimport {\n SearchFieldStyled,\n SearchInputStyled,\n SearchClearButtonStyled,\n SearchFormContainerStyled,\n} from './SearchField.styles'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\ninterface SearchFieldProps {\n performSearch: (textVal: string) => void\n clearResults: () => void\n previousSearches: string[]\n searchFocused: () => void\n}\n\nexport function SearchField({\n performSearch,\n clearResults,\n previousSearches,\n searchFocused,\n}: SearchFieldProps): JSX.Element {\n const [textVal, setTextVal] = React.useState('')\n\n const inputField = React.useRef(null)\n\n const handleKeyUp = (event: React.KeyboardEvent) => {\n event.preventDefault()\n if (event.key === 'Enter') {\n invokeSearch()\n }\n }\n\n const invokeSearch = (text?: string) => {\n const searchTerm = text || textVal\n\n if (searchTerm.length === 0) return\n\n performSearch(searchTerm)\n const node = inputField.current\n if (node) {\n node.blur()\n }\n }\n\n const textUpdated = (event: React.ChangeEvent) => {\n event.preventDefault()\n const value = event.target.value\n setTextVal(value)\n }\n\n const clearText = () => {\n setTextVal('')\n clearResults()\n focus()\n }\n\n const focus = () => {\n if (!inputField) return\n\n const node = inputField.current\n if (node) {\n node.focus()\n node.setAttribute('autoFocus', '')\n }\n }\n\n React.useEffect(() => {\n focus()\n }, [])\n\n const repeatPreviousSearch = (text: string) => {\n setTextVal(text)\n invokeSearch(text)\n }\n\n const getPreviousSearches = (candidates: string[], textVal: string) => {\n const term = textVal.toLowerCase()\n const filtered = candidates.filter(element => element.toLowerCase().indexOf(term) >= 0)\n if (filtered.length === 0) return null\n return (\n
    \n
      \n
    • \n My previous searches\n
    • \n {filtered.map((text, index) => (\n
    • \n repeatPreviousSearch(text)}\n role='button'\n title={text}\n >\n {text}\n \n
    • \n ))}\n
    \n
    \n )\n }\n\n return (\n \n \n e.preventDefault()} action='.'>\n \n {getPreviousSearches(previousSearches || [], textVal)}\n \n \n Clear\n \n \n )\n}\n","import { SearchResult, RawSearchResults, SearchResultType } from '@core/Data/Search/Search'\nimport { trackSearchQuery } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport const SearchService = {\n async performSearch(searchTerm: string, includeUnmatched?: boolean): Promise {\n const url = `/api/search/query?q=${searchTerm}${includeUnmatched ? '&includeUnmatched' : ''}`\n\n trackSearchQuery(searchTerm)\n\n const response: Response = await fetch(url, {\n method: 'GET',\n })\n\n if (!response.ok) {\n return {\n message: 'An error has occurred retrieving the data',\n }\n }\n\n const data: RawSearchResults = await response.json()\n\n const results: SearchResult[] = data.results\n\n return results\n },\n}\n\nexport const isResultAnError = (result: SearchResultType): result is Error => {\n if ((result as Error).message) {\n return true\n } else {\n return false\n }\n}\n","import styled from '@emotion/styled'\n\nexport const SearchMessageDisplayStyled = styled('div')({\n fontSize: '1.8rem',\n transform: 'translate(0%, 90%)',\n textAlign: 'center',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport enum SearchTextLabelFontSize {\n Small,\n Medium,\n Large,\n}\n\ninterface SearchTextLabelStyledProps {\n size?: SearchTextLabelFontSize\n}\n\nexport const SearchTextLabelStyled = styled('span')(({ size }) => ({\n fontSize: getTextFontSize(size),\n color: hexColors.nero,\n textAlign: 'center',\n display: 'block',\n margin: '1rem 0 0.25rem 0',\n}))\n\nexport const SearchTextLabelLinkStyled = styled('a')(({ size }) => ({\n fontSize: getTextFontSize(size),\n color: hexColors.studio,\n textAlign: 'center',\n display: 'block',\n margin: '1rem 0 0.25rem 0',\n textDecorationLine: 'underline',\n fontWeight: 'bold',\n}))\n\nfunction getTextFontSize(size?: SearchTextLabelFontSize): string {\n let sizeString: string\n switch (size) {\n case SearchTextLabelFontSize.Large:\n sizeString = '1.8rem'\n break\n case SearchTextLabelFontSize.Small:\n sizeString = '1.2rem'\n break\n default:\n sizeString = '1.6rem'\n }\n return sizeString\n}\n","import React from 'react'\nimport { SearchTextLabelStyled, SearchTextLabelFontSize } from './SearchTextLabelStyled.styles'\n\ninterface SearchTextLabelProps {\n children: React.ReactNode\n size?: SearchTextLabelFontSize\n}\n\nexport function SearchTextLabel({ children, size }: SearchTextLabelProps) {\n return {children}\n}\n","import React from 'react'\nimport { SearchMessageDisplayStyled } from './InitialDisplay.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { SearchTextLabel } from '../SearchTextLabel/SearchTextLabel'\nimport {\n SearchTextLabelFontSize,\n SearchTextLabelLinkStyled,\n} from '../SearchTextLabel/SearchTextLabelStyled.styles'\nimport { colors } from '@core/Settings'\nimport { StructuredSearchRoute } from '@core/Areas/StructuredSearch/constants'\nimport { OverlayClose } from '@core/Components/Overlay'\n\nexport function InitialDisplay() {\n return (\n \n \n \n Search for upcoming races...\n \n OverlayClose()}\n >\n Advanced search\n \n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const SearchLoadingStyled = styled('div')({\n fontSize: '1.8rem',\n})\n","import React from 'react'\nimport { SearchLoadingStyled } from './SearchLoading.styles'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nexport function SearchLoading() {\n return (\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { SearchMessageDisplayStyled } from './InitialDisplay.styles'\nimport { colors } from '@core/Settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { SearchTextLabel } from '../SearchTextLabel/SearchTextLabel'\nimport { SearchTextLabelFontSize } from '../SearchTextLabel/SearchTextLabelStyled.styles'\n\nexport function SearchErrored() {\n return (\n \n \n An Error has Occurred\n Please try again.\n \n )\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\n\nexport const SearchResultsStyled = styled('div')({\n fontSize: '1.4rem',\n})\n\nexport const SearchResultPrimaryInfoStyled = styled('span')({\n fontSize: '1.2rem',\n display: 'block',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n})\n\nexport const SearchResultSecondaryInfoStyled = styled('span')({\n color: colors.search.result.secondary,\n display: 'block',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontSize: '1.0rem',\n})\n\nexport const DriverStyled = styled(SearchResultSecondaryInfoStyled)({\n marginRight: '3px',\n display: 'inline',\n})\n\nexport const RaceDetailsStyled = styled(SearchResultPrimaryInfoStyled)({})\n\nexport const RaceClassStyled = styled(SearchResultSecondaryInfoStyled)({\n display: 'inline',\n})\nexport const RaceDistanceStyled = styled(RaceClassStyled)({\n marginRight: '3px',\n})\n\nexport const SportsStyled = styled(SearchResultPrimaryInfoStyled)({})\n\nexport const SearchResultPricesStyled = styled('div')({\n display: 'flex',\n fontWeight: 'bold',\n flexDirection: 'column',\n})\n\nexport const SearchResultInfoHeaderStyled = styled('div')({\n backgroundColor: colors.search.background,\n borderBottom: `1px solid ${colors.search.result.border}`,\n textAlign: 'right',\n padding: '0.25rem 1rem',\n})\n\nexport const SearchFixedOddsLabelStyled = styled('span')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n color: colors.structuredSearch.resultDetails.fixed,\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const LocationTimeStyled = styled('div')({\n fontSize: '1rem',\n display: 'flex',\n})\n\nexport const RaceNumberStyled = styled('span')({\n paddingLeft: '0.25rem',\n})\n\nexport const SearchResultIconStyled = styled('span')({\n marginLeft: '0',\n})\n\nexport const SearchResultRaceStatusStyled = styled('span')({\n color: hexColors.freeSpeechRed,\n fontSize: '1rem',\n marginRight: '0.5rem',\n})\n\nexport const SearchResultASTTimerSTyled = styled('div')({\n 'div > strong': {\n fontWeight: 400,\n fontSize: '1rem',\n color: hexColors.dimGrey,\n },\n paddingRight: '.5rem',\n paddingBottom: '.1rem',\n})\n\nexport const SearchLocationNameStyled = styled('span')({\n display: 'inline-block',\n verticalAlign: 'middle',\n marginLeft: 'auto',\n marginTop: '-.2rem',\n color: hexColors.dimGrey,\n '@media (max-width: 350px)': {\n maxWidth: '20rem',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n})\n\nexport const ScratchedAcceptorStyled = styled('span')({\n color: hexColors.freeSpeechRed,\n marginRight: '0.5rem',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const HighlightedDisplay = styled('span')({\n backgroundColor: hexColors.paleCornflowerBlue,\n})\n","import React from 'react'\nimport { HighlightedDisplay } from './HighlightDisplay.styles'\nimport { MetaDataHighlight, HighlightToken } from '../../../../Data/Search/Search'\n\ninterface HighlightDisplayProps {\n displayText: string\n highlights: MetaDataHighlight\n highlightKey: string\n}\n\nexport function HighlightDisplay({\n displayText,\n highlights,\n highlightKey,\n}: HighlightDisplayProps): JSX.Element | null {\n if (!highlights[highlightKey]) return <>{displayText}\n\n const transform = (token: HighlightToken, index: number) => {\n const key = `${token.value}_${index}`\n return token.isMatch ? (\n {token.value}\n ) : (\n {token.value}\n )\n }\n\n const elements = highlights[highlightKey].map(transform)\n\n return <>{elements}\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport {\n LocationTimeStyled,\n RaceNumberStyled,\n ScratchedAcceptorStyled,\n SearchResultIconStyled,\n SearchResultRaceStatusStyled,\n SearchResultASTTimerSTyled,\n SearchLocationNameStyled,\n} from './LocationTime.styles'\nimport { getAstDetails } from './utils'\nimport { MetaDataHighlight } from '@core/Data/Search/Search'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport { HighlightDisplay } from './HighlightDisplay'\nimport { RacingCode } from '@core/Data/StructuredSearch/StructuredSearchResult'\n\nexport interface LocationTimeProps {\n isSport: boolean\n locationName: string\n raceNumber?: number\n code?: RacingCode\n advertisedStartTime?: string\n currentDateMilli: number\n status?: string\n highlightKey: string\n highlights: MetaDataHighlight\n scratchedStatus?: string\n}\n\nexport function LocationTime({\n isSport,\n locationName,\n raceNumber,\n code,\n advertisedStartTime,\n currentDateMilli,\n status,\n highlightKey,\n highlights,\n scratchedStatus,\n}: LocationTimeProps) {\n const statusJsx = scratchedStatus ? (\n {scratchedStatus}\n ) : status ? (\n {status}\n ) : null\n\n let astJsx: JSX.Element | null = null\n if (advertisedStartTime) {\n const astDetails = getAstDetails(advertisedStartTime, currentDateMilli)\n const formattedDate = dayjs(advertisedStartTime).format('DD MMM hh:mm A')\n astJsx = (\n \n {astDetails.showDay ? (\n {formattedDate}\n ) : (\n \n )}\n \n )\n }\n\n const bottomRow = (\n <>\n {statusJsx}\n {astJsx}\n \n )\n\n return (\n \n {bottomRow}\n \n \n {!isSport ? : null}\n \n \n )\n}\n\ntype RaceLocationProps = Pick\n\nexport function RaceLocation({ raceNumber, code }: RaceLocationProps) {\n let codeIcon\n\n switch (code) {\n case RacingCode.Races:\n codeIcon = \n break\n case RacingCode.Dogs:\n codeIcon = \n break\n case RacingCode.Trots:\n codeIcon = \n break\n default:\n codeIcon = null\n }\n\n const raceNumberString: string = raceNumber ? `R${raceNumber}` : ''\n\n return (\n <>\n {raceNumberString}{' '}\n {codeIcon}\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { lessThan } from '@mobi/component-library/Utils/media'\nimport { SilkImage } from '@core/Components/SilkImage/SilkImage'\nimport { getImageUrlWithSizes } from '@core/Components/SilkImage/utils'\n\nconst SearchSilkContainer = styled('span')({\n width: '2.5rem',\n verticalAlign: 'middle',\n display: 'block',\n padding: '0 0.5rem 0 0',\n marginTop: '0.5rem',\n marginRight: '0.25rem',\n\n [lessThan('px350')]: {\n display: 'none',\n },\n})\n\ninterface SearchSilkImageProps {\n meetingId: string\n meetingDate: string\n raceNo: number\n isDogsSilk: boolean\n isTrots: boolean\n imageSize?: string\n acceptorNumber: number\n}\n\nexport function SearchSilkImage({\n meetingId,\n meetingDate,\n raceNo,\n isDogsSilk,\n isTrots,\n acceptorNumber,\n}: SearchSilkImageProps): JSX.Element {\n const imageUrlWithSizes = getImageUrlWithSizes({ meetingId, meetingDate, isTrots, raceNo })\n\n const xOffset = acceptorNumber - 1\n\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport {\n SearchResult,\n isSearchResultAcceptor,\n isSearchResultRace,\n isSearchResultSport,\n SearchResultSport,\n SearchResultAcceptor,\n SearchResultRace,\n MetaDataHighlight,\n isSearchResultFobEvent,\n isSearchResultFobProposition,\n SearchResultFobEvent,\n SearchResultFobProposition,\n} from '@core/Data/Search/Search'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { LocationTime } from './LocationTime'\nimport {\n DriverStyled,\n SearchResultSecondaryInfoStyled,\n SearchResultPrimaryInfoStyled,\n RaceDetailsStyled,\n RaceDistanceStyled,\n RaceClassStyled,\n SportsStyled,\n SearchResultPricesStyled,\n} from './SearchResults.styles'\nimport { HighlightDisplay } from './HighlightDisplay'\nimport { SearchSilkImage } from './SearchSilkImage'\nimport { RacingCode } from '@core/Data/StructuredSearch/StructuredSearchResult'\nimport { RaceProduct } from '@core/Areas/RaceCardFixedOnly'\n\ninterface SearchResultComponentProps {\n searchResult: SearchResult\n currentDateMilli: number\n highlights: MetaDataHighlight\n}\n\nexport function SearchResultComponent({\n searchResult,\n currentDateMilli,\n highlights,\n}: SearchResultComponentProps): JSX.Element | null {\n if (isSearchResultAcceptor(searchResult)) {\n return (\n \n )\n }\n\n if (isSearchResultRace(searchResult)) {\n return (\n \n )\n }\n\n if (isSearchResultSport(searchResult)) {\n return (\n \n )\n }\n\n if (isSearchResultFobEvent(searchResult)) {\n return (\n \n )\n }\n\n if (isSearchResultFobProposition(searchResult)) {\n return (\n \n )\n }\n\n return null\n}\n\nexport function SearchResultAcceptorComponent({\n searchResult,\n currentDateMilli,\n highlights,\n}: SearchResultComponentProps): JSX.Element {\n const { acceptor } = searchResult as SearchResultAcceptor\n let driver = null\n\n switch (acceptor.race.fixture.contestType) {\n case RacingCode.Races:\n if (acceptor.riderName && acceptor.riderName !== '') {\n driver = (\n \n <>J: \n \n \n )\n }\n break\n case RacingCode.Trots:\n if (acceptor.driverName && acceptor.driverName !== '') {\n driver = (\n \n <>D: \n \n \n )\n }\n break\n default:\n driver = null\n }\n\n let trainer = null\n\n if (acceptor.trainerName && acceptor.trainerName !== '') {\n trainer = (\n \n <>T: \n \n \n )\n }\n\n let spacer = null\n\n if (driver && trainer) {\n spacer = <> \n }\n\n const advertisedStartTime = acceptor.race.isStartTimeRelevant\n ? acceptor.race.advertisedStartTime\n : undefined\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n {acceptor.numberOrBox}\n <> - \n \n \n \n {driver}\n {spacer}\n {trainer}\n \n \n\n \n {!acceptor.fixedOddsPrices ? (\n '-'\n ) : (\n \n \n {!acceptor.fixedOddsPrices.win.isValid\n ? '-'\n : acceptor.fixedOddsPrices.win?.dividend?.toFixed(2)}\n \n \n {!acceptor.fixedOddsPrices.place.isValid\n ? '-'\n : acceptor.fixedOddsPrices.place?.dividend?.toFixed(2)}\n \n \n )}\n \n \n \n
    \n )\n}\n\nexport function SearchResultRaceComponent({\n searchResult,\n currentDateMilli,\n highlights: tokens,\n}: SearchResultComponentProps): JSX.Element {\n const { race } = searchResult as SearchResultRace\n\n const advertisedStartTime = race.isStartTimeRelevant ? race.advertisedStartTime : undefined\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n {race.distance}m\n \n \n \n \n \n \n
    \n )\n}\n\nexport function SearchResultSportComponent({\n searchResult,\n currentDateMilli,\n highlights: tokens,\n}: SearchResultComponentProps): JSX.Element {\n const { sport } = searchResult as SearchResultSport\n return (\n
    \n \n \n {sport.name}\n \n \n \n \n \n
    \n )\n}\n\nexport function SearchResultFobEventComponent({\n searchResult,\n currentDateMilli,\n highlights,\n}: SearchResultComponentProps): JSX.Element {\n const { fobEvent } = searchResult as SearchResultFobEvent\n\n const advertisedStartTime = fobEvent.isStartTimeRelevant ? fobEvent.startTime : undefined\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n )\n}\n\nexport function SearchResultFobPropositionComponent({\n searchResult,\n currentDateMilli,\n highlights,\n}: SearchResultComponentProps): JSX.Element {\n const { fobProposition } = searchResult as SearchResultFobProposition\n\n const isFooOrFff = [RaceProduct.FixedOddsOnly, RaceProduct.FutureFinalField].includes(\n fobProposition.fobEvent.productCode as RaceProduct\n )\n\n const bottomLeftDisplayContent = isFooOrFff ? null : (\n \n \n \n )\n\n const advertisedStartTime = fobProposition.isStartTimeRelevant\n ? fobProposition.fobEvent.startTime\n : undefined\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n {fobProposition.number}\n <> - \n \n \n {bottomLeftDisplayContent}\n \n\n \n {\n \n \n {fobProposition.price.winPrice?.toFixed(2) ?? '-'}\n \n \n {fobProposition.price.placePrice?.toFixed(2) ?? '-'}\n \n \n }\n \n \n \n
    \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SearchResultComponentStyled = styled('div')({\n fontSize: '1.2rem',\n backgroundColor: hexColors.white,\n padding: '0.5rem 0.75rem',\n borderBottom: `1px solid ${hexColors.gainsboro}`,\n})\n","import React from 'react'\nimport {\n SearchFixedOddsLabelStyled,\n SearchResultInfoHeaderStyled,\n SearchResultsStyled,\n} from './SearchResults.styles'\nimport { SearchTextLabel } from '../SearchTextLabel/SearchTextLabel'\nimport { SearchTextLabelFontSize } from '../SearchTextLabel/SearchTextLabelStyled.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { SearchMessageDisplayStyled } from './InitialDisplay.styles'\nimport { colors } from '@core/Settings'\nimport * as DateTimeProvider from '@classic/Foundation/DateTimeProvider'\nimport { SearchResultComponent } from './SearchResult'\nimport { SearchResult } from '@core/Data/Search/Search'\nimport { SearchResultComponentStyled } from './SearchResultStyled.styles'\nimport { getRedirectUrl } from './utils'\nimport { OverlayClose } from '@core/Components/Overlay'\ninterface SearchResultProps {\n results: SearchResult[]\n}\n\nexport function SearchResults({ results }: SearchResultProps): JSX.Element {\n const currentDateMilli = DateTimeProvider.now()\n const searchResultsComponents = SearchResultsComponent({\n searchResults: results,\n currentDateMilli,\n })\n return (\n \n {searchResultsComponents === null ? (\n \n ) : (\n <>\n \n Fixed\n \n \n \n )}\n \n )\n}\n\nexport function NoResults() {\n return (\n \n \n No Results Found\n \n Make sure all words are spelled correctly\n \n \n )\n}\n\nfunction handleClick(searchResult: SearchResult) {\n const url = getRedirectUrl(searchResult)\n window.location.href = url\n OverlayClose()\n}\n\ninterface SearchResultsComponentProps {\n searchResults: SearchResult[]\n currentDateMilli: number\n}\n\nexport function SearchResultsComponent({\n searchResults,\n currentDateMilli,\n}: SearchResultsComponentProps): JSX.Element | null {\n const elements: JSX.Element[] = []\n searchResults.forEach(searchResult => {\n // can be null, if type of search result unknown\n const component = SearchResultComponent({\n searchResult,\n currentDateMilli,\n highlights: searchResult.metadata.highlights,\n })\n if (component === null) return\n\n elements.push(\n handleClick(searchResult)}\n data-tid-search-result={`${searchResult.kind.toLowerCase()}-${searchResult.id}`}\n >\n {component}\n \n )\n })\n\n if (!elements.length) {\n return null\n }\n return <>{elements}\n}\n","import React from 'react'\nimport { InitialDisplay } from './SearchResultsContainers/InitialDisplay'\nimport { SearchLoading } from './SearchResultsContainers/SearchLoading'\nimport { SearchErrored } from './SearchResultsContainers/SearchErrored'\nimport { SearchResults } from './SearchResultsContainers/SearchResults'\nimport { SearchResult } from '@core/Data/Search/Search'\n\nexport function SearchResultsContainer({\n isLoading,\n isErrored,\n searchResults,\n searchPerformed,\n}: SearchResultsContainerProps): JSX.Element {\n if (isLoading) {\n return \n }\n\n if (isErrored) {\n return \n }\n\n if (!searchPerformed) {\n return \n }\n\n return \n}\n\nexport interface SearchResultsContainerProps {\n isLoading: boolean\n isErrored: boolean\n searchResults: SearchResult[]\n searchPerformed: boolean\n}\n","import React from 'react'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport {\n SearchOverlayStyled,\n SearchOverlayHeaderStyled,\n CloseButtonStyled,\n SearchResultsContainerStyled,\n} from './Search.styles'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { state$ as navigationState$ } from '@core/State/Navigation/driver'\nimport { SearchField } from './Components/Input/SearchField'\nimport { SearchService, isResultAnError } from './Service/SearchService'\nimport { SearchResult } from '@core/Data/Search/Search'\nimport { SearchResultsContainer } from './Components/SearchResultsContainer'\nimport { deregisterBodyScrollLock, registerBodyScrollLock } from '@mobi/utils/functions'\nimport { useFeature } from '@core/Utils/hooks'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\n\nconst SEARCH_PREVIOUS_TERM = 'search_previous_terms'\nconst MAX_PREVIOUS_SEARCH_TERMS = 10\n\nexport function Search(): JSX.Element {\n const containerElementRef = React.useRef(null)\n const [isLoading, setIsLoading] = React.useState(false)\n const [isErrored, setIsErrored] = React.useState(false)\n const [searchPerformed, setSearchPerformed] = React.useState(false)\n const [performSearch, setPerformSearch] = React.useState(false)\n const [searchResults, setSearchResults] = React.useState([])\n const [searchTerm, setSearchTerm] = React.useState('')\n const searchUnmatchedRacing = useFeature('SEARCH_UNMATCHED_RACING')\n const [previousSearches, setPreviousSearches] = React.useState(\n getPreviousSearchesFromLocalStorage()\n )\n\n React.useEffect(() => {\n const subscription = navigationState$\n .map(navState => navState.toJS().currentUrl)\n .skip(1)\n .distinctUntilChanged()\n .subscribe(handleCloseButtonClick)\n\n return () => subscription?.dispose()\n }, [])\n\n React.useEffect(() => {\n async function getResults(term: string) {\n const results = await SearchService.performSearch(term, searchUnmatchedRacing)\n return results\n }\n\n async function doSearch(term: string) {\n setPerformSearch(false)\n setIsLoading(true)\n\n const results = await getResults(term)\n\n try {\n if (isResultAnError(results)) {\n setIsErrored(true)\n } else {\n setIsErrored(false)\n setSearchResults(results as SearchResult[])\n }\n } catch {\n setIsErrored(true)\n } finally {\n setIsLoading(false)\n setSearchPerformed(true)\n }\n }\n\n if (performSearch) {\n if (searchTerm.length >= 2) {\n doSearch(searchTerm)\n }\n }\n }, [performSearch, searchTerm, searchUnmatchedRacing])\n\n React.useEffect(() => {\n const element = containerElementRef.current\n if (element) registerBodyScrollLock(element)\n\n return () => {\n if (element) deregisterBodyScrollLock(element)\n }\n }, [])\n\n const updatePreviousSearchTerms = (term: string) => {\n const local = [term, ...previousSearches.filter(item => item !== term)].slice(\n 0,\n MAX_PREVIOUS_SEARCH_TERMS\n )\n setInLocalStorage(SEARCH_PREVIOUS_TERM, JSON.stringify(local))\n }\n\n const callPerformSearch = (term: string) => {\n updatePreviousSearchTerms(term)\n setSearchTerm(term)\n setPerformSearch(true)\n setPreviousSearches([])\n }\n\n const resultsCleared = () => {\n setSearchTerm('')\n // force display of previous searches\n setPreviousSearches(getPreviousSearchesFromLocalStorage())\n }\n\n return (\n \n \n setPreviousSearches(getPreviousSearchesFromLocalStorage())}\n />\n \n \n \n \n\n {\n // hide previous searches when clicking outside them but still in the results area\n const clickedOnResults = hasClickedOnElement(\n event.target as HTMLElement,\n containerElementRef\n )\n setPreviousSearches(clickedOnResults ? [] : getPreviousSearchesFromLocalStorage())\n }}\n >\n \n \n \n )\n}\n\nfunction getPreviousSearchesFromLocalStorage() {\n return JSON.parse(getFromLocalStorage(SEARCH_PREVIOUS_TERM) ?? '[]') as string[]\n}\n\nfunction hasClickedOnElement(\n target: HTMLElement,\n containerElementRef: React.RefObject\n): boolean {\n return (\n target === containerElementRef.current ||\n (target.parentElement !== null &&\n hasClickedOnElement(target.parentElement, containerElementRef))\n )\n}\n\nexport function handleCloseButtonClick(): void {\n OverlayClose()\n //Do any other logic here required to end a search modal session\n}\n","export const getStartupParameters = (environment: string): StartupParameters => {\n switch (environment) {\n case 'PROD':\n return prodStartupParameters\n case 'QUAL':\n return ctsStartupParameters\n default:\n return ctnStartupParameters\n }\n}\n\ninterface StartupParameters {\n currency: string\n locale: string\n market: string\n playerId: string\n ticket: string\n oddsFormat: string\n racingMode: string\n channelId: number\n offering: string\n\n // Parameters to overwrite in order to use CTN servers w non-CTN bundle\n environment?: string\n apiBaseUrl?: string\n apiStatisticsBaseUrl?: string\n apiStatisticsGraphqlUrl?: string\n apiLiveOccurrenceBaseUrl?: string\n apiLiveOccurrencePushUrl?: string\n apiRetailOperatorBaseUrl?: string\n apiAuthBaseUrl?: string\n apiPlayerBaseUrl?: string\n pushUrl?: string\n apiSupportUrl?: string\n externalWidgetConfigUrl?: string\n featureTogglesBaseUrl?: string\n}\n\nexport const defaultStartupParameters: StartupParameters = {\n currency: 'AUD',\n locale: 'en_AU',\n market: 'AU',\n playerId: '',\n ticket: '',\n oddsFormat: 'decimal',\n racingMode: 'false',\n channelId: 3 /* Mobile */,\n offering: 'rwwawa',\n}\n\nconst ctnStartupParameters: StartupParameters = {\n ...defaultStartupParameters,\n\n // CTN Parameters\n environment: 'ctn',\n apiBaseUrl: 'https://ctn-api.kambi.com/{api}/{apiVersion}/',\n apiStatisticsBaseUrl: 'https://ctn-api.kambi.com/statistics/api/',\n apiStatisticsGraphqlUrl: 'https://ctn-api.kambi.com/statistics/v2018/graphql/',\n apiLiveOccurrenceBaseUrl: 'https://ctn-api.kambi.com/liveoccurrence/{apiVersion}/',\n apiLiveOccurrencePushUrl: 'wss://ctn-ws.kambi.com/liveoccurrence/{apiVersion}/',\n apiRetailOperatorBaseUrl: 'https://ctn-shop-retail-operator.api.kambi.com/retail-operator-api/',\n apiAuthBaseUrl: 'https://ctn-auth-api.kambicdn.com/{api}/{apiVersion}/',\n apiPlayerBaseUrl: 'https://ctn-auth-api.kambicdn.com/player/api/v2019/rwwawa/',\n pushUrl: 'https://ctn-push.kambi.com',\n apiSupportUrl: 'https://ctn-bo.customer.kambi.com/support/api/',\n externalWidgetConfigUrl: 'https://ctn-static.kambi.com/client/rwwawa/../widget-disabled.js',\n featureTogglesBaseUrl: 'https://ctn-settings-api.kambicdn.com',\n}\n\nconst ctsStartupParameters: StartupParameters = {\n ...defaultStartupParameters,\n\n // CTS Parameters\n environment: 'cts',\n apiBaseUrl: 'https://cts-api.kambi.com/{api}/{apiVersion}/',\n apiStatisticsBaseUrl: 'https://cts-api.kambi.com/statistics/api/',\n apiStatisticsGraphqlUrl: 'https://cts-api.kambi.com/statistics/v2018/graphql/',\n apiLiveOccurrenceBaseUrl: 'https://cts-api.kambi.com/liveoccurrence/{apiVersion}/',\n apiLiveOccurrencePushUrl: 'wss://cts-ws.kambi.com/liveoccurrence/{apiVersion}/',\n apiRetailOperatorBaseUrl: 'https://cts-shop-retail-operator.api.kambi.com/retail-operator-api/',\n apiAuthBaseUrl: 'https://cts-auth-api.kambicdn.com/{api}/{apiVersion}/',\n apiPlayerBaseUrl: 'https://cts-auth-api.kambicdn.com/player/api/v2019/rwwawa/',\n pushUrl: 'https://cts-push.kambi.com',\n apiSupportUrl: 'https://cts-bo.customer.kambi.com/support/api/',\n externalWidgetConfigUrl: 'https://cts-static.kambi.com/client/rwwawa/../widget-disabled.js',\n featureTogglesBaseUrl: 'https://cts-settings-api.kambicdn.com',\n}\n\nexport const prodStartupParameters: StartupParameters = {\n ...defaultStartupParameters,\n\n // PROD Parameters\n apiPlayerBaseUrl: 'https://cf-al-auth-api.kambicdn.com/player/api/v2019/rwwawa/',\n}\n","/* istanbul ignore file */\nconst logger = (color: string, prefix: string, message: string, ...optionalParams: unknown[]) => {\n // eslint-disable-next-line no-console\n console.log(\n `%c${prefix !== '' ? `${prefix}: ` : ``}${message}`,\n `color:${color}`,\n ...optionalParams\n )\n}\n\nexport const createLogger = (color = 'green', prefix = '') => {\n return (message: string, ...optionalParams: unknown[]): void =>\n logger(color, prefix, message, ...optionalParams)\n}\n\nexport const kambiLog = createLogger('green', 'KAMBI')\n","import { deleteAsync, post } from '@classic/Foundation/Services/ApiService'\nimport { defaultStartupParameters } from '@core/Areas/Kambi/config/startupParameters'\nimport {\n LoggedInKambiPlayer as SignalLoggedInKambiPlayer,\n LoggedOutKambiPlayer as SignalLoggedOutKambiPlayer,\n} from '@core/Areas/Kambi/driver'\nimport { getWapi, kambiLog, KambiRegulationId } from '@core/Areas/Kambi/helpers'\nimport { getFromLocalStorage, removeFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\nimport { createLogger } from './logging'\n\nconst LOCAL_STORAGE_LOGOUT_TOKEN = 'KambiLogoutToken'\n\nexport const tryToLoginKambiPlayer = async (\n accountNumber: number,\n regulationId: KambiRegulationId\n): Promise => {\n await retry(\n async () => {\n kambiLog(`user ${accountNumber} getting temp ticket`)\n const data = await post<{\n ticket: string\n }>({\n url: '/api/kambi/issue-temp-ticket',\n body: {\n regulationId,\n },\n })\n\n if (!data.ticket) {\n kambiLog('issue-temp-ticket responded with ticket:' + data.ticket)\n throw Error\n }\n\n kambiLog(`got temp ticket ${data.ticket}, logging Kambi in`)\n\n const wapiRequest = {\n punterId: accountNumber?.toString(),\n ticket: data.ticket,\n currency: defaultStartupParameters.currency,\n locale: defaultStartupParameters.locale,\n market: defaultStartupParameters.market,\n }\n const wapi = await getWapi()\n wapi.request(wapi.LOGIN, wapiRequest)\n\n const currentLogoutToken = data.ticket\n const previousLogoutToken = getFromLocalStorage(LOCAL_STORAGE_LOGOUT_TOKEN)\n\n // Clean up previous session if exists\n if (previousLogoutToken && previousLogoutToken !== currentLogoutToken) {\n kambiLog(\n 'logout token is not the same, delete previous session for logout token',\n previousLogoutToken\n )\n await deletePlayerSession(previousLogoutToken)\n }\n\n setInLocalStorage(LOCAL_STORAGE_LOGOUT_TOKEN, currentLogoutToken)\n SignalLoggedInKambiPlayer(currentLogoutToken)\n kambiLog(`user ${accountNumber} logged into kambi`)\n },\n 750,\n 3\n )\n}\n\nexport const tryToLogoutKambiPlayer = async (logoutToken: string): Promise => {\n await retry(\n async () => {\n await deletePlayerSession(logoutToken)\n const wapi = await getWapi()\n wapi.request(wapi.LOGOUT)\n SignalLoggedOutKambiPlayer()\n kambiLog('kambi player logged out')\n },\n 750,\n 3\n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nasync function deletePlayerSession(logoutToken: string): Promise {\n kambiLog('trying to delete session for logout token', logoutToken)\n await deleteAsync({\n url: '/api/kambi/logout',\n body: {\n logoutToken,\n },\n })\n removeFromLocalStorage(LOCAL_STORAGE_LOGOUT_TOKEN)\n kambiLog('deleted session for logout token', logoutToken)\n}\n\nasync function retry(operation: () => Promise, delay: number, times: number): Promise {\n const log = createLogger('greenyellow', 'Retry')\n try {\n return await operation()\n } catch (ex) {\n log('Operation failed - retries left', times)\n if (times > 1) {\n await new Promise(resolve => setTimeout(resolve, delay))\n return retry(operation, delay, times - 1)\n } else {\n log('Operation failed - done, no more retries')\n throw ex\n }\n }\n}\n","import { kambiLog } from '@core/Areas/Kambi/helpers'\n\nexport const waitForWapi = async (): Promise =>\n await new Promise(resolve => {\n const interval = setInterval(() => {\n if (!window.KambiWidget) return\n clearInterval(interval)\n\n window.KambiWidget.ready.then(wapi => {\n if (!window.wapi) window.wapi = wapi\n kambiLog('KambiWidget mounted', window.KambiWidget)\n resolve(wapi)\n })\n }, 50)\n })\n\nexport const getWapi = async (): Promise => {\n if (window.wapi) return window.wapi\n return waitForWapi()\n}\n","import { UpdateBetslipMaximized, UpdateUserData } from '@core/Areas/Kambi/driver'\n\ntype ClientSubscriptions = Record void>\n\nconst clientSubscriptions: ClientSubscriptions = {\n BetslipMaximizedChange(response) {\n const isMaximized = response.data?.maximized\n if (isMaximized === undefined) return\n\n UpdateBetslipMaximized(isMaximized)\n },\n UserData(response) {\n const { sessionId } = response.data\n if (sessionId === undefined) return\n\n UpdateUserData(sessionId)\n },\n}\n\nexport const handleClientSubscriptions = (response: WapiSubscriptionResponse): void => {\n clientSubscriptions[response.type]?.(response)\n}\n","import { determineUserRegulationId } from '@core/Areas/Kambi/helpers/regulation'\nimport {\n tryToLoginKambiPlayer,\n tryToLogoutKambiPlayer,\n} from '@core/Areas/Kambi/helpers/authentication'\nimport { createLogger } from '@core/Areas/Kambi/helpers/logging'\nimport { state$ as kambiState$, BeginKambiLogin, EndKambiLogin } from '@core/Areas/Kambi/driver'\nimport { ResidentialDetail } from '@core/State/UserAccount/userAccountDriver'\nimport { List } from 'typings/immutable'\n\nconst syncLog = createLogger('orange', 'KAMBI: Sync user login status')\n\n// Handle LOGIN\nexport async function handleKambiLogin(\n accountNumber: number,\n residentialDetail: List\n): Promise {\n const state = await kambiState$.take(1).toPromise()\n\n const isKambiLoggedIn = state.get('isLoggedIn')\n if (isKambiLoggedIn) return\n\n const isKambiLoginPending = state.get('loginPending')\n if (isKambiLoginPending) {\n syncLog('login pending')\n return\n }\n\n BeginKambiLogin()\n\n try {\n syncLog('user logged in, trying to log kambi in')\n\n const regulationId = determineUserRegulationId(residentialDetail)\n await tryToLoginKambiPlayer(accountNumber, regulationId)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('ERROR: Kambi Login', error)\n } finally {\n EndKambiLogin()\n }\n}\n\n// Handle LOGOUT\nexport async function handleKambiLogout(): Promise {\n const kambiState = await kambiState$.take(1).toPromise()\n const isKambiLoggedIn = kambiState.get('isLoggedIn')\n const logoutToken = kambiState.get('logoutToken')\n\n if (!(isKambiLoggedIn && logoutToken)) return\n\n try {\n syncLog('user logged out, trying to log kambi out')\n\n await tryToLogoutKambiPlayer(logoutToken)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('ERROR: Kambi Logout', error)\n }\n}\n","import { scriptLoader } from '@mobi/utils'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { isUserAccountStatePending, isUserResidentOfSA } from '@core/Areas/Kambi/helpers'\n\nexport type BootstrapJurisdiction = 'WA' | 'SA'\n\n// Load scripts with correct bootstrap based on jurisdiction\nexport async function handleScriptLoading(): Promise {\n const userAccountStateRecord = await userAccountState$\n .skipWhile(isUserAccountStatePending)\n .take(1)\n .toPromise()\n\n const shouldLoadBootstrapSA = isUserResidentOfSA(userAccountStateRecord.residentialDetail)\n\n window._kc.offering = shouldLoadBootstrapSA ? 'rwwasa' : 'rwwawa'\n\n const cacheBust = new Date().getTime()\n\n const subDomain = window._kc.environment === 'ctn' ? 'client-static.bc.ctn.' : 'client-static.bc.'\n\n const generateUrl = (scriptName: string) =>\n `https://${subDomain}kambicdn.com/client/${window._kc.offering}/${scriptName}?cb=${cacheBust}`\n\n await scriptLoader(generateUrl('main.js'))\n\n await scriptLoader(generateUrl('remoteEntry.js'))\n\n await scriptLoader('https://static.kambicdn.com/client/widget-api/kambi-widget-api.js')\n\n return shouldLoadBootstrapSA ? 'SA' : 'WA'\n}\n","import { state$ as kambiState$ } from '@core/Areas/Kambi/driver'\nimport { kambiLog } from '@core/Areas/Kambi/helpers'\nimport {\n KAMBI_BETSLIP_DIV_CLASS,\n KAMBI_CSS_HIDDEN_CLASS,\n KAMBI_DIV_ID,\n} from '@core/Areas/Kambi/constants'\n\nlet hasSetInitialVisibilityState = false\n\nexport function setInitialVisibilityState(wapi: Wapi): void {\n if (hasSetInitialVisibilityState) return\n\n kambiState$.take(1).subscribe(kambiState => {\n const isVisible = kambiState.get('isVisible')\n setKambiClientVisibility(isVisible, wapi)\n setKambiBetslipVisibility(isVisible, wapi)\n hasSetInitialVisibilityState = true\n })\n}\n\nexport function toggleKambiVisiblity(isVisible: boolean): void {\n if (!hasSetInitialVisibilityState || !window.wapi) return\n\n setKambiClientVisibility(isVisible, window.wapi)\n kambiLog('set client visibility', isVisible)\n\n setKambiBetslipVisibility(isVisible, window.wapi)\n kambiLog('set betslip visibility', isVisible)\n}\n\n// Local Helpers\nfunction setKambiClientVisibility(isVisible: boolean, wapi: Wapi) {\n // Hidden class used on init to prevent client jump\n if (isVisible) document.getElementById(KAMBI_DIV_ID)?.classList.remove(KAMBI_CSS_HIDDEN_CLASS)\n\n wapi.set(isVisible ? wapi.CLIENT_SHOW : wapi.CLIENT_HIDE)\n}\n\nfunction setKambiBetslipVisibility(isVisible: boolean, wapi: Wapi) {\n // Ensure Kambi betslip doesn't display on non-kambi routes (due to fixed positon)\n document\n .querySelector(`.${KAMBI_BETSLIP_DIV_CLASS}`)\n ?.classList.toggle(KAMBI_CSS_HIDDEN_CLASS, !isVisible)\n\n wapi.set(isVisible ? wapi.BETSLIP_SHOW : wapi.BETSLIP_HIDE)\n}\n","import React from 'react'\nimport { state$ as kambiState$ } from '@core/Areas/Kambi/driver'\nimport { getWapi } from '@core/Areas/Kambi/helpers'\n\nexport const useKambiVisible = (): [isKambiVisible: boolean, isKambiBetslipMaximized: boolean] => {\n const [isKambiVisible, setIsKambiVisible] = React.useState(false)\n const [isKambiBetslipMaximized, setIsKambiBetslipMaximized] = React.useState(false)\n\n React.useEffect(() => {\n const subscription = kambiState$\n .map(kambiState => kambiState.get('isVisible'))\n .distinctUntilChanged()\n .debounce(20)\n .subscribe(isVisible => {\n setIsKambiVisible(isVisible)\n })\n return () => {\n subscription.dispose()\n }\n }, [])\n\n React.useEffect(() => {\n let subscription: Rx.IDisposable\n\n if (!isKambiVisible) return undefined\n\n getWapi().then(wapi => {\n // On entering sports route, show betslip minimized\n wapi.set(wapi.BETSLIP_MAXIMIZED, { maximized: false })\n\n subscription = kambiState$\n .map(kambiState => kambiState.get('isBetslipMaximized'))\n .distinctUntilChanged()\n .subscribe(isBetslipMaximizedState => {\n setIsKambiBetslipMaximized(isBetslipMaximizedState)\n })\n })\n return () => {\n subscription?.dispose()\n }\n }, [isKambiVisible])\n\n return [isKambiVisible, isKambiBetslipMaximized]\n}\n","/* istanbul ignore file */\nimport * as React from 'react'\nimport anime from 'animejs'\nimport { throttle } from '@core/Utils'\nimport { store } from '@core/Store'\nimport { toggleIsAppHeaderVisible } from '../Store'\n\nexport const useStickyOnScroll = (\n appHeaderRef: React.RefObject,\n isVisible: boolean\n): void => {\n React.useEffect(() => {\n const watchScrollEvent = throttle(updateStickyState, 70)\n window.addEventListener('scroll', watchScrollEvent)\n\n return () => {\n watchScrollEvent.cancel()\n window.removeEventListener('scroll', watchScrollEvent)\n }\n }, [])\n\n React.useEffect(() => {\n hideOrShowAppHeader({ appHeaderRef, isVisible })\n }, [appHeaderRef, isVisible])\n}\n\ninterface UpdateStickState {\n appHeaderRef: React.RefObject\n isVisible: boolean\n setState: (isVisible: boolean) => void\n}\n\nconst hideOrShowAppHeader = ({\n appHeaderRef,\n isVisible,\n}: Omit): void => {\n anime({\n targets: appHeaderRef.current,\n translateY: isVisible ? ['-100%', 0] : [0, '-100%'],\n easing: 'easeInOutQuad',\n duration: 125,\n })\n}\n\n// Module scoped variables\nlet scrollYCurrent = 0\nlet scrollYPrevious = 0\n\nfunction updateStickyState(): void {\n scrollYCurrent = window.pageYOffset\n\n if (scrollYCurrent < 61) {\n store.dispatch(toggleIsAppHeaderVisible(true))\n return\n }\n\n if (isBottomOverscroll(scrollYCurrent)) {\n return\n }\n\n if (scrollYCurrent > 60) {\n const scrollDirection = scrollYCurrent >= scrollYPrevious ? 'down' : 'up'\n const distanceScrolled = Math.abs(scrollYCurrent - scrollYPrevious)\n\n const upTolerance = 5\n const downTolerance = 15\n\n if (\n // Going UP & not pinned, set to pinned\n scrollDirection === 'up' &&\n distanceScrolled > upTolerance\n ) {\n store.dispatch(toggleIsAppHeaderVisible(true))\n } else if (\n // Going DOWN & already pinned, set to unpinned\n scrollDirection === 'down' &&\n distanceScrolled > downTolerance\n ) {\n store.dispatch(toggleIsAppHeaderVisible(false))\n }\n }\n scrollYPrevious = scrollYCurrent\n}\n\nfunction isBottomOverscroll(currentScrollY: number) {\n return currentScrollY + window.innerHeight > document.body.scrollHeight\n}\n","import { useQueries } from 'react-query'\nimport { useFeature } from '@core/Utils/hooks'\nimport {\n racingPendingTicketsQuery,\n racingPendingTicketsPollingQuery,\n kambiPendingTicketsQuery,\n kambiPendingTicketsPollingQuery,\n} from '../queries'\n\nconst enum LocalConstants {\n DEFAULT_MAX_COUNT = 99,\n}\n\nexport const usePendingTicketsCount = ({ enabled }: { enabled: boolean }) => {\n const isAppHeaderPendingBetsFeatureActive = useFeature('PENDING_BETS_BUTTON_IN_APP_HEADER')\n\n const [{ data: pendingTicketsCount }, { data: kambiPendingTicketsCount }] = useQueries([\n {\n ...(isAppHeaderPendingBetsFeatureActive\n ? racingPendingTicketsPollingQuery\n : racingPendingTicketsQuery),\n enabled,\n },\n {\n ...(isAppHeaderPendingBetsFeatureActive\n ? kambiPendingTicketsPollingQuery\n : kambiPendingTicketsQuery),\n enabled,\n },\n ])\n\n const racingPendingCount = pendingTicketsCount?.pendingTicketsCount ?? 0\n const sportsPendingCount = kambiPendingTicketsCount ?? 0\n\n const pendingBets = racingPendingCount + sportsPendingCount\n\n return {\n pendingBetsCount: Math.min(pendingBets, LocalConstants.DEFAULT_MAX_COUNT),\n doPendingBetsExceedMaxCount: pendingBets > LocalConstants.DEFAULT_MAX_COUNT,\n isSportsOnlyPending: sportsPendingCount > 0 && racingPendingCount === 0,\n }\n}\n","import { fromJS } from 'immutable'\nimport { StateMap } from 'typings/immutable'\nimport { attachDriver, createSignal, type Signal } from 'rwwa-rx-state-machine'\nimport { HasLoggedOut } from '@core/State/UserAccount/userAccountDriver'\n\nexport const SetAccountDetails = createSignal('SetAccountDetails')\nexport const InvalidateAccountDetails = createSignal('InvalidateAccountDetails')\n\nexport type GetAccountDetailsRes = Omit\n\ninterface AccountDetails {\n accountName: string\n accountNumber: number\n balance: string\n blackBookAlertCount: number\n activeCampaignsCount: number\n _lastUpdate: number\n}\n\ninterface AccountState {\n accountDetails?: AccountDetails\n}\n\nexport type AccountStateMap = StateMap\n\nexport const defaultState: AccountState = {\n accountDetails: undefined,\n}\n\nexport function driver(state = fromJS(defaultState), signal: Signal): AccountStateMap {\n switch (signal.tag) {\n case SetAccountDetails: {\n return state.merge({ accountDetails: { ...signal.data, _lastUpdate: Date.now() } })\n }\n\n case InvalidateAccountDetails: {\n return state.merge({ accountDetails: undefined })\n }\n\n case HasLoggedOut: {\n return state.merge({ accountDetails: undefined })\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({ path: 'account-area', driver })\n","import React from 'react'\nimport { state$, SetAccountDetails, GetAccountDetailsRes } from '../driver'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport {\n UpdateAccountBalance,\n HasLoggedOut,\n state$ as userAccountState$,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { StateMap } from 'typings/immutable'\n\nconst enum LocalConstants {\n TTL_ACCOUNT_DETAILS = 2_000,\n}\n\nexport const useGetAccountDetails = (\n shouldFetch: boolean\n): StateMap | undefined => {\n const { accountDetails } = useObservableImmutable(state$, ['accountDetails'])\n const { isLoggedIn } = useObservableImmutable(userAccountState$, ['isLoggedIn'])\n const currentlyLoadingAccountRef = React.useRef(false)\n\n React.useEffect(() => {\n if (\n !isLoggedIn ||\n !shouldFetch ||\n currentlyLoadingAccountRef.current ||\n (accountDetails &&\n Date.now() - accountDetails.get('_lastUpdate') < LocalConstants.TTL_ACCOUNT_DETAILS)\n ) {\n return\n }\n currentlyLoadingAccountRef.current = true\n\n get({ url: 'api/account/detailsformenu' })\n .then(accountDetailsRes => {\n if (accountDetailsRes.accountNumber === 0) {\n HasLoggedOut()\n return\n }\n\n const balanceCleaned = (accountDetailsRes.balance || '').replace('$', '').replace(/,/g, '')\n UpdateAccountBalance({ balance: balanceCleaned })\n SetAccountDetails({ ...accountDetailsRes })\n })\n .finally(() => {\n currentlyLoadingAccountRef.current = false\n })\n }, [shouldFetch, accountDetails, isLoggedIn])\n\n return accountDetails\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const ReverificationAlertStyled = styled('div')({\n fontSize: '1.4rem',\n padding: '1rem',\n marginBottom: '1rem',\n backgroundColor: hexColors.white,\n})\n\nexport const ReverificationAlertIconStyled = styled('div')({\n width: '4rem',\n})\n\nexport const ReverificationAlertMessageStyled = styled('strong')({\n margin: 0,\n textDecoration: 'underline',\n color: hexColors.sushi,\n lineHeight: '3rem',\n})\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '../../Settings'\nimport {\n ReverificationAlertStyled,\n ReverificationAlertIconStyled,\n ReverificationAlertMessageStyled,\n} from './Alert.styles'\n\nimport { observeImmutable } from '../../Components/HOCs'\nimport { state$ as reverificationState$, ShowReverificationPopup } from './driver'\nimport { store } from '@core/Store'\nimport { toggleIsDropDownOpen } from '../AppHeader/Store'\n\ninterface ReverificationAlertComponentProps {\n requiresReverification: boolean\n}\n\nexport const ReverificationAlert = observeImmutable(\n reverificationState$,\n ({ record: { requiresReverification } }) => (\n \n )\n)\n\nconst handleClick = () => {\n store.dispatch(toggleIsDropDownOpen(false))\n ShowReverificationPopup()\n}\n\nexport function ReverificationAlertComponent({\n requiresReverification,\n}: ReverificationAlertComponentProps): JSX.Element | null {\n if (!requiresReverification) {\n return null\n }\n\n return (\n \n \n \n \n \n \n \n Re-verify your account now\n \n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { hexColors } from '@mobi/settings'\nimport { lessThan } from '@mobi/component-library/Utils/media'\n\nexport const AccountDropDownWrapStyled = styled.div<{ isVisible: boolean; innerHeight: number }>(\n {\n position: 'absolute',\n top: measurements.mobi.headerHeight,\n boxSizing: 'border-box',\n background: hexColors.white,\n width: '100%',\n zIndex: -1,\n transition: 'transform 0.2s cubic-bezier(0.16, 1, 0.3, 1)',\n padding: '1.3rem 1.7rem',\n overflow: 'auto',\n overscrollBehavior: 'contain',\n fontFamily: '\"PF Square Sans Pro\", Arial, sans-serif',\n\n [lessThan('px350')]: {\n padding: '1rem 0.5rem',\n },\n },\n ({ isVisible = false, innerHeight }) => ({\n transform: `translateY(${isVisible ? '0' : '-100%'})`,\n maxHeight: `calc(${innerHeight}px - ${measurements.mobi.headerHeight})`,\n })\n)\n\nexport const AccountInfoWrapStyled = styled.div({\n marginBottom: '1.6rem',\n\n '& > div': {\n minWidth: '50%',\n },\n})\n\nexport const AccountNameLabelStyled = styled.div({\n fontSize: '2rem',\n fontWeight: '700',\n color: hexColors.studio,\n})\n\nexport const AccountNumberLabelStyled = styled.div({\n fontSize: '1.2rem',\n fontWeight: '300',\n color: hexColors.nero,\n})\n\nexport const SeparatorStyled = styled.hr({\n margin: '1rem 0',\n border: 0,\n height: 0,\n borderBottom: '1px solid ' + hexColors.grey3,\n})\n\nexport const DepositWithdrawSectionStyled = styled.div({\n display: 'flex',\n '*:not(:last-child)': {\n marginRight: '1.7rem',\n },\n})\n\nexport const ItemContainerStyled = styled.div({\n alignItems: 'center',\n color: hexColors.jacarta,\n display: 'flex',\n fontSize: '1.4rem',\n fontWeight: '500',\n justifyContent: 'space-between',\n marginBottom: '0.25rem',\n})\n\nexport const LinkStyled = styled.a({\n alignItems: 'center',\n color: hexColors.jacarta,\n display: 'inline-flex',\n fontSize: '1.4rem',\n fontWeight: '500',\n justifyContent: 'space-between',\n padding: '0.5rem 0',\n textDecoration: 'none',\n width: '100%',\n})\n\nexport const LogoutLinkStyled = styled(LinkStyled)({\n color: hexColors.crimson,\n\n // The logout link has no href associated but does a POST request instead\n // So we add a pointer as the cursor to indicate to the user it's still clickable\n cursor: 'pointer',\n justifyContent: 'flex-start',\n\n '& svg': {\n verticalAlign: 'middle',\n marginRight: '0.8rem',\n marginTop: '-0.2rem',\n },\n})\n","import React from 'react'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\n// Types\ninterface ClickEvent extends MouseEvent {\n target: Element\n}\ntype ClickEventHandler = (event: MouseEvent) => void\n\n// Handler\nexport function clickTrackHandler(event: ClickEvent): void {\n if (\n !event.target ||\n !event.target.closest('[data-tid-account-dropdown]') ||\n event.target.closest('[data-testid=\"account-dropdown-superpicks-list\"]')\n )\n return\n\n const clickableElement = event.target.closest('button') || (event.target as Element).closest('a')\n if (!clickableElement) return\n\n const buttonLabel = (clickableElement.innerText ?? clickableElement.textContent)\n .replace(/\\d/g, '')\n .trim()\n\n if (!buttonLabel) return\n\n trackEvent(keys.accountDropDownClick, { buttonLabel })\n}\n\n// =================\n// useAnalytics Hook\n// =================\n\nexport const useAnalytics = (shouldTrack: boolean): void => {\n React.useEffect(() => {\n if (shouldTrack) {\n document.body.addEventListener('click', clickTrackHandler as ClickEventHandler, true)\n } else {\n document.body.removeEventListener('click', clickTrackHandler as ClickEventHandler, true)\n }\n }, [shouldTrack])\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { ButtonStyled } from '@mobi/component-library/Common/Buttons'\n\nexport const AccountPromoWrapperStyled = styled('div')({\n marginBottom: '1.5rem',\n fontFamily: '\"PF Square Sans Pro\", Arial, sans-serif',\n})\n\nexport const AccountPromoButtonRowStyled = styled('div')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'stretch',\n\n '& > *': {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n marginLeft: '2.1rem',\n },\n\n '& div:first-of-type': {\n marginLeft: '0px',\n },\n})\n\nexport const AccountPromoLabelStyled = styled('span')({\n position: 'relative',\n zIndex: 1,\n display: 'block',\n marginTop: 'auto',\n padding: 0,\n fontSize: '1.2rem',\n lineHeight: 1.2,\n})\n\nexport const AccountPromoButtonStyled = styled(ButtonStyled)<{ shouldDisable: boolean }>(\n {\n position: 'relative',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n minHeight: '5.8rem',\n width: '100%',\n padding: '0.1rem 0.5rem',\n border: 0,\n margin: 0,\n background: 'linear-gradient(125deg, rgba(81,45,109,1) 65%, rgba(130,70,175,1) 65%);',\n textAlign: 'center',\n textDecoration: 'none',\n borderRadius: '0.4rem',\n color: hexColors.white,\n fontSize: '1rem',\n fontWeight: '500',\n },\n ({ shouldDisable = false }) => ({\n pointerEvents: shouldDisable ? 'none' : undefined,\n boxShadow: shouldDisable ? 'none' : '0 1px 1px rgba(0,0,0,0.1)',\n })\n)\n\nexport const AccountPromoLinkStyled = AccountPromoButtonStyled.withComponent('a')\n\nexport const AccountPromoCountStyled = styled('span')<{ shouldDisable: boolean }>({\n position: 'absolute',\n zIndex: 0,\n top: '0.8rem',\n left: '0.8rem',\n display: 'flex',\n justifyContent: 'flex-start',\n color: hexColors.white,\n WebkitTransform: 'translate3d(0, 0, 0)',\n\n // Number\n '& > span': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: '1.6rem',\n fontWeight: '700',\n },\n})\n\nexport const AccountSuperPickBadgeStyled = styled('span')({\n display: 'inline-block',\n marginLeft: 'auto',\n width: '2rem',\n minWidth: '2rem',\n height: '2rem',\n borderRadius: '50%',\n fontSize: '1.2rem',\n lineHeight: '2rem',\n textAlign: 'center',\n backgroundColor: hexColors.blueDiamond,\n color: hexColors.white,\n})\n\nexport const AccountPromoSuperpicksWrapStyled = styled('div')({\n height: 0,\n overflow: 'hidden',\n})\n\nexport const AccountPromoSuperpicksListStyled = styled('ul')({\n position: 'relative',\n margin: 0,\n marginTop: '1rem',\n padding: '0 1rem',\n listStyle: 'none',\n border: `1px solid ${hexColors.veryLightGrey}`,\n background: hexColors.white,\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '-0.6rem',\n left: '50%',\n width: 0,\n height: 0,\n transform: 'translateX(-0.3rem)',\n borderLeft: '0.6rem solid transparent',\n borderRight: '0.6rem solid transparent',\n borderBottom: `0.6rem solid ${hexColors.veryLightGrey}`,\n },\n})\n\nexport const AccountPromoSuperpicksItemStyled = styled('li')({\n borderBottom: `1px solid ${hexColors.gainsboro}`,\n\n '&:last-of-type': {\n border: 0,\n },\n})\n\nexport const AccountPromoSuperpicksButtonStyled = styled('button')({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '1rem 1.5rem 1rem 0',\n fontSize: '1.2rem',\n textTransform: 'uppercase',\n textAlign: 'left',\n border: 0,\n color: hexColors.nero,\n background: 'none',\n\n '& > span': {\n marginLeft: 'auto',\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n right: 0,\n top: '50%',\n transform: 'rotate(-45deg) translateY(-50%)',\n borderRight: `2px solid ${hexColors.lola}`,\n borderBottom: `2px solid ${hexColors.lola}`,\n width: '0.5rem',\n height: '0.5rem',\n },\n})\n","import anime from 'animejs'\nimport React from 'react'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { toggleIsDropDownOpen } from '@core/Areas/AppHeader/Store'\nimport {\n FobSpecialToken,\n getSpecialTokenUrl,\n} from '@core/Areas/AppHeader/Components/AccountDropDown/Components/helpers/useGetSpecialTokens'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { useGetSpecialTokens } from '@core/Areas/AppHeader/Components/AccountDropDown/Components/helpers/useGetSpecialTokens'\nimport {\n AccountPromoWrapperStyled as Wrapper,\n AccountPromoLabelStyled as Label,\n AccountPromoButtonRowStyled as ButtonRow,\n AccountPromoButtonStyled as Button,\n AccountPromoLinkStyled as Link,\n AccountSuperPickBadgeStyled as Badge,\n AccountPromoCountStyled as Count,\n AccountPromoSuperpicksWrapStyled as SuperpicksWrap,\n AccountPromoSuperpicksListStyled as SuperpicksList,\n AccountPromoSuperpicksItemStyled as SuperpicksItem,\n AccountPromoSuperpicksButtonStyled as SuperpicksButton,\n} from './OffersPanel.styles'\nimport { logError } from '@core/Utils/logging/logging'\nimport { RegisterToast, RemoveToast } from '@core/Components/Toast/ToastDriver'\nimport { SetSuperpickStatus } from '@core/State/UserAccount/userAccountDriver'\n\nconst NSW_LEGISLATION_ERROR_CODE = 190\nconst NSW_LEGISLATION_ERROR_ID = 'NSW_SUPERPICK_ERROR'\n\nexport const OffersPanel = ({\n bonusBetCount = 0,\n isOpen,\n}: {\n bonusBetCount: number\n isOpen: boolean\n}): JSX.Element => {\n const dispatch = useAppDispatch()\n const superpicksWrapRef = React.useRef(null)\n const [isBonusSuperpicksExanded, setIsBonusSuperpicksExpanded] = React.useState(false)\n\n const { tokens, errorMessage, errorCode, isLoading: isLoadingSuperPicks } = useGetSpecialTokens()\n\n React.useEffect(() => {\n if (!superpicksWrapRef.current) return\n anime({\n targets: superpicksWrapRef.current,\n height: isBonusSuperpicksExanded ? superpicksWrapRef.current.scrollHeight : '0px',\n easing: 'easeInOutQuad',\n duration: 300,\n })\n }, [isBonusSuperpicksExanded])\n\n React.useEffect(() => {\n if (!isOpen || isLoadingSuperPicks) {\n setIsBonusSuperpicksExpanded(false)\n }\n }, [isOpen, isLoadingSuperPicks])\n\n React.useEffect(() => {\n if (!isOpen && errorCode) RemoveToast(NSW_LEGISLATION_ERROR_ID)\n }, [errorCode, isOpen])\n\n const handleSuperPickNav = (tokenId: number) => {\n if (tokenId) {\n SetSuperpickStatus({\n isLoading: true,\n tokens,\n errorMessage,\n errorCode,\n })\n\n getSpecialTokenUrl(tokenId)\n .then(result => {\n if (!result?.success || !result.data.SpecialUrl) {\n return\n }\n window.location.href = result.data.SpecialUrl\n dispatch(toggleIsDropDownOpen(false))\n SetSuperpickStatus({\n isLoading: false,\n tokens,\n errorMessage,\n errorCode,\n })\n })\n .catch(err => {\n SetSuperpickStatus({\n isLoading: false,\n tokens: [],\n errorMessage: 'Currently unable to retrieve SuperPicks',\n errorCode: null,\n })\n logError(err)\n })\n }\n }\n\n const standardSuperPicks = tokens.filter(token => !token.IsBonusToken)\n const bonusSuperPicks = tokens.filter(token => token.IsBonusToken)\n\n const isStandardSuperPickAvailable =\n !errorMessage && standardSuperPicks && standardSuperPicks.length > 0\n const isBonusSuperPicksAvailable = !errorMessage && bonusSuperPicks && bonusSuperPicks.length > 0\n\n const isNSWSuperPickError = errorMessage && errorCode === NSW_LEGISLATION_ERROR_CODE\n\n return (\n \n \n
    \n {\n if (isNSWSuperPickError) {\n RegisterToast({\n message: errorMessage,\n position: 'top',\n type: 'error',\n timeout: 0,\n id: NSW_LEGISLATION_ERROR_ID,\n })\n return\n }\n if (isStandardSuperPickAvailable) handleSuperPickNav(standardSuperPicks[0].TokenId)\n }}\n >\n \n \n \n {isLoadingSuperPicks ? (\n \n ) : (\n (isStandardSuperPickAvailable && standardSuperPicks[0].BetsAvailable) ||\n (isNSWSuperPickError ? '!' : 0)\n )}\n \n \n \n
    \n\n
    \n {\n if (isBonusSuperPicksAvailable && !isLoadingSuperPicks)\n setIsBonusSuperpicksExpanded(state => !state)\n }}\n >\n \n \n \n {isLoadingSuperPicks ? (\n \n ) : (\n (isBonusSuperPicksAvailable && calculateTotalBonusSuperPicks(bonusSuperPicks)) ||\n 0\n )}\n \n \n \n
    \n\n
    \n \n \n \n {bonusBetCount || 0}\n \n \n
    \n
    \n\n \n {bonusSuperPicks.length > 0 && (\n \n {bonusSuperPicks.map(({ TokenName, TokenId, BetsAvailable = 0 }) => (\n \n {\n handleSuperPickNav(TokenId)\n }}\n >\n {TokenName} {BetsAvailable}\n \n \n ))}\n \n )}\n \n
    \n )\n}\n\n// =======\n// Helpers\n// =======\nfunction calculateTotalBonusSuperPicks(array: FobSpecialToken[]): number {\n return array.reduce((count, { BetsAvailable = 0 }) => BetsAvailable + count, 0)\n}\n","import { hexColors } from '@mobi/settings'\nimport styled from '@emotion/styled'\n\ntype Props = {\n showPlusIcon?: boolean\n}\n\nexport const BadgeStyled = styled('span')(\n {\n display: 'inline-block',\n padding: '0.2rem 1rem 0 1rem',\n borderRadius: '2rem',\n marginRight: '0.5rem',\n textAlign: 'center',\n backgroundColor: hexColors.deepLilac,\n color: hexColors.white,\n },\n ({ showPlusIcon = false }) => ({\n fontSize: showPlusIcon ? '1rem' : '1.2rem',\n })\n)\n","import React, { type HTMLAttributes, type VFC } from 'react'\nimport { BadgeStyled } from '@core/Components/Badge/Badge.styles'\n\ntype Props = {\n count: number\n showPlusIcon?: boolean\n} & HTMLAttributes\n\nexport const Badge: VFC = ({ count, showPlusIcon = false, ...props }) => {\n return (\n \n {count}\n {showPlusIcon && '+'}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const VisibilityButtonStyled = styled('div')({\n float: 'left',\n})\n\nexport const BalancesTableStyled = styled('table')({\n width: '100%',\n '& th': {\n textAlign: 'center',\n fontWeight: '500',\n fontSize: '1.4rem',\n verticalAlign: 'top',\n color: hexColors.grey,\n },\n '& td': {\n textAlign: 'center',\n fontWeight: '500',\n fontSize: '1.4rem',\n verticalAlign: 'top',\n },\n})\n\nexport const CashHeaderStyled = styled('th')({\n width: '20%',\n paddingRight: '0.5rem',\n})\n\nexport const BonusBetHeaderStyled = styled('th')({\n width: '40%',\n})\n\nexport const BonusCashHeaderStyled = styled('th')({\n width: '40%',\n})\n\nexport const CashDataStyled = styled('td')({\n color: hexColors.charCoal,\n})\n\nexport const BonusDataStyled = styled('td')(() => ({\n color: hexColors.studio,\n}))\n","import React from 'react'\n\nimport { Money } from '@core/Components/Text/Money'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { store } from '@core/Store'\nimport { toggleIsBalanceVisible } from '@core/Areas/AppHeader/Store'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nimport {\n BalancesTableStyled,\n VisibilityButtonStyled,\n BonusBetHeaderStyled,\n BonusCashHeaderStyled,\n CashDataStyled,\n CashHeaderStyled,\n BonusDataStyled,\n} from './BalanceSection.styles'\nimport { hexColors } from '@mobi/settings'\n\nimport { trackSideMenuEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\ntype BalanceSectionProps = {\n balance: number\n bonusBetBalance: number\n bonusCashBalance: number\n isBalanceVisible: boolean\n}\n\nexport function BalanceSectionComponent({\n balance,\n bonusBetBalance,\n bonusCashBalance,\n isBalanceVisible,\n}: BalanceSectionProps): JSX.Element {\n return (\n <>\n \n \n \n \n \n
    \n \n \n BALANCE\n \n {!!bonusBetBalance && 'BONUS BETS'}\n {!bonusBetBalance && !!bonusCashBalance && 'BONUS CASH'}\n \n \n {!!bonusBetBalance && !!bonusCashBalance && 'BONUS CASH'}\n \n \n \n \n \n \n \n \n \n \n {!!bonusBetBalance && (\n \n )}\n {!bonusBetBalance && !!bonusCashBalance && (\n \n )}\n \n \n {!!bonusBetBalance && !!bonusCashBalance && (\n \n )}\n \n \n \n \n \n )\n}\n\nexport const BalanceSection = () => {\n const isBalanceVisible = useAppSelector(state => state.appHeader.isBalanceVisible)\n const { accountBalance, bonusBetBalance, bonusCashBalance } = useObservableImmutable(\n userAccountState$,\n ['accountBalance', 'accountBalanceUpdatedTime', 'bonusBetBalance', 'bonusCashBalance']\n )\n return (\n \n )\n}\n\nfunction handleToggleBalanceVisibleClick() {\n store.dispatch(toggleIsBalanceVisible())\n trackSideMenuEvent(keys.hamburgerMenuClicked, {\n item: 'hamburger-balance-visibility-toggle',\n })\n}\n","import { RootState } from '@core/Store'\n\nexport const getIsAppHeaderVisible = ({ appHeader }: RootState) => appHeader.isAppHeaderVisible\nexport const getIsBalanceVisible = ({ appHeader }: RootState) => appHeader.isBalanceVisible\nexport const getIsDropDownOpen = ({ appHeader }: RootState) => appHeader.isDropDownOpen\nexport const getIsAppHeaderStickyEnabled = ({ appHeader }: RootState) => appHeader.isStickyEnabled\nexport const getIsHamburgerMenuOpen = ({ appHeader }: RootState) => appHeader.isHamburgerMenuOpen\nexport const getShouldDisableAppHeaderRender = ({ appHeader }: RootState) =>\n appHeader.shouldDisableAppHeaderRender\n\nexport const selectIsPreviousPendingBetsSportsOnly = ({ appHeader }: RootState) =>\n appHeader.isPreviousPendingBetsSportsOnly\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\nimport type { BetAccount } from '@mobi/api-types'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { openDeposit } from '@core/Areas/Deposit'\nimport { usePendingTicketsCount } from '@core/Data/Account/PendingTicketsCount/usePendingTicketsCount'\nimport { refetch as refetchSpecialTokens } from './Components/helpers/useGetSpecialTokens'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { usePrevious } from '@core/Utils/hooks'\nimport { postLogout } from '@core/Areas/Login/helpers/api'\nimport { useGetAccountDetails } from '@core/Areas/Account/helpers/useGetAccountDetails'\nimport { BetAccountKey, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { ReverificationAlert } from '@core/Areas/Reverification/Alert'\nimport { deregisterBodyScrollLock, registerBodyScrollLock } from '@mobi/utils/functions'\nimport { SecondaryButtonStyled } from '@mobi/component-library/Common/Buttons'\nimport {\n AccountDropDownWrapStyled as DropDownWrap,\n AccountInfoWrapStyled as InfoWrap,\n AccountNameLabelStyled,\n AccountNumberLabelStyled,\n DepositWithdrawSectionStyled,\n ItemContainerStyled,\n LinkStyled,\n LogoutLinkStyled,\n SeparatorStyled,\n} from './Wallet.styles'\nimport { useAnalytics } from './helpers/useAnalytics'\nimport { OffersPanel } from './Components/OffersPanel'\nimport { Badge } from '@core/Components/Badge/Badge'\nimport { BalanceSection } from '@core/Areas/AppHeader/Components/HamburgerMenu/Components/BalanceSection/BalanceSection'\nimport { toggleIsDropDownOpen } from '@core/Areas/AppHeader/Store'\nimport { getIsDropDownOpen } from '../../Store/selectors'\n\nconst LOADING_TEXT = 'Loading...'\n\nexport const Wallet: React.FC = () => {\n const dispatch = useAppDispatch()\n\n const [accountName, setAccountName] = React.useState<[string, string]>()\n const [innerHeight, setInnerHeight] = React.useState(window.innerHeight)\n const [dragDistance, setDragDistance] = React.useState(null)\n\n const isDropDownOpen = useAppSelector(getIsDropDownOpen)\n\n const accountDropDownRef = React.useRef(null)\n const prevIsOpen = usePrevious(isDropDownOpen)\n\n const { doPendingBetsExceedMaxCount, pendingBetsCount } = usePendingTicketsCount({\n enabled: isDropDownOpen,\n })\n\n const {\n accountNumber = LOADING_TEXT,\n activeCampaignsCount = 0,\n blackBookAlertCount = 0,\n } = useGetAccountDetails(isDropDownOpen)?.toJS() || {}\n\n useAnalytics(isDropDownOpen)\n\n React.useEffect(() => {\n if (isDropDownOpen) refetchSpecialTokens()\n }, [isDropDownOpen])\n\n React.useEffect(() => {\n if (!isDropDownOpen) {\n if (accountDropDownRef.current) {\n deregisterBodyScrollLock(accountDropDownRef.current)\n }\n return undefined\n }\n\n let touchStartY: number | undefined = undefined\n\n const keyPressHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') dispatch(toggleIsDropDownOpen())\n }\n\n const touchStartHandler = (e: TouchEvent) => {\n if (accountDropDownRef.current) {\n const isAtBottom =\n accountDropDownRef.current.scrollTop + accountDropDownRef.current.offsetHeight >=\n accountDropDownRef.current.scrollHeight\n if (isAtBottom) {\n touchStartY = e?.touches?.[0].clientY\n } else {\n touchStartY = undefined\n }\n }\n }\n\n const touchMoveHandler = (e: TouchEvent) => {\n // Slide the menu around as the user drags it.\n if (touchStartY !== undefined) {\n const yDiff =\n (e.changedTouches[0]?.clientY === undefined ? touchStartY : e.changedTouches[0].clientY) -\n touchStartY\n\n setDragDistance(Math.min(yDiff, 0))\n }\n }\n\n const touchEndHandler = (e: TouchEvent) => {\n if (touchStartY !== undefined) {\n const yDiff =\n touchStartY -\n (e.changedTouches[0]?.clientY === undefined ? touchStartY : e.changedTouches[0].clientY)\n\n if (yDiff > 100) {\n // It was a significant swipe\n dispatch(toggleIsDropDownOpen())\n }\n\n setDragDistance(null)\n }\n }\n\n document.addEventListener('keydown', keyPressHandler)\n document.addEventListener('touchstart', touchStartHandler)\n document.addEventListener('touchmove', touchMoveHandler)\n document.addEventListener('touchend', touchEndHandler)\n\n return () => {\n document.removeEventListener('keydown', keyPressHandler)\n document.removeEventListener('touchstart', touchStartHandler)\n document.removeEventListener('touchmove', touchMoveHandler)\n document.removeEventListener('touchend', touchEndHandler)\n }\n }, [isDropDownOpen, dispatch])\n\n React.useEffect(() => {\n BetAccountRepo.getPromise(BetAccountKey)\n .then(({ PreferredName, PrimaryAcctHolderName }: BetAccount) => {\n setAccountName([PreferredName, PrimaryAcctHolderName])\n })\n .catch(() => {\n setAccountName(undefined)\n })\n }, [])\n\n React.useEffect(() => {\n const updateInnerHeight = () => {\n setTimeout(() => {\n setInnerHeight(window.innerHeight)\n }, 200)\n }\n window.addEventListener('resize', updateInnerHeight)\n return () => {\n window.removeEventListener('resize', updateInnerHeight)\n }\n }, [])\n\n React.useEffect(() => {\n if (!accountDropDownRef.current || isDropDownOpen === prevIsOpen) return\n\n const dropDownEl = accountDropDownRef.current\n\n if (isDropDownOpen) {\n registerBodyScrollLock(dropDownEl)\n setTimeout(() => {\n setInnerHeight(window.innerHeight)\n }, 200)\n dropDownEl.scrollTop = 0\n } else {\n deregisterBodyScrollLock(dropDownEl)\n }\n }, [isDropDownOpen, prevIsOpen, accountDropDownRef])\n\n React.useEffect(() => {\n const dropDownEl = accountDropDownRef.current\n return () => {\n if (dropDownEl) deregisterBodyScrollLock(dropDownEl)\n }\n }, [])\n\n return (\n -30\n ? undefined\n : `translateY(${dragDistance}px)`,\n }}\n >\n \n\n \n \n {accountName ? accountName[0] || accountName[1] : LOADING_TEXT}\n \n\n \n Account # {accountNumber}\n \n \n\n {isDropDownOpen && (\n \n )}\n\n \n\n \n\n \n\n \n {\n dispatch(toggleIsDropDownOpen(false))\n openDeposit()\n }}\n aria-label='Deposit'\n >\n \n Deposit\n \n\n \n \n Withdraw\n \n \n\n \n\n \n \n Pending bets\n {pendingBetsCount > 0 && (\n \n )}\n \n \n\n \n \n Resulted bets\n \n \n\n \n \n Blackbook\n {blackBookAlertCount > 0 && (\n \n )}\n \n \n \n\n \n \n My account\n \n \n\n \n {\n postLogout()\n dispatch(toggleIsDropDownOpen(false))\n }}\n data-tid-account-dropdown-logout\n >\n \n Log out\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { layering } from '@mobi/component-library/Theme/Common'\n\nexport const BG_ANIMATION_TIMEOUT_MS = 200\n\nexport const AccountDropDownBGStyled = styled('div')<{ isVisible: boolean; zIndex?: number }>(\n {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'rgba(0,0,0,0.7)',\n width: '100%',\n zIndex: layering.appHeader - 1,\n transition: `opacity ${BG_ANIMATION_TIMEOUT_MS}ms linear`,\n animation: `${keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n `} ${BG_ANIMATION_TIMEOUT_MS}ms linear`,\n },\n ({ isVisible = false, zIndex = layering.appHeader - 1 }) => ({\n opacity: isVisible ? 1 : 0,\n zIndex: zIndex != null ? zIndex : layering.appHeader - 1,\n })\n)\n","import Rx from 'rx'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport { declareResourceType } from 'rwwa-data-access'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\n\nexport interface AccountDetails {\n isAuthorized: boolean\n accountNumber: string | null\n}\n\nconst defaultAccountDetails: AccountDetails = {\n isAuthorized: false,\n accountNumber: null,\n}\n\nexport interface AccountDetailsRecord extends TypedRecord, AccountDetails {}\n\nexport const ChangePasswordKey = 'me'\nconst ChangePasswordTypeKey = 'changePassword'\n\nexport const ChangePasswordRepo = declareResourceType({\n typeKey: ChangePasswordTypeKey,\n // @ts-expect-error Legacy - use better data management solution\n fetchMultipleNoPromise,\n hardTimeToLive: 200,\n map: x => recordify(x),\n})\n\nfunction fetchMultipleNoPromise(keys: string[]) {\n return Rx.Observable.fromPromise(\n fetchAccountDetails()\n .then(response => ({\n [ChangePasswordTypeKey]: {\n [ChangePasswordKey]: response,\n },\n }))\n .then(result => ({ keys, result }))\n .catch(() => ({\n keys,\n result: { [ChangePasswordTypeKey]: { [ChangePasswordTypeKey]: defaultAccountDetails } },\n }))\n )\n}\n\nexport function fetchAccountDetails(): Promise {\n return apiService.get({ url: '/$_/api/Authentication/getAccountDetails' })\n}\n\ninterface ChangeTemporaryPasswordDesktopRequest {\n betAccountId: string\n existingPassword: string\n newPassword: string\n}\n\ninterface ChangePasswordRequest {\n accountNumber: string\n existingPassword: string\n newPassword: string\n confirmPassword: string\n}\n\nexport interface ChangePasswordResponse {\n isChangePasswordSuccess: boolean\n error: string\n}\n\nexport function changeTemporaryPasswordDesktopSubmit(\n model: ChangeTemporaryPasswordDesktopRequest\n): Promise {\n return apiService.post({\n url: '/api/password/changeTemporary',\n body: model,\n })\n}\n\nexport function changePasswordSubmit(\n model: ChangePasswordRequest,\n isDesktop: boolean\n): Promise {\n return isDesktop\n ? apiService.post({ url: '/api/password/change', body: model })\n : apiService.post({\n url: '/$_/api/Authentication/ChangePassword',\n body: model,\n })\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const ChangePasswordContainerStyled = styled.section({\n padding: '0 2rem',\n margin: '1rem 0',\n})\n\nexport const ChangePasswordTitleLabelStyled = styled.div({\n fontSize: '1.2rem',\n backgroundColor: hexColors.gainsboro,\n color: hexColors.dimGrey,\n margin: '1rem 0',\n padding: '0.75rem',\n display: 'block',\n textAlign: 'center',\n})\n","import { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport {\n changePasswordSubmit,\n changeTemporaryPasswordDesktopSubmit,\n} from '../../Data/Account/changePassword'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\nimport {\n UpdateNewPassword,\n UpdateConfirmPassword,\n isPasswordValid,\n CreatePassword,\n Reset as ResetPassword,\n} from '../Password/driver'\nimport { sendToNative } from '@mobi/web-native-comms/web'\n\nexport interface ChangePasswordState {\n accountNumber: string | null\n new: string | null\n confirm: string | null\n existing: string | null\n validationError: string | false\n isChangePasswordSuccess: boolean\n isChangeTemporaryPasswordSuccess: boolean\n isCurrentPasswordVisible: boolean\n isChangePasswordSubmitEnabled: boolean\n}\n\nexport const defaultChangePasswordState: ChangePasswordState = {\n accountNumber: null,\n new: null,\n confirm: null,\n existing: null,\n validationError: false,\n isChangePasswordSuccess: false,\n isChangeTemporaryPasswordSuccess: false,\n isCurrentPasswordVisible: false,\n isChangePasswordSubmitEnabled: false,\n}\n\nexport const ChangePasswordSubmit = createSignal<{\n accountNumber: string\n form: HTMLFormElement\n isBiometricsEnabledByUser: boolean\n isDesktop?: boolean\n isChangeTemporaryPassword?: boolean\n}>('ChangePasswordSubmit')\nexport const ChangePasswordSucceeded = createSignal('ChangePasswordSucceeded')\nexport const ChangeTemporaryPasswordSucceeded = createSignal<{\n form: HTMLFormElement\n isDesktop?: boolean\n}>('ChangeTemporaryPasswordSucceeded')\nexport const ChangePasswordFailed = createSignal('ChangePasswordFailed')\nexport const UpdateCurrentPassword = createSignal('UpdateCurrentPassword')\nexport const IsCurrentPasswordVisible = createSignal('IsCurrentPasswordVisible')\nexport const Reset = createSignal('Reset')\nexport const ResetForm = createSignal('ResetForm')\n\nexport interface ChangePasswordStateRecord\n extends TypedRecord,\n ChangePasswordState {}\nexport const ChangePasswordStateFactory = makeTypedFactory<\n ChangePasswordState,\n ChangePasswordStateRecord\n>(defaultChangePasswordState)\n\nexport function changePasswordDriver(\n state = ChangePasswordStateFactory(),\n signal: Signal\n): ChangePasswordStateRecord {\n switch (signal.tag) {\n case UpdateNewPassword: {\n const newPassword = signal.data\n const newState = state.merge({\n new: newPassword,\n })\n\n return newState.merge({\n isChangePasswordSubmitEnabled: isChangePasswordSubmitEnabled(newState),\n })\n }\n\n case UpdateConfirmPassword: {\n const confirmPassword = signal.data\n const newState = state.merge({\n confirm: confirmPassword,\n })\n\n return newState.merge({\n isChangePasswordSubmitEnabled: isChangePasswordSubmitEnabled(newState),\n })\n }\n\n case UpdateCurrentPassword: {\n const existingPassword = signal.data\n const newState = state.merge({\n existing: existingPassword,\n })\n\n return newState.merge({\n isChangePasswordSubmitEnabled: isChangePasswordSubmitEnabled(newState),\n })\n }\n\n case IsCurrentPasswordVisible: {\n return state.merge({\n isCurrentPasswordVisible: !state.get('isCurrentPasswordVisible'),\n })\n }\n\n case ChangePasswordSubmit: {\n const {\n accountNumber,\n form,\n isBiometricsEnabledByUser,\n isDesktop,\n isChangeTemporaryPassword,\n } = signal.data\n const newPassword = state.get('new')\n const confirmPassword = state.get('confirm')\n const existingPassword = state.get('existing')\n const isNewPasswordValid = isPasswordValid(newPassword)\n const isNewAndConfirmPasswordSame = newPassword === confirmPassword\n\n CreatePassword()\n\n if (isNewPasswordValid && isNewAndConfirmPasswordSame) {\n if (isChangeTemporaryPassword && isDesktop) {\n changeTemporaryPasswordDesktop({ accountNumber, existingPassword, newPassword, form })\n } else {\n changePassword({\n accountNumber,\n existingPassword,\n newPassword,\n confirmPassword,\n form,\n isDesktop,\n isChangeTemporaryPassword,\n isBiometricsEnabledByUser,\n })\n }\n }\n\n return state\n }\n\n case ChangePasswordSucceeded: {\n const form = signal.data\n\n ResetForm(form)\n\n scrollToTop()\n\n return state.merge({\n isChangePasswordSuccess: true,\n })\n }\n\n case ChangeTemporaryPasswordSucceeded: {\n const { form, isDesktop } = signal.data\n\n ResetForm(form)\n\n scrollToTop()\n\n if (isDesktop) {\n navigateHome()\n }\n\n return state.merge({\n isChangeTemporaryPasswordSuccess: true,\n })\n }\n\n case ChangePasswordFailed: {\n const validationError = signal.data\n\n scrollToTop()\n\n return state.merge({\n isChangePasswordSuccess: false,\n validationError,\n })\n }\n\n case Reset: {\n // On leaving the page, reset both change passsword and new password component states\n ResetPassword()\n\n return state.merge({\n ...defaultChangePasswordState,\n })\n }\n\n case ResetForm: {\n const form: HTMLFormElement = signal.data\n\n // Reset the form and UI state\n if (form) {\n form.reset()\n\n ResetPassword() // reset the new password component state\n\n return state.merge({\n isChangePasswordSubmitEnabled: false,\n isCurrentPasswordVisible: false, // reset current password visible toggle\n new: null,\n confirm: null,\n existing: null,\n })\n }\n\n return state\n }\n\n default: {\n return state\n }\n }\n}\n\ninterface ChangePassword {\n accountNumber: string\n existingPassword: string\n newPassword: string\n confirmPassword: string\n form: HTMLFormElement\n isDesktop: boolean\n isChangeTemporaryPassword: boolean\n isBiometricsEnabledByUser?: boolean\n}\n\nexport function changePassword({\n accountNumber,\n existingPassword,\n newPassword,\n confirmPassword,\n form,\n isDesktop,\n isChangeTemporaryPassword,\n isBiometricsEnabledByUser,\n}: ChangePassword): void {\n changePasswordSubmit({ accountNumber, existingPassword, newPassword, confirmPassword }, isDesktop)\n .then(resp => {\n if (resp.isChangePasswordSuccess) {\n if (isBiometricsEnabledByUser) {\n sendToNative('SET_BIOMETRICS_PASSWORD', {\n accountNumber: +accountNumber,\n password: newPassword,\n })\n }\n\n if (isChangeTemporaryPassword) ChangeTemporaryPasswordSucceeded({ form })\n else ChangePasswordSucceeded(form)\n } else {\n ChangePasswordFailed(resp.error)\n }\n })\n .catch(() => {\n ChangePasswordFailed('Sorry, something went wrong. Please try again.')\n })\n}\n\ninterface ChangeTemporaryPasswordDesktop {\n accountNumber: string\n existingPassword: string\n newPassword: string\n form: HTMLFormElement\n}\n\nexport function changeTemporaryPasswordDesktop({\n accountNumber,\n existingPassword,\n newPassword,\n form,\n}: ChangeTemporaryPasswordDesktop): void {\n changeTemporaryPasswordDesktopSubmit({\n betAccountId: accountNumber,\n existingPassword,\n newPassword,\n })\n .then(resp => {\n if (resp.isChangePasswordSuccess) {\n ChangeTemporaryPasswordSucceeded({ form, isDesktop: true })\n } else {\n ChangePasswordFailed(resp.error)\n }\n })\n .catch(() => {\n ChangePasswordFailed('Sorry, something went wrong. Please try again.')\n })\n}\n\nfunction isChangePasswordSubmitEnabled(state: ChangePasswordStateRecord) {\n const hasNewPassword = !!state.get('new')\n const hasConfirmPassword = !!state.get('confirm')\n const hasCurrentPassword = !!state.get('existing')\n\n return hasNewPassword && hasConfirmPassword && hasCurrentPassword\n}\n\nfunction scrollToTop() {\n if (window && window.scrollTo) {\n window.scrollTo(0, 0)\n }\n}\n\nexport const state$ = attachDriver({\n path: 'changePassword',\n driver: changePasswordDriver,\n})\n","import React from 'react'\nimport { observeImmutable } from '../../../Components/HOCs'\nimport {\n state$ as changePasswordState$,\n ChangePasswordStateRecord,\n IsCurrentPasswordVisible,\n UpdateCurrentPassword,\n} from '../driver'\nimport { PasswordComponent } from '../../Password/Components'\nimport { PasswordThemes } from '../../Password/themes'\n\ninterface CurrentPasswordProps {\n labelName: string\n onChange: (event: React.FormEvent) => void | null\n}\n\nexport const CurrentPassword = observeImmutable(\n changePasswordState$,\n ({ record, ...props }) => {\n const { isCurrentPasswordVisible } = record\n const onChangePassword = (event: React.FormEvent) => {\n UpdateCurrentPassword(event.currentTarget.value)\n }\n\n return (\n \n )\n }\n)\n","import React from 'react'\nimport { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\nexport function useBiometricsStatus() {\n const [isBiometricsStatusReady, setIsBiometricsStatusReady] = React.useState(false)\n const [isBiometricsEnabled, setIsBiometricsEnabled] = React.useState(false)\n\n React.useEffect(() => {\n if (!isReactNativeApp) return\n\n const { dispose } = subscribeToNative('RESPONSE_BIOMETRICS_STATUS', ({ isEnabled }) => {\n setIsBiometricsEnabled(isEnabled)\n setIsBiometricsStatusReady(true)\n })\n\n sendToNative('REQUEST_BIOMETRICS_STATUS')\n\n return () => {\n dispose()\n }\n }, [])\n\n return {\n isBiometricsStatusReady,\n isBiometricsEnabled,\n }\n}\n","import { RootState } from '@core/Store'\nimport { LoginState } from '.'\n\nexport function getIsLoginShown(state: RootState): boolean {\n return state.login.isLoginShown\n}\n\nexport function getLoginActions(\n state: RootState\n): Pick<\n LoginState,\n 'onLoginSuccessCallback' | 'onLoginSuccessRedirectUrl' | 'onLoginCancelledRedirectUrl'\n> {\n return {\n onLoginSuccessCallback: state.login.onLoginSuccessCallback,\n onLoginSuccessRedirectUrl: state.login.onLoginSuccessRedirectUrl,\n onLoginCancelledRedirectUrl: state.login.onLoginCancelledRedirectUrl,\n }\n}\n\nexport const getIsKeepMeLoggedIn = (state: RootState): boolean => state.login.isKeepMeLoggedIn\nexport const getIsBiometricsEnabledOnTempPasswordChange = (state: RootState): boolean =>\n state.login.isBiometricsEnabledOnTempPasswordChange\n","import React from 'react'\nimport { isLoading, isErrored, LoadingInstance, ErroredInstance } from 'rwwa-data-access'\nimport { connect } from '../../Components/HOCs/connect'\nimport { observeImmutable } from '../../Components/HOCs'\nimport { Spinner, DesktopSpinner } from '@mobi/component-library/Common/Spinner'\nimport { ErrorMessage, SuccessMessage } from '../../Components/Messages'\nimport { MainContainer } from '../../Components/Containers'\nimport { ContentHeader } from '../../Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { ComplexPasswordObserve } from '../Password'\nimport {\n ChangePasswordRepo,\n ChangePasswordKey,\n AccountDetails,\n} from '../../Data/Account/changePassword'\nimport {\n ChangePasswordTitleLabelStyled,\n ChangePasswordContainerStyled,\n} from './ChangePassword.styles'\nimport { CurrentPassword } from './Components/CurrentPassword'\nimport {\n state$ as changePasswordState$,\n ChangePasswordSubmit,\n ChangePasswordStateRecord,\n UpdateCurrentPassword,\n Reset,\n} from './driver'\nimport { useBiometricsStatus } from '@mobi/account/Areas/Verification/Biometrics/Hooks/useBiometricsStatus'\nimport { useSelector } from 'react-redux'\nimport { getIsBiometricsEnabledOnTempPasswordChange } from '../Login/Store/selectors'\n\nexport function ChangePassword({ isDesktop }: { isDesktop?: boolean }) {\n return \n}\n\nexport const ConnectChangePassword = connect({ changePassword: ChangePasswordRepo })<{\n isDesktop?: boolean\n}>(ChangePasswordLoader)\n\nexport function ChangePasswordLoader({\n changePassword,\n isDesktop,\n}: {\n changePassword: typeof LoadingInstance | typeof ErroredInstance | AccountDetails\n isDesktop?: boolean\n}) {\n if (isLoading(changePassword)) {\n return isDesktop ? : \n }\n\n if (isErrored(changePassword)) {\n return An error occurred while loading change password.\n }\n\n const ChangePasswordComponent = () => {\n React.useEffect(() => {\n return () => Reset()\n })\n const props = { accountNumber: changePassword.accountNumber as string }\n return \n }\n\n return \n}\n\ninterface ChangePasswordViewProps {\n isDesktop?: boolean\n isChangeTemporaryPassword?: boolean\n accountNumber: string\n isChangePasswordSuccess: boolean\n isChangePasswordSubmitEnabled: boolean\n validationError: string | false\n}\n\nexport const ChangePasswordViewObserve = observeImmutable<\n ChangePasswordStateRecord,\n { accountNumber: string; isDesktop?: boolean; isChangeTemporaryPassword?: boolean }\n>(changePasswordState$, ({ record, ...props }) => {\n const { isChangePasswordSuccess, isChangePasswordSubmitEnabled, validationError } = record\n\n return (\n \n )\n})\n\nlet changePasswordForm: HTMLFormElement\n\nexport function ChangePasswordView({\n isDesktop,\n accountNumber,\n isChangeTemporaryPassword,\n isChangePasswordSuccess,\n isChangePasswordSubmitEnabled,\n validationError,\n}: ChangePasswordViewProps) {\n const { isBiometricsEnabled } = useBiometricsStatus()\n const isBiometricsEnabledOnTempPasswordChange = useSelector(\n getIsBiometricsEnabledOnTempPasswordChange\n )\n\n const onChangeCurrent = (event: React.FormEvent) => {\n UpdateCurrentPassword(event.currentTarget.value)\n }\n const changePasswordSubmit = () =>\n ChangePasswordSubmit({\n accountNumber,\n form: changePasswordForm,\n isBiometricsEnabledByUser: isBiometricsEnabled || isBiometricsEnabledOnTempPasswordChange,\n isDesktop,\n isChangeTemporaryPassword,\n })\n const onFormClick = (event: React.FormEvent) => {\n event.preventDefault()\n }\n\n return (\n \n {!isDesktop && }\n {isChangePasswordSuccess ? (\n Successfully changed password\n ) : null}\n {!isChangePasswordSuccess && validationError ? (\n {validationError}\n ) : null}\n \n Account: {accountNumber}\n (changePasswordForm = el)}\n onClick={onFormClick}\n id='changePasswordForm'\n >\n
    \n {!isChangeTemporaryPassword && (\n \n )}\n \n
    \n \n Change Password\n \n \n
    \n
    \n )\n}\n","import React from 'react'\nimport { useParams } from 'react-router'\nimport { navChange } from '@classic/Foundation/Navigation/Nav'\nimport { ChangePasswordViewObserve } from './ChangePassword'\nimport { Reset, state$, UpdateCurrentPassword } from './driver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { hideLogin, refreshLogonState } from '@core/Areas/Login/helpers'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { CHANGE_TEMP_PASSWORD_ROUTE } from './constants'\nimport { setIsBiometricsEnabledOnTempPasswordChange } from '../Login/Store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { getIsBiometricsEnabledOnTempPasswordChange } from '../Login/Store/selectors'\n\nexport const navigateToChangeTempPassword = ({\n accountNumber,\n password,\n}: NavigateToChangeTempPassword) => {\n UpdateCurrentPassword(password)\n navChange(`/#${CHANGE_TEMP_PASSWORD_ROUTE}/${accountNumber}`)\n hideLogin()\n}\n\nexport const ChangeTemporaryPassword = () => {\n const dispatch = useDispatch()\n const { accountNumber } = useParams<{ accountNumber?: string }>()\n const { isChangeTemporaryPasswordSuccess } = useObservableImmutable(state$, [\n 'isChangeTemporaryPasswordSuccess',\n ])\n const isBiometricsEnabledOnTempPasswordChange = useSelector(\n getIsBiometricsEnabledOnTempPasswordChange\n )\n\n React.useEffect(() => Reset, [])\n\n React.useEffect(() => {\n if (!accountNumber) navChange('/#')\n }, [accountNumber])\n\n React.useEffect(() => {\n if (isChangeTemporaryPasswordSuccess) {\n refreshLogonState()\n navChange('/#')\n RegisterToast({ message: 'Password Changed', type: 'default' })\n if (isBiometricsEnabledOnTempPasswordChange)\n dispatch(setIsBiometricsEnabledOnTempPasswordChange(false))\n }\n }, [dispatch, isChangeTemporaryPasswordSuccess, isBiometricsEnabledOnTempPasswordChange])\n\n if (!accountNumber) {\n return null\n }\n\n return (\n \n )\n}\n\n// Types\ninterface NavigateToChangeTempPassword {\n accountNumber: string\n password: string\n isTogglingBiometricsOn?: boolean\n}\n","import React from 'react'\nimport { initializeWithCountIfNotInitialized } from '@mobi/account/Areas/Deposit/Utils'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { closeModal } from '@core/Components/Modal'\nimport { QUICKBET_MODAL_ID } from '@core/Areas/Quickbet/constants'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { navigateToChangeTempPassword } from '@core/Areas/ChangePassword/ChangeTemporaryPassword'\nimport { isHome, navChange } from '@classic/Foundation/Navigation/Nav'\nimport {\n setIsBiometricsEnabledOnTempPasswordChange,\n setIsKeepMeLoggedIn,\n setIsLoginShown,\n} from '../Store'\nimport { getIsKeepMeLoggedIn, getLoginActions } from '../Store/selectors'\nimport { attemptLogin, getRememberAccountNumber } from '../helpers'\nimport { trackLoginSuccess } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { logUserId } from '@core/Services/Sentry'\nimport { getFromLocalStorage, setInLocalStorage } from '@mobi/utils/storage'\nimport { sendToNative } from '@mobi/web-native-comms/web'\n\nconst REMEMBER_ACCOUNT_STORAGE_KEY = 'remember_account_number'\n\nexport const useLoginState = (): UseLoginStateReturn => {\n const dispatch = useDispatch()\n const { onLoginSuccessCallback, onLoginSuccessRedirectUrl, onLoginCancelledRedirectUrl } =\n useSelector(getLoginActions)\n const isKeepMeLoggedIn = useSelector(getIsKeepMeLoggedIn)\n\n const [workflow, setWorkflow] = React.useState('Login')\n\n React.useEffect(() => {\n if (workflow === 'Password Reset' || workflow === 'Account Number Recovery') {\n setPassword('')\n setErrorMessage(undefined)\n }\n }, [workflow])\n\n const [accountNumber, setAccountNumber] = React.useState('')\n const [password, setPassword] = React.useState('')\n const [rememberAccount, setRememberAccount] = React.useState(getRememberAccount())\n\n const [errorMessage, setErrorMessage] = React.useState()\n const [isBusy, setIsBusy] = React.useState(false)\n\n React.useEffect(() => {\n getRememberAccountNumber().then(accountNumber => {\n if (!accountNumber) return\n setAccountNumber(accountNumber.toString())\n logUserId(accountNumber)\n initializeWithCountIfNotInitialized(accountNumber, 2)\n })\n }, [setAccountNumber])\n\n const resetErrorMessage = () => setErrorMessage(undefined)\n const toggleKeepLoggedIn = () => dispatch(setIsKeepMeLoggedIn(!isKeepMeLoggedIn))\n const toggleRememberAccount = () => setRememberAccount(val => !val)\n\n const handleCloseLogin = (shouldRedirectOnClose = true) => {\n if (shouldRedirectOnClose && onLoginCancelledRedirectUrl) navChange(onLoginCancelledRedirectUrl)\n dispatch(setIsLoginShown({ shouldShow: false }))\n }\n\n const performLoginSuccessActions = React.useCallback(\n ({ userHasToggledBiometrics }: LoginOptions = { userHasToggledBiometrics: false }) => {\n saveRememberAccount(rememberAccount)\n\n if (userHasToggledBiometrics) {\n sendToNative('REQUEST_TOGGLE_BIOMETRICS', {\n accountNumber: Number(accountNumber),\n password: password,\n })\n }\n\n if (onLoginSuccessRedirectUrl) navChange(onLoginSuccessRedirectUrl)\n else if (isHome()) navChange(window.location.hash)\n\n if (onLoginSuccessCallback) onLoginSuccessCallback()\n dispatch(setIsLoginShown({ shouldShow: false }))\n },\n [\n accountNumber,\n password,\n rememberAccount,\n onLoginSuccessRedirectUrl,\n onLoginSuccessCallback,\n dispatch,\n ]\n )\n\n const handleLogin = async (\n { userHasToggledBiometrics }: LoginOptions = { userHasToggledBiometrics: false }\n ) => {\n setIsBusy(true)\n const authenticatingAccountNumber = Number(accountNumber)\n const { isSuccessful, errorMessage, mustChangePassword } = await attemptLogin({\n accountNumber: authenticatingAccountNumber,\n password: password,\n rememberAccount,\n keepLoggedIn: isKeepMeLoggedIn,\n })\n setIsBusy(false)\n\n if (!isSuccessful) {\n if (mustChangePassword) {\n if (userHasToggledBiometrics) {\n dispatch(setIsBiometricsEnabledOnTempPasswordChange(true))\n }\n navigateToChangeTempPassword({ accountNumber, password })\n return\n }\n if (errorMessage) setErrorMessage(errorMessage)\n return\n }\n\n trackLoginSuccess(accountNumber, isKeepMeLoggedIn, rememberAccount, false)\n\n // For existing users we want to initialize the successful count to be at least 2\n // See https://rwwa.atlassian.net/browse/MOBI-2467\n initializeWithCountIfNotInitialized(authenticatingAccountNumber, 2)\n\n performLoginSuccessActions({ userHasToggledBiometrics })\n }\n\n const handleSignUp = () => {\n // Close Quickbet & Betslip if open\n dispatch(closeModal({ id: QUICKBET_MODAL_ID }))\n OverlayClose()\n navChange('/#SignUp')\n handleCloseLogin()\n }\n\n const onAccountNumberChange: React.ChangeEventHandler = e => {\n setAccountNumber(e.target.value)\n resetErrorMessage()\n }\n\n const onPasswordChange: React.ChangeEventHandler = e => {\n setPassword(e.target.value)\n resetErrorMessage()\n }\n\n return {\n state: {\n accountNumber,\n password,\n rememberAccount,\n keepLoggedIn: isKeepMeLoggedIn,\n isBusy,\n errorMessage,\n workflow,\n },\n handlers: {\n login: (userHasToggledBiometrics?: LoginOptions) => handleLogin(userHasToggledBiometrics),\n signUp: handleSignUp,\n close: handleCloseLogin,\n onAccountNumberChange,\n onPasswordChange,\n performLoginSuccessActions,\n toggleKeepLoggedIn,\n toggleRememberAccount,\n setWorkflow,\n setErrorMessage,\n },\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getRememberAccount(): boolean {\n const defaultValue = true\n const store = getFromLocalStorage(REMEMBER_ACCOUNT_STORAGE_KEY)\n if (!store) return defaultValue\n\n return JSON.parse(store) ?? defaultValue\n}\n\nfunction saveRememberAccount(shouldRememberAccount: boolean): void {\n setInLocalStorage(REMEMBER_ACCOUNT_STORAGE_KEY, shouldRememberAccount.toString())\n}\n\n// =====\n// Types\n// =====\ninterface UseLoginStateReturn {\n state: {\n accountNumber: string\n password: string\n rememberAccount: boolean\n keepLoggedIn: boolean\n isBusy: boolean\n workflow: Workflow\n errorMessage?: string\n }\n handlers: {\n login(userHasToggledBiometrics?: LoginOptions): void\n signUp(): void\n close(): void\n onAccountNumberChange: React.ChangeEventHandler\n onPasswordChange: React.ChangeEventHandler\n performLoginSuccessActions(): void\n toggleKeepLoggedIn(): void\n toggleRememberAccount(): void\n setWorkflow: React.Dispatch>\n setErrorMessage: React.Dispatch>\n }\n}\n\ntype LoginOptions = { userHasToggledBiometrics: boolean }\n\ntype Workflow = 'Login' | 'Password Reset' | 'Account Number Recovery'\n","import { init, setContext, setUser } from '@sentry/react'\nimport { AppVersion } from '@mobi/web-native-comms/web'\n\nexport function initializeSentry(url: string, environment: string): void {\n init({\n dsn: url,\n environment,\n beforeBreadcrumb(breadcrumb, hint) {\n if (breadcrumb.category === 'ui.click' && hint !== undefined) {\n const { target } = hint.event\n const node = Object.values(target.attributes as NamedNodeMap)\n const data_tid = node.find(attr => attr.nodeName.startsWith('data-tid'))\n if (data_tid) {\n breadcrumb.message = `${data_tid.nodeName} = ${data_tid.value}` //breadcrumb ui clicks as their data-tids\n }\n }\n return breadcrumb\n },\n beforeSend(event, hint) {\n if (shouldIgnoreError(hint.originalException)) {\n return null\n }\n return event\n },\n })\n\n setContext('Application version', {\n 'Client version': Number.parseFloat(`${VERSION_MAJOR}.${VERSION_MINOR}`),\n 'Native app version': AppVersion || 0,\n })\n}\n\nexport const logUserId = (accountNumber: number | undefined) => {\n setUser(\n accountNumber\n ? {\n id: accountNumber,\n }\n : null\n )\n}\n\nfunction shouldIgnoreError(error: unknown) {\n if (!error || typeof error !== 'string') {\n return false\n }\n\n // Ignore Kambi errors\n if (error.match(/settings-api.kambicdn.com/i) || error.match(/client-static.bc.kambicdn.com/i)) {\n return false\n }\n\n // Ignore errors caused by `window.localStorage` accesses by 3rd parties in WebKit/Safari\n if (error.toLowerCase() === \"null is not an object (evaluating 'window.localStorage.getItem')\") {\n return false\n }\n\n return true\n}\n","import React from 'react'\n\nimport { keyframes } from '@emotion/react'\nimport styled from '@emotion/styled'\n\nimport { SvgIconStyled } from '@mobi/component-library/Common/Icon/Icon.styles'\n\nconst SunAnimation = keyframes({\n '0%': {\n transform: 'rotate(0deg)',\n },\n '100%': {\n transform: 'rotate(360deg)',\n },\n})\n\nconst RayAnimation = keyframes({\n '0%': {\n strokeDasharray: '3px 10px',\n strokeDashoffset: '0px',\n },\n '50%': {\n strokeDasharray: '0.1px 10px',\n strokeDashoffset: '-1px',\n },\n '100%': {\n strokeDasharray: '3px 10px',\n strokeDashoffset: '0px',\n },\n})\n\nconst Sun = styled('g')({\n animationName: SunAnimation,\n animationDuration: '9s',\n animationTimingFunction: 'ease-in-out',\n animationIterationCount: 'infinite',\n})\n\nconst Ray = styled('line')({\n animationName: RayAnimation,\n animationDuration: '2s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n})\n\nexport const Day = () => {\n return (\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","import React from 'react'\n\nimport { keyframes } from '@emotion/react'\nimport styled from '@emotion/styled'\n\nimport { SvgIconStyled } from '@mobi/component-library/Common/Icon/Icon.styles'\n\nconst MoonAnimation = keyframes({\n '0%': {\n transform: 'rotate(0deg)',\n },\n '50%': {\n transform: 'rotate(15deg)',\n },\n '100%': {\n transform: 'rotate(0deg)',\n },\n})\n\nconst StarAnimation = keyframes({\n '0%': {\n opacity: '0',\n },\n '100%': {\n opacity: '1',\n },\n})\n\nconst Moon = styled('g')({\n animationName: MoonAnimation,\n animationDuration: '6s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n transformOrigin: '12.5px 15.15px 0',\n})\n\nconst Star1 = styled('g')({\n animationName: StarAnimation,\n animationDelay: '3s',\n animationDuration: '5s',\n animationTimingFunction: 'linear',\n animationIterationCount: '1',\n})\n\nconst Star2 = styled('g')({\n animationName: StarAnimation,\n animationDelay: '5s',\n animationDuration: '4s',\n animationTimingFunction: 'linear',\n animationIterationCount: '1',\n})\n\nexport const Night = () => {\n return (\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","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const GreetingLabelStyled = styled('span')({\n color: hexColors.charCoal,\n fontWeight: '500',\n fontSize: '1.4rem',\n paddingTop: '0.15rem',\n marginLeft: '-0.5rem',\n})\n\nexport const GreetingContainer = styled('div')({\n display: 'flex',\n alignItems: 'center',\n marginLeft: '-1rem',\n})\n","import { Day } from '@core/Components/Icons/Day'\nimport { Night } from '@core/Components/Icons/Night'\nimport React from 'react'\nimport { GreetingLabelStyled, GreetingContainer } from './Greeting.styles'\n\ntype GreetingProps = {\n currHour: number\n}\n\nexport function GreetingComponent({ currHour }: GreetingProps): JSX.Element {\n return (\n \n {currHour > 5 && currHour < 18 ? : }\n \n {'Good ' + ((currHour < 12 && 'morning') || (currHour < 18 && 'afternoon') || 'evening')}\n \n \n )\n}\n\nexport const Greeting = () => {\n const currHour = new Date().getHours()\n return \n}\n","import styled, { type StyledComponent } from '@emotion/styled'\nimport { Link, type LinkProps } from 'react-router-dom'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { font } from '@mobi/component-library/Theme/Common'\n\nexport const AccountDetailsSectionStyled = styled.div({\n paddingTop: '2rem',\n})\n\nexport const LoginSignUpSectionStyled = styled.div({\n paddingTop: '2.5rem',\n display: 'flex',\n '*:not(:last-child)': {\n marginRight: '1.5rem',\n },\n})\n\nexport const DepositWithdrawSectionStyled = styled.div({\n display: 'flex',\n '*:not(:last-child)': {\n marginRight: '1.5rem',\n },\n})\n\nexport const AccountNameLabelStyled = styled.div({\n color: hexColors.studio,\n fontWeight: '700',\n fontSize: '2rem',\n fontFamily: font.family.secondary,\n})\n\nexport const AccountNumberLabelStyled = styled.div({\n color: hexColors.nero,\n fontWeight: '300',\n fontSize: '1.2rem',\n fontFamily: font.family.secondary,\n})\n\nexport const ExternalLinkStyled = styled.a({\n display: 'block',\n color: hexColors.blueDiamond,\n fontSize: '1.4rem',\n fontFamily: font.family.secondary,\n textDecoration: 'none',\n padding: '0.5em 0',\n em: {\n position: 'relative',\n top: '-0.3rem',\n transform: 'translateY(-50%)',\n padding: '0.1rem 0.5rem',\n fontSize: '0.9rem',\n fontWeight: 'bold',\n fontStyle: 'italic',\n lineHeight: 1,\n textTransform: 'uppercase',\n borderRadius: '1rem',\n color: hexColors.white,\n background: hexColors.freeSpeechRed,\n },\n})\n\nexport const LinkStyled: StyledComponent =\n styled(ExternalLinkStyled)().withComponent(Link)\n\nexport const HamburgerMenuSectionHeaderStyled = styled.h4({\n color: hexColors.grey,\n fontSize: '1.4rem',\n fontFamily: font.family.secondary,\n fontWeight: '500',\n textTransform: 'uppercase',\n textAlign: 'start',\n margin: '0.5rem 0',\n})\n\nexport const SeparatorStyled = styled.hr({\n margin: '1rem 0',\n border: 0,\n height: 0,\n borderBottom: '1px solid ' + hexColors.grey3,\n})\n\nexport const ExternalLinkIconStyled = styled(Icon)({\n verticalAlign: 'text-top',\n marginLeft: '0.5em',\n color: hexColors.deepLilac,\n})\n\nexport const CloseButtonStyled = styled.span({\n padding: '1rem',\n position: 'absolute',\n top: 0,\n right: 0,\n cursor: 'pointer',\n})\n\nexport const JustifiedLinkText = styled.span({\n display: 'inline-flex',\n justifyContent: 'space-between',\n width: '100%',\n})\n","import React from 'react'\nimport { LinkProps } from 'react-router-dom'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackSideMenuEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { store } from '@core/Store'\nimport { toggleIsHamburgerMenuOpen } from '../../Store'\nimport { ExternalLinkIconStyled, ExternalLinkStyled, LinkStyled } from './HamburgerMenu.styles'\n\nexport const HamburgerMenuLink = (attribs: LinkProps) => (\n {\n store.dispatch(toggleIsHamburgerMenuOpen(false))\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: attribs.id ?? '' })\n }}\n {...attribs}\n >\n {attribs.children}\n \n)\n\nexport const HamburgerMenuExternalLink = (\n attribs: React.AnchorHTMLAttributes\n) => (\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: attribs.id ?? '' })}\n {...attribs}\n >\n {attribs.children} \n \n)\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors, Constants } from '@mobi/settings'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { PrimaryButtonStyled, SecondaryButtonStyled } from '@mobi/component-library/Common/Buttons'\nimport { font } from '@mobi/component-library/Theme/Common'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as navigationState$ } from '@core/State/Navigation/driver'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackSideMenuEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useGetAccountDetails } from '@core/Areas/Account/helpers/useGetAccountDetails'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { useLoginState } from '@core/Areas/Login/hooks'\nimport { Greeting } from '../Greeting/Greeting'\nimport { BalanceSection } from './Components/BalanceSection/BalanceSection'\nimport { usePendingTicketsCount } from '@core/Data/Account/PendingTicketsCount/usePendingTicketsCount'\nimport { Badge } from '@core/Components/Badge/Badge'\nimport { openDeposit } from '@core/Areas/Deposit'\nimport { store } from '@core/Store'\nimport { useFeature, useObservableImmutable } from '@core/Utils/hooks'\nimport { HamburgerMenuExternalLink, HamburgerMenuLink } from './HamburgerMenuLink'\nimport {\n AccountDetailsSectionStyled,\n AccountNameLabelStyled,\n AccountNumberLabelStyled,\n CloseButtonStyled,\n DepositWithdrawSectionStyled,\n HamburgerMenuSectionHeaderStyled,\n JustifiedLinkText,\n LoginSignUpSectionStyled,\n SeparatorStyled,\n} from './HamburgerMenu.styles'\nimport { trackSignUpClick } from '@core/Areas/Account/SignUp/analytics'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\nimport { toggleIsDropDownOpen } from '../../Store'\n\nconst enum LocalConstants {\n LoadingText = 'Loading...',\n}\n\nexport const HamburgerMenu: React.FC<{\n onClose: () => void\n}> = ({ onClose }) => {\n const isNewWithdrawFeatureActive = useFeature('WITHDRAW_UPLIFT')\n const containerRef = React.useRef(null)\n\n const { isLoggedIn } = useObservableImmutable(userAccountState$, ['isLoggedIn'])\n\n const {\n accountName = LocalConstants.LoadingText,\n accountNumber = LocalConstants.LoadingText,\n activeCampaignsCount = 0,\n blackBookAlertCount = 0,\n } = useGetAccountDetails(true)?.toJS() || {}\n\n const { handlers } = useLoginState()\n\n const { doPendingBetsExceedMaxCount, pendingBetsCount } = usePendingTicketsCount({\n enabled: !!isLoggedIn,\n })\n\n React.useEffect(() => {\n const subscription = navigationState$\n .map(navState => navState.toJS().currentUrl)\n .skip(1)\n .distinctUntilChanged()\n .subscribe(onClose)\n return () => subscription?.dispose()\n }, [onClose])\n\n React.useEffect(() => {\n store.dispatch(toggleIsDropDownOpen(false))\n }, [])\n\n return (\n \n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-close-button' })\n onClose()\n }}\n >\n \n \n\n {isLoggedIn && (\n \n \n {accountName}\n Account # {accountNumber}\n \n )}\n\n {!isLoggedIn && (\n \n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-sign-up' })\n onClose()\n handlers.signUp()\n trackSignUpClick('hamburger')\n }}\n >\n Sign up\n \n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-login' })\n onClose()\n showLogin()\n }}\n >\n Log in\n \n \n )}\n\n {isLoggedIn && (\n <>\n \n \n \n )}\n\n {isLoggedIn && (\n <>\n \n \n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-deposit' })\n onClose()\n openDeposit()\n }}\n >\n \n Deposit\n \n\n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-withdraw' })\n onClose()\n }}\n >\n \n Withdraw\n \n \n \n )}\n\n {(isLoggedIn || isReactNativeApp) && (\n <>\n \n My Bets\n \n )}\n\n {isLoggedIn && (\n <>\n \n \n Pending bets\n {pendingBetsCount > 0 && (\n \n )}\n \n \n\n \n Resulted bets\n \n\n \n \n Blackbook\n {blackBookAlertCount > 0 && (\n \n )}\n \n \n \n )}\n\n {isReactNativeApp && (\n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, {\n item: 'hamburger-scan-my-bet',\n })\n e.preventDefault()\n sendToNative('SCAN_RETAIL_TICKET')\n onClose()\n }}\n >\n Scan my bet\n \n )}\n\n {isLoggedIn && (\n \n Debit/credit\n \n )}\n\n \n\n Racing\n\n \n Next races\n \n\n \n Races\n \n\n \n Trots\n \n\n \n Dogs\n \n\n \n Favourite numbers\n \n\n \n Mystery bet\n \n\n \n Jackpots\n \n\n \n Good things\n \n\n \n\n Sport\n\n \n Next sport\n \n\n \n Live sport\n \n\n \n All sport\n \n\n \n\n Insider Tips\n\n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-blog' })\n if (!isReactNativeApp) {\n return\n }\n e.preventDefault()\n sendToNative('REQUEST_NATIVE_NAVIGATION', { location: 'Blog' })\n }}\n >\n Blog\n \n\n \n\n {isLoggedIn && (\n <>\n \n Profile\n \n\n {activeCampaignsCount > 0 && (\n \n Bonus offers\n \n )}\n\n \n Settings New\n \n\n \n My contact details\n \n\n {!isNewWithdrawFeatureActive && (\n \n Bank account\n \n )}\n\n \n Subscription\n \n\n \n Change password\n \n \n \n )}\n\n \n Support\n \n\n \n Contact us\n \n\n {\n trackOptimoveEvent({\n eventName: 'set_page_visit',\n data: {\n customURL: 'https://help.tabtouch.com.au',\n pageTtile: 'HELP',\n },\n })\n }}\n >\n Help & support\n \n\n \n Privacy policy\n \n\n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-find-a-tab' })\n if (isReactNativeApp) {\n e.preventDefault()\n sendToNative('REQUEST_NATIVE_NAVIGATION', { location: 'TAB Locator' })\n onClose()\n }\n }}\n >\n Find my TAB\n \n\n {isReactNativeApp && (\n {\n trackSideMenuEvent(keys.hamburgerMenuClicked, { item: 'hamburger-what-is-new' })\n e.preventDefault()\n sendToNative('REQUEST_NATIVE_NAVIGATION', { location: \"What's New\" })\n onClose()\n }}\n >\n What's new\n \n )}\n\n \n\n \n Responsible wagering\n \n\n {isLoggedIn && (\n <>\n \n Deposit limits\n \n\n \n Bet limits\n \n\n \n Take a break\n \n\n \n Close account\n \n\n \n Activity statement\n \n \n )}\n\n \n Responsible wagering\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst HamburgerMenuStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n padding: '1rem',\n backgroundColor: hexColors.white,\n fontFamily: font.family.secondary,\n})\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { AppRoutes } from '@core/AppRoutes'\nimport {\n fetchAccountBalanceAsync,\n fetchCampaignsAsync,\n} from '@core/State/UserAccount/async-signals'\nimport { useObservableImmutable } from '@core/Utils/hooks/useObservableImmutable'\nimport { state$ as accountState$ } from '@core/Areas/Account/driver'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as featuresState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { FeatureFlags } from '@mobi/settings'\nimport { Currency } from '@mobi/utils/money'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Icon as IconV2 } from '@mobi/component-library/Common/V2/Icon'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackBonusBetEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { setBetSlipNewIsOpen, toggleIsDropDownOpen } from '@core/Areas/AppHeader/Store'\nimport { FobSpecialToken } from '../AccountDropDown/Components/helpers/useGetSpecialTokens'\nimport { useGetSpecialTokens } from '../AccountDropDown/Components/helpers/useGetSpecialTokens'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { getIsBalanceVisible, getIsDropDownOpen } from '../../Store/selectors'\nimport styled from '@emotion/styled'\nimport { Money } from '@core/Components/Text/Money'\nimport { useRefreshBalanceOnForeground } from '@core/Utils/hooks'\n\ntype RenderContext = 'app-header' | 'betslip'\n\nconst enum LocalConstants {\n betslipHeaderClassname = 'js-balance-pill--betslip',\n}\n\nexport const BalancePill: React.FC<{ renderContext: RenderContext }> = ({ renderContext }) => {\n const dispatch = useAppDispatch()\n\n const {\n accountBalance: balance = 0,\n accountBalanceUpdatedTime: accountBalanceLastUpdated = 0,\n bonusBetBalance = 0,\n bonusCashBalance = 0,\n activeCampaigns,\n } = useObservableImmutable(userAccountState$, [\n 'accountBalance',\n 'accountBalanceUpdatedTime',\n 'bonusBetBalance',\n 'bonusCashBalance',\n 'activeCampaigns',\n ])\n\n useRefreshBalanceOnForeground()\n const { accountDetails } = useObservableImmutable(accountState$, ['accountDetails'])\n const { features } = useObservableImmutable(featuresState$, ['features'])\n\n const isDropDownOpen = useAppSelector(getIsDropDownOpen)\n const isBalanceVisible = useAppSelector(getIsBalanceVisible)\n\n const isAccountPushFeatureEnabled = features?.get(FeatureFlags.PUSHDATA_USERINFO.key)\n const accountBalanceTTL = features?.get(FeatureFlags.CONFIG_BALANCE_POLL_INTERVAL.key)\n\n const superPicksLastUpdated = React.useRef(null)\n const standardSuperPickCount = React.useRef(0)\n const bonusSuperPickCount = React.useRef(0)\n const [canShowBonusCount, setCanShowBonusCount] = React.useState(false)\n const {\n tokens,\n errorMessage,\n isLoading: isLoadingSuperPicks,\n } = useGetSpecialTokens(canShowBonusCount)\n\n React.useEffect(() => {\n if (accountDetails?.get('activeCampaignsCount') != (activeCampaigns?.count() ?? -1)) {\n fetchCampaignsAsync()\n }\n }, [accountDetails, activeCampaigns])\n\n React.useEffect(() => {\n const bonusCountTimeoutId = window.setTimeout(() => {\n setCanShowBonusCount(true)\n }, 500)\n return () => {\n window.clearTimeout(bonusCountTimeoutId)\n }\n }, [])\n\n // Timer Setup: Handle Balance Polling Based on Interval\n React.useEffect(() => {\n let balanceTimerId: number\n\n if (accountBalanceTTL && isBalanceVisible && !isAccountPushFeatureEnabled) {\n if (\n !!accountBalanceLastUpdated &&\n Date.now() - accountBalanceLastUpdated > accountBalanceTTL\n ) {\n fetchAccountBalanceAsync()\n }\n balanceTimerId = window.setInterval(() => {\n if (\n !!accountBalanceLastUpdated &&\n Date.now() - accountBalanceLastUpdated > accountBalanceTTL\n ) {\n fetchAccountBalanceAsync()\n }\n }, accountBalanceTTL)\n }\n\n return () => {\n window.clearInterval(balanceTimerId)\n }\n }, [isBalanceVisible, accountBalanceTTL, accountBalanceLastUpdated, isAccountPushFeatureEnabled])\n\n const handleDropDownToggle = () => {\n const accountNumber = accountDetails?.toJS()?.accountNumber\n if (!isDropDownOpen && accountNumber) {\n trackBonusBetEvent(keys.accountDropDownOpened, {\n accountNumber,\n accountBalance: balance,\n bonusBetBalance,\n bonusCashBalance,\n })\n }\n dispatch(toggleIsDropDownOpen())\n }\n\n const bonusBalance = (bonusBetBalance ?? 0) + (bonusCashBalance ?? 0)\n const campaignsCount = activeCampaigns?.count() || 0\n\n const standardSuperPicks = tokens.filter(token => !token.IsBonusToken)\n const bonusSuperPicks = tokens.filter(token => token.IsBonusToken)\n\n const isStandardSuperPickAvailable =\n !errorMessage && standardSuperPicks && standardSuperPicks.length > 0\n const isBonusSuperPicksAvailable = !errorMessage && bonusSuperPicks && bonusSuperPicks.length > 0\n\n if (!isLoadingSuperPicks) {\n standardSuperPickCount.current = isStandardSuperPickAvailable\n ? standardSuperPicks[0].BetsAvailable\n : 0\n bonusSuperPickCount.current = isBonusSuperPicksAvailable\n ? calculateTotalBonusSuperPicks(bonusSuperPicks)\n : 0\n }\n\n const totalOffersCount =\n campaignsCount + standardSuperPickCount.current + bonusSuperPickCount.current\n superPicksLastUpdated.current = Date.now()\n\n return (\n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\n// NOT main export, see above for \nexport const BalancePillComponent: React.FC<{\n cashBalance: number\n bonusBalance: number\n bonusesCount: number\n isVisible: boolean\n onWalletToggle: () => void\n renderContext: RenderContext\n}> = ({ cashBalance, bonusBalance, bonusesCount, isVisible, onWalletToggle, renderContext }) => {\n const history = useHistory()\n\n const dispatch = useAppDispatch()\n\n const hideDecimalsInCashBalance = cashBalance >= 1000\n const hideDecimalsInBonusBalance = bonusBalance >= 1000\n\n const balanceToDisplay = hideDecimalsInCashBalance ? Math.floor(cashBalance) : cashBalance\n const bonusBalanceToDisplay = hideDecimalsInBonusBalance ? Math.floor(bonusBalance) : bonusBalance\n\n const handleDepositNavFromBetSlip = () => {\n dispatch(setBetSlipNewIsOpen(false))\n\n history.push(AppRoutes.Deposit)\n }\n\n return (\n \n {renderContext === 'app-header' && (\n \n {isVisible ? (\n <>\n
    \n \n\n {!!bonusBalanceToDisplay && (\n \n \n\n \n {new Currency(bonusBalanceToDisplay).format({ pattern: '#' })}\n \n \n )}\n
    \n\n {!!bonusesCount && {bonusesCount}}\n \n ) : (\n \n )}\n
    \n )}\n\n {renderContext !== 'app-header' && (\n \n \n\n \n \n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction calculateTotalBonusSuperPicks(array: FobSpecialToken[]): number {\n return array.reduce((count, { BetsAvailable = 0 }) => BetsAvailable + count, 0)\n}\n\n// ======\n// Styles\n// ======\n\nconst BalanceContainerStyled = styled.div({\n display: 'flex',\n alignItems: 'stretch',\n cursor: 'pointer',\n})\n\nconst BalanceSectionDefaultAppHeaderStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: spacing.smx2,\n\n backgroundColor: colors.studio[600],\n color: colors.white,\n borderRadius: radius.lg,\n padding: `${spacing.smx2} ${spacing.smx1}`,\n fontFamily: font.family.primary,\n fontWeight: font.weight.medium,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n})\n\nconst BalanceSectionForBetSlipStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: spacing.smx2,\n height: '4rem',\n\n backgroundColor: colors.surface[200],\n color: colors.neutral[900],\n padding: `0 ${spacing.smx1}`,\n border: 0,\n borderRadius: radius.md,\n\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n fontWeight: font.weight.medium,\n lineHeight: font.size.md.lineHeight,\n})\n\nconst BonusSectionStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '2.2rem',\n height: '2.2rem',\n fontFamily: font.family.primary,\n fontWeight: font.weight.semibold,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n\n borderRadius: radius.full,\n backgroundColor: colors.orange[500],\n color: '#5C4000',\n})\n\nconst BalanceMoneyStyled = styled\n .div({\n margin: 'unset',\n display: 'block',\n })\n .withComponent(Money)\n\nconst BonusBalanceMoneyWrapperStyled = styled.span({\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '.2rem',\n\n background: colors.success[50],\n borderRadius: radius.sm,\n padding: '0 .2rem',\n})\n\nconst BonusBalanceMoneyStyled = styled.span({\n color: colors.celery[500],\n margin: 'unset',\n display: 'block',\n whiteSpace: 'nowrap',\n})\n","import { useSelector } from 'react-redux'\nimport { useFeature } from '@core/Utils/hooks'\nimport { getNewBetSlipSetting } from '@core/Areas/Settings/Store/selectors'\n\nexport const useIsNewBetSlipFeatureActive = () => {\n const isNewBetSlipFeaturSettingActive = useSelector(getNewBetSlipSetting)\n const isNewBetSlipFeatureActive = useFeature('NEW_BET_SLIP_DESIGN')\n\n return isNewBetSlipFeaturSettingActive && isNewBetSlipFeatureActive\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\nimport { BET_SLIP_BUTTON_ID } from '../../BetSlipButton/constants'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\nimport { DisplayLocation } from '../../../types'\n\nconst enum LocalConstants {\n CountAnimationUpClass = 'js-count-animation--up',\n CountAnimationDownClass = 'js-count-animation--down',\n}\n\nexport const Button: React.FC<{\n onClick(): void\n type: 'betslip' | 'pending'\n count: number | null\n displayLocation?: DisplayLocation\n}> = ({ onClick, type, count, displayLocation = 'global' }) => {\n const prevCountRef = React.useRef(count)\n\n React.useEffect(() => {\n prevCountRef.current = count\n }, [count])\n\n const isBetSlip = type === 'betslip'\n const ariaLabel = isBetSlip ? 'Bet slip item count' : 'Pending bets count'\n const testId = `${isBetSlip ? 'betslip' : 'pending-bets'}-item-count`\n\n const animation = count !== null ? getBadgeAnimation(count, prevCountRef.current) : null\n\n let countAnimationClass = ''\n if (animation) {\n countAnimationClass =\n animation === 'up'\n ? LocalConstants.CountAnimationUpClass\n : LocalConstants.CountAnimationDownClass\n }\n\n return (\n \n \n {count !== null ? (\n <>\n \n {count}\n \n\n {animation && {count + (animation === 'up' ? -1 : 1)}}\n \n ) : (\n \n )}\n \n\n {isBetSlip ? 'Bet Slip' : 'My Bets'}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getBadgeAnimation(count: number, prevCount: number | null): 'up' | 'down' | null {\n if (prevCount === null || prevCount === count) return null\n return count > prevCount ? 'up' : 'down'\n}\n\n// ======\n// Styles\n// ======\n\nconst ButtonStyled = styled.button({\n flexShrink: 0,\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n width: '4.8rem',\n border: 0,\n touchAction: 'manipulation',\n cursor: 'pointer',\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.medium,\n\n // Count\n '> span:nth-of-type(1)': {\n display: 'grid',\n gridTemplateAreas: 'stack',\n height: font.size.lg.lineHeight,\n marginBottom: '-0.2rem',\n overflow: 'hidden',\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n\n '> span': { gridArea: 'stack', animationDirection: 'forwards' },\n\n '@keyframes animatePrevOutUp': { to: { transform: 'translateY(100%)' } },\n '@keyframes animatePrevOutDown': { to: { transform: 'translateY(-100%)' } },\n\n [`&.${LocalConstants.CountAnimationUpClass}`]: {\n '> span:nth-of-type(1)': {\n animationName: 'animateCountInBounceDown',\n animationDuration: '0.8s',\n },\n '> span:nth-of-type(2)': {\n animation: 'animatePrevOutDown 0.2s ease forwards',\n },\n },\n\n [`&.${LocalConstants.CountAnimationDownClass}`]: {\n '> span:nth-of-type(1)': {\n animation: 'animateCountInBounceUp 0.8s ease forwards',\n },\n '> span:nth-of-type(2)': {\n animation: 'animatePrevOutUp 0.2s ease forwards',\n },\n },\n },\n\n // Label\n '> span:nth-of-type(2)': {\n whiteSpace: 'nowrap',\n fontSize: font.size.xs.fontSize,\n letterSpacing: font.size.xs.letterSpacing,\n lineHeight: font.size.xs.lineHeight,\n },\n\n backgroundColor: colors.studio[600],\n color: colors.white,\n\n ['&[data-mybets-btn=\"betslip\"]']: {\n backgroundColor: colors.lavender[100],\n color: colors.studio[600],\n },\n\n ['&[data-mybets-btn=\"pending\"][data-mybets-display=\"betslip\"]']: {\n color: colors.lavender[700],\n backgroundColor: colors.lavender[50],\n },\n\n '@keyframes animateCountInBounceDown': {\n '0%': { transform: 'translateY(100%)' },\n '15%': { transform: 'translateY(0.81%)' },\n '16%': { transform: 'translateY(-3.77%)' },\n '17%': { transform: 'translateY(-7.74%)' },\n '18%': { transform: 'translateY(-11.08%)' },\n '19%': { transform: 'translateY(-13.83%)' },\n '20%': { transform: 'translateY(-16%)' },\n '21%': { transform: 'translateY(-17.62%)' },\n '22%': { transform: 'translateY(-18.73%)' },\n '23%': { transform: 'translateY(-19.37%)' },\n '24%': { transform: 'translateY(-20%)' },\n '41%': { transform: 'translateY(0%)' },\n '55%': { transform: 'translateY(3%)' },\n '56%': { transform: 'translateY(2.73%)' },\n '57%': { transform: 'translateY(2.44%)' },\n '58%': { transform: 'translateY(2.14%)' },\n '59%': { transform: 'translateY(1.84%)' },\n '60%': { transform: 'translateY(1.54%)' },\n '61%': { transform: 'translateY(1.25%)' },\n '62%': { transform: 'translateY(0.98%)' },\n '63%': { transform: 'translateY(0.71%)' },\n '64%': { transform: 'translateY(0.47%)' },\n '65%': { transform: 'translateY(0.25%)' },\n '100%': { transform: 'translateY(0%)' },\n },\n\n '@keyframes animateCountInBounceUp': {\n '0%': { transform: 'translateY(-100%)' },\n '15%': { transform: 'translateY(-0.81%)' },\n '16%': { transform: 'translateY(3.77%)' },\n '17%': { transform: 'translateY(7.74%)' },\n '18%': { transform: 'translateY(11.08%)' },\n '19%': { transform: 'translateY(13.83%)' },\n '20%': { transform: 'translateY(16%)' },\n '24%': { transform: 'translateY(20%)' },\n '41%': { transform: 'translateY(0%)' },\n '55%': { transform: 'translateY(-3%)' },\n '56%': { transform: 'translateY(-2.73%)' },\n '57%': { transform: 'translateY(-2.44%)' },\n '58%': { transform: 'translateY(-2.14%)' },\n '59%': { transform: 'translateY(-1.84%)' },\n '60%': { transform: 'translateY(-1.54%)' },\n '61%': { transform: 'translateY(-1.25%)' },\n '62%': { transform: 'translateY(-0.98%)' },\n '63%': { transform: 'translateY(-0.71%)' },\n '64%': { transform: 'translateY(-0.47%)' },\n '65%': { transform: 'translateY(-0.25%)' },\n '100%': { transform: 'translateY(0%)' },\n },\n})\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { selectBetSlipItemCount } from '@mobi/betslip/Store/Bets/selectors'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { Betslip } from '@core/Areas/Betslip/Betslip'\nimport { OverlayOpen } from '@core/Components/Overlay/signals'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport { hasNotBeenPlaced } from '@core/Areas/Betslip/helpers/state'\nimport { setBetSlipNewIsOpen, toggleIsDropDownOpen } from '@core/Areas/AppHeader/Store'\nimport { useIsNewBetSlipFeatureActive } from '@core/Areas/BetSlipNew/hooks/useIsNewBetSlipFeatureActive'\nimport { Button } from '../Common/Button'\n\nexport const BetSlipButton: React.FC = () => {\n const dispatch = useDispatch()\n\n const newBetSlipCount = useAppSelector(selectBetSlipItemCount)\n const [count, setCount] = React.useState(null)\n\n const prevCountRef = React.useRef(count)\n React.useEffect(() => {\n prevCountRef.current = count\n }, [count])\n\n const isNewBetSlipFeatureActive = useIsNewBetSlipFeatureActive()\n\n // Legacy Bet Slip Count + Toast\n React.useEffect(() => {\n if (isNewBetSlipFeatureActive) return\n const betslipSubscription = betslipState$\n .map(state => state.items.filter(hasNotBeenPlaced).count())\n .distinctUntilChanged()\n .subscribe(count => {\n if (prevCountRef.current !== null) {\n const hasCountIncreased = count > prevCountRef.current\n const toastText = hasCountIncreased ? 'Added to' : 'Removed from'\n\n RegisterToast({\n message: `${toastText} Betslip`,\n position: 'top',\n id: `Betslip Button Event - ${toastText} Betslip`,\n })\n }\n\n setCount(count)\n })\n return () => betslipSubscription.dispose()\n }, [isNewBetSlipFeatureActive])\n\n const handleClick = React.useCallback(() => {\n if (isNewBetSlipFeatureActive) {\n dispatch(setBetSlipNewIsOpen(true))\n } else {\n OverlayOpen(Betslip)\n }\n dispatch(toggleIsDropDownOpen(false))\n }, [isNewBetSlipFeatureActive, dispatch])\n\n return (\n \n )\n}\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useHistory } from 'react-router-dom'\nimport { store } from '@core/Store'\nimport {\n ACCOUNT_ACTIVITY_PENDING_ROUTE,\n ACCOUNT_ACTIVITY_RESULTS_ROUTE,\n} from '@core/Areas/AccountActivity/constants'\nimport { KAMBI_PENDING_HASH_ROUTE, KAMBI_RESULTED_HASH_ROUTE } from '@core/Areas/Kambi/constants'\nimport {\n setBetSlipNewIsOpen,\n setIsPreviousPendingBetsSportsOnly,\n} from '@core/Areas/AppHeader/Store'\nimport { selectIsPreviousPendingBetsSportsOnly } from '@core/Areas/AppHeader/Store/selectors'\nimport { usePendingTicketsCount } from '@core/Data/Account/PendingTicketsCount/usePendingTicketsCount'\nimport { Button } from '../Common/Button'\nimport type { DisplayLocation } from '../../types'\nimport { useInvalidatePendingCountOnEvents } from './hooks'\n\nexport const PendingBetsButton = React.memo<{ displayLocation: DisplayLocation }>(\n ({ displayLocation }) => {\n const history = useHistory()\n const dispatch = useDispatch()\n\n const { pendingBetsCount, isSportsOnlyPending } = usePendingTicketsCount({ enabled: true })\n useInvalidatePendingCountOnEvents()\n\n const handleClick = () => {\n const myBetsRoute = getMyBetsRoute({ pendingBetsCount, isSportsOnlyPending })\n history.push(myBetsRoute)\n if (displayLocation === 'betslip') dispatch(setBetSlipNewIsOpen(false))\n }\n\n return (\n \n )\n }\n)\n\n// =============\n// Local Helpers\n// =============\n\nfunction getMyBetsRoute({\n pendingBetsCount,\n isSportsOnlyPending,\n}: Omit, 'doPendingBetsExceedMaxCount'>): `/${string}` {\n const isPreviousPendingSportsOnly = selectIsPreviousPendingBetsSportsOnly(store.getState())\n\n if (pendingBetsCount === 0) {\n return `/${\n isPreviousPendingSportsOnly\n ? KAMBI_RESULTED_HASH_ROUTE.replace('#', '')\n : ACCOUNT_ACTIVITY_RESULTS_ROUTE\n }`\n }\n\n if (isSportsOnlyPending) {\n store.dispatch(setIsPreviousPendingBetsSportsOnly(true))\n return `/${KAMBI_PENDING_HASH_ROUTE.replace('#', '')}`\n }\n\n store.dispatch(setIsPreviousPendingBetsSportsOnly(false))\n return `/${ACCOUNT_ACTIVITY_PENDING_ROUTE}`\n}\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { ConfirmAllBetsSuccessful } from '@core/Areas/Betslip/signals'\nimport { ConfirmBetslipBetsSucceeded, ConfirmBetSucceeded } from '@core/Areas/Quickbet/signals'\nimport { UpdateUserData as KambiPlaySessionIdRegistered } from '@core/Areas/Kambi/driver'\nimport { invalidateKambiPendingTicketsQueryData } from '@core/Data/Account/PendingTicketsCount/helpers'\nimport { invalidateRacingPendingTicketsQueryData } from '@core/Data/Account/PendingTicketsCount/helpers'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport { confirmAllBets } from '@mobi/betslip/Store/Workflow/asyncActions'\n\nexport const useInvalidatePendingCountOnEvents = () => {\n // Invalidate on bet placement w/ Quickbet and legacy Betslip\n React.useEffect(() => {\n const subscription = Observable.merge(\n ConfirmBetSucceeded.signal$,\n ConfirmAllBetsSuccessful.signal$,\n ConfirmBetslipBetsSucceeded.signal$\n )\n .debounce(500)\n .subscribe(invalidateRacingPendingTicketsQueryData)\n return () => subscription.dispose()\n }, [])\n\n // Invalidate on bet placement w/ new BetSlip\n React.useEffect(() => {\n const dispose = startListening({\n actionCreator: confirmAllBets.fulfilled,\n effect: invalidateRacingPendingTicketsQueryData,\n })\n return () => dispose()\n }, [])\n\n // Ensure kambi ticket count is correct by forcing update on session id\n React.useEffect(() => {\n const subscription = KambiPlaySessionIdRegistered.signal$.subscribe(() => {\n invalidateKambiPendingTicketsQueryData()\n })\n return () => subscription.dispose()\n }, [])\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { radius } from '@mobi/component-library/Theme/Common'\nimport { BetSlipButton } from './Components/BetSlipButton'\nimport { PendingBetsButton } from './Components/PendingBetsButton'\nimport { DisplayLocation } from './types'\nimport { useFeature } from '@core/Utils/hooks'\n\nexport const MyBetsButtons: React.FC<{\n shouldDisplayBetSlip: boolean\n shouldDisplayPendingBets: boolean\n displayLocation?: DisplayLocation\n}> = ({ shouldDisplayBetSlip, shouldDisplayPendingBets, displayLocation = 'global' }) => {\n const isPendingBetsFeatureActive = useFeature('PENDING_BETS_BUTTON_IN_APP_HEADER')\n\n return (\n \n {shouldDisplayPendingBets && isPendingBetsFeatureActive && (\n \n )}\n\n {shouldDisplayBetSlip && }\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n alignItems: 'stretch',\n\n ':empty': { display: 'none' },\n\n '> button:only-of-type': {\n borderRadius: radius.lg,\n },\n\n '> button:nth-of-type(1)': {\n borderTopLeftRadius: radius.lg,\n borderBottomLeftRadius: radius.lg,\n },\n\n '> button:nth-of-type(2)': {\n borderTopRightRadius: radius.lg,\n borderBottomRightRadius: radius.lg,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useLocation } from 'react-router-dom'\nimport { colors, layering, measurements, spacing } from '@mobi/component-library/Theme/Common'\nimport { Drawer } from '@mobi/component-library/Overlays/Drawer'\nimport { greaterOrEqualThan } from '@mobi/component-library/Utils/media'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport { hexColors } from '@mobi/settings'\nimport Toast from '@core/Components/Toast'\nimport { Search } from '@core/Areas/Search/Search'\nimport { OverlayOpen } from '@core/Components/Overlay/signals'\nimport {\n AppHeaderLogo,\n BackButton as BackButton,\n HamburgerButton,\n LoginButton,\n SignUpButton,\n} from './Components/Buttons/Buttons'\nimport { useKambiVisible, useStickyOnScroll } from './hooks'\nimport { useLogon, usePrevious } from '@core/Utils/hooks'\nimport {\n AccountDropDownBGStyled,\n BG_ANIMATION_TIMEOUT_MS,\n Wallet,\n} from './Components/AccountDropDown'\nimport { HamburgerMenu } from './Components/HamburgerMenu/HamburgerMenu'\nimport { isReactNativeApp, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { BalancePill } from './Components/Balance/BalancePill'\nimport {\n getIsAppHeaderStickyEnabled,\n getIsAppHeaderVisible,\n getIsDropDownOpen,\n getIsHamburgerMenuOpen,\n getShouldDisableAppHeaderRender,\n} from './Store/selectors'\nimport { toggleIsDropDownOpen, toggleIsHamburgerMenuOpen } from './Store'\nimport { MyBetsButtons } from './Components/MyBetsButtons'\nimport { AppHeaderButtonStyled } from './Components/Buttons/Buttons.styles'\n\nexport const AppHeader: React.FC = () => {\n const appHeaderRef = React.useRef(null)\n\n const dispatch = useDispatch()\n\n const isDropDownOpen = useSelector(getIsDropDownOpen)\n const isAppHeaderVisible = useSelector(getIsAppHeaderVisible)\n const isHamburgerMenuOpen = useSelector(getIsHamburgerMenuOpen)\n const isStickyEnabled = useSelector(getIsAppHeaderStickyEnabled)\n const shouldDisableAppHeaderRender = useSelector(getShouldDisableAppHeaderRender)\n\n const { pathname } = useLocation()\n const prevPathname = usePrevious(pathname)\n\n const { isLoggedIn } = useLogon()\n\n const shouldRenderBG = useRenderTimeoutControl({\n shouldRender: isDropDownOpen,\n timeoutMs: BG_ANIMATION_TIMEOUT_MS,\n })\n\n const [isKambiVisible, isKambiBetslipMaximized] = useKambiVisible()\n\n useStickyOnScroll(appHeaderRef, isAppHeaderVisible)\n\n React.useEffect(() => {\n if ((isDropDownOpen && !isAppHeaderVisible) || pathname !== prevPathname) {\n dispatch(toggleIsDropDownOpen(false))\n }\n }, [isAppHeaderVisible, isDropDownOpen, pathname, prevPathname, dispatch])\n\n React.useEffect(() => {\n if (!isReactNativeApp) return\n const { dispose } = subscribeToNative('PROMPT_LOGIN', showLogin)\n return () => dispose()\n }, [])\n\n if (shouldDisableAppHeaderRender) return null\n\n const shouldRenderBackButton =\n (pathname !== '/' && !pathname.startsWith('/deposit')) || isKambiVisible\n\n const shouldLowerZIndex =\n (isKambiVisible && isKambiBetslipMaximized && !shouldRenderBG) ||\n (!isStickyEnabled && !shouldRenderBG)\n\n return (\n <>\n \n \n
    \n
    \n \n\n {shouldRenderBackButton ? : }\n\n \n\n {!isKambiVisible && (\n OverlayOpen(Search)}\n data-testid='header-search-btn'\n data-appheader-search\n aria-label='Search'\n role='button'\n >\n \n \n )}\n
    \n\n
    \n {isLoggedIn ? (\n \n ) : (\n <>\n \n \n \n )}\n\n \n
    \n
    \n\n {isLoggedIn && }\n \n
    \n\n dispatch(toggleIsHamburgerMenuOpen(false))}\n >\n dispatch(toggleIsHamburgerMenuOpen(false))} />\n \n\n {shouldRenderBG && (\n dispatch(toggleIsDropDownOpen(false))}\n isVisible={isDropDownOpen}\n />\n )}\n\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst ContainerStyled = styled.div({\n boxSizing: 'border-box',\n backgroundColor: hexColors.blueDiamond,\n position: 'relative',\n height: measurements.mobi.headerHeight,\n minWidth: measurements.mobi.minWidth,\n maxWidth: '80em',\n margin: '0 auto',\n\n '> header': {\n top: 0,\n left: 0,\n right: 0,\n boxSizing: 'border-box',\n backgroundColor: hexColors.blueDiamond,\n color: colors.white,\n height: measurements.mobi.headerHeight,\n width: '100%',\n margin: '0 auto',\n padding: 0,\n maxWidth: measurements.mobi.maxWidth,\n minWidth: '30em',\n transform: 'translateY(0)',\n\n '> div[data-header-inner]': {\n boxSizing: 'border-box',\n position: 'relative',\n zIndex: 1,\n display: 'flex',\n alignItems: 'stretch',\n justifyContent: 'space-between',\n gap: '0.2rem',\n height: measurements.mobi.headerHeight,\n maxHeight: measurements.mobi.headerHeight,\n padding: spacing.smx1,\n paddingLeft: 0,\n backgroundColor: hexColors.blueDiamond,\n\n '> div': {\n display: 'flex',\n alignItems: 'stretch',\n },\n\n '> div:nth-of-type(1)': {\n flex: 1,\n gap: '0.2rem',\n\n '[data-appheader-search]': {\n marginLeft: 'auto',\n },\n },\n\n '> div:nth-of-type(2)': {\n justifyContent: 'flex-end',\n gap: spacing.smx2,\n\n '> button': {\n flexShrink: 0,\n height: 'auto',\n paddingInline: spacing.smx2,\n },\n },\n\n [greaterOrEqualThan('px350')]: {\n padding: `${spacing.smx1} ${spacing.sm} ${spacing.smx1} 0`,\n\n '> div:nth-of-type(2)': {\n '> button': { paddingInline: spacing.smx1 },\n },\n },\n\n [greaterOrEqualThan('px400')]: {\n '> div:nth-of-type(2)': {\n gap: spacing.smx1,\n\n '> button': { paddingInline: spacing.sm },\n },\n },\n },\n },\n})\n","import styled from '@emotion/styled'\nimport { colors } from '../../Settings'\nimport { GridRow } from '@mobi/component-library/Common/Grid'\n\nexport const RaceListHeaderStyled = styled('header')({\n alignItems: 'center',\n background: colors.subContentHeader.background,\n boxSizing: 'border-box',\n color: colors.subContentHeader.text,\n display: 'flex',\n justifyContent: 'center',\n lineHeight: 2,\n padding: '0.5em 1.2em 1em 1.2em',\n textAlign: 'center',\n width: '100%',\n})\n\nexport const RaceListHeaderDetails = styled(GridRow)({\n color: colors.subContentHeader.detailsText,\n fontSize: '1.1rem',\n lineHeight: '3rem',\n textTransform: 'uppercase',\n})\n\nexport const RaceListCenteredHeaderStyled = styled('div')({\n maxWidth: '42rem',\n width: '100%',\n})\n","import { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors } from '@core/Settings'\nimport styled from '@emotion/styled'\n\nexport const RaceListContainerStyled = styled('div')({\n padding: '0.5rem 1rem 0.5rem 1rem',\n})\n\nexport const RaceListItemStyled = styled('div')({\n display: 'flex',\n padding: '0.75rem 0',\n})\n\nexport const RaceTimeAndNumber = styled('div')({\n width: '4.2rem',\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const RaceListDetails = styled('div')({\n flex: '1',\n fontSize: '1.4rem',\n padding: '0 0.25rem 0 1.5rem',\n display: 'flex',\n flexFlow: 'row wrap',\n})\n\nexport const RaceTimeStyled = styled('span')({\n textAlign: 'center',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n lineHeight: '2',\n})\n\nexport const RaceListRaceNameStyled = styled('div')({\n flex: '0 0 100%',\n})\n\nexport const RaceListClassTypeStyled = styled('div')({\n display: 'flex',\n alignItems: 'center',\n})\n\nexport const RaceListClassStyled = styled('div')({\n flex: '0 0 55%',\n fontSize: '1.2rem',\n color: colors.raceList.class.text,\n})\n\nexport const RaceListResultStyled = styled('div')({\n flex: '0 0 45%',\n fontSize: '1rem',\n display: 'block',\n textAlign: 'right',\n marginTop: 'auto',\n color: colors.raceList.class.text,\n})\n\nexport const RaceListResultDistanceStyled = styled('div')({\n color: colors.raceList.class.text,\n})\n\nexport const RaceListResultStatusStyled = styled('div')({\n color: colors.raceList.results.text,\n})\n\nexport const RaceCondtitionIcon = styled(Icon)({\n verticalAlign: 'sub',\n marginRight: '0.5rem',\n})\n\nexport const QuaddieChip = styled('span')({\n background: colors.raceList.quaddieChip.background,\n borderRadius: '0.25rem',\n color: colors.raceList.quaddieChip.text,\n margin: '0 0.5em 0 0',\n display: 'inline-block',\n lineHeight: '2rem',\n width: '2rem',\n textAlign: 'center',\n fontSize: '1rem',\n})\n\nexport const RaceExtrasIconStyled = styled(Icon)({\n marginRight: '0.45rem',\n})\n\nexport enum MeetingStatus {\n Open = 'Open',\n Pending = 'Pending',\n Abandoned = 'Abandoned',\n Suspended = 'Suspended',\n Finished = 'Finished',\n Released = 'Released',\n Results = 'Results', // For Fixed Odds\n Closed = 'Closed',\n Interim = 'Interim',\n}\n\nexport interface RaceStatusNumberStyledProps {\n raceStatus: MeetingStatus\n}\n\nexport const RaceStatusNumberStyledProps = styled('span')(\n {\n textAlign: 'center',\n fontSize: '2.2rem',\n fontWeight: 'bold',\n lineHeight: '1.8',\n borderRadius: '0.8rem',\n },\n\n ({ raceStatus }) => {\n switch (raceStatus) {\n case MeetingStatus.Abandoned:\n return {\n backgroundColor: colors.fixtureStatus.grey,\n color: colors.raceList.fixtureStatus.textDark,\n }\n case MeetingStatus.Open:\n return {\n backgroundColor: colors.fixtureStatus.green,\n color: colors.raceList.fixtureStatus.textLight,\n }\n case MeetingStatus.Pending: // tote\n case MeetingStatus.Suspended: // fixed\n return {\n backgroundColor: colors.fixtureStatus.orange,\n color: colors.raceList.fixtureStatus.textLight,\n }\n default:\n return {\n backgroundColor: colors.fixtureStatus.red,\n color: colors.raceList.fixtureStatus.textLight,\n }\n }\n }\n)\n","import * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\n\nexport const unknownWeather = 'weatherUnkown'\n\nexport interface WeatherTypes {\n Fine: keyof typeof iconPaths\n Hot: keyof typeof iconPaths\n Cloudy: keyof typeof iconPaths\n Overcast: keyof typeof iconPaths\n Rainy: keyof typeof iconPaths\n Raining: keyof typeof iconPaths\n Storm: keyof typeof iconPaths\n Showery: keyof typeof iconPaths\n Awful: keyof typeof iconPaths\n Snowy: keyof typeof iconPaths\n}\n\nexport const WeatherTypes: Record = {\n Fine: 'weatherFine',\n Hot: 'weatherFine',\n Cloudy: 'weatherCloudy',\n Overcast: 'weatherOvercast',\n Rainy: 'weatherShowery',\n Raining: 'weatherShowery',\n Storm: 'weatherShowery',\n Showery: 'weatherShowery',\n Awful: 'weatherShowery',\n Snowy: 'weatherShowery',\n}\n\nexport interface IconTypes {\n Races: keyof typeof iconPaths\n Trots: keyof typeof iconPaths\n Dogs: keyof typeof iconPaths\n}\n\nexport const IconTypes: Record = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport dayjs from 'dayjs'\n\nimport {\n RaceListHeaderStyled,\n RaceListHeaderDetails,\n RaceListCenteredHeaderStyled,\n} from './RaceListHeader.styles'\nimport {\n ContentHeaderLinkStyled,\n ContentHeaderStyled,\n ContentHeaderTitleStyled,\n} from '../ContentHeader/ContentHeader.styles'\nimport { ButtonWithIcon } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { RaceCondtitionIcon } from '@core/Areas/RaceList/RaceList.styles'\nimport { IconTypes, unknownWeather, WeatherTypes } from './utils'\nexport function RaceListHeader({\n title,\n code,\n weather,\n condition,\n eventDate,\n}: {\n title: string\n code: string\n weather: string\n condition: string\n eventDate: string\n}): JSX.Element {\n return (\n
    \n \n \n \n }\n color='light'\n />\n \n \n \n \n {title}\n \n \n \n \n \n \n \n \n \n \n \n {dayjs(eventDate).format('ddd DD MMM YYYY')}\n \n \n \n {weather}\n \n \n \n {condition}\n \n \n \n \n \n
    \n )\n}\n","import styled, { type StyledComponent } from '@emotion/styled'\nimport { Link, type LinkProps } from 'react-router-dom'\n\nexport const AppearanceInheritingLink: StyledComponent = styled(Link)(\n {\n color: 'inherit',\n textDecoration: 'inherit',\n },\n ({ className }) => {\n const cursor = className === 'disabled' ? 'default' : undefined\n return {\n cursor,\n }\n }\n)\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { hexColors } from '@mobi/settings'\nimport { SkyTvBadge } from '@mobi/component-library/Racing/SkyTvIndicator'\nimport { getRaceLink, getPrettyRaceStatus } from '@core/Areas/Racing/helpers'\nimport { RaceListEntry, RaceListResponse } from '@core/Areas/Racing/Hooks/useRaceList/types'\nimport { AppearanceInheritingLink } from '@core/Components/Links'\nimport { colors } from '@core/Settings'\nimport { getVisionChannelForDisplay } from '@core/Areas/SkyVideoPlayer/helpers'\nimport {\n RaceListItemStyled,\n RaceTimeAndNumber,\n RaceStatusNumberStyledProps,\n MeetingStatus,\n RaceTimeStyled,\n RaceListDetails,\n RaceListRaceNameStyled,\n RaceListClassStyled,\n QuaddieChip,\n RaceExtrasIconStyled,\n RaceListResultStyled,\n RaceListResultStatusStyled,\n RaceListClassTypeStyled,\n RaceListResultDistanceStyled as ResultDistance,\n} from '../RaceList.styles'\n\nexport const RaceElements: React.FC<{\n raceData: RaceListResponse\n isThoroughbredRaceInWA: boolean\n}> = ({ raceData, isThoroughbredRaceInWA }) => {\n const { meetingId, meetingDate, meetingCode, races, canShowInducements, fixed } = raceData\n\n const hourMinuteFormat = 'HH:mm'\n\n return (\n <>\n {races.map((race: RaceListResponse['races'][0], index: number) => {\n // Race status can be inaccurate when SP is involved\n if (IsFixedOddsBettingOpen(race)) race.raceStatus = 'Open'\n\n const raceStatusTestingID = 'race-list-race-status-' + (race.raceStatus || '').toLowerCase()\n\n const toUrl = getRaceLink({\n meetingId,\n raceNumber: race.raceNumber,\n meetingDate,\n code: meetingCode,\n meetingSeq: fixed?.competitionSequence,\n product: race.fixed?.product,\n raceSeq: race.fixed?.eventSequence,\n isFOO: !!race.fixed,\n })\n\n return (\n \n \n \n \n {race.raceNumber}\n
    \n\n \n {dayjs(race.advertisedStartTime).format(hourMinuteFormat)}\n \n \n\n \n \n {race.raceName}\n \n \n {race.raceType}\n\n \n {race.quaddie.length > 0 ? Q{race.quaddie[0]} : null}\n {race.quaddie.length > 1 ? Q{race.quaddie[1]} : null}\n\n {race.hasJackpot && (\n \n )}\n\n \n\n {canShowInducements && race.hasSpecials && (\n \n )}\n\n {race.skyTvChannelId != null && (\n \n )}\n \n \n \n \n {race.distance !== 0 ? race.distance + 'm' : ''}\n \n\n \n {getPrettyRaceStatus(race.raceStatus, race.shortResultString)}\n \n \n \n \n \n )\n })}\n \n )\n}\n\nexport const RaceListItemFixedOddsInfo: React.FC<{ race: RaceListResponse['races'][0] }> = ({\n race,\n}) => {\n if (!race.isFixedOddsRace) return null\n\n const isFixedOddsBettingOpen = IsFixedOddsBettingOpen(race)\n\n return isFixedOddsBettingOpen ? (\n \n ) : (\n \n )\n}\n\nconst IsFixedOddsBettingOpen = (race: RaceListEntry) => {\n const isSpAvailable =\n race.isSpAvailable &&\n (race.raceStatus === 'Open' ||\n race.raceStatus === 'Suspended' ||\n race.raceStatus === 'Pending' ||\n race.isFixedOddsRaceSuspended)\n\n const isFixedOddsBettingOpen =\n !race.isFixedOddsRaceClosed &&\n (isSpAvailable ||\n (race.raceStatus === 'Open' &&\n !race.isFixedOddsRaceResulted &&\n !race.isFixedOddsRaceSuspended))\n\n return isFixedOddsBettingOpen\n}\n","import { RaceStatus } from '../Hooks/useRaceList/types'\n\nexport const getPrettyRaceStatus = (raceStatus: RaceStatus, resultString: string): string => {\n switch (raceStatus) {\n case 'Open':\n case 'Pending': // tote\n return ''\n case 'Released':\n case 'Results':\n return `Results (${resultString})`\n case 'Interim':\n return `Interim (${resultString})`\n case 'Closed':\n return 'Closed'\n default:\n return raceStatus\n }\n}\n","import React from 'react'\nimport * as QueryString from 'query-string'\nimport { useParams, useLocation } from 'react-router-dom'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { useFeature } from '@core/Utils/hooks'\nimport { MainContainer } from '@core/Components/Containers'\nimport { isThoroughbredRaceInWA as isThoroughbredMeetingRaceInWA } from '@core/Areas/Racing/helpers/liveVideoFeedHelpers'\nimport { RaceListHeader } from '@core/Components/RaceListHeader'\nimport { RaceListContainerStyled as Container } from './RaceList.styles'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { useRaceList } from '../Racing/Hooks/useRaceList/useRaceList'\nimport { RaceElements } from './Components/RaceElements'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const ToteMeetingsRegex = '^tote/meetings/([^?]+)\\\\?.*date=(.*)?'\nexport const ToteRacesRegex = '^tote/races'\n\ninterface RaceListParams {\n meetingId?: string // tote/meetings/__CRO__?date=2021-01-21\n compSeq?: string // fobracing/foo/races/__912696__/2021-03-19?selectiondate=2021-03-19\n product?: string\n code?: string\n date?: string\n}\n\nexport const RaceListPage: React.FC = () => {\n const { meetingId, date, product, compSeq, geoLocationCode } = useGetParams()\n const { meeting, isLoading, isError } = useRaceList(\n date,\n meetingId != '-' ? meetingId : '',\n compSeq,\n product\n )\n\n const hasNoRaceData = !meeting || !meeting.races || meeting.races.length === 0 || isError\n\n const isRacingWAFeatureActive = useFeature('RACING_WA_VISION_CHANNEL')\n const isThoroughbredRaceInWA =\n isRacingWAFeatureActive && isThoroughbredMeetingRaceInWA(geoLocationCode, meeting?.meetingCode)\n\n return (\n \n \n \n {isLoading ? (\n \n {Array(5)\n .fill(0)\n .map((_, i: number) => (\n
    \n \n
    \n
    \n ))}\n
    \n ) : hasNoRaceData ? (\n \n ) : (\n \n )}\n
    \n
    \n )\n}\n\n// must be able to extract params for:\n// always:\n// tote/meetings/CRO?date=2021-01-21\n// tote/races?date=2021-03-22&meetingId=PRX&product=foo&compSeq=911218\n// fobracing/foo/races/912696/2021-03-19?selectiondate=2021-03-19\nfunction useGetParams() {\n const location = useLocation<{ geoLocationCode: string } | undefined>()\n const params = useParams()\n const search = QueryString.parse(location.search)\n if (search.selectionDate && !search.date) search.date = search.selectionDate\n\n return {\n meetingId: params.meetingId || search.meetingId,\n date: search.date || search.selectiondate,\n product: params.product || search.product,\n compSeq: params.compSeq || search.compSeq,\n code: params.code || search.code,\n geoLocationCode: location.state?.geoLocationCode || '',\n }\n}\n","import React from 'react'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { ButtonWithIcon } from '@mobi/component-library/Common/Buttons'\nimport {\n ContentHeaderLinkStyled,\n ContentHeaderStyled,\n ContentHeaderTitleStyled,\n} from '@core/Components/ContentHeader/ContentHeader.styles'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nexport default RaceEventsHeader\n\ninterface RaceEventsHeaderProps {\n title: string\n backUrl: string\n}\n\nfunction RaceEventsHeader({ title, backUrl }: RaceEventsHeaderProps): JSX.Element {\n return (\n
    \n \n \n \n }\n color='light'\n />\n \n \n \n \n {title}\n \n \n \n \n \n \n
    \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const RaceItemWrapperStyled = styled.div({\n borderBottom: '1px solid #eee',\n ':last-child': {\n borderBottom: 'none',\n },\n})\n\nexport const RaceEventItemContainerStyled = styled.div({\n display: 'flex',\n padding: '0.75rem 1rem',\n})\n\nexport const RaceItemStyled = styled.div({\n display: 'flex',\n flexDirection: 'row',\n})\n\nexport const RaceEventItemDateStyled = styled.div({\n fontSize: '1.2rem',\n color: hexColors.dimGrey,\n})\n\nexport const RaceItemTimerStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n minWidth: '7rem',\n marginRight: '1rem',\n})\n\nexport const RaceEventDetailStyled = styled.div({\n display: 'flex',\n fontSize: '1.4rem',\n flexDirection: 'column',\n})\n\nexport const RaceEventGroupSeperatorStyled = styled.div({\n background: hexColors.gainsboro,\n color: hexColors.black,\n fontSize: '1.2rem',\n margin: '0',\n padding: '0.75rem 1rem',\n})\n\nexport const RaceEventResultStatusStyled = styled.div({\n color: hexColors.cinnabar,\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { RaceEvent } from '../../RaceEventsApis'\nimport {\n RaceItemStyled,\n RaceEventItemContainerStyled,\n RaceEventDetailStyled,\n RaceItemTimerStyled,\n RaceEventItemDateStyled,\n RaceEventResultStatusStyled,\n} from './RaceEventsItem.styles'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\n\nconst enum LocalConstants {\n dateTimeFormat = 'ddd, DD MMM YYYY HH:mm',\n}\n\nexport const RaceEventsItem: React.FC = ({ title, date, product, racingStatus }) => {\n const showLikeChallenge = ['CLG', 'SR'].includes(product.toUpperCase())\n const eventRaceStatus = getRaceStatus(racingStatus)\n\n return (\n \n \n {!showLikeChallenge ? (\n
    \n ) : (\n \n {eventRaceStatus === 'Open' ? (\n \n ) : (\n \n {eventRaceStatus}\n \n )}\n \n )}\n\n \n {title}\n\n {showLikeChallenge ? null : (\n \n {dayjs(date).format(LocalConstants.dateTimeFormat)}\n \n )}\n \n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getRaceStatus(status?: string): string {\n switch (status) {\n case 'Open':\n case 'Closed':\n case 'Suspended':\n case 'Abandoned':\n case 'Interim': // as per Ben's comments.. unlikely to happen in PROD for challenges, but being handled for completeness and backward consistency with MVC page\n return status\n case 'Resulted':\n case 'Settled':\n return 'Resulted'\n default:\n //Scratched is not valid for challenges\n return ''\n }\n}\n","import { get } from '@classic/Foundation/Services/ApiService'\nimport { groupBy } from '@mobi/utils'\nimport dayjs from 'dayjs'\n\nexport interface RaceEventGrouping {\n title: string\n events: RaceEvent[]\n}\n\nexport interface RaceEvent {\n id: string\n title: string\n date: Date\n code: string\n racingStatus?: string\n product: string\n}\n\nexport interface RaceProduct {\n productDetails: unknown // unused?\n code: string // unused?\n raceEvents: RacingEvent[]\n}\n\nexport interface RacingEvent {\n racingProductId: string\n\n eventDescription: string\n eventStartTime: Date\n eventSequence: number\n\n isEnhancedFob: boolean // matched race\n fixtureDate?: string\n fixtureId?: string\n raceNumber?: number\n\n codeFromRequest: string\n codeFromEvent: string\n racingStatus: number\n racingStatusText: string\n\n markets: RacingMarket[]\n isAbandoned: boolean\n isOpen: boolean\n isClosed: boolean\n isSuspended: boolean\n isResulted: boolean\n hasSpecials: boolean\n}\n\ninterface RacingMarket {\n marketName: string\n}\n\ninterface RaceEventPageSpecifics {\n title: string\n getDataFunction: (product: string, code: string, date: string) => Promise\n}\n\nconst pageSpecifics: Record = {\n 'FR/RACES': {\n title: 'FUTURES',\n getDataFunction: getFeatureRaces,\n },\n 'FR/TROTS': {\n title: 'FUTURES',\n getDataFunction: getFeatureRaces,\n },\n 'FR/DOGS': {\n title: 'FUTURES',\n getDataFunction: getFeatureRaces,\n },\n 'SR/RACES': {\n title: 'RACING SPECIALS',\n getDataFunction: getChallengeAndRacingSpecials,\n },\n 'SR/TROTS': {\n title: 'RACING SPECIALS',\n getDataFunction: getChallengeAndRacingSpecials,\n },\n 'SR/DOGS': {\n title: 'RACING SPECIALS',\n getDataFunction: getChallengeAndRacingSpecials,\n },\n 'CLG/RACES': {\n title: 'JOCKEY CHALLENGE',\n getDataFunction: getChallengeAndRacingSpecials,\n },\n 'CLG/DOGS': {\n title: 'GREYS BOX CHALLENGE',\n getDataFunction: getChallengeAndRacingSpecials,\n },\n}\n\nfunction getPageSpecifics(product: string, code: string): RaceEventPageSpecifics | null {\n const key = `${product}/${code}`.toUpperCase()\n return Object.prototype.hasOwnProperty.call(pageSpecifics, key)\n ? (pageSpecifics[key] as RaceEventPageSpecifics)\n : null\n}\n\nexport function getTitleUrl(code: string, date: string): string {\n return `tote?code=${code.toLowerCase()}&date=${date}`\n}\n\nexport function getRaceEventTitle(product: string, code: string): string {\n const specifics = getPageSpecifics(product, code)\n if (specifics == null) return ''\n return specifics.title\n}\n\nexport async function getRaceEventData(\n product: string,\n code: string,\n date: string\n): Promise {\n const specifics = getPageSpecifics(product, code)\n if (specifics == null) return []\n\n try {\n return specifics.getDataFunction(product, code, date)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`Error retrieving race events: e=${e}`)\n throw e\n }\n}\n\nasync function getChallengeAndRacingSpecials(\n product: string,\n code: string,\n date: string\n): Promise {\n const url = `/api/fobracing/GetRaceEvents/${product}/${code}/${dayjs(date).format('YYYY-MM-DD')}`\n\n const raceEvents = await get({ url })\n if (Object.keys(raceEvents).length === 0) {\n throw new Error('no race events returned')\n }\n\n const groupedRaceEvents = groupBy(raceEvents.raceEvents, x =>\n dayjs(x.eventStartTime).format('ddd, DD MMM YYYY')\n )\n\n const model = Object.entries(groupedRaceEvents).map(([eventStartDate, raceEvents]) => {\n const allEvents = raceEvents.map(e => {\n return {\n id: e.eventSequence.toString(),\n date: new Date(e.eventStartTime),\n code: e.codeFromRequest,\n title: e.eventDescription,\n racingStatus: e.racingStatusText,\n product: product,\n topGrouping: e.racingStatusText == 'Open' || e.racingStatusText == 'Suspended',\n }\n })\n\n // re-order the events to show topGrouping on top (fancy that!), whilst preserving the (event time) ordering provided by the backend\n const events = allEvents\n .filter(x => x.topGrouping)\n .concat(allEvents.filter(x => !x.topGrouping))\n\n return {\n title: `${eventStartDate}`,\n events,\n }\n })\n\n return model\n}\n\nasync function getFeatureRaces(\n product: string,\n code: string,\n date: string\n): Promise {\n const url = `/api/fobracing/GetRaceEvents/FR/${code}/${dayjs(date).format('YYYY-MM-DD')}`\n\n const raceEvents = await get({ url })\n if (Object.keys(raceEvents).length === 0) {\n throw new Error('no race events returned')\n }\n\n const groupedRaceEvents = groupBy(raceEvents.raceEvents, x =>\n dayjs(x.eventStartTime).format('YYYY-MM')\n )\n\n const model = Object.entries(groupedRaceEvents).map(([key, value]) => {\n const GroupedDate = dayjs(key).format('MMMM YYYY')\n\n return {\n title: `${GroupedDate}`,\n events: value.map(e => {\n return {\n id: e.eventSequence.toString(),\n date: e.eventStartTime,\n code: e.codeFromRequest,\n title: e.eventDescription,\n product: product,\n }\n }),\n }\n })\n\n return model\n}\n","import styled from '@emotion/styled'\n\nexport const RaceEventsContainerStyled = styled('div')({\n padding: '0rem 0rem 0.5rem',\n})\n","import React, { useState } from 'react'\nimport { useParams, useLocation } from 'react-router-dom'\nimport * as QueryString from 'query-string'\nimport { dayjs } from '@mobi/utils/date'\nimport { MainContainer } from '@core/Components/Containers'\nimport { RaceEventsHeader } from './Components/RaceEventsHeader'\nimport { RaceEventsItem } from './Components/RaceEventsItem'\nimport {\n RaceEvent,\n RaceEventGrouping,\n getRaceEventData,\n getRaceEventTitle,\n getTitleUrl,\n} from './RaceEventsApis'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { RaceEventsContainerStyled } from './RaceEvents.styles'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n RaceEventGroupSeperatorStyled,\n RaceItemWrapperStyled,\n} from './Components/RaceEventsItem/RaceEventsItem.styles'\nimport { AppearanceInheritingLink } from '@core/Components/Links'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\n\n/*\nIn the end this will handle\nFutures\n #fobracing/FR/Races/2021-01-25?selectiondate=2021-01-25\n #fobracing/FR/Trots/2021-01-25?selectiondate=2021-01-25\n #fobracing/FR/Dogs/2021-01-25?selectiondate=2021-01-25\nJockey Challenge\n #fobracing/CLG/Races/2021-01-25?selectiondate=2021-01-25\nFuture Final Field\n #fobracing/fff/races/1332828/2021-01-20?selectiondate=2021-01-25\n #fobracing/fff/trots/1042893/2021-01-23?selectiondate=2021-01-25\nGreys Box Challenge\n #fobracing/CLG/Dogs/2021-01-25?selectiondate=2021-01-25\nRacing Specials\n #fobracing/SR/Races/2021-01-25?selectiondate=2021-01-25\n #fobracing/SR/Trots/2021-01-25?selectiondate=2021-01-25\n #fobracing/SR/Dogs/2021-01-25?selectiondate=2021-01-25\n*/\n\nconst productsAndCodes = 'FR/Races|FR/Trots|FR/Dogs|SR/Races|SR/Trots|SR/Dogs|CLG/Races|CLG/Dogs'\nconst propositionsProductsAndCodes =\n `${productsAndCodes}|FFF/Races|FFF/Trots|FFF/Dogs|FOO/Races|FOO/Trots|FOO/Dogs` as const\n\nexport const RaceEventsRegex =\n `^fobracing/(${productsAndCodes})(/[^\\\\?]+)?\\\\?selectiondate=(.*)$` as const\nexport const RaceEventsPropositionsRegex =\n `^fobracing/propositions/(${propositionsProductsAndCodes})(/[^\\\\?]+)?\\\\?selectiondate=(.*)$` as const\n\nconst noDataFoundDateTimeFormat = 'ddd, DD MMM YYYY'\n\ninterface RaceEventsParams {\n code: string\n date: string\n product: string\n}\n\nexport const RaceEvents = (): JSX.Element | null => {\n const [data, setData] = useState([])\n const [isLoading, setIsLoading] = useState(true)\n const { product, code, date } = useParams()\n\n /* Remove once race event item proposition page is converted to react\n use query date for link as the useParam date\n is not properly filled in from the url when u hit back from race events item proposition. */\n const { selectiondate } = QueryString.parse(useLocation().search)\n const searchDate = date ?? selectiondate\n const pageTitle = getRaceEventTitle(product, code)\n const titleUrl = getTitleUrl(code, selectiondate)\n\n React.useEffect(() => {\n getRaceEventData(product, code, searchDate)\n .then(data => {\n setData(data)\n })\n .finally(() => {\n setIsLoading(false)\n })\n }, [product, code, searchDate])\n\n return (\n \n \n \n {getContent(isLoading, product, code, searchDate, data)}\n \n \n )\n}\n\nfunction getContent(\n isLoading: boolean,\n product: string,\n code: string,\n date: string,\n data: RaceEventGrouping[]\n): JSX.Element[] | JSX.Element {\n if (isLoading) {\n return getShimmerElements()\n }\n if (!data || data.length === 0) {\n return getNoDataFound(code, date)\n }\n\n return data.map((grouping: RaceEventGrouping) => (\n \n \n {grouping.title}\n \n {grouping.events.map((item: RaceEvent) => createRaceEventItem(item, product, date))}\n \n ))\n}\n\nfunction createRaceEventItem(item: RaceEvent, product: string, date: string): JSX.Element {\n return (\n \n \n \n \n \n )\n}\n\nfunction getShimmerElements(): JSX.Element[] {\n return Array(3)\n .fill(0)\n .map((_, i: number) => (\n \n \n \n \n
    \n
    \n ))\n}\n\nfunction getNoDataFound(code: string, date: string): JSX.Element {\n const dateText = dayjs(Date.parse(date)).format(noDataFoundDateTimeFormat)\n return (\n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const WithdrawContainerStyled = styled('div')({\n padding: '2rem',\n fontSize: '1.4rem',\n})\n\nexport const WithdrawDetailStyled = styled('div')({\n position: 'relative',\n fontSize: 'inherit',\n padding: '0.4em 0',\n listStyle: 'none',\n display: 'flex',\n justifyContent: 'space-between',\n borderBottom: `1px solid ${hexColors.veryLightGrey}`,\n})\n\nexport const WithdrawDetailNoBorderStyled = styled(WithdrawDetailStyled)({\n borderBottom: 'unset',\n})\n\nexport const FormContainerStyled = styled(WithdrawDetailStyled)({\n display: 'block',\n borderBottom: 'unset',\n paddingTop: '0.8em',\n})\n\nexport const SuccessMessageStyled = styled('div')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n})\n\nexport const BankDetailContainerStyled = styled('ul')({\n listStyleType: 'unset',\n margin: 0,\n padding: 0,\n})\n\nexport const BankDetailItemStyled = styled('li')({\n fontSize: 'inherit',\n textAlign: 'right',\n})\n\nexport const WithdrawLabelStyled = styled('span')({\n color: hexColors.dimGrey,\n fontSize: '1.2rem',\n})\n\nexport const ButtonContainerStyled = styled('div')({\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n\n '& > button': {\n margin: '0 0.5rem',\n\n ':first-of-type': { marginLeft: 0 },\n ':last-of-type': { marginRight: 0 },\n },\n})\n","import { get, post } from '@classic/Foundation/Services/ApiService'\nimport type {\n WithdrawableResponse,\n WithdrawResponse,\n} from '@mobi/account/Areas/Withdraw/Utils/types'\n\nexport const getWithdrawable = async (): Promise => {\n return await get({ url: '/api/account/withdrawable' })\n}\n\ninterface WithdrawRequest {\n amount: number\n}\n\nexport const postWithdraw = async (amount: number): Promise => {\n const request: WithdrawRequest = {\n amount: amount,\n }\n\n return await post({\n url: '/api/account/withdraw',\n body: request,\n })\n}\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Spinner } from '@mobi/component-library/Common/Spinner/Spinner'\n\nexport const WithdrawLoading = (): JSX.Element => {\n return (\n \n \n \n \n )\n}\n","export const navigateToAccount = (): void => {\n window.location.hash = '#account'\n}\n","import { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport const trackWithdrawalSuccess = (amount: number) =>\n trackEvent('withdrawal_success', { amount })\n\nexport const trackWithdrawalError = (message?: string) =>\n trackEvent('withdrawal_error', { message })\n\nexport const trackWithdrawalCancel = (hoursDiff: number) =>\n trackEvent('withdrawal_cancel', { hoursDiff })\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { WithdrawContainerStyled } from './Withdraw.styles'\nimport { navigateToAccount } from './helpers/navigaton'\nimport { trackWithdrawalError } from './analytics'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2/'\n\nexport const WithdrawUnavailable = (): JSX.Element => {\n React.useEffect(() => {\n trackWithdrawalError('Withdraw Not Available')\n }, [])\n\n return (\n \n \n \n \n Withdrawals are currently unavailable. Please try again later or contact Customer\n Service on \n \n }\n noticeBoxType={NoticeBoxTypes.Warning}\n />\n \n Back to Account\n \n \n \n )\n}\n","import React from 'react'\n\nimport { toMoney } from '@mobi/utils/money'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Money } from '@core/Components/Text/Money'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nimport {\n WithdrawContainerStyled,\n WithdrawDetailStyled,\n SuccessMessageStyled,\n} from './Withdraw.styles'\nimport type { WithdrawResponse } from '@mobi/account/Areas/Withdraw/Utils/types'\nimport { navigateToAccount } from './helpers/navigaton'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { useFeature } from '@core/Utils/hooks'\nimport { trackWithdrawalSuccess } from './analytics'\n\ninterface WithdrawSuccessProps {\n success: WithdrawResponse | undefined\n}\n\nexport const WithdrawSuccess: React.FC = ({ success }) => {\n const isRateMyAppEnabled = useFeature('RATE_MY_APP')\n\n React.useEffect(() => {\n document.body.scrollIntoView()\n }, [])\n\n React.useEffect(() => {\n if (isReactNativeApp && isRateMyAppEnabled) {\n sendToNative('RATE_MY_APP')\n }\n }, [isRateMyAppEnabled])\n\n React.useEffect(() => {\n if (success?.isSuccessful) {\n trackWithdrawalSuccess(success.withdrawalAmount)\n }\n }, [success])\n\n if (!success?.isSuccessful) {\n return (\n \n \n \n Your withdrawal was successful}\n noticeBoxType={NoticeBoxTypes.Success}\n testId='withdrawal-success-message'\n />\n \n Back to Account\n \n \n \n )\n }\n\n return (\n \n \n \n \n Your withdrawal of {toMoney(success.withdrawalAmount)} was successful\n \n }\n noticeBoxType={NoticeBoxTypes.Success}\n testId='withdrawal-success-message'\n />\n \n Account Number\n {success.accountNumber}\n \n \n Account Balance\n \n \n \n \n \n Transaction Reference\n {success.transactionNumber}\n \n \n Back to Account\n \n \n \n )\n}\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nimport { WithdrawContainerStyled } from './Withdraw.styles'\nimport { navigateToAccount } from './helpers/navigaton'\nimport { trackWithdrawalError } from './analytics'\n\nexport const WithdrawFailure = (): JSX.Element => {\n React.useEffect(() => {\n trackWithdrawalError('Withdraw Error')\n }, [])\n\n return (\n \n \n \n \n \n Back to Account\n \n \n \n )\n}\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport type {\n WithdrawableResponse,\n WithdrawResponse,\n} from '@mobi/account/Areas/Withdraw/Utils/types'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Money } from '@core/Components/Text/Money'\nimport { toMoney } from '@mobi/utils/money'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { CurrencyInputField } from '@mobi/component-library/Common/Input'\nimport { UpdateAccountBalance } from '@core/State/UserAccount/userAccountDriver'\nimport { useTrackOptimoveWithdrawalPercentage } from '@core/Services/Optimove/hooks/useTrackOptimoveWithdrawalPercentage'\nimport {\n WithdrawContainerStyled,\n WithdrawDetailStyled,\n BankDetailItemStyled,\n BankDetailContainerStyled,\n WithdrawLabelStyled,\n FormContainerStyled,\n ButtonContainerStyled,\n WithdrawDetailNoBorderStyled,\n} from './Withdraw.styles'\nimport { postWithdraw, getWithdrawable } from './WithdrawApi'\nimport { WithdrawLoading } from './WithdrawLoading'\nimport { navigateToAccount } from './helpers/navigaton'\nimport { WithdrawUnavailable } from './WithdrawUnavailable'\nimport { WithdrawSuccess } from './WithdrawSuccess'\nimport { WithdrawFailure } from './WithdrawFailure'\nimport { BankAccountEditRoute } from '@core/Areas/BankAccount/constants'\nimport { useFeature } from '@core/Utils/hooks'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\n\nconst enum LocalConstants {\n MinAmount = 0.01,\n}\n\nexport const WithdrawPage = (): JSX.Element | null => {\n const [data, setData] = React.useState()\n\n const [submitEnabled, setSubmitEnabled] = React.useState(false)\n const [amountError, setAmountError] = React.useState(false)\n const [withdrawalAmount, setWithdrawalAmount] = React.useState()\n const [withdrawResponse, setWithdrawResponse] = React.useState()\n const [isSubmitted, setIsSubmitted] = React.useState(false)\n\n const isNewWithdrawFeatureActive = useFeature('WITHDRAW_UPLIFT')\n\n useTrackOptimoveWithdrawalPercentage(withdrawResponse)\n\n const fetchWithdrawable = () =>\n getWithdrawable()\n .then(response => setData(response))\n .catch(() => setData(null))\n\n React.useEffect(() => {\n if (data === undefined) fetchWithdrawable()\n }, [data])\n\n if (data === null) return null\n\n if (data === undefined || isSubmitted)\n return isNewWithdrawFeatureActive ? : \n\n if (!data.isCRMAvailable) return \n\n if (withdrawResponse !== undefined) {\n if (withdrawResponse) {\n return \n } else {\n return \n }\n }\n\n return (\n \n \n \n \n Account Number\n {data.accountNumber}\n \n \n Available Balance\n \n \n \n \n \n Current Balance\n \n \n \n \n \n Credit Account\n \n \n {data.bankName}\n {data.bankBranchName}\n {data.bankBsb}\n {data.bankAccountNumber}\n {data.bankAccountName}\n \n \n \n\n {!data.isBankAccountRegistered && }\n\n {data.isBankAccountRegistered && (\n \n {\n event.preventDefault()\n if (!submitEnabled) {\n return\n }\n\n if (withdrawalAmount && !amountError) {\n setIsSubmitted(true)\n setSubmitEnabled(false)\n await postWithdraw(withdrawalAmount)\n .then(response => {\n if (response.isSuccessful) {\n UpdateAccountBalance({ balance: response.balance })\n setWithdrawResponse(response)\n } else {\n setWithdrawResponse(null)\n }\n })\n .catch(() => {\n setWithdrawResponse(null)\n })\n .finally(() => {\n setSubmitEnabled(true)\n setIsSubmitted(false)\n })\n }\n }}\n data-tid-withdraw-form=''\n >\n ) => {\n const response = onAmountChange(\n e,\n LocalConstants.MinAmount,\n data.withdrawableBalance\n )\n setAmountError(response.error)\n setSubmitEnabled(response.enableSubmit)\n if (response.amount) {\n setWithdrawalAmount(response.amount)\n }\n }}\n errorMessage={amountError}\n />\n \n \n Cancel\n \n\n void 0}\n color='primary'\n testId='withdraw-btn'\n disabled={!submitEnabled}\n >\n Withdraw\n \n \n \n \n )}\n \n \n )\n}\n\nconst BankAccountRegistration = (): JSX.Element => {\n const history = useHistory()\n\n return (\n <>\n \n history.push(`/${BankAccountEditRoute}?fromView=Withdraw`)}>\n Register Bank Account\n \n \n )\n}\n\ninterface AmountChangeResponse {\n amount?: number\n error: string | boolean\n enableSubmit: boolean\n}\n\nconst onAmountChange = (\n event: React.FormEvent,\n minAmount: number,\n maxAmount: number\n): AmountChangeResponse => {\n const value = event.currentTarget.value.trim()\n\n const defaultResponse: AmountChangeResponse = {\n error: false,\n enableSubmit: false,\n }\n\n if (value.length === 0) {\n return defaultResponse\n }\n\n const amount = Number(value)\n if (!Number.isFinite(amount)) {\n return defaultResponse\n }\n\n if (amount < minAmount) {\n return defaultResponse\n }\n\n if (amount > maxAmount) {\n return {\n error: `Value must be less than or equal to ${toMoney(maxAmount)}`,\n enableSubmit: false,\n }\n }\n\n if (!new RegExp(/^\\d*(\\.)*(\\d{0,2})$/).test(value)) {\n return {\n error: 'Value must be to 2 decimal places',\n enableSubmit: false,\n }\n }\n\n return {\n amount: amount,\n error: false,\n enableSubmit: true,\n }\n}\n","import React from 'react'\nimport type { WithdrawResponse } from '@mobi/account/Areas/Withdraw/Utils/types'\nimport { trackOptimoveEvent } from '../optimove'\n\nexport const useTrackOptimoveWithdrawalPercentage = (\n withdrawalResponse?: WithdrawResponse | null\n) => {\n const hasTrackedSuccessfulWithdrawalRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!withdrawalResponse?.isSuccessful || hasTrackedSuccessfulWithdrawalRef.current) return\n const { balance, withdrawalAmount } = withdrawalResponse\n const fraction = withdrawalAmount / (balance + withdrawalAmount)\n const percentage = Math.floor(fraction * 100)\n\n trackOptimoveEvent({ eventName: 'withdrawal', data: { percentage } })\n hasTrackedSuccessfulWithdrawalRef.current = true\n }, [withdrawalResponse])\n}\n","import React, { lazy, Suspense } from 'react'\nimport { useFeature } from '@core/Utils/hooks'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport {\n state$ as userAccountState$,\n UpdateAccountBalance,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { WithdrawPage } from './WithdrawPage'\nimport { useObservableProperties } from '@core/Utils/hooks'\n\nconst App = lazy(() => import('@mobi/account/Areas/Withdraw/Components/App'))\n\nexport const Withdraw = (): JSX.Element | null => {\n const { accountNumber } = useObservableProperties(userAccountState$, ['accountNumber'], {\n accountNumber: null,\n })\n const isNewWithdrawFeatureActive = useFeature('WITHDRAW_UPLIFT')\n\n if (isNewWithdrawFeatureActive && accountNumber !== null) {\n return (\n }>\n \n UpdateAccountBalance({ balance: withdrawResponse.balance })\n }\n />\n \n )\n }\n\n return \n}\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { Spinner } from '@mobi/component-library/Common/Spinner/Spinner'\n\nexport const Loading = (): JSX.Element => (\n \n \n \n \n)\n\nexport const Error = (): JSX.Element => (\n \n \n Unable to load bank details at the moment. Please try again later.\n \n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const BankAccountContainerStyled = styled('section')({\n fontSize: '1.2rem',\n padding: '2rem',\n})\n\nexport const BankNameStyled = styled('p')({\n fontSize: '2.2rem',\n margin: 0,\n})\n\nexport const BankBranchStyled = styled('p')({\n fontSize: '1.6rem',\n margin: '0.5rem 0',\n})\n\nexport const BankBranchEmptyStyled = styled('p')({\n fontSize: '1.4rem',\n margin: '0.5rem 1',\n})\n\nexport const BankDetailDescriptionTermStyled = styled('dt')({\n borderTop: `1px solid ${hexColors.veryLightGrey}`,\n padding: '1rem 0 0 0',\n color: hexColors.dimGrey,\n width: '100%',\n float: 'none',\n})\n\nexport const BankDetailDescriptionDetailsStyled = styled('dd')({\n fontSize: '1.4rem',\n margin: 0,\n padding: '0.5rem 0 0.75rem 0',\n width: '100%',\n float: 'none',\n})\n","import { get, post } from '@classic/Foundation/Services/ApiService'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { UseQueryResult, useQuery } from 'react-query'\n\nexport interface BankAccountResponse {\n bankName: string\n branchName: string\n bsb: string\n accountNumber: string\n accountName: string\n accountHolderSurname: string\n isPendingWithdrawals: boolean\n}\n\nexport const useBankDetailsQuery = (): UseQueryResult => {\n return useQuery(\n queryKeys.getBankAccount,\n () => get({ url: 'api/account/bankaccount' }),\n {\n enabled: true,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchIntervalInBackground: false,\n cacheTime: 0,\n staleTime: 2 * 1000,\n }\n )\n}\n\nexport const isBankAccountRegistered = (\n data: BankAccountResponse | undefined\n): data is BankAccountResponse => {\n return data !== undefined && data?.bankName?.trim().length > 0\n}\n\nexport const useBankDetailsFromBsbQuery = (\n bsb: string\n): UseQueryResult => {\n return useQuery(\n `getBankAccountFromBsb-${bsb}`,\n () => get({ url: `/api/account/getbankdetailsfrombsb/${bsb}` }),\n {\n enabled: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchIntervalInBackground: false,\n cacheTime: 0,\n staleTime: 2 * 1000,\n }\n )\n}\n\nexport const isBankDetailsFromBsbFound = (\n data: BankDetailsFromBsbResponse | undefined\n): data is BankDetailsFromBsbResponse => {\n return data !== undefined && data.isSuccessful && data.bankName.trim().length > 0\n}\n\ninterface UpdateBankAccountRequest {\n bankName: string\n branchName: string\n bsb: string\n accountNumber: string\n accountName: string\n}\n\ninterface UpdateBankAccountResponse {\n isSuccessful: boolean\n}\n\nexport const postUpdateBankAccount = async (\n bankAccount: UpdateBankAccountRequest\n): Promise => {\n return await post({\n url: '/api/account/updatebankaccount',\n body: bankAccount,\n })\n}\n\nexport interface BankDetailsFromBsbResponse {\n isSuccessful: boolean\n bsb: string\n bankName: string\n branchName: string\n}\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\nimport { Loading, Error } from './BankAccountComponents'\nimport {\n BankAccountContainerStyled,\n BankDetailDescriptionTermStyled,\n BankDetailDescriptionDetailsStyled,\n BankNameStyled,\n BankBranchStyled,\n BankBranchEmptyStyled,\n} from './BankAccount.styles'\nimport { useBankDetailsQuery, isBankAccountRegistered } from './BankAccountApi'\nimport { BankAccountEditRoute } from './constants'\n\nexport const BankAccount = (): JSX.Element | null => {\n const history = useHistory()\n const { isLoading, isError, data: bankAccount } = useBankDetailsQuery()\n\n if (isLoading) {\n return \n }\n\n if (isError) {\n return \n }\n\n return (\n \n \n \n {isBankAccountRegistered(bankAccount) && (\n {bankAccount.bankName}\n )}\n {!isBankAccountRegistered(bankAccount) ? (\n Bank account currently not registered\n ) : (\n <>\n {bankAccount.branchName}\n\n
    \n BSB\n \n {bankAccount.bsb}\n \n Account Name\n \n {bankAccount.accountName}\n \n Account Number\n \n {bankAccount.accountNumber}\n \n
    \n \n )}\n\n history.push(`/${BankAccountEditRoute}?fromView=BankAccount`)}\n >\n {isBankAccountRegistered(bankAccount) ? 'Edit Details' : 'Register'}\n \n
    \n
    \n )\n}\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nimport { Loading, Error } from './BankAccountComponents'\nimport { BankAccountContainerStyled, BankBranchStyled, BankNameStyled } from './BankAccount.styles'\nimport {\n isBankAccountRegistered,\n useBankDetailsQuery,\n postUpdateBankAccount,\n BankAccountResponse,\n useBankDetailsFromBsbQuery,\n isBankDetailsFromBsbFound,\n} from './BankAccountApi'\nimport { BankAccountRoute } from './constants'\nimport { usePrevious } from '@core/Utils/hooks/usePrevious'\nimport {\n routes,\n isValidBsb,\n formatBsb,\n isValidAccountName,\n isAccountNameIncludingSurname,\n isValidAccountNumber,\n} from '@mobi/account/Areas/Withdraw/Utils'\n\ntype EntryFormBankDetails = Pick\ntype ReadOnlyFormBankDetails = Pick\n\nexport const BankAccountEdit = (): JSX.Element | null => {\n const [readOnlyForm, setReadOnlyForm] = React.useState({\n bankName: '',\n branchName: '',\n })\n\n const [entryForm, setEntryForm] = React.useState({\n bsb: '',\n accountName: '',\n accountNumber: '',\n })\n\n const [isShowErrorOnSave, setIsShowErrorOnSave] = React.useState(false)\n const [errorBsb, setErrorBsb] = React.useState(false)\n const [errorAccountName, setErrorAccountName] = React.useState(false)\n const [errorAccountNumber, setErrorAccountNumber] = React.useState(false)\n const [isSubmitted, setIsSubmitted] = React.useState(false)\n\n const history = useHistory()\n\n const {\n isLoading: bankDetailsIsLoading,\n isError: bankDetailsIsError,\n data: bankDetailsData,\n } = useBankDetailsQuery()\n\n const {\n data: bankDetailsFromBsbData,\n refetch: bankDetailsFromBsbRefetch,\n isFetched: bankDetailsFromBsbIsFetched,\n } = useBankDetailsFromBsbQuery(entryForm.bsb)\n\n const previousEntryFormBsb = usePrevious(entryForm.bsb)\n\n const isBsbRefetch =\n entryForm.bsb !== '' && previousEntryFormBsb !== entryForm.bsb && isValidBsb(entryForm.bsb)\n\n React.useEffect(() => {\n if (isBankAccountRegistered(bankDetailsData) && bankDetailsData !== undefined) {\n setReadOnlyForm({\n bankName: bankDetailsData.bankName,\n branchName: bankDetailsData.branchName,\n })\n\n setEntryForm({\n bsb: bankDetailsData.bsb,\n accountName: bankDetailsData.accountName,\n accountNumber: bankDetailsData.accountNumber,\n })\n }\n }, [bankDetailsData])\n\n React.useEffect(() => {\n if (!bankDetailsFromBsbIsFetched) {\n return\n }\n\n if (isBankDetailsFromBsbFound(bankDetailsFromBsbData) && bankDetailsFromBsbData.isSuccessful) {\n setReadOnlyForm({\n bankName: bankDetailsFromBsbData.bankName,\n branchName: bankDetailsFromBsbData.branchName,\n })\n } else {\n setReadOnlyForm({ bankName: '-', branchName: '-' })\n setErrorBsb('BSB not found')\n }\n }, [bankDetailsFromBsbData, bankDetailsFromBsbIsFetched])\n\n React.useEffect(() => {\n if (isBsbRefetch) {\n bankDetailsFromBsbRefetch()\n }\n }, [isBsbRefetch, bankDetailsFromBsbRefetch])\n\n const isSubmitDisabled =\n !!errorBsb ||\n !!errorAccountName ||\n !!errorAccountNumber ||\n entryForm.bsb.trim().length === 0 ||\n entryForm.accountNumber.trim().length === 0 ||\n entryForm.accountName.trim().length === 0 ||\n isSubmitted\n\n const submitForm = (event: React.FormEvent): void => {\n event.preventDefault()\n if (isSubmitDisabled) {\n return\n }\n\n setIsSubmitted(true)\n\n postUpdateBankAccount({\n accountName: entryForm.accountName,\n accountNumber: entryForm.accountNumber,\n bsb: entryForm.bsb,\n bankName: readOnlyForm.bankName,\n branchName: readOnlyForm.branchName,\n })\n .then(response => {\n if (response.isSuccessful) {\n history.push(getSuccessfulBackRoute(history.location.search))\n } else {\n setIsShowErrorOnSave(true)\n setIsSubmitted(false)\n }\n })\n .catch(() => {\n setIsShowErrorOnSave(true)\n setIsSubmitted(false)\n })\n }\n\n if (bankDetailsIsLoading || isSubmitted) {\n return \n }\n\n if (bankDetailsIsError) {\n return \n }\n\n return (\n \n \n {isShowErrorOnSave && (\n Unable to save bank details. Please try again later.\n )}\n \n \n {readOnlyForm.bankName}\n {readOnlyForm.branchName}\n\n ) => {\n const inputValue = e.currentTarget.value\n const formattedBsb = formatBsb(inputValue)\n setEntryForm({ ...entryForm, bsb: formattedBsb })\n setErrorBsb(isValidBsb(inputValue) ? false : 'BSB format is 123-456')\n }}\n errorMessage={errorBsb}\n />\n\n ) => {\n const value = e.currentTarget.value\n setEntryForm({ ...entryForm, accountName: value })\n setErrorAccountName(\n isValidAccountName(value) &&\n isAccountNameIncludingSurname(value, bankDetailsData?.accountHolderSurname || '')\n ? false\n : 'Invalid Account Name'\n )\n }}\n errorMessage={errorAccountName}\n />\n ) => {\n const value = e.currentTarget.value\n setEntryForm({ ...entryForm, accountNumber: value })\n setErrorAccountNumber(isValidAccountNumber(value) ? false : 'Invalid Account Number')\n }}\n errorMessage={errorAccountNumber}\n />\n\n {bankDetailsData?.isPendingWithdrawals && (\n \n )}\n\n \n \n \n history.goBack()}\n color='secondary'\n testId='cancel-update-bank-btn'\n >\n Cancel\n \n \n \n void 0}\n color='primary'\n testId='update-bank-btn'\n disabled={isSubmitDisabled}\n >\n Save\n \n \n \n \n \n \n \n )\n}\n\nconst getSuccessfulBackRoute = (locationSearch: string) => {\n const urlParams = new URLSearchParams(locationSearch)\n const isPreviousViewWithdrawal = urlParams.get('fromView') === 'Withdraw'\n const route = isPreviousViewWithdrawal ? routes.home : BankAccountRoute\n return `/${route}`\n}\n","import styled from '@emotion/styled'\n\nexport const FeedbackFormStyled = styled('div')({\n margin: '0.5rem 1rem',\n})\n","import { post, get } from '@classic/Foundation/Services/ApiService'\nimport { BetAccountHolder, PostFeedbackDataToApiPayload } from '@mobi/api-types'\n\nexport function postFeedbackDataToApi(body: PostFeedbackDataToApiPayload) {\n return post({ url: '/api/feedback/submit', body })\n}\n\nexport function getFeedbackSubjectsFromApi(): Promise {\n return get({ url: '/api/feedback/subjects' })\n}\n\nexport function getAccountContactDetails(): Promise {\n return get({ url: '/$_/api/contactDetails' })\n}\n","import { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { useQuery } from 'react-query'\nimport { getAccountContactDetails, getFeedbackSubjectsFromApi } from './api'\n\nexport const useFeedbackFormQuery = (accountNumber: number) => {\n const {\n data: subjects,\n isError: isErrorSubjectsApi,\n isLoading: isLoadingSubjects,\n } = useQuery(queryKeys.feedBackSubjects, getFeedbackSubjectsFromApi, {\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n })\n\n const {\n data: contactDetails,\n isError: isErrorContactDetails,\n isLoading: isLoadingContactDetails,\n } = useQuery([queryKeys.feedBackContacts, accountNumber], getAccountContactDetails, {\n refetchOnWindowFocus: false,\n staleTime: 1_000 * 60 * 60, // 1hr\n })\n\n const hasApiErrored = isErrorContactDetails || isErrorSubjectsApi\n const shouldDisableSubmission =\n !contactDetails || hasApiErrored || isLoadingContactDetails || isLoadingSubjects\n\n return {\n subjects,\n contactDetails,\n shouldDisableSubmission,\n hasApiErrored,\n }\n}\n","import { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { BetAccountHolder, PostFeedbackDataToApiPayload } from '@mobi/api-types'\nimport { postFeedbackDataToApi } from './api'\n\nexport const handleFormSubmission = async ({\n message,\n subject,\n setMessage,\n setIsBusy,\n accountNumber,\n contactDetails,\n}: {\n message: string\n subject: string\n setMessage: React.Dispatch>\n setIsBusy: React.Dispatch>\n accountNumber: number\n contactDetails?: BetAccountHolder\n}) => {\n try {\n setIsBusy(true)\n if (!contactDetails) throw Error()\n\n await postFeedbackDataToApi(\n mapFormValuesToApiData({ message, subject, accountNumber, contactDetails })\n )\n\n setMessage('')\n setIsBusy(false)\n RegisterToast({\n type: 'default',\n position: 'bottom',\n message: 'Feedback Sent',\n })\n } catch {\n setIsBusy(false)\n RegisterToast({\n type: 'error',\n position: 'bottom',\n message: 'Sorry, Unable to Send',\n })\n }\n}\n\n// Helpers\n\nfunction mapFormValuesToApiData({\n message,\n subject,\n accountNumber,\n contactDetails,\n}: {\n message: string\n subject: string\n accountNumber: number\n contactDetails: BetAccountHolder\n}): PostFeedbackDataToApiPayload {\n if (!contactDetails) throw Error()\n\n return {\n Account: accountNumber.toString(),\n Email: contactDetails.Contact?.Email,\n FirstName: contactDetails.NameDetails.FirstName,\n Message: message,\n Phone: contactDetails.Contact?.Mobile?.PhoneNumber,\n Subject: subject,\n Surname: contactDetails.NameDetails.Surname,\n ScreenHeight: 0,\n ScreenWidth: 0,\n PixelDepth: 0,\n }\n}\n","import React from 'react'\nimport { SelectField } from '@mobi/component-library/Common/Select'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { FeedbackFormStyled } from './FeedbackForm.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { useFeedbackFormQuery } from './helpers/useFeedbackFormQuery'\nimport { handleFormSubmission } from './helpers/handleFormSubmission'\nimport { TextArea } from '@core/Components/Inputs'\n\nexport const FeedbackForm: React.FC<{ accountNumber: number }> = ({ accountNumber }) => {\n const [isBusy, setIsBusy] = React.useState(false)\n const [subject, setSubject] = React.useState('')\n const [message, setMessage] = React.useState('')\n\n const { hasApiErrored, shouldDisableSubmission, subjects, contactDetails } =\n useFeedbackFormQuery(accountNumber)\n\n if (hasApiErrored || (!shouldDisableSubmission && !subjects)) {\n return (\n \n )\n }\n\n const subjectValue = subject || (subjects ? subjects[0] : '')\n const errorMessage =\n message.length > 1 && message.length < 20 ? 'Message must contain at least 20 characters' : ''\n\n const handleSubmit = () => {\n if (!message || message.length < 20) return\n handleFormSubmission({\n message,\n subject: subjectValue,\n accountNumber,\n contactDetails,\n setMessage,\n setIsBusy,\n })\n }\n\n return (\n \n setSubject(e.target.value)}\n required\n options={subjects}\n data-testid='feedback-subjects'\n />\n\n setMessage(e.target.value)}\n value={message}\n required\n testId='feedback-message'\n />\n\n \n Send Message\n \n \n )\n}\n","import React from 'react'\nimport { callCenterPhoneNumber } from '@mobi/utils'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { List, ListItem, ListLink } from '@core/Components/List'\nimport { FeedbackForm } from './Components/FeedbackForm/FeedbackForm'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\n\nexport const ContactUsPage = (): JSX.Element | null => {\n const { accountNumber, isLoggedIn } = useObservableImmutable(userAccountState$, [\n 'accountNumber',\n 'isLoggedIn',\n ])\n const shouldEnableFeedbackForm = isLoggedIn && !!accountNumber\n\n return (\n \n \n

    Customer Service

    \n \n \n 1300 36 36 88\n \n \n\n

    1300BETLIVE

    \n \n \n 1300 23 85 48\n \n \n\n

    Betting

    \n \n \n 13 23 69\n \n \n\n

    Email

    \n \n \n ContactUs@tabtouch.com.au\n \n \n\n {shouldEnableFeedbackForm && (\n <>\n

    Feedback

    \n \n \n )}\n
    \n )\n}\n","import styled from '@emotion/styled'\nimport { Icon, type IconProps } from '@mobi/component-library/Common/Icon'\nimport { buttonColors } from '@mobi/component-library/Common/Buttons'\nimport { hexColors } from '@mobi/settings'\n\nexport const IconStyled = styled(Icon)({\n margin: '0 1rem 0 0',\n zIndex: 1,\n width: '4rem',\n position: 'relative',\n})\n\nexport const IconContainer = styled.div<{ isSuperPick: boolean }>(\n {\n display: 'flex',\n },\n ({ isSuperPick }) => ({\n marginRight: isSuperPick ? '-1.7rem' : undefined,\n })\n)\n\nexport const IconBackground = styled.div({\n backgroundColor: '#fff',\n position: 'relative',\n left: '-3.8rem',\n zIndex: 0,\n borderRadius: '4px',\n height: '2.4rem',\n width: '1.7rem',\n top: '0.8rem',\n})\n\nexport const SpecialTileContainer = styled('title')<{ isSuperPick: boolean }>(\n {\n minHeight: '20rem',\n margin: '1rem',\n color: hexColors.white,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n ({ isSuperPick }) => ({\n backgroundColor: isSuperPick ? hexColors.nightRider : hexColors.blueDiamond,\n })\n)\n\nexport const TitleContainer = styled.div({\n minHeight: '5rem',\n borderBottom: `1px solid ${hexColors.dimGrey}`,\n display: 'flex',\n alignItems: 'center',\n padding: '1rem',\n})\n\nexport const TileTitle = styled.div({\n fontSize: '1.3rem',\n fontWeight: 'bold',\n})\n\nexport const DescriptionStyled = styled.div({\n fontSize: '1.2rem',\n padding: '1rem',\n})\n\nexport const ButtonsContainerStyled = styled.div<{ isSuperPick: boolean }>(\n {\n padding: '0.5rem',\n },\n ({ isSuperPick }) => ({\n backgroundColor: isSuperPick ? undefined : hexColors.vividViolet,\n })\n)\nexport const ButtonWrapperStyled = styled.div({\n display: 'flex',\n})\n\nexport const PrimaryButtonStyled = styled.div<{ isSuperPick?: boolean }>(\n {\n height: '4rem',\n margin: '0.5rem',\n color: buttonColors.primary.text,\n fontWeight: 'bold',\n fontSize: '1.3rem',\n textAlign: 'center',\n lineHeight: '4rem',\n flexGrow: 1,\n },\n ({ isSuperPick }) => ({\n backgroundColor: isSuperPick ? hexColors.orange : buttonColors.primary.background,\n color: isSuperPick ? hexColors.black : buttonColors.primary.text,\n })\n)\n\nexport const ButtonStyled = styled(PrimaryButtonStyled)({\n border: `1px ${buttonColors.primary.text} solid`,\n backgroundColor: hexColors.vividViolet,\n boxSizing: 'border-box',\n})\n\nexport const TermsAndConditionsStyled = styled.div<{ isExpanded: boolean }>(\n {\n margin: '-1rem 1rem 0',\n backgroundColor: hexColors.whiteSmoke,\n color: hexColors.black,\n overflow: 'hidden',\n transition: 'max-height 0.25s ease-in-out',\n },\n ({ isExpanded }) => ({\n maxHeight: isExpanded ? 'auto' : 0,\n })\n)\n\nexport const TermsAndConditionsHeaderStyled = styled('h5')({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n padding: '1rem 0',\n textAlign: 'left',\n})\n\nexport const TermsAndConditionsTextStyled = styled.div({\n fontSize: '1.2rem',\n padding: '0 1rem 1rem',\n})\n","import { SpecialTileProp } from './SpecialTile'\n\nexport const build = (special: SpecialTileProp): string | null => {\n let url = null\n if (special && special.betNowNavigator) {\n const navigator = special.betNowNavigator\n if (navigator.multiEvent && navigator.multiEvent === true) {\n url = `#fob/event?sseq=${navigator.sportSequence}&cseq=${navigator.competitionSequence}`\n if (navigator.tournamentSequence) {\n url += `&tseq=${navigator.tournamentSequence}`\n }\n } else {\n url = `#fob/event/mkt?sseq=${navigator.sportSequence}&cseq=${navigator.competitionSequence}&eseq=${navigator.eventSequence}&mseq=${navigator.marketSequence}&pyol=false`\n if (navigator.tournamentSequence) {\n url += `&tseq=${navigator.tournamentSequence}`\n }\n }\n }\n return url\n}\n","import React, { useRef, useState } from 'react'\nimport {\n ButtonsContainerStyled,\n ButtonStyled,\n ButtonWrapperStyled,\n DescriptionStyled,\n IconBackground,\n IconContainer,\n IconStyled,\n PrimaryButtonStyled,\n SpecialTileContainer,\n TermsAndConditionsHeaderStyled,\n TermsAndConditionsStyled,\n TermsAndConditionsTextStyled,\n TileTitle,\n TitleContainer,\n} from './SpecialsPage.styles'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { Link, useRouteMatch } from 'react-router-dom'\nimport { build } from './routeBuilder'\n\nexport interface SpecialTileProp {\n title: string\n description: string\n iconCode: keyof typeof iconPaths\n isCurrent?: boolean\n isPowerPlay?: boolean\n maxRewardAmount?: number\n sequence?: number\n termsAndConditions: string\n betNowNavigator: BetNowNavigator\n competitionSeqs?: null | number\n eventSeqs?: null | number\n marketSeqs?: null | number\n productGroupCode?: null | number\n racingProductOptions?: null | number\n rewardTypeCode?: null | number\n rewardTypeCodeName?: null | number\n statusCode?: null | number\n sportSeqs?: null | number\n statusCodeName?: null | number\n tournamentSeqs?: null | number\n}\n\ninterface BetNowNavigator {\n competitionName: string\n countryName: string\n eventName: string\n hasCountries: boolean\n marketName: string\n multiCompetition: boolean\n multiEvent: boolean\n multiMarket: boolean\n multiTournament: boolean\n sportName: string\n tournamentName?: string\n categoryCode: string\n competitionSequence: number\n eventDate: string\n eventSequence: number\n groupCode: string\n marketSequence: number\n sportSequence: number\n tournamentSequence?: number\n}\n\nexport function SpecialTile({ special }: { special: SpecialTileProp }): JSX.Element {\n const isSuperPick = special.title.toLocaleLowerCase() === 'superpick' ? true : false\n const [isExpanded, setIsExpanded] = useState(false)\n const marketElementToScrollTo = useRef(null)\n\n const handleButtonToggle = () => {\n if (isExpanded) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n window.setTimeout(() => {\n if (!!marketElementToScrollTo && marketElementToScrollTo.current) {\n window.scrollTo({\n top: marketElementToScrollTo.current.offsetTop,\n behavior: 'smooth',\n })\n }\n }, 10)\n }\n }\n\n const isUnexpected = special.title === 'Unexpected Race Special'\n\n return (\n
    \n \n \n \n \n {isSuperPick && }\n \n {special.title}\n \n \n {special.description}\n \n \n \n \n \n {!isSuperPick && (\n \n )}\n
    \n )\n}\n\ninterface ButtonsProps {\n isSuperPick: boolean\n special: SpecialTileProp\n handleButtonToggle: () => void\n}\n\nexport function Buttons({ isSuperPick, special, handleButtonToggle }: ButtonsProps): JSX.Element {\n const { url } = useRouteMatch()\n const buildUrl = build(special)\n return (\n <>\n {isSuperPick && (\n \n \n Learn More\n \n \n )}\n {!isSuperPick && (\n \n {buildUrl && (\n \n Bet Now\n \n )}\n \n T&Cs\n \n \n )}\n \n )\n}\n\nfunction TermsAndConditions({\n termsAndConditions,\n isExpanded,\n}: {\n termsAndConditions: string\n isExpanded: boolean\n}): JSX.Element {\n return (\n \n TERMS & CONDITIONS\n {termsAndConditions}\n \n )\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { SpecialsErrorNoticeBoxStyled } from './SpecialsPage'\n\nexport const SpecialsTermsPage = (): JSX.Element => {\n const fetchSpecialsTerms = () =>\n fetchFromApi('/cms/specials-terms').then(response => response.text())\n const { isLoading, isError, data } = useQuery({\n queryKey: queryKeys.specialsTerms,\n queryFn: fetchSpecialsTerms,\n retry: false,\n })\n\n if (isLoading) {\n return (\n \n \n \n \n \n )\n }\n\n if (isError) {\n return (\n \n \n \n )\n }\n\n return
    \n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { SpecialTile, SpecialTileProp } from './SpecialTile'\nimport { ApiServiceError, fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom'\nimport { SpecialsTermsPage } from './SpecialsTermsPage'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport styled from '@emotion/styled'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\n\nexport const SpecialsPage = (): JSX.Element | null => {\n const { path } = useRouteMatch()\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst SpecialsTiles = () => {\n const { isLoading, isError, data } = useQuery({\n queryKey: queryKeys.specials,\n queryFn: getSpecials,\n retry: false,\n })\n\n if (isLoading) {\n return (\n \n \n \n \n \n )\n }\n\n if (isError) {\n return (\n \n \n \n )\n }\n\n return (\n <>\n \n {data?.map((special, index) => {\n return \n })}\n \n )\n}\n\nconst getSpecials = async (): Promise => {\n const specials = await fetchFromApi('/api/specials/offers')\n return await specials.json()\n}\n\nexport const SpecialsErrorNoticeBoxStyled = styled('div')({\n padding: '1rem 1rem 0rem',\n})\n\nconst superPick = {\n title: 'SuperPick',\n description:\n 'The power to choose your special. Simply pick your race, pick your runner and pick your special.',\n iconCode: 'specials',\n}\n","import { fromJS, Map } from 'immutable'\nimport { createSignal } from 'rwwa-rx-state-machine'\nimport { attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { StateMap } from 'typings/immutable'\nimport { isBetslipResponses } from '@core/Data/betslip'\nimport { ConfirmBetslipBetsSucceeded, QuickbetClosed } from '../Quickbet/signals'\n\n// Signals\n\nexport const ToggleSelectionForGame = createSignal('ToggleSelectionForGame')\nexport const ClearToteSportSelections = createSignal('ClearToteSportSelections')\n\n// Driver\n\nexport const defaultState: TippingState = {\n selections: {},\n betConfirmed: false,\n}\n\ntype TippingStateMap = StateMap\n\nexport const driver = (state = fromJS(defaultState), signal: Signal): TippingStateMap => {\n switch (signal.tag) {\n case ToggleSelectionForGame: {\n const { gameId, selectionType } = signal.data as ToggleSelectionForGame\n const current = state.getIn(['selections', gameId])\n if (current) {\n switch (selectionType) {\n case SelectionType.Home:\n return state.setIn(['selections', gameId, 'isHome'], !current.get('isHome'))\n case SelectionType.Draw:\n return state.setIn(['selections', gameId, 'isDraw'], !current.get('isDraw'))\n case SelectionType.Away:\n return state.setIn(['selections', gameId, 'isAway'], !current.get('isAway'))\n }\n }\n const newGame = {\n isHome: selectionType === SelectionType.Home,\n isDraw: selectionType === SelectionType.Draw,\n isAway: selectionType === SelectionType.Away,\n }\n return state.setIn(['selections', gameId], Map(newGame))\n }\n\n case ClearToteSportSelections: {\n return fromJS(defaultState)\n }\n\n case ConfirmBetslipBetsSucceeded: {\n if (isBetslipResponses(signal.data)) {\n return state.merge({\n betConfirmed: true,\n })\n }\n return state\n }\n\n case QuickbetClosed: {\n if (state.get('betConfirmed')) {\n return fromJS(defaultState)\n }\n return state\n }\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n driver,\n path: 'sports-tipping',\n}).map(s => s.toJS())\n\n// Types\n\nexport enum SelectionType {\n Home,\n Draw,\n Away,\n}\n\ninterface ToggleSelectionForGame {\n gameId: string\n selectionType: SelectionType\n}\n\ninterface Selection {\n isHome: boolean\n isAway: boolean\n isDraw: boolean\n}\n\nexport type Selections = Record\n\ninterface TippingState {\n selections: Selections\n betConfirmed: false\n}\n","import { fetchFromApi } from '@classic/Foundation/Services/ApiService'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\n\ntype ToteSportsResult = 'HomeWin' | 'AwayWin' | 'Draw' | 'Abandoned'\n\nexport interface OpenPoolsResponse {\n sports: ToteSportsSport[]\n}\n\nexport interface ResultedPoolsResponse {\n sports: ToteSportsSport[]\n startDate: string\n endDate: string\n}\n\ninterface ToteSportsSport {\n key: string\n description: string\n icon: keyof typeof iconPaths\n pools: ToteSportsPool[]\n}\n\ninterface ToteSportsDividend {\n winningOutcome: string\n return: number\n numberOfTipsRequired: number\n gameKey: string\n}\n\nexport interface ToteSportsPool {\n key: string\n name: string\n nameSuffix: string\n seq: number\n isOpen: boolean\n isAbandoned: boolean\n releaseTime: Date\n total: number\n grossJackpot: number\n netJackpot: number\n dividend: ToteSportsDividend\n sportKey: string\n isRetailSlipSupported: boolean\n disclaimers: string[]\n numberOfClosedGames: number\n numberOfGames: number\n numberOfResultedGames: number\n tippingPoolNumber: number\n scheduledCloseTime: Date\n statusDesc: string\n statusSeq: number\n games: ToteSportsGame[]\n}\n\nexport interface ToteSportsGame {\n key: string\n homeTeamName: string\n awayTeamName: string\n isDrawFootoAllower: boolean\n isDrawResultAllowed: boolean\n isDrawSupported: boolean\n league: string\n result: ToteSportsResult\n roundDate: Date\n sportsKey: string\n startTime: Date\n statusDesc: string\n statusSeq: string\n venue: string\n}\n\nexport const queryDefaults = {\n retry: false,\n staleTime: Infinity,\n cacheTime: 10000,\n refetchOnWindowFocus: false,\n}\n\nexport const getCurrentPools = async (): Promise => {\n const pools = await fetchFromApi('/api/tipping/current-pools')\n return await pools.json()\n}\n\nexport const getResultedPools = async (date: string): Promise => {\n const pools = await fetchFromApi(`/api/tipping/resulted-pools/${date}`)\n return await pools.json()\n}\n\nexport const getPool = async (poolKey: string): Promise => {\n const pools = await fetchFromApi(`/api/tipping/pool/${poolKey}`)\n return await pools.json()\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { BaseButtonStyled } from '@mobi/component-library/Common/Buttons'\nimport { Icon, type IconProps } from '@mobi/component-library/Common/Icon'\n\nexport const GameGroupStyled = styled('div')({\n fontSize: '1.4rem',\n margin: '0.25rem 0.5rem',\n padding: '0.25rem 0.5rem',\n marginBlockEnd: 0,\n})\n\nexport const InfoHeaderStyled = styled('div')({\n backgroundColor: hexColors.nightRider,\n padding: '1rem',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n color: hexColors.grey,\n})\n\nexport const PoolNameStyled = styled('div')({\n fontSize: '1.6rem',\n color: hexColors.white,\n})\n\nexport const InfoTitleStyled = styled('div')({\n backgroundColor: '#2e2c30',\n padding: '0 1rem',\n display: 'flex',\n lineHeight: '3rem',\n color: '#fff',\n fontWeight: 'bold',\n fontSize: '1.2rem',\n justifyContent: 'space-around',\n})\n\nexport const GameHeaderStyled = styled('div')({\n color: hexColors.grey,\n fontSize: '1.2rem',\n padding: '0.5rem 0',\n textAlign: 'center',\n '> strong': {\n color: hexColors.nightRider,\n },\n})\n\nexport const ButtonsContainerStyled = styled('div')({\n display: 'flex',\n justifyContent: 'space-around',\n})\n\ninterface ButtonGroupButtonProps {\n selected: boolean\n disabled?: boolean\n}\n\nexport const ButtonGroupItemStyled = styled(BaseButtonStyled)(\n {\n flex: '1',\n height: '4rem',\n fontSize: '1.2rem',\n fontWeight: 'normal',\n padding: '0.2rem',\n margin: 0,\n outline: `1px solid ${hexColors.veryLightGrey}`,\n '&:focus': {\n outline: `1px solid ${hexColors.veryLightGrey}`,\n },\n },\n ({ selected, disabled }) => ({\n fontWeight: selected && !disabled ? 'bold' : 'normal',\n background: selected && !disabled ? hexColors.blueDiamond : hexColors.white,\n color: selected && !disabled ? hexColors.white : hexColors.black,\n }),\n ({ disabled }) =>\n disabled && {\n opacity: 0.3,\n }\n)\n\nexport const TeamNameContainerStyled = styled.div({\n display: 'flex',\n justifyContent: 'stretch',\n alignItems: 'stretch',\n height: '4rem',\n})\n\nexport const TeamNameStyled = styled.div<{\n isSelected: boolean\n isAbandoned: boolean\n maxWidth?: string\n}>(({ isSelected, maxWidth, isAbandoned }) => ({\n outline: `1px solid ${hexColors.veryLightGrey}`,\n backgroundColor: isAbandoned\n ? 'transparent'\n : isSelected\n ? hexColors.blueDiamond\n : hexColors.white,\n color: isSelected ? hexColors.white : 'inherit',\n fontWeight: isSelected ? 'bolder' : 'inherit',\n flex: '1 1 0',\n textAlign: 'center',\n padding: '1rem',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n maxWidth,\n}))\n\nconst TippingPillStyled = styled.span({\n display: 'inline-block',\n borderRadius: '3px',\n textTransform: 'uppercase',\n fontWeight: 'bold',\n color: hexColors.white,\n padding: '0.25rem 0.5rem',\n margin: '0 0.5rem',\n})\n\nexport const DrawPillStyled = styled(TippingPillStyled)({\n backgroundColor: hexColors.studio,\n})\n\nexport const AbandonedPillStyled = styled(TippingPillStyled)({\n backgroundColor: hexColors.chocolate,\n})\n\nexport const ButtonDrawStyled = styled(ButtonGroupItemStyled)({\n maxWidth: '9rem',\n padding: 0,\n})\n\nexport const DisclaimerContainerStyled = styled('ul')({\n margin: '1rem 1rem 1rem -1rem',\n})\n\nexport const DisclaimerStyled = styled('li')({\n fontSize: '1.2rem',\n})\n\nexport const JackpotStyled = styled('span')({\n color: '#f2a900',\n fontSize: '1.2rem',\n margin: '0 0 0 1.2rem',\n '& > span:first-of-type': {\n marginLeft: '0.5rem',\n },\n})\n\nexport const IconStyled = styled(Icon)({\n margin: '0 1rem 0 0',\n zIndex: 1,\n position: 'relative',\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\n\nimport { ToteSportsGame } from '../../data/toteSports'\n\nimport {\n AbandonedPillStyled,\n DrawPillStyled,\n GameGroupStyled,\n GameHeaderStyled,\n TeamNameContainerStyled,\n TeamNameStyled,\n} from './Games.styles'\n\ninterface ClosedGameProps {\n game: ToteSportsGame\n gameIndex: number\n}\n\nexport const ClosedGame = ({ game, gameIndex }: ClosedGameProps): JSX.Element => {\n const isAbandoned = game.result === 'Abandoned'\n return (\n \n \n Game {gameIndex + 1} \n {dayjs(game.startTime).format('ddd, DD MMM YYYY HH:mm')}{' '}\n {!game.isDrawSupported && game.result === 'Draw' && Draw}{' '}\n {isAbandoned && Abandoned}\n \n\n \n \n {game.homeTeamName}\n \n {game.isDrawSupported && (\n \n Draw\n \n )}\n \n {game.awayTeamName}\n \n \n \n )\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport styled from '@emotion/styled'\nimport type { ToteSportsSelection, ToteSportsDetails } from '@mobi/betslip/types'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport { useObservable } from '@core/Utils/hooks'\nimport { state$, defaultState, Selections } from '../../driver'\nimport { getPool, queryDefaults, ToteSportsPool } from '../../data/toteSports'\nimport { calculateSelectionString } from '../../helpers/calculator'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nconst EmptyBettingDrawerStyled = styled.div({ height: '8rem' })\n\nexport const TippingBettingDrawer = ({ poolKey }: { poolKey: string }): JSX.Element | null => {\n const { selections } = useObservable(state$, defaultState)\n\n const {\n isLoading,\n isError,\n data: pool,\n } = useQuery({\n ...queryDefaults,\n queryKey: [queryKeys.toteSportsPool, poolKey],\n queryFn: () => getPool(poolKey),\n })\n\n if (isLoading || isError || !pool || !selections) return null\n\n const onQuickbetClick = (): void => {\n handleBetSelection({\n betFlow: { location: 'Quickbet' },\n selection: createSelection(pool, selections),\n })\n }\n\n const isValidBet =\n Object.keys(selections).length === pool.games.length &&\n Object.values(selections).every(\n selection => selection.isHome || selection.isDraw || selection.isAway\n )\n\n return (\n <>\n \n {isValidBet && }\n \n )\n}\n\nconst createSelection = (pool: ToteSportsPool, selections: Selections): QuickbetSelection => {\n const selection: ToteSportsSelection = {\n poolSequence: pool.seq,\n betSelections: calculateSelectionString(selections),\n }\n\n const selectionDetails: ToteSportsDetails = {\n poolName: `${pool.name} ${pool.nameSuffix} ${pool.numberOfGames}`,\n games: pool.games.map(game => ({\n homeTeamName: game.homeTeamName,\n awayTeamName: game.awayTeamName,\n })),\n }\n\n return {\n bettingType: 'tote-sports-tipping',\n selection,\n selectionDetails,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment: false,\n }\n}\n","import React from 'react'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\n\nexport const LoadingBars = (): JSX.Element => (\n \n \n \n \n \n \n \n)\n","import React from 'react'\nimport { useParams } from 'react-router-dom'\nimport { useQuery } from 'react-query'\nimport { dayjs } from '@mobi/utils/date'\nimport {\n state$,\n SelectionType,\n defaultState,\n ToggleSelectionForGame,\n ClearToteSportSelections,\n} from '@core/Areas/Tipping/driver'\nimport { getPool, queryDefaults, ToteSportsGame, ToteSportsPool } from '../../data/toteSports'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Money } from '@core/Components/Text/Money'\nimport {\n InfoHeaderStyled,\n InfoTitleStyled,\n PoolNameStyled,\n GameHeaderStyled,\n ButtonGroupItemStyled,\n ButtonsContainerStyled,\n ButtonDrawStyled,\n DisclaimerStyled,\n JackpotStyled,\n IconStyled,\n DisclaimerContainerStyled,\n GameGroupStyled,\n} from './Games.styles'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { colors } from '@core/Settings'\nimport { useObservable } from '@core/Utils/hooks'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\n\nimport { ClosedGame } from './ClosedGame'\nimport { TippingBettingDrawer } from '../BettingDrawer/BettingDrawer'\nimport { hexColors } from '@mobi/settings'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { LoadingBars } from '../LoadingBars'\n\ninterface GamesParams {\n poolKey: string\n sportIconCode: string\n}\n\nconst DATE_TIME_FORMAT = 'ddd, DD MMM YYYY HH:mm'\n\nexport const Games = (): JSX.Element => {\n const { poolKey, sportIconCode } = useParams()\n const { selections } = useObservable(state$, defaultState)\n\n React.useEffect(() => {\n ClearToteSportSelections()\n }, [])\n\n const {\n isLoading,\n isError,\n data: pool,\n } = useQuery({\n ...queryDefaults,\n queryKey: [queryKeys.toteSportsPool, poolKey],\n queryFn: () => getPool(poolKey),\n })\n\n if (isLoading) {\n return \n }\n\n if (isError || !pool) {\n return (\n \n \n \n )\n }\n\n const icon = sportIconCode?.toUpperCase() as keyof typeof iconPaths\n const scheduledCloseTime = dayjs(pool.scheduledCloseTime).format(DATE_TIME_FORMAT)\n const hasDraw = pool.games.some(game => game.isDrawSupported)\n\n // releaseTime is typed as a date, but sometimes is actually a string.\n // Creating a new date from the value ensures that it's always a date object.\n const releaseTime = pool.releaseTime ? new Date(pool.releaseTime) : null\n const isRefunded = releaseTime != null && pool.isAbandoned\n const formattedReleaseTime = releaseTime ? dayjs(pool.releaseTime).format(DATE_TIME_FORMAT) : ''\n\n return (\n <>\n \n \n \n {`${pool.name} ${pool.nameSuffix} ${pool.numberOfGames}`}\n \n\n
    \n Pool: \n \n {pool.grossJackpot && (\n \n \n \n \n )}\n
    \n\n {pool.isOpen && (\n
    \n Betting Closes: {scheduledCloseTime}\n
    \n )}\n {isRefunded && (\n
    Refunds Official: {formattedReleaseTime}
    \n )}\n {releaseTime != null && !isRefunded && (\n <>\n
    \n Tips Required: {pool.dividend?.numberOfTipsRequired || 0}/{pool.numberOfGames}\n
    \n
    \n Dividend: \n
    \n
    Dividends Official: {formattedReleaseTime}
    \n \n )}\n
    \n\n \n
    HOME
    \n {hasDraw &&
    DRAW
    }\n
    AWAY
    \n
    \n\n {pool?.isOpen &&\n pool?.games.map((game, i) => {\n const gameSelections = selections[game.key]\n return (\n \n )\n })}\n\n {pool?.isOpen === false &&\n pool.games.map((game, i) => {\n return \n })}\n \n \n \n )\n}\n\ninterface GameSelectionProps {\n game: ToteSportsGame\n gameIndex: number\n isHomeSelected: boolean\n isDrawSelected: boolean\n isAwaySelected: boolean\n}\n\nconst GameSelections = ({\n game,\n gameIndex,\n isHomeSelected,\n isDrawSelected,\n isAwaySelected,\n}: GameSelectionProps): JSX.Element => {\n return (\n \n \n Game {gameIndex + 1}{' '}\n {dayjs(game.startTime).format('ddd, DD MMM YYYY HH:mm')}\n \n\n \n \n ToggleSelectionForGame({ gameId: game.key, selectionType: SelectionType.Home })\n }\n data-tid-tote-sport-game-home\n >\n {abbreviateName(game.homeTeamName)}\n \n\n {game.isDrawSupported && (\n \n ToggleSelectionForGame({ gameId: game.key, selectionType: SelectionType.Draw })\n }\n data-tid-tote-sport-game-draw\n >\n Draw\n \n )}\n\n \n ToggleSelectionForGame({ gameId: game.key, selectionType: SelectionType.Away })\n }\n data-tid-tote-sport-game-away\n >\n {abbreviateName(game.awayTeamName)}\n \n \n \n )\n}\n\nconst Disclaimers = ({ disclaimers }: { disclaimers: string[] }): JSX.Element | null => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n if (typeof disclaimers === 'undefined' || disclaimers?.length <= 0) return null\n\n return (\n
    \n }\n data-tid-tote-sport-pool-disclaimers\n headerClicked={() => setIsExpanded(!isExpanded)}\n expanded={isExpanded}\n >\n \n {disclaimers.map((disclaimer, index) => (\n {disclaimer}\n ))}\n \n \n
    \n )\n}\n\n// The name is going to be displayed in one or two lines, for each line the maximum characters is MAX_CHARS_TO_DISPLAY.\n// In this function we split the name at spaces, then build up the name, checking the length at each word added.\nexport function abbreviateName(name: string, MAX_CHARS_TO_DISPLAY = 14): string | null {\n if (name) {\n if (name.length < MAX_CHARS_TO_DISPLAY) {\n return name\n }\n if (!name.includes(' ')) {\n return displayMaxChars(name)\n }\n // Split name into individual words\n const nameSplit = name.split(' ')\n // If first word is longer than MAX_CHARS_TO_DISPLAY, return that shortened\n if (nameSplit[0].length > MAX_CHARS_TO_DISPLAY) {\n return displayMaxChars(nameSplit[0])\n }\n let newNameFirstLine = nameSplit[0]\n let i = 1\n // Add words to the first line, stopping before the first line would be longer than MAX_CHARS_TO_DISPLAY\n while (\n (newNameFirstLine + ' ' + nameSplit[i]).length < MAX_CHARS_TO_DISPLAY &&\n i < nameSplit.length\n ) {\n newNameFirstLine = newNameFirstLine + ' ' + nameSplit[i]\n i++\n }\n let newNameSecondLine = nameSplit[i]\n i++\n // Add words to the second line, stopping after the second line is longer than MAX_CHARS_TO_DISPLAY\n while (newNameSecondLine.length < MAX_CHARS_TO_DISPLAY && i < nameSplit.length) {\n newNameSecondLine = newNameSecondLine + ' ' + nameSplit[i]\n i++\n }\n // If second line is longer than MAX_CHARS_TO_DISPLAY, shorten it\n if (newNameSecondLine.length > MAX_CHARS_TO_DISPLAY) {\n newNameSecondLine = displayMaxChars(newNameSecondLine)\n }\n return `${newNameFirstLine} ${newNameSecondLine}`\n }\n return null\n}\n\nfunction displayMaxChars(chars: string): string {\n const MAX_CHARS_TO_DISPLAY = 14\n if (chars.length > MAX_CHARS_TO_DISPLAY) {\n return `${chars.substring(0, MAX_CHARS_TO_DISPLAY - 2)}..`\n }\n return chars\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon, type IconProps } from '@mobi/component-library/Common/Icon'\n\nexport const IconStyled = styled(Icon)({\n margin: '0 1rem 0 0',\n zIndex: 1,\n position: 'relative',\n})\n\nexport const HeaderStyled = styled.h3({\n color: hexColors.white,\n backgroundColor: hexColors.black,\n margin: '1rem 0',\n display: 'flex',\n alignItems: 'center',\n})\n","import * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport React from 'react'\nimport { HeaderStyled, IconStyled } from './TippingPoolHeader.styles'\n\ninterface TippingPoolHeaderProps {\n description: string\n icon: keyof typeof iconPaths\n}\n\nexport function TippingPoolHeader({ description, icon }: TippingPoolHeaderProps): JSX.Element {\n return (\n \n \n {description}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { MainContainer } from '@core/Components/Containers'\nimport { TabList } from '@core/Components/Tabs'\nimport { lessThan } from '@mobi/component-library/Utils/media'\n\nexport const ResultsDateStyled = styled('div')({\n fontSize: '1.2rem',\n textAlign: 'center',\n})\n\nexport const SinglePoolStyled = styled('div')({\n borderBottom: `1px solid ${hexColors.gainsboro}`,\n fontSize: '1.1rem',\n color: hexColors.black,\n padding: '0 1rem',\n minHeight: '4rem',\n display: 'flex',\n})\n\nexport const RowContainerStyled = styled('div')({\n borderBottom: `1px solid ${hexColors.gainsboro}`,\n fontSize: '1.1rem',\n color: hexColors.dimGrey,\n padding: '0 1rem',\n})\n\nexport const PoolNameStyled = styled('div')({\n fontSize: '1.2rem',\n lineHeight: '1.5rem',\n fontWeight: 'bold',\n})\n\nexport const CloseTimeStyled = styled('div')({\n lineHeight: '1.6rem',\n})\n\nexport const PoolTotalStyled = styled('div')({\n fontSize: '1.2rem',\n})\n\nexport const BoldedTabList = styled(TabList)({\n fontWeight: 'bold',\n})\n\nexport const TippingMainContainerStyled = styled(MainContainer)({\n backgroundColor: hexColors.whiteSmoke,\n})\n\nexport const AbandonedStyled = styled.span({\n display: 'inline-block',\n ['&::after']: {\n content: \"'Abandoned'\",\n },\n [lessThan('small')]: {\n ['&::after']: {\n content: \"'Abnd'\",\n },\n },\n})\n","import dayjs from 'dayjs'\n\nexport function getDisplayTime(timeUTC: Date): string | null {\n if (!dayjs(timeUTC).isValid()) {\n return null\n }\n\n return dayjs(timeUTC).format('ddd, D MMM YYYY, H:mm')\n}\n","import React from 'react'\n\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Money } from '@core/Components/Text/Money'\n\nimport {\n CloseTimeStyled,\n PoolNameStyled,\n PoolTotalStyled,\n SinglePoolStyled,\n} from '../TippingPage.styles'\nimport { getDisplayTime } from '../helpers/getDisplayTime'\n\ninterface SingleOpenPoolProps {\n name: string\n nameSuffix: string\n numberOfGames: number\n scheduledCloseTime: Date\n grossJackpot?: number\n total: number\n}\n\nexport function SingleOpenPool({\n name,\n nameSuffix,\n numberOfGames,\n scheduledCloseTime,\n grossJackpot,\n total,\n}: SingleOpenPoolProps): JSX.Element {\n return (\n \n \n \n \n {`${name} ${nameSuffix} ${numberOfGames}`}\n \n \n \n {getDisplayTime(scheduledCloseTime)}\n \n \n \n {!!grossJackpot && (\n \n )}\n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { Link, useRouteMatch } from 'react-router-dom'\nimport { hexColors } from '@mobi/settings'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { OpenPoolsResponse, getCurrentPools, queryDefaults } from '../../data/toteSports'\nimport { LoadingBars } from '../LoadingBars'\nimport { TippingPoolHeader } from '../TippingPoolHeader'\nimport { SingleOpenPool } from '../SingleOpenPool'\nimport { RowContainerStyled } from '../../TippingPage.styles'\n\nexport const CurrentPoolList: React.FC = () => {\n const { url } = useRouteMatch()\n\n const { isLoading, isError, data } = useQuery({\n ...queryDefaults,\n queryKey: queryKeys.toteSportsCurrentPools,\n queryFn: getCurrentPools,\n })\n\n if (isLoading) {\n return (\n
    \n \n
    \n )\n }\n\n if (isError) {\n return (\n \n \n \n )\n }\n\n if (!data || data?.sports.length === 0) {\n return (\n \n \n \n )\n }\n\n return (\n
    \n {data.sports.map(sport => (\n
    \n \n\n \n \n \n \n \n Closes at\n \n \n \n Pool Total\n \n \n \n \n\n {sport.pools.map(pool => (\n \n \n \n ))}\n
    \n ))}\n
    \n )\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { Errored, Loading } from 'rwwa-data-access'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { DirectionalIcon } from '../Icons'\nimport {\n DatePickerStyled,\n DateNavigationContainerStyled,\n DatePickerIcon,\n} from './DateNavigation.styles'\nimport { CalendarDatePicker } from '../DatePicker/DatePicker'\nimport { MeetingsAPIResponse } from '@core/Areas/Racing/Hooks/useMeetings/types'\n\ntype MeetingsResponse = Loading | Errored | MeetingsAPIResponse[0]\n\ninterface DateNavigationParams {\n date: Date\n onDateChange: (date: Date) => void\n code?: string\n meetings?: MeetingsResponse\n}\n\nexport function DateNavigation({ date, onDateChange }: DateNavigationParams): JSX.Element {\n const dateString = dayjs(date).format('ddd MMM Do')\n const nextDay = () => {\n closeCalendar()\n return dayjs(date).add(1, 'day').toDate()\n }\n\n const prevDay = () => {\n closeCalendar()\n return dayjs(date).subtract(1, 'day').toDate()\n }\n\n const onValueChange = (value: Date) => {\n closeCalendar()\n onDateChange(value)\n }\n\n const [showCalendar, setShowCalendar] = React.useState(false)\n\n const toggleCalendar = () => {\n setShowCalendar(!showCalendar)\n }\n\n const closeCalendar = () => {\n setShowCalendar(false)\n }\n\n return (\n \n \n \n \n onDateChange(prevDay())}\n >\n \n \n \n\n \n \n \n {' '}\n {dateString}\n {' '}\n \n \n \n\n \n onDateChange(nextDay())}\n >\n \n \n \n \n \n\n \n \n \n \n )\n}\n\nfunction Popover({\n isOpen,\n children,\n}: {\n isOpen: boolean\n children: JSX.Element | null\n}): null | JSX.Element {\n if (!isOpen) {\n return null\n }\n return <>{children}\n}\n","import React from 'react'\n\nimport { hexColors } from '@mobi/settings'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Money } from '@core/Components/Text/Money'\nimport { ToteSportsPool } from '../data/toteSports'\n\nimport {\n SinglePoolStyled,\n PoolNameStyled,\n PoolTotalStyled,\n AbandonedStyled,\n} from '../TippingPage.styles'\nimport { getDisplayTime } from '../helpers/getDisplayTime'\n\nexport function SingleResultedPool({ pool }: { pool: ToteSportsPool }): JSX.Element {\n return (\n \n \n \n \n {`${pool.name} ${pool.nameSuffix} ${pool.numberOfGames}`}\n \n \n {getDisplayTime(pool.releaseTime)}\n \n \n {pool.isAbandoned\n ? null\n : `${pool.dividend?.numberOfTipsRequired || 0}/${pool.numberOfGames}`}\n \n \n {!!pool.grossJackpot && (\n \n )}\n \n \n \n {pool.isAbandoned && }\n {!pool.isAbandoned && pool.dividend?.return && (\n \n )}\n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { Link, useHistory, useLocation, useRouteMatch } from 'react-router-dom'\nimport dayjs from 'dayjs'\n\nimport { hexColors } from '@mobi/settings'\nimport { DateNavigation } from '@core/Components/DateNavigation'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ResultedPoolsResponse, getResultedPools, queryDefaults } from '../../data/toteSports'\n\nimport { LoadingBars } from '../LoadingBars'\nimport { SingleResultedPool } from '../SingleResultedPool'\nimport { TippingPoolHeader } from '../TippingPoolHeader'\nimport { ResultsDateStyled } from '../../TippingPage.styles'\nimport { RowContainerStyled } from '../../TippingPage.styles'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nconst SHORT_DATE_FORMAT = 'ddd, DD MMM YYYY'\n\nexport const ResultedPoolList = (): JSX.Element => {\n const { url } = useRouteMatch()\n const history = useHistory()\n const selectedDate = new URLSearchParams(useLocation().search).get('date')\n\n const { isLoading, isError, data } = useQuery({\n ...queryDefaults,\n queryKey: [queryKeys.toteSportsResultedPools, { date: selectedDate }],\n queryFn: async () => await getResultedPools(selectedDate || dayjs().format('YYYY-MM-DD')),\n })\n\n if (isLoading) {\n return (\n <>\n \n
    \n \n
    \n \n )\n }\n\n if (isError) {\n return (\n <>\n \n \n \n \n \n )\n }\n\n return (\n
    \n \n\n {!data?.sports?.length && (\n \n \n \n )}\n\n {data?.sports.map(\n sport =>\n sport.pools?.length > 0 && (\n
    \n \n\n \n \n \n \n \n Divs Official at\n \n \n Tips Req\n \n \n \n Dividend\n \n \n \n \n \n\n {sport.pools.map(pool => (\n \n \n \n ))}\n
    \n )\n )}\n
    \n )\n}\n\nconst DateDisplay = ({\n data,\n selectedDate,\n history,\n}: {\n data: ResultedPoolsResponse | undefined\n selectedDate: string | null\n history: ReturnType\n}): JSX.Element => (\n <>\n \n {data?.startDate && dayjs(data.startDate).format(SHORT_DATE_FORMAT)}–\n {data?.endDate && dayjs(data.endDate).format(SHORT_DATE_FORMAT)}\n \n\n history.push({ search: `?date=${dayjs(date).format('YYYY-MM-DD')}` })}\n />\n \n)\n","import React from 'react'\nimport { Switch, Route, useRouteMatch, Redirect, useHistory } from 'react-router-dom'\nimport { dayjs } from '@mobi/utils/date'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Tab } from '@core/Components/Tabs'\nimport { Games } from './Components/Games/Games'\nimport { CurrentPoolList } from './Components/PoolLists/CurrentPoolList'\nimport { ResultedPoolList } from './Components/PoolLists/ResultedPoolList'\nimport { BoldedTabList, TippingMainContainerStyled } from './TippingPage.styles'\n\nexport const TippingPage = (): JSX.Element | null => {\n const { path } = useRouteMatch()\n const history = useHistory()\n\n const isShowingResults = /\\/results/i.test(history.location.pathname)\n\n const navigateToResultsIfNotAlreadyThere = React.useCallback(() => {\n if (!isShowingResults) {\n history.push(`${path}/results?date=${dayjs().format('YYYY-MM-DD')}`)\n }\n }, [history, isShowingResults, path])\n\n return (\n \n \n \n history.push(path)}>\n Current\n \n \n Results\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n )\n}\n","import { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport type { BlackbookPreferencesRequestBody } from '@core/Areas/Blackbook/types'\nimport { postBlackbookAlertPreferences } from './api'\n\nexport const changeBlackbookAlertPreference = (\n newPreferences: BlackbookPreferencesRequestBody,\n shouldRefetchBlackbook = true\n) =>\n postBlackbookAlertPreferences(newPreferences).then(() => {\n queryClient.invalidateQueries({\n queryKey: queryKeys.blackbookDetails,\n refetchActive: shouldRefetchBlackbook,\n })\n })\n","import * as apiService from '@classic/Foundation/Services/ApiService'\nimport { TAKE_A_BREAK_API_PATH_PREFIX } from './constants'\n\nexport interface TakeABreakResponse {\n inProgress: boolean\n endDate: Date\n}\ninterface SaveTakeABreakRequest {\n accountNumber: number\n endDate: Date\n}\n\nexport const saveTakeABreak = async (\n SaveTakeABreakRequest: SaveTakeABreakRequest\n): Promise => {\n return await apiService.post({\n url: `${TAKE_A_BREAK_API_PATH_PREFIX}/commence`,\n body: {\n accountNumber: SaveTakeABreakRequest.accountNumber,\n endDate: SaveTakeABreakRequest.endDate,\n },\n })\n}\n\nexport const fetchTakeABreakDetails = async (): Promise => {\n return await apiService.get({\n url: `${TAKE_A_BREAK_API_PATH_PREFIX}/status`,\n })\n}\n","import { useQuery } from 'react-query'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { fetchTakeABreakDetails, TakeABreakResponse } from '@core/Areas/Account/TakeABreak/api'\nimport { useLogon } from '@core/Utils/hooks'\n\nexport function useTakeABreak() {\n const { accountNumber } = useLogon()\n\n const query = useQuery(\n [queryKeys.takeABreak, accountNumber],\n fetchTakeABreakDetails,\n {\n cacheTime: accountNumber ? 300000 : 0,\n enabled: !!accountNumber,\n }\n )\n\n return {\n data: query.data as TakeABreakResponse,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n isSuccess: query.isSuccess,\n }\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { changeBlackbookAlertPreference } from '@core/Areas/Blackbook/helpers/changeBlackbookAlertPreference'\nimport type { BlackbookPreferencesRequestBody } from '@core/Areas/Blackbook/types'\nimport { trackBlackbookAlertPreferencesUpdated } from '@core/Areas/Blackbook/analytics'\nimport { radius } from '@mobi/component-library/Theme/Common'\nimport { useTakeABreak } from '@core/Areas/Account/TakeABreak/Hooks'\n\nexport const RaceDayAlertPreference: React.FC<{\n isEmailAlertActive: boolean\n isSmsAlertActive: boolean\n isLoading: boolean\n shouldDisable: boolean\n}> = ({ isEmailAlertActive, isSmsAlertActive, isLoading, shouldDisable }) => {\n const { data, isLoading: isTakeABreakLoading } = useTakeABreak()\n\n const isTakeABreakActive = isTakeABreakLoading || !data || data.inProgress\n\n const [localStateOverride, setLocalStateOverride] =\n React.useState()\n const [isBusy, setIsBusy] = React.useState(false)\n\n /** Uses optimistic UI updates with rollback */\n const handlePreferenceToggle = (changedAlertType: AlertTypes) => () => {\n setIsBusy(true)\n\n const currAlertPref = localStateOverride\n ? { ...localStateOverride }\n : {\n SendEmail: isEmailAlertActive,\n SendSms: isSmsAlertActive,\n }\n const newAlertPref = { ...currAlertPref }\n\n newAlertPref[changedAlertType] = !newAlertPref[changedAlertType]\n setLocalStateOverride(newAlertPref)\n\n changeBlackbookAlertPreference(newAlertPref, false)\n .catch(() => {\n RegisterToast({\n id: 'blackbook-preference-error',\n message: 'Oops, Unable to Change Alert',\n type: 'error',\n position: 'top',\n timeout: 0,\n })\n setLocalStateOverride(currAlertPref)\n })\n .finally(() => {\n setIsBusy(false)\n trackBlackbookAlertPreferencesUpdated(newAlertPref['SendEmail'], newAlertPref['SendSms'])\n })\n }\n\n return (\n \n Race Day Alerts:\n\n {isLoading ? (\n \n ) : (\n <>\n \n \n \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: '5rem',\n padding: '0 1rem',\n background: hexColors.white,\n borderBottom: '0.1rem solid ' + hexColors.veryLightGrey,\n\n '& > span': {\n marginRight: '1rem',\n fontSize: '1.2rem',\n },\n\n 'input[type=\"checkbox\"] + label': {\n fontSize: '1.2rem',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n margin: '0 1.5rem 0 0',\n },\n})\n\n// =====\n// Types\n// =====\n\ntype AlertTypes = {\n [K in keyof BlackbookPreferencesRequestBody]: K\n}[keyof BlackbookPreferencesRequestBody]\n","import React from 'react'\nimport { hexColors } from '@mobi/settings'\n\nexport const useIncomingIndicator = (\n incomingIdRef: React.MutableRefObject,\n runnerId: number\n) => {\n const runnerRef = React.useRef(null)\n\n React.useEffect(() => {\n if (!incomingIdRef.current || !runnerRef.current) return undefined\n const isIncoming = !!(incomingIdRef.current && incomingIdRef.current === runnerId.toString())\n if (!isIncoming) return\n\n const el = runnerRef.current\n\n const elementRect = el.getBoundingClientRect()\n window.scrollTo({\n top: elementRect.top + window.pageYOffset - window.innerHeight / 2,\n behavior: 'smooth',\n })\n\n el.style.background = hexColors.capeHoney\n const timerId = setTimeout(() => {\n el.style.background = ''\n }, 1000)\n\n window.history.replaceState('', document.title, '/#account/blackbook')\n incomingIdRef.current = undefined\n\n return () => {\n clearTimeout(timerId)\n }\n }, [incomingIdRef, runnerId])\n\n return runnerRef\n}\n","import { PlanSeq } from '@mobi/api-types'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\n\nimport { BetDetails, FOOBetDetails, LoadBetDetails } from './types'\n\nexport const createLoadBetDetails = (ticket: Ticket): LoadBetDetails[] => {\n if (ticket.productName === 'Same Race Multi') {\n const firstLeg = ticket.legs[0]\n return [\n {\n fixtureId: firstLeg.fixtureId,\n fixtureDate: new Date(firstLeg.advertisedStartTime),\n races: [firstLeg.raceNumber],\n selectionString:\n firstLeg.selections[0].selectionDetails[0].acceptorDetails[0].number.toString(),\n planSeq: ticket.planSeq,\n betType: 'Win - Fixed',\n srmSelections: ticket.legs.map(leg => {\n const acceptorDetails = leg.selections[0].selectionDetails[0].acceptorDetails[0]\n return {\n acceptorNumber: acceptorDetails.number,\n legNumber: (acceptorDetails.srmPosition ?? 1) - 1,\n }\n }),\n } as BetDetails,\n ]\n }\n\n return ticket.legs.map(ticketLeg => {\n // Fixed odds only will not have a Fixture ID, whereas Fixed Odds matched will\n if (ticket.planSeq === PlanSeq.FOBRacing && !ticketLeg.fixtureId) {\n const fooBetDetails: FOOBetDetails = {\n competitionName: ticketLeg.eventName,\n competitionSeq: ticketLeg.eventSeq.toString(),\n propositionSeq: ticketLeg.propositionSeq,\n betType: ticketLeg.betType,\n sportName: ticketLeg.sportName,\n eventStartDateTime: ticket.eventStartDateTime,\n }\n\n return fooBetDetails\n }\n\n // Tote bets and Fixed Odds Matched\n if (ticketLeg.fixtureId) {\n // All tote should have selection string provided\n if (ticket.planSeq !== PlanSeq.FOBRacing && !ticketLeg.selectionString)\n throw new Error('Missing selection string')\n\n const selectionString =\n ticketLeg.selectionString ||\n // Fixed odds matched will only have 1 selection, so we can use that as the selection string\n // This is the only way we can generate FO-matched as the data in the DB betwen matched and\n // proposition is identical\n ticketLeg.selections[0].selectionDetails[0].acceptorDetails[0].number.toString()\n\n const numberOfCombinations =\n ticket.planSeq !== PlanSeq.FOBRacing ? ticket.investment.lines[0].count : 1\n\n const betDetails: BetDetails = {\n fixtureId: ticketLeg.fixtureId,\n fixtureDate: new Date(ticketLeg.advertisedStartTime),\n races: ticketLeg.raceNumber\n ? [ticketLeg.raceNumber]\n : ticketLeg.selections.map(selection => selection.raceNumber),\n selectionString,\n planSeq: ticket.planSeq,\n numberOfCombinations,\n betType: ticketLeg.betType,\n }\n\n return betDetails\n }\n\n throw new Error('Incompatible ticket details')\n })\n}\n","import { AppState } from '..'\n\nexport const selectActiveInvestment = (state: AppState) => state.betslip.workflow.activeInvestment\n\nexport const selectKeypadActiveValue = (state: AppState) => state.betslip.workflow.keypadActiveValue\n\nexport const selectAccountBalance = (state: AppState) => state.betslip.workflow.hostAccountBalance\n\nexport const selectIsBettingDisabled = (state: AppState) => state.betslip.workflow.isBettingDisabled\n\nexport const selectWorkflowStatus = (state: AppState) => state.betslip.workflow.currentStatus\n\nexport const selectIsHostUserLoggedIn = (state: AppState) =>\n state.betslip.workflow.isHostUserLoggedIn\n\nexport const selectVisibleBettingSection = (state: AppState) =>\n state.betslip.workflow.visibleBettingSection\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectBetSlipFobSelectionsIds } from '@mobi/betslip/Store/Bets/selectors'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport {\n updateBetSlipFobRacingItemPrice,\n updateBetSlipSportsItemPrice,\n} from '@mobi/betslip/Store/Bets'\nimport { iotSubscribeTopics, iotUnsubscribeTopics } from '@mobi/utils/awsiot'\nimport { store } from '@core/Store'\nimport {\n event$,\n type FobPriceChangedPushEvent,\n getFobPriceChangeByPropositionTopic,\n isFobPriceChangedPushEvent,\n getFobSportsPriceChangeTopic,\n isSportsPriceChangedPushEvent,\n SportsPriceChangedPushEvent,\n PushEvent,\n} from '@core/State/PushData'\n\nexport const useRealtimeFobPriceChanges = (shouldEnable: boolean) => {\n const subscriptionItems = useSelector(selectBetSlipFobSelectionsIds)\n const workflowStatus = useSelector(selectWorkflowStatus)\n\n const currentSubscriptionsRef = React.useRef(new Set())\n const workflowStatusRef = React.useRef(workflowStatus)\n\n workflowStatusRef.current = workflowStatus\n\n // ==================================\n // Handle fob selection subscriptions\n // ==================================\n React.useEffect(() => {\n if (!shouldEnable) return\n\n subscriptionItems.forEach(item => {\n const topic = getSubscriptionItemTopic(item)\n if (currentSubscriptionsRef.current.has(topic)) return\n iotSubscribeTopics([topic])\n currentSubscriptionsRef.current.add(topic)\n })\n\n Array.from(currentSubscriptionsRef.current)\n .filter(topic => !subscriptionItems.some(item => getSubscriptionItemTopic(item) === topic))\n .forEach(topic => {\n iotUnsubscribeTopics([topic])\n currentSubscriptionsRef.current.delete(topic)\n })\n }, [subscriptionItems, shouldEnable])\n\n // ===========================================\n // Listen for price changes, update selections\n // ===========================================\n React.useEffect(() => {\n if (!shouldEnable) return\n\n const fobPriceChangedSubscription = event$\n .filter(e => isPriceChangeEvent(e.payload))\n .subscribe(e => {\n if (workflowStatusRef.current !== 'ready' || !currentSubscriptionsRef.current.has(e.topic))\n return\n\n if (isFobPriceChangedPushEvent(e.payload)) {\n store.dispatch(updateBetSlipFobRacingItemPrice(e.payload))\n }\n\n if (isSportsPriceChangedPushEvent(e.payload)) {\n store.dispatch(updateBetSlipSportsItemPrice(e.payload))\n }\n })\n\n return () => {\n fobPriceChangedSubscription.dispose()\n }\n }, [shouldEnable])\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getSubscriptionItemTopic(item: FobPriceSubscriptionItem) {\n if (item.type === 'sports') {\n const { marketId, outcomeId, marketTypeCode } = item.details\n return getFobSportsPriceChangeTopic(marketId, outcomeId, marketTypeCode)\n }\n return getFobPriceChangeByPropositionTopic(item.details.id)\n}\n\nfunction isPriceChangeEvent(event: PushEvent): event is PriceChangeEvent {\n return isFobPriceChangedPushEvent(event) || isSportsPriceChangedPushEvent(event)\n}\n\n// =====\n// Types\n// =====\n\ntype FobPriceSubscriptionItem =\n | { type: 'racing'; details: { id: string } }\n | { type: 'sports'; details: { marketId: number; marketTypeCode: string; outcomeId: number } }\n\ntype PriceChangeEvent = FobPriceChangedPushEvent | SportsPriceChangedPushEvent\n","import { useEffect } from 'react'\nimport { AnyAction } from '@reduxjs/toolkit'\nimport { store } from '@core/Store'\nimport { ensureBetErrorTypeLiteral } from '@core/Data/betting'\nimport {\n BetSlipItem,\n BetSlipResponse,\n EventDetails,\n FobBetReceiptResponse,\n Selection,\n} from '@mobi/betslip/types'\nimport { confirmAllBets, proposeAllBets } from '@mobi/betslip/Store/Workflow/asyncActions'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport {\n FeatureFlagState,\n state$ as launchDarklyState$,\n} from '@core/State/LaunchDarklyFeatures/driver'\nimport { trackBetConfirmation } from '@classic/Foundation/Analytics/Analytics.Bet'\nimport {\n keys as analyticsKeys,\n defaultData as analyticsDefaultData,\n AnalyticsBetData,\n} from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport * as Analytics from '@classic/Foundation/Analytics/Analytics'\n\nexport function useBetSlipAnalytics(shouldEnable: boolean): void {\n useEffect(() => {\n if (!shouldEnable) return\n\n const listeners = [\n startListening({\n actionCreator: proposeAllBets.fulfilled,\n effect: handleProposeAllBetsSuccessful,\n }),\n startListening({\n actionCreator: proposeAllBets.rejected,\n effect: handleProposeAllBetsFailed,\n }),\n startListening({\n actionCreator: confirmAllBets.fulfilled,\n effect: handleConfirmAllBetsSuccessful,\n }),\n startListening({\n actionCreator: confirmAllBets.rejected,\n effect: handleConfirmAllBetsFailed,\n }),\n ]\n\n return () => {\n listeners.forEach(stopListener => stopListener())\n }\n }, [shouldEnable])\n}\n\n// =====\n// Helper\n// =====\n\nconst handleProposeAllBetsSuccessful = (action: { payload: BetSlipResponse[] }) => {\n const trackData: AnalyticsBetData = {\n ...analyticsDefaultData.bet,\n construction: 'betslip',\n }\n\n action.payload.forEach(bet => {\n const errorType = getErrorType(bet)\n\n Analytics.track(analyticsKeys.betslipBetaSelected, {\n bet: {\n ...trackData,\n productType: bet.legs && bet.legs?.length > 1 ? 'multi' : 'single',\n errorMessage: mapBetErrorTypeIfNonNullable(errorType),\n },\n })\n })\n}\n\nconst handleProposeAllBetsFailed = (action: AnyAction) => {\n const errorMessage = mapBetErrorTypeIfNonNullable(action.payload.code || 'Network Error')\n\n const step1BetData: AnalyticsBetData = {\n ...analyticsDefaultData.bet,\n construction: 'betslip',\n productType: 'N/A',\n errorMessage,\n }\n\n Analytics.track(analyticsKeys.betslipBetaSelected, { bet: step1BetData })\n}\n\nconst handleConfirmAllBetsSuccessful = (action: { payload: BetSlipResponse[] }) => {\n launchDarklyState$.take(1).subscribe(launchDarklyState => {\n const betslipStateDataItems = store.getState().betslip.bets.items\n const featureFlags = launchDarklyState.toJS() as FeatureFlagState\n\n action.payload.forEach(bet => {\n const isMultiBet = bet.legs && bet.legs?.length > 1\n const betType = isMultiBet ? 'multi' : 'single'\n\n const step2BetData: AnalyticsBetData = {\n ...analyticsDefaultData.bet,\n construction: 'betslip',\n productType: betType,\n errorMessage:\n !bet.success && bet.error ? mapBetErrorTypeIfNonNullable(bet.error.type) : null,\n }\n\n Analytics.track(analyticsKeys.betslipBetaReview, { bet: step2BetData })\n\n if (bet.success) {\n if (isMultiBet) {\n trackMultiBetConfirmation(bet)\n } else {\n trackSingleBetConfirmation(bet, betslipStateDataItems, featureFlags)\n }\n }\n })\n })\n}\n\nconst handleConfirmAllBetsFailed = (action: AnyAction) => {\n const errorMessage = mapBetErrorTypeIfNonNullable(action.payload.code || 'Network Error')\n\n const step2BetData: AnalyticsBetData = {\n ...analyticsDefaultData.bet,\n construction: 'betslip',\n productType: 'N/A',\n errorMessage,\n }\n\n Analytics.track(analyticsKeys.betslipBetaReview, { bet: step2BetData })\n}\n\nconst getErrorType = (bet: BetSlipResponse) => {\n const betErrorType = bet.error?.type\n const betLegErrorType = bet.legs?.[0]?.error?.type\n return betErrorType || betLegErrorType\n}\n\nconst trackMultiBetConfirmation = (bet: BetSlipResponse) => {\n const { ticketNumber, winInvestment, bonusBet } = bet.receipt as FobBetReceiptResponse\n const step3MultiBetData: AnalyticsBetData = {\n ...analyticsDefaultData.bet,\n specialOffers: null,\n id: ticketNumber,\n construction: 'betslip',\n productType: 'multi',\n placementMethod: 'account',\n mixed: {\n fixed: {\n cost: winInvestment,\n numberOfTickets: 1,\n bonusCashUsed: bonusBet > 0,\n bonusCashAmount: bonusBet,\n },\n },\n }\n\n Analytics.track(analyticsKeys.betAccountProcessed, { bet: step3MultiBetData })\n}\n\nconst trackSingleBetConfirmation = (\n bet: BetSlipResponse,\n betslipStateDataItems: BetSlipItem[],\n featureFlags: FeatureFlagState\n) => {\n const getSelection: GetSelection = (id: string) => {\n const item = betslipStateDataItems.find(item => item.id === id)\n return item?.selection && item?.selectionDetails\n ? [item.selection, item.selectionDetails]\n : null\n }\n\n const betItem = getSelection(bet.id)\n\n if (!betItem) return\n\n const [selection, selectionDetails] = betItem\n const { ticketNumber, winInvestment, placeInvestment, specialOffers, betCost, tags, bonusBet } =\n extractReceipt(bet.receipt)\n\n trackBetConfirmation(\n ticketNumber,\n selection,\n selectionDetails,\n specialOffers || [],\n 'betslip',\n betCost,\n winInvestment,\n placeInvestment,\n featureFlags.features,\n null,\n tags || null,\n null,\n bonusBet\n )\n}\n\nconst mapBetErrorTypeIfNonNullable = (betErrorType: unknown): Nullable =>\n typeof betErrorType === 'string' || typeof betErrorType === 'number'\n ? ensureBetErrorTypeLiteral(betErrorType)\n : null\n\nfunction extractReceipt(receipt: BetSlipResponse['receipt']) {\n if (!receipt) {\n return {\n ticketNumber: -1,\n winInvestment: 0,\n placeInvestment: 0,\n specialOffers: [],\n betCost: 0,\n tags: null,\n bonusBet: 0,\n }\n }\n\n if ('betCost' in receipt) {\n return {\n ticketNumber: receipt.ticketNumber,\n winInvestment: 0,\n placeInvestment: 0,\n specialOffers: [],\n betCost: receipt.betCost,\n tags: null,\n bonusBet: receipt.bonusBet,\n }\n }\n\n return {\n ticketNumber: receipt.ticketNumber,\n winInvestment: receipt.winInvestment,\n placeInvestment: receipt.placeInvestment,\n specialOffers: receipt.specialOffers ?? [],\n betCost: 0,\n tags: null,\n bonusBet: receipt.bonusBet,\n }\n}\n\n// =====\n// Types\n// =====\n\ntype GetSelection = (id: string) => [Selection, EventDetails] | null\n","import { useEffect } from 'react'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport { triggerHapticFeedback } from '@core/Utils/hapticFeedback/hapticFeedback'\nimport { confirmAllBets } from '@mobi/betslip/Store/Workflow/asyncActions'\n\nexport const useHapticFeedbackOnBetsSuccess = (shouldEnable: boolean) => {\n useEffect(() => {\n if (!shouldEnable) return undefined\n\n const stopListener = startListening({\n actionCreator: confirmAllBets.fulfilled,\n effect: action => {\n if (action.payload.some(responseItem => !!responseItem.receipt)) {\n triggerHapticFeedback('success')\n }\n },\n })\n\n return () => stopListener()\n }, [shouldEnable])\n}\n","import { useEffect } from 'react'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport { clearAllBetSlipItems } from '@mobi/betslip/Store/Bets'\nimport { showBetSlipClearedToast } from '@core/Areas/BetSlipNew/helpers/toasts'\n\nexport const useToastOnClearBetSlipSuccess = (shouldEnable: boolean) => {\n useEffect(() => {\n if (!shouldEnable) return undefined\n\n const stopListener = startListening({\n actionCreator: clearAllBetSlipItems,\n effect: () => {\n showBetSlipClearedToast()\n },\n })\n\n return () => {\n stopListener()\n }\n }, [shouldEnable])\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { PlanSeq } from '@mobi/api-types'\nimport { isFobMatchedSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { hexColors } from '@mobi/settings'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { toDisplayPrice } from '@mobi/utils/money'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RaceCountdown } from '@core/Components/RaceCountdown/RaceCountdown'\nimport { SilkImageContained } from '@core/Components/SilkImage/SilkImageContained'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport {\n buildBaseBetSelection,\n getErrorMessage,\n type LoadBetDetails,\n} from '@core/Utils/betting/loadBet'\nimport { RemoveSingleBet } from '@core/Areas/Betslip/signals'\nimport { type BetslipItem, state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport type { BlackbookEntryRacingToday } from '@core/Areas/Blackbook/types'\nimport { getIconName } from '@core/Areas/Blackbook/helpers'\nimport {\n trackBlackbookNavigateToRace,\n trackBlackbookOddsClicked,\n} from '@core/Areas/Blackbook/analytics'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\nimport { useIsNewBetSlipFeatureActive } from '@core/Areas/BetSlipNew/hooks'\nimport { store } from '@core/Store'\nimport { useDispatch } from 'react-redux'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { removeItemFromBetSlipById } from '@mobi/betslip/Store/Bets'\n\nconst enum LocalConstants {\n DogsSilkClassName = 'bb__silk--dogs',\n}\n\nexport const RunningSoonHeader: React.FC<{\n runner: BlackbookEntryRacingToday\n isSelected: boolean\n shouldAutoAddToBetslip: boolean\n onClick?: () => void\n isExpanded?: boolean\n}> = React.memo(\n ({ runner, onClick, isExpanded, isSelected, shouldAutoAddToBetslip }) => {\n const [isBetBuildLoading, setIsBetBuildLoading] = React.useState(false)\n const isNewBetSlipFeatureActive = useIsNewBetSlipFeatureActive()\n const dispatch = useDispatch()\n\n const {\n AdvertisedStartTime,\n Barrier,\n ContestNumber,\n FixtureDate,\n FixtureId,\n GroundDescription,\n PlaceDividend,\n PropositionSeq,\n RiderName,\n TrainerName,\n StarterNumber,\n WinDividend,\n } = runner.RacingTodayDetails\n\n const raceHashRoute = getRaceLink({ FixtureId, FixtureDate, ContestNumber })\n const runnerStatus = getStatus(runner.RacingTodayDetails)\n\n const isJockey = runner.Code === 'Jockeys'\n const shouldRenderBarrier = runner.Code === 'Races' || isJockey\n\n const handleBetButtonClick: React.MouseEventHandler = e => {\n e.stopPropagation()\n\n if (isSelected) {\n if (isNewBetSlipFeatureActive) {\n const betSlipItems = selectBetSlipItems(store.getState())\n const item = betSlipItems.find(\n x =>\n isFobMatchedSelection(x.selection) &&\n Number(x.selection.propositionSeq) === PropositionSeq\n )\n if (item) {\n dispatch(removeItemFromBetSlipById({ id: item.id }))\n }\n } else {\n removeRunnerFromBetslipLegacy(PropositionSeq.toString())\n }\n return\n }\n\n const betItem: LoadBetDetails = {\n fixtureId: FixtureId,\n fixtureDate: new Date(FixtureDate),\n races: [ContestNumber],\n selectionString: StarterNumber.toString(),\n planSeq: PlanSeq.FOBRacing,\n betType: 'Win & Place',\n }\n setIsBetBuildLoading(true)\n\n buildBaseBetSelection(betItem)\n .then(selection => {\n handleBetSelection({\n betFlow: { location: shouldAutoAddToBetslip ? 'Betslip' : 'Quickbet' },\n selection: { ...selection, betSource: 'blackbook' },\n })\n })\n .catch(displayAddToBetslipError)\n .finally(() => setIsBetBuildLoading(false))\n\n trackBlackbookOddsClicked({\n code: runner.Code,\n name: runner.StarterName,\n action: shouldAutoAddToBetslip ? 'betslip' : 'quickbet',\n })\n }\n\n return (\n \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n

    \n {StarterNumber} - {toTitleCase(runner.StarterName)}{' '}\n {shouldRenderBarrier && Barrier && `(${Barrier})`}\n

    \n\n {runnerStatus === 'Open' ? (\n dayjs(AdvertisedStartTime).isToday() ? (\n \n ) : (\n
    \n {dayjs(AdvertisedStartTime).format('ddd DD MMM hh:mm A')}\n
    \n )\n ) : (\n runnerStatus !== 'Suspended' &&\n runnerStatus !== 'Scratched' && (\n {runnerStatus}\n )\n )}\n\n {!isJockey && }\n
    \n\n
    \n
    \n \n R{ContestNumber} -{' '}\n {toTitleCase(GroundDescription)}\n \n\n
    \n \n {getRiderAbbreviation(runner.Code)}:{' '}\n {toTitleCase(RiderName || '-')}\n \n\n {TrainerName && runner.Code !== 'Dogs' && (\n \n T: {toTitleCase(TrainerName)}\n \n )}\n\n {runnerStatus === 'Scratched' && (\n
    \n SCRATCHED\n
    \n )}\n
    \n\n {!isJockey && !!runner.LatestNoteLine && (\n
    \n \n {runner.LatestNoteLine}\n \n
    \n )}\n
    \n\n {!!WinDividend && runnerStatus === 'Open' && (\n
    \n \n\n {isBetBuildLoading && (\n \n \n \n )}\n
    \n )}\n
    \n
    \n
    \n )\n },\n (prevProps, nextProps) =>\n nextProps.isExpanded === prevProps.isExpanded &&\n nextProps.runner.LatestNoteLine === prevProps.runner.LatestNoteLine &&\n nextProps.isSelected == prevProps.isSelected &&\n nextProps.shouldAutoAddToBetslip == prevProps.shouldAutoAddToBetslip\n)\n\n// =============\n// Local Helpers\n// =============\n\nconst getStatus = ({\n AbandonedInd,\n ResultedInd,\n ScratchedInd,\n CloseTime,\n SuspendedInd,\n}: BlackbookEntryRacingToday['RacingTodayDetails']) => {\n if (AbandonedInd) return 'Abandoned'\n if (ResultedInd) return 'Resulted'\n if (ScratchedInd) return 'Scratched'\n if (CloseTime) return 'Closed'\n if (SuspendedInd) return 'Suspended'\n return 'Open'\n}\n\nconst getRaceLink = ({ FixtureId, FixtureDate, ContestNumber }: RaceLinkParams): string =>\n `/tote/meetings/${FixtureId}/${ContestNumber}?date=${dayjs(FixtureDate).format('YYYY-MM-DD')}`\n\nconst getRiderAbbreviation = (code: BlackbookEntryRacingToday['Code']) =>\n (\n ({\n Dogs: 'T',\n Trots: 'D',\n Races: 'J',\n Jockeys: 'J',\n }) as Record\n )[code]\n\nconst removeRunnerFromBetslipLegacy = (propositionSeq: string) => {\n let matchedItem: BetslipItem | undefined\n betslipState$.take(1).subscribe(({ items }) => {\n matchedItem = items.find(item =>\n isFobMatchedSelection(item.selection)\n ? item.selection.propositionSeq === propositionSeq\n : false\n )\n })\n if (matchedItem) RemoveSingleBet(matchedItem)\n}\n\nconst displayAddToBetslipError = (err: unknown | Error) => {\n RegisterToast({\n message: getErrorMessage(err),\n type: 'error',\n position: 'bottom',\n id: 'blackbook-bet-error',\n timeout: 0,\n })\n}\n\n// ======\n// Styles\n// ======\n\nconst RunnerHeaderStyled = styled.div({\n display: 'flex',\n paddingBottom: '0.5rem',\n\n // Silk & Icon\n '& > div:nth-of-type(1)': {\n display: 'flex',\n width: '3rem',\n paddingRight: '1rem',\n\n figure: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '3rem',\n height: '3rem',\n margin: 0,\n padding: 0,\n borderRadius: '50%',\n background: hexColors.gainsboro,\n color: hexColors.dimGrey,\n },\n\n ['figure.' + LocalConstants.DogsSilkClassName]: {\n background: 0,\n },\n },\n\n // Runner Info\n '& > div:nth-of-type(2)': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n overflow: 'hidden',\n\n '*': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n '& > div': {\n display: 'flex',\n justifyContent: 'space-between',\n\n '& > div': {\n flexShrink: 0,\n },\n },\n\n // Header & Countdown\n '& > div:nth-of-type(1)': {\n display: 'flex',\n alignItems: 'center',\n minHeight: '3rem',\n\n h3: {\n background: 'revert',\n backgroundColor: 'transparent',\n padding: 0,\n margin: 0,\n marginRight: 'auto',\n color: hexColors.nero,\n lineHeight: 'normal',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n textTransform: 'none',\n },\n\n // Expand arrow\n '& > svg': {\n flexShrink: 0,\n marginLeft: '0.5rem',\n },\n },\n\n // Race Link, Rider Info & Notes\n '& > div:nth-of-type(2)': {\n '& > div:first-of-type': {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 auto',\n paddingRight: '0.5rem',\n lineHeight: 1.2,\n fontSize: '1.2rem',\n\n '& > *': {\n minHeight: '2rem',\n },\n\n // Race Link\n '& > a': {\n display: 'flex',\n width: 'fit-content',\n lineHeight: 1,\n color: hexColors.studio,\n\n svg: {\n transform: 'translateY(-0.3rem)',\n marginRight: '0.3rem',\n },\n },\n\n // RiderNames, Comment (Generic)\n '& > div': {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n paddingBottom: '0.5rem',\n\n 'span:nth-of-type(odd)': {\n paddingRight: '0.5rem',\n },\n\n div: {\n marginLeft: 'auto',\n },\n },\n },\n\n // Bet Button Container\n '& > div:nth-of-type(2)': {\n position: 'relative',\n\n '> span': {\n position: 'absolute',\n zIndex: 1,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(255,255,255,0.7)',\n },\n },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype RaceLinkParams = Pick<\n BlackbookEntryRacingToday['RacingTodayDetails'],\n 'FixtureId' | 'FixtureDate' | 'ContestNumber'\n>\n","import type { Updater } from 'react-query/types/core/utils'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { RegisterToast, RemoveToast } from '@core/Components/Toast/ToastDriver'\nimport { promptUserAndReturnDecision } from '@core/Components/Modal/Components/PromptForUserDecision/helpers'\nimport type { BlackbookDetailsResponse, BlackbookEntry } from '@core/Areas/Blackbook/types'\nimport { trackBlackbookEntryDeleteCanceled, trackBlackbookEntryDeleted } from '../analytics'\nimport { deleteBlackbookEntry } from './api'\n\nconst enum LocalConstants {\n RemoveRunnerModalId = 'remove-blackbook-runner',\n}\n\nexport const deleteRunnerFromBlackbook = async ({ id, name, type }: DeleteRunnerArgs) => {\n let subtitle = ''\n\n if (type === 'Jockeys') {\n subtitle = `Are you sure you want to remove the jockey \"${toTitleCase(\n name\n )}\" from your Blackbook?`\n } else {\n subtitle = `Are you sure you want to remove \"${toTitleCase(name)}\" from your Blackbook?`\n }\n\n const decision = await promptUserAndReturnDecision({\n id: LocalConstants.RemoveRunnerModalId,\n testId: 'blackboook-remove-runner',\n title: 'Remove from Blackbook',\n subtitle,\n buttons: [\n { label: 'Cancel', color: 'secondary' },\n { label: 'Yes, delete', color: 'danger' },\n ],\n })\n\n if (decision === 'Yes, delete') {\n const toastBusyId = 'blackbook-delete-busy'\n let toastBusytimeoutId: number | null = null\n\n try {\n toastBusytimeoutId = window.setTimeout(() => {\n RegisterToast({\n id: toastBusyId,\n message: 'Deleting Runner',\n timeout: 0,\n spinner: true,\n })\n }, 1000)\n\n await deleteBlackbookEntry(id)\n\n invalidateQueriesOnSuccessfulDelete(id)\n\n trackBlackbookEntryDeleted(type)\n } catch {\n RegisterToast({\n id: 'blackbook-runner-delete-error',\n message: 'Unable to Delete Runner',\n type: 'error',\n timeout: 0,\n })\n }\n\n if (toastBusytimeoutId) clearTimeout(toastBusytimeoutId)\n RemoveToast(toastBusyId)\n } else {\n trackBlackbookEntryDeleteCanceled()\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction invalidateQueriesOnSuccessfulDelete(id: BlackbookEntry['Id']) {\n queryClient.invalidateQueries({ queryKey: queryKeys.blackbookDetails, refetchActive: false })\n queryClient.setQueryData(\n queryKeys.blackbookDetails,\n removeRunnerFromBlackbookCache(id)\n )\n queryClient.invalidateQueries({\n queryKey: queryKeys.blackbookRunnersBase,\n refetchInactive: true,\n })\n}\n\nconst removeRunnerFromBlackbookCache: (\n id: number\n) => Updater = id => oldData => {\n if (!oldData) return undefined\n const newEntries = oldData?.Entries?.filter(entry => entry.Id !== id) || null\n return { ...oldData, Entries: newEntries }\n}\n\n// =====\n// Types\n// =====\n\ntype BlackbookCachedQuery = BlackbookDetailsResponse | undefined\n\ntype DeleteRunnerArgs = {\n id: BlackbookEntry['Id']\n name: string\n type: BlackbookEntry['Code']\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, hexColors } from '@mobi/settings'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { H3 } from '@core/Components/Text/Heading.styles'\n\nexport const ShareLoading = () => {\n return (\n \n

    Creating your Share

    \n
    \n \n
    \n
    \n )\n}\n\nconst Wrapper = styled.div({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n minHeight: '10rem',\n background: colors.brand.primary,\n padding: '1rem',\n color: hexColors.white,\n\n h3: {\n margin: 0,\n textAlign: 'center',\n marginBottom: '0.5rem',\n color: hexColors.white,\n fontWeight: 'bold',\n },\n\n 'div[aria-busy=\"true\"]': {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '0.5rem',\n },\n})\n","import { sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\n\nconst enum LocalConstants {\n WaitTimeout = 7_000,\n}\n\nexport function getFirebaseDynamicLinkFromNative(rawLink: string): Promise {\n return new Promise((resolve, reject) => {\n let timeoutId: number | undefined = undefined\n\n const subscription = subscribeToNative('RESPONSE_FIREBASE_DYNAMIC_LINK', ({ link }) => {\n clearTimeout(timeoutId)\n subscription.dispose()\n resolve(link)\n })\n\n sendToNative('REQUEST_FIREBASE_DYNAMIC_LINK', { link: rawLink })\n\n timeoutId = window.setTimeout(() => {\n subscription.dispose()\n reject()\n }, LocalConstants.WaitTimeout)\n })\n}\n","import React from 'react'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport {\n isReactNativeApp,\n isReactNativeIos,\n AppVersion,\n sendToNative,\n} from '@mobi/web-native-comms/web'\nimport { store } from '@core/Store'\nimport { useFeature } from '@core/Utils/hooks'\nimport { closeModal, openModal } from '@core/Components/Modal'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport { ShareLoading } from './Components/ShareLoading'\nimport { getFirebaseDynamicLinkFromNative } from '@core/NativeServices/DeepLinking'\nimport type { BlackbookEntry } from '@core/Areas/Blackbook/types'\n\nconst enum LocalConstants {\n ModalId = 'blackbook-share-loading',\n}\n\nexport const ShareButton: React.FC = ({ name, type }) => {\n const isFeatureActive = useFeature('SHARE_BLACKBOOK_RUNNER')\n\n if (\n !isReactNativeApp ||\n !isFeatureActive ||\n !AppVersion ||\n +AppVersion.split('.')[0] < 208 ||\n !(name && type)\n )\n return null\n\n const handleClick = () => {\n trackBlackbookShare({ name, type })\n handleBlackbookShareClick({ name, type })\n }\n\n return (\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst handleBlackbookShareClick = async ({ name, type }: ShareButtonProps) => {\n try {\n store.dispatch(\n openModal({\n id: LocalConstants.ModalId,\n modalComponent: ShareLoading,\n isDismissable: false,\n position: 'middle',\n cornerStyle: 'round',\n })\n )\n\n const response = await buildLinkForShare({ name, type })\n\n sendToNative('SHARE_SHEET_REQUEST', {\n message: `${name} is one of my favourites. You should add it to your TABtouch Blackbook here:`,\n url: response.link,\n })\n } catch {\n RegisterToast({\n id: 'blackbook-share-cancel',\n message: 'Unable to Create Share',\n type: 'error',\n position: 'top',\n timeout: 0,\n })\n } finally {\n store.dispatch(closeModal({ id: LocalConstants.ModalId }))\n }\n}\n\nconst buildLinkForShare = async ({ name, type }: ShareButtonProps): Promise<{ link: string }> => {\n let rawLink = `${window.location.origin}/?share-blackbook=${type},${name}`\n if (isReactNativeIos) {\n rawLink = rawLink.replace('customscheme://', 'https://')\n }\n const link = await getFirebaseDynamicLinkFromNative(encodeURI(rawLink))\n if (!link) throw new Error()\n return { link }\n}\n\nconst trackBlackbookShare = (data: ShareButtonProps) => {\n trackEvent('share-blackbook', data)\n}\n\n// =====\n// Types\n// =====\n\ntype ShareButtonProps = { name: string; type: BlackbookEntry['Code'] }\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { deleteRunnerFromBlackbook } from '@core/Areas/Blackbook/helpers/deleteRunnerFromBlackbook'\nimport type { BlackbookEntryRacingToday } from '@core/Areas/Blackbook/types'\nimport {\n trackBlackbookAddCommentClicked,\n trackBlackbookEntryDeleteClicked,\n} from '@core/Areas/Blackbook/analytics'\nimport { addOrEditBlackbookComment } from '@core/Areas/Blackbook/helpers/addOrEditBlackbookComment'\nimport { Comments } from '@core/Areas/Blackbook/Components/Comments'\nimport { ShareButton } from './Components/ShareButton'\n\nconst enum LocalConstants {\n actionBarClassName = 'blackbook__details_actions',\n}\n\nexport const BlackbookEntryDetails: React.FC = ({\n id,\n type,\n name,\n hasComments,\n wrapperRef,\n contentRef,\n children,\n}) => {\n const handleDelete = () => {\n deleteRunnerFromBlackbook({ id, name, type })\n trackBlackbookEntryDeleteClicked()\n }\n\n const handleAddComment = () => {\n addOrEditBlackbookComment({ id, name, type })\n trackBlackbookAddCommentClicked()\n }\n\n return (\n \n
    \n {children}\n\n {hasComments && type === 'Jockeys' &&
    }\n {hasComments && }\n\n
    \n \n Add Comment\n \n\n \n\n \n
    \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: hexColors.white,\n overflow: 'hidden',\n transition: 'height 400ms ease',\n willChange: 'height',\n height: 0,\n\n // Spacer for Jockeys\n '> div > hr': {\n border: 0,\n margin: 0,\n padding: 0,\n minHeight: '0.5rem',\n },\n\n // Button action bar\n ['.' + LocalConstants.actionBarClassName]: {\n display: 'flex',\n minHeight: '4rem',\n },\n})\n\n// =====\n// Types\n// =====\n\ntype BlackbookEntryDetailsProps = {\n isJockey: boolean\n id: BlackbookEntryRacingToday['Id']\n name: BlackbookEntryRacingToday['StarterName']\n type: BlackbookEntryRacingToday['Code']\n hasComments: boolean\n wrapperRef: React.RefObject\n contentRef: React.RefObject\n children?: React.ReactChild\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nconst enum LocalConstants {\n Padding = '0.5rem',\n}\n\nexport const RunnerCardStyled = styled.div({\n position: 'relative',\n minHeight: '3rem',\n marginBottom: '0.5rem',\n padding: LocalConstants.Padding,\n fontSize: '1.2rem',\n color: hexColors.nero,\n background: hexColors.white,\n borderRadius: '0.5rem',\n boxShadow: 'rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px',\n transition: 'background 0.5s ease',\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { dayjs } from '@mobi/utils/date'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport { RaceCountdown } from '@core/Components/RaceCountdown'\nimport type { BlackbookEntry } from '@core/Areas/Blackbook/types'\nimport { useIncomingIndicator } from '@core/Areas/Blackbook/Hooks/useIncomingIndicator'\nimport { getIconName } from '@core/Areas/Blackbook/helpers'\nimport { RunnerCardStyled, BlackbookEntryDetails } from '../Common'\n\nexport const SlimEntryExpandable: React.FC<{\n id: number\n name: string\n code: BlackbookEntry['Code']\n hasComments: boolean\n incomingIdRef: React.MutableRefObject\n children?: React.ReactChild\n ast?: string\n subheading?: string\n onExpand?: () => void\n}> = ({ name, id, code, ast, subheading, hasComments, incomingIdRef, onExpand, children }) => {\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: 400,\n })\n\n const incomingElRef = useIncomingIndicator(incomingIdRef, id)\n\n return (\n \n {\n toggleExpanded()\n if (!isExpanded) {\n onExpand?.()\n }\n }}\n data-testid='blackbook-entry-header'\n >\n
    \n \n
    \n\n
    \n
    \n

    \n {toTitleCase(name)} {subheading && {subheading}}\n

    \n
    \n
    \n\n
    \n {ast && dayjs(ast).isToday() && (\n \n )}\n \n
    \n \n\n {(isExpanded || shouldRender) && (\n \n {children}\n \n )}\n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst SlimEntryHeaderStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n minHeight: '4rem',\n\n // Code Icon\n '& > div:nth-of-type(1)': {\n flexShrink: 0,\n display: 'flex',\n width: '3.5rem',\n svg: { alignSelf: 'center' },\n },\n\n // Runner Info\n '& > div:nth-of-type(2)': {\n flex: 1,\n\n h3: {\n padding: 0,\n margin: 0,\n background: 0,\n color: hexColors.nero,\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: 1,\n textTransform: 'none',\n\n span: {\n marginLeft: '0.5rem',\n fontSize: '1.2rem',\n fontWeight: 'normal',\n color: hexColors.grey2,\n },\n },\n },\n\n // Icon\n '& > div:nth-of-type(3)': {\n flexShrink: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: '4rem',\n\n // Countdown\n '> div': {\n marginTop: 0,\n marginRight: '0.5rem',\n },\n\n '> svg': {\n minWidth: '4rem',\n },\n\n button: {\n width: '4rem',\n height: '4rem',\n color: hexColors.darkGrey,\n },\n },\n})\n","import { dayjs } from '@mobi/utils/date'\nimport type { BlackbookEntryRacingToday } from '@core/Areas/Blackbook/types'\nimport { isBettingAvailable } from '@core/Areas/Blackbook/helpers'\n\nexport function sortByStartTime(a: BlackbookEntryRacingToday, b: BlackbookEntryRacingToday) {\n if (!isBettingAvailable(a.RacingTodayDetails)) return 1\n if (!isBettingAvailable(b.RacingTodayDetails)) return -1\n return a.RacingTodayDetails.AdvertisedStartTime === b.RacingTodayDetails.AdvertisedStartTime\n ? 0\n : dayjs(a.RacingTodayDetails.AdvertisedStartTime).isBefore(\n b.RacingTodayDetails.AdvertisedStartTime\n )\n ? -1\n : 1\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { SlimEntryExpandable } from '@core/Areas/Blackbook/Components/RunnerItem/Components/SlimEntryExpandable'\nimport { RunningSoonHeader } from '@core/Areas/Blackbook/Components/RunnerItem/Components/Common'\nimport { getAllJockeyRacesRunningSoon } from '@core/Areas/Blackbook/helpers/api'\nimport { BlackbookEntryRacingToday, SmartBetslipState } from '@core/Areas/Blackbook/types'\nimport { sortByStartTime } from '../../../helpers'\nimport { isBettingAvailable } from '@core/Areas/Blackbook/helpers'\n\nexport const JockeyRunningSoonEntries: React.FC<{\n id: number\n name: string\n initialRunners: BlackbookEntryRacingToday[]\n smartBetslipState: SmartBetslipState\n incomingIdRef: React.MutableRefObject\n}> = ({ id, name, initialRunners, smartBetslipState, incomingIdRef }) => {\n const [hasExpanded, setHasExpanded] = React.useState(false)\n\n const { data: runners = [] } = useQuery({\n queryFn: async () => {\n const data = await getAllJockeyRacesRunningSoon(name)\n // Initial data only returns runners for current day, jockeys api has all upcoming fixtures\n // Can't replace initial data with jockeys api, if < 4 races for today data can be deleted\n // Merge the two sets of data, using the jockeyname.ast as a key\n const runners = [...data]\n const keys = new Set(data.map(runner => keyForBlackbookEntry(runner)))\n initialRunners.forEach(runner => {\n if (keys.has(keyForBlackbookEntry(runner))) return\n runners.push(runner)\n })\n return runners.sort(sortByStartTime)\n },\n queryKey: queryKeys.blackbookRunnersForJockey(name),\n placeholderData: initialRunners,\n enabled: hasExpanded,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1_000 * 60 * 5, // 5 minutes\n })\n\n const firstRunner = runners[0]\n\n const rideCountText = React.useMemo(() => {\n if (runners.length === 1) {\n return '1 Ride'\n } else if (runners.length === 4 && !hasExpanded) {\n return `${runners.length}+ Rides`\n } else {\n return `${runners.length} Rides`\n }\n }, [runners.length, hasExpanded])\n\n if (!firstRunner) {\n return null\n }\n\n const ast =\n (isBettingAvailable(firstRunner.RacingTodayDetails) &&\n firstRunner.RacingTodayDetails.AdvertisedStartTime) ||\n undefined\n\n return (\n setHasExpanded(true)}\n >\n \n {runners.map(runner => (\n \n ))}\n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction keyForBlackbookEntry(entry: BlackbookEntryRacingToday) {\n const ast = entry.RacingTodayDetails?.AdvertisedStartTime || 'not-running'\n return `${entry.StarterName}:${entry.RiderName ?? 'unknown'}:${ast}`\n}\n\n// ======\n// Styles\n// ======\n\nconst RunnersWrapperStyled = styled.div({\n margin: '0.5rem 0',\n\n '> div': {\n padding: '1rem 0',\n borderTop: '0.1rem solid ' + hexColors.gainsboro,\n\n ':last-of-type': {\n borderBottom: '0.1rem solid ' + hexColors.gainsboro,\n },\n },\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { H3 } from '@core/Components/Text/Heading.styles'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport type { BlackbookEntryRacingToday, SmartBetslipState } from '@core/Areas/Blackbook/types'\nimport { isBettingAvailable } from '@core/Areas/Blackbook/helpers'\nimport { type BlackbookState, setSortOrderJockeys } from '@core/Areas/Blackbook/Store'\nimport { JockeyRunningSoonEntries } from './Components/JockeyRunningSoonEntries'\nimport { sortByStartTime } from '../../helpers'\n\nconst sortOptions: BlackbookState['sortOrderJockeys'][] = ['Start Time', 'Alphabetical']\n\nexport const JockeysRunningSoon: React.FC<{\n entries: BlackbookEntryRacingToday[]\n smartBetslipState: SmartBetslipState\n incomingIdRef: React.MutableRefObject\n}> = ({ entries, smartBetslipState, incomingIdRef }) => {\n const dispatch = useAppDispatch()\n const sortOrder = useAppSelector(rootState => rootState.blackbook.sortOrderJockeys)\n\n const entriesGroupedByJockey = sortJockeysAndGroup(entries, sortOrder)\n\n return (\n <>\n

    \n Running Soon\n
    \n {\n dispatch(\n setSortOrderJockeys(e.currentTarget.value as BlackbookState['sortOrderJockeys'])\n )\n }}\n data-testid='blackbook-running-soon-sort'\n >\n {sortOptions.map(value => (\n \n ))}\n \n {sortOrder}\n \n
    \n

    \n\n {entriesGroupedByJockey.map(({ id, name, runners }) => (\n \n ))}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction sortJockeysAndGroup(\n entries: BlackbookEntryRacingToday[],\n sortOrder: BlackbookState['sortOrderJockeys']\n) {\n const jockeyGroups = entries.reduce(groupByJockeys, [])\n jockeyGroups.forEach(group => group.runners.sort(sortByStartTime))\n\n if (sortOrder === 'Alphabetical') {\n return jockeyGroups.sort(sortJockeyGroupByAlphabet)\n }\n\n return jockeyGroups.sort(sortJockeyGroupByStartTime)\n}\n\nfunction groupByJockeys(jockeys: JockeysGrouped, runner: BlackbookEntryRacingToday) {\n const jockeyId = runner.Id\n const index = jockeys.findIndex(jockey => jockey.id === jockeyId)\n\n if (index === -1) {\n jockeys.push({ id: jockeyId, name: runner.RiderName as string, runners: [runner] })\n return jockeys\n }\n jockeys[index].runners.push(runner)\n return jockeys\n}\n\n// Sorting Fns\n\nconst sortJockeyGroupByAlphabet: SortFn = (a, b) => {\n if (a.name.toLowerCase() < b.name.toLowerCase()) return -1\n if (a.name.toLowerCase() > b.name.toLowerCase()) return 1\n return 0\n}\n\nconst sortJockeyGroupByStartTime: SortFn = (a, b) => {\n if (!isBettingAvailable(a.runners[0].RacingTodayDetails)) return 1\n if (!isBettingAvailable(b.runners[0].RacingTodayDetails)) return -1\n\n if (dayjs(getFirstJockeyStartTime(a)).isBefore(getFirstJockeyStartTime(b))) return -1\n if (dayjs(getFirstJockeyStartTime(b)).isBefore(getFirstJockeyStartTime(a))) return 1\n return 0\n}\n\nfunction getFirstJockeyStartTime(jockeyObj: JockeysGrouped[0]): string {\n return jockeyObj.runners[0].RacingTodayDetails.AdvertisedStartTime\n}\n\n// =====\n// Types\n// =====\n\ntype JockeysGrouped = {\n id: BlackbookEntryRacingToday['Id']\n name: string\n runners: BlackbookEntryRacingToday[]\n}[]\n\ntype SortFn = (a: JockeysGrouped[0], b: JockeysGrouped[0]) => number\n","import React from 'react'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport type { BlackbookEntryRacingToday } from '@core/Areas/Blackbook/types'\nimport { trackBlackbookEntryToggled } from '@core/Areas/Blackbook/analytics'\nimport { useIncomingIndicator } from '@core/Areas/Blackbook/Hooks/useIncomingIndicator'\nimport { RunnerCardStyled, RunningSoonHeader as Header, BlackbookEntryDetails } from '../Common'\n\nexport const RunningSoon: React.FC<{\n runner: BlackbookEntryRacingToday\n incomingIdRef: React.MutableRefObject\n shouldAutoAddToBetslip: boolean\n isSelected: boolean\n}> = ({ runner, incomingIdRef, shouldAutoAddToBetslip, isSelected }) => {\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: 400,\n })\n\n const incomingElRef = useIncomingIndicator(incomingIdRef, runner.Id)\n\n return (\n \n {\n trackBlackbookEntryToggled(!isExpanded)\n toggleExpanded()\n }}\n isExpanded={isExpanded}\n shouldAutoAddToBetslip={shouldAutoAddToBetslip}\n isSelected={isSelected}\n />\n\n {(isExpanded || shouldRender) && (\n \n )}\n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const NoRunnersStyled = styled.div({\n fontSize: '1.2rem',\n fontStyle: 'italic',\n color: hexColors.grey,\n textAlign: 'center',\n})\n","import React from 'react'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { H3 } from '@core/Components/Text/Heading.styles'\nimport { BlackbookState, setSortOrder } from '@core/Areas/Blackbook/Store'\nimport { RunningSoon } from '@core/Areas/Blackbook/Components/RunnerItem/Components/RunningSoon'\nimport { trackBlackbookSortChanged } from '@core/Areas/Blackbook/analytics'\nimport type { BlackbookEntryRacingToday, SmartBetslipState } from '@core/Areas/Blackbook/types'\nimport { isBettingAvailable } from '@core/Areas/Blackbook/helpers'\nimport { NoRunnersStyled } from '../Common/Common.styles'\nimport { sortByStartTime } from '../../helpers'\n\nconst sortOptions: BlackbookState['sortOrder'][] = [\n 'Start Time',\n 'Win Price ▲',\n 'Win Price ▼',\n 'Alphabetical',\n]\n\nexport const RunnersRunningSoon: React.FC<{\n entries: BlackbookEntryRacingToday[]\n smartBetslipState: SmartBetslipState\n incomingIdRef: React.MutableRefObject\n}> = ({ entries, smartBetslipState, incomingIdRef }) => {\n const dispatch = useAppDispatch()\n const sortOrder = useAppSelector(rootState => rootState.blackbook.sortOrder)\n\n const sortedRunners = sortRunners(entries, sortOrder)\n\n return (\n <>\n

    \n Running Soon\n
    \n {\n dispatch(setSortOrder(e.currentTarget.value as BlackbookState['sortOrder']))\n trackBlackbookSortChanged(e.currentTarget.value)\n }}\n data-testid='blackbook-running-soon-sort'\n >\n {sortOptions.map(value => (\n \n ))}\n \n {sortOrder}\n \n
    \n

    \n\n {sortedRunners.length > 0 ? (\n sortedRunners.map(runner => (\n \n ))\n ) : (\n None\n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction sortRunners(entries: BlackbookEntryRacingToday[], sortOrder: BlackbookState['sortOrder']) {\n let sortedRunners = entries.sort(sortOrderFns[sortOrder] || sortOrderFns['Start Time'])\n if (sortOrder === 'Win Price ▲' || sortOrder === 'Win Price ▼') {\n sortedRunners = Object.values(\n sortedRunners.reduce<{\n openWithPrice: BlackbookEntryRacingToday[]\n openWithNoPrice: BlackbookEntryRacingToday[]\n notOpen: BlackbookEntryRacingToday[]\n }>(\n (sortMap, curr) => {\n if (!isBettingAvailable(curr.RacingTodayDetails)) {\n sortMap.notOpen.push(curr)\n } else if (!curr.RacingTodayDetails.WinDividend) {\n sortMap.openWithNoPrice.push(curr)\n } else {\n sortMap.openWithPrice.push(curr)\n }\n return sortMap\n },\n { openWithPrice: [], openWithNoPrice: [], notOpen: [] }\n )\n ).flat()\n }\n\n return sortedRunners\n}\n\nconst sortOrderFns: Record<\n BlackbookState['sortOrder'],\n (a: BlackbookEntryRacingToday, b: BlackbookEntryRacingToday) => number\n> = {\n ['Start Time']: (a, b) => sortByStartTime(a, b),\n ['Win Price ▲']: ({ RacingTodayDetails: a }, { RacingTodayDetails: b }) => {\n if (!isBettingAvailable(a) || !a.WinDividend) return 1\n if (!isBettingAvailable(b) || !b.WinDividend) return -1\n if (a.WinDividend === b.WinDividend) return 0\n return a.WinDividend > b.WinDividend ? 1 : -1\n },\n ['Win Price ▼']: ({ RacingTodayDetails: a }, { RacingTodayDetails: b }) => {\n if (!isBettingAvailable(a) || !a.WinDividend) return 1\n if (!isBettingAvailable(b) || !b.WinDividend) return -1\n if (a.WinDividend === b.WinDividend) return 0\n return a.WinDividend > b.WinDividend ? -1 : 1\n },\n ['Alphabetical']: (a, b) =>\n a.StarterName === b.StarterName ? 0 : a.StarterName > b.StarterName ? 1 : -1,\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport type { Iterable } from 'immutable'\nimport {\n isFobMatchedSelection,\n isFobSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { getEnhancedBetslipSetting } from '@core/Areas/Settings/Store/selectors'\nimport { type BetslipItem, state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport type { SmartBetslipState } from '@core/Areas/Blackbook/types'\nimport { store } from '@core/Store'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { BetSlipItem, ToteSelection } from '@mobi/betslip/types'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport { isAnyOf } from '@reduxjs/toolkit'\nimport {\n addItemsToBetSlip,\n clearAllBetSlipItems,\n removeItemFromBetSlipById,\n clearAllReceiptsFromItems,\n removeItemsWithReceipt,\n removeItemsWithFatalError,\n} from '@mobi/betslip/Store/Bets'\nimport dayjs from 'dayjs'\n\n/**\n * @param isNewBetSlipFeatureActive\n * @param includeTote true if logic should be applied to totes instead of fobs (the 2 are calculated separately)\n * @returns\n */\nexport function useSmartBetSlip(\n isNewBetSlipFeatureActive: boolean,\n opts: { includeTote?: boolean } = {}\n) {\n const includeTote = opts.includeTote || false\n const isSmartBetslipActive = useSelector(getEnhancedBetslipSetting)\n\n const [state, setState] = React.useState({\n shouldAutoAddToBetslip: false,\n isSmartBetslipFeatureActive: isSmartBetslipActive,\n betslipFobPropSeqs: [],\n betslipToteIds: [],\n })\n\n React.useEffect(() => {\n if (!isSmartBetslipActive || !isNewBetSlipFeatureActive) {\n return\n }\n\n const handler = () => {\n const items = selectBetSlipItems(store.getState())\n setState(deriveReactStateFromBetSlip(includeTote, isSmartBetslipActive, items))\n }\n handler()\n const dispose = startListening({\n matcher: isAnyOf(\n addItemsToBetSlip,\n clearAllBetSlipItems,\n removeItemFromBetSlipById,\n clearAllReceiptsFromItems,\n removeItemsWithReceipt,\n removeItemsWithFatalError\n ),\n effect: handler,\n })\n return () => dispose()\n }, [isSmartBetslipActive, isNewBetSlipFeatureActive, includeTote])\n\n React.useEffect(() => {\n if (!isSmartBetslipActive || isNewBetSlipFeatureActive) {\n return\n }\n\n const subscription = betslipState$\n .map(x => x.items)\n .distinctUntilChanged()\n .map(state => deriveReactStateFromLegacyBetslip(includeTote, isSmartBetslipActive, state))\n .subscribe(propSeqs => {\n setState(propSeqs)\n })\n return () => subscription.dispose()\n }, [isSmartBetslipActive, isNewBetSlipFeatureActive, includeTote])\n\n React.useEffect(() => {\n if (!isSmartBetslipActive) {\n setState({\n shouldAutoAddToBetslip: false,\n isSmartBetslipFeatureActive: isSmartBetslipActive,\n betslipFobPropSeqs: [],\n betslipToteIds: [],\n })\n }\n }, [isSmartBetslipActive])\n\n return state\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction deriveReactStateFromLegacyBetslip(\n includeTote: boolean,\n isSmartBetslipFeatureActive: boolean,\n items: Iterable\n): SmartBetslipState {\n const arr = items.toArray()\n return deriveReactStateFromBetSlip(includeTote, isSmartBetslipFeatureActive, arr)\n}\n\nfunction deriveReactStateFromBetSlip(\n includeTote: boolean,\n isSmartBetslipFeatureActive: boolean,\n items: BetSlipItem[] | BetslipItem[]\n): SmartBetslipState {\n const fobArr = items.filter(x => x && isFobSelection(x.selection))\n\n const propSeqs = fobArr\n .filter(x => !x.receipt)\n .flatMap(item =>\n item && isFobMatchedSelection(item.selection) ? [Number(item.selection.propositionSeq)] : []\n )\n\n let totes: string[] = []\n\n if (includeTote) {\n const totesArr = items.filter(x => x && isToteSelection(x.selection))\n totes = totesArr\n .filter(x => !x.receipt)\n .flatMap(item =>\n item && isToteSelection(item.selection)\n ? item.selection.selectionString.split('.').map(ac => {\n const sel = item.selection as ToteSelection\n return `${dayjs(sel.fixtureDate).format('YYYY-MM-DD')}#${sel.fixtureId}#${sel.raceNumber}#${ac}`\n })\n : []\n )\n }\n return {\n shouldAutoAddToBetslip: items.length > 0,\n betslipFobPropSeqs: propSeqs,\n betslipToteIds: totes,\n isSmartBetslipFeatureActive,\n }\n}\n","import dayjs from 'dayjs'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\nimport { MIN_LEGS_IN_MULTI, MAX_LEGS_IN_RACE_MULTI } from '@mobi/betslip/helpers/constants'\nimport { isRaceDetails, isFobDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { groupBy } from '@mobi/utils/functions'\n\nexport function getMultiBetslipItems(betslipItems: BetslipItem[]) {\n // item must be in multi, i.e. fixed odds and checked\n const multiBetslipItems = betslipItems.filter(item => item.isInMulti)\n\n // every betslip item must be on a unique race (matched) or event (unmatched, challenges, etc)\n const betslipItemsGroupedByRaceOrEvent = groupBy(multiBetslipItems, item => {\n if (isRaceDetails(item.selectionDetails)) return item.selectionDetails.races[0].key\n else if (isFobDetails(item.selectionDetails)) return item.selectionDetails.event\n\n // should not be possible\n return ''\n })\n\n const groupedRaces = Object.entries(betslipItemsGroupedByRaceOrEvent)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const hasNoSameRaceBetslipItems = groupedRaces.every(([_, races]) => races.length == 1)\n\n // min 2 and max 10 legs allowed\n const hasSufficientBetslipItems =\n multiBetslipItems.length >= MIN_LEGS_IN_MULTI &&\n multiBetslipItems.length <= MAX_LEGS_IN_RACE_MULTI\n\n const isEveryRaceOpen = multiBetslipItems.every(item => {\n if (isRaceDetails(item.selectionDetails)) {\n // matched race\n return isRaceOpen(item.selectionDetails.races[0].raceTime)\n } else if (isFobDetails(item.selectionDetails)) {\n // unmatched race\n return isRaceOpen(item.selectionDetails.eventStartTime)\n }\n return false\n })\n\n return {\n isValidMulti: hasSufficientBetslipItems && hasNoSameRaceBetslipItems && isEveryRaceOpen,\n multiBetslipItems,\n }\n}\n\nfunction isRaceOpen(raceTime: string | Date): boolean {\n // an open race is considered to be any which has an AST that is NOT more than 15minutes in the past\n // - ideally we would use the race status (open, close, abandoned, etc), but unfortunately the betslip race info\n // isn't automatically updated (e.g. via tabtouch-push)\n const raceTimeDayjs = dayjs(raceTime)\n return raceTimeDayjs.diff(dayjs(), 'minute') >= -15\n}\n","import styled from '@emotion/styled'\nimport { transparentize } from 'polished'\nimport { hexColors } from '@mobi/settings'\n\ninterface BettingDrawerStyledProps {\n show: boolean\n changed: boolean\n}\n\nexport const MultiToastContainerStyled = styled('div')(\n {\n position: 'fixed',\n bottom: '6rem',\n right: '10px',\n height: '50px',\n minWidth: '170px',\n boxSizing: 'border-box',\n borderRadius: '5px',\n zIndex: 8,\n backgroundColor: transparentize(0.05, hexColors.charCoal),\n display: 'flex',\n paddingLeft: '15px',\n paddingRight: '15px',\n },\n ({ show, changed }) => ({\n // show: show/hide via opacity for a 'disolve' effect.. immediate to show and slow to hide\n // changed: slide in/out.. quick to slide in and slow to slide out\n transition: `transform ${changed ? '0.3s ease-out' : '1.5s ease-in'},\n opacity ${show ? '0s' : '0.5s ease-out'}`,\n\n transform: `translateX(${changed ? '0px' : '250px'})`,\n\n // conditionally apply the transform only if it should be shown\n // - this stops the slide right transform happening at the same time as the opacity to zero\n // - https://stackoverflow.com/a/73518427/227110\n // ...(show ? { transform: `translateX(${changed ? '0px' : '160px'})` } : {}),\n\n opacity: `${show ? '1' : '0'}`,\n })\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings/src/hexColors'\n\nexport const MultiToastPriceContainerStyled = styled('div')({\n fontSize: '1.6rem',\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n justifyContent: 'space-between',\n})\n\nexport const MultiToastPriceTitleStyled = styled('div')({\n color: hexColors.white,\n})\n\nexport const MultiToastPriceAmountStyled = styled('div')({\n color: hexColors.lemon,\n fontWeight: 'bold',\n display: 'flex',\n})\n\nexport const MultiToastPriceAmountPrefixStyled = styled('div')({\n marginTop: '0px',\n marginLeft: '10px',\n})\n","import React, { useEffect, useRef, useState } from 'react'\nimport { BetslipItem } from '@core/Areas/Betslip/driver'\n\nimport { Odometer } from '@core/Components/Odometer'\nimport { calculateMultiReturn } from '@core/Areas/Betslip/helpers/calculator'\nimport * as immutable from 'immutable'\nimport {\n MultiToastPriceContainerStyled,\n MultiToastPriceTitleStyled,\n MultiToastPriceAmountStyled,\n MultiToastPriceAmountPrefixStyled,\n} from './MultiToastPrice.styles'\n\nconst animationDuration = 700\n\nexport function MultiToastPrice({ betslipItems }: { betslipItems: BetslipItem[] }) {\n // deliberately using ref instead of state to avoid unnecessary re-rendering of the Odometer\n const oldPrice = useRef(0)\n const newPrice = useRef(0)\n\n const [odometerReady, setOdometerReady] = useState(false)\n const [startAnim, setStartAnim] = useState(false)\n\n useEffect(() => {\n // Odometer workaround - animation does not start if it's used 'too soon' after being mounted\n // - likely an issue with the underlying browser (worse on safari) and/or React's render/commit.. but not proven\n const timerId = setTimeout(() => setOdometerReady(true), 30)\n return () => clearTimeout(timerId)\n }, [])\n\n useEffect(() => {\n oldPrice.current = newPrice.current\n newPrice.current = calculateMultiReturn(immutable.List(betslipItems), { shouldRound: true })\n setStartAnim(true)\n\n const timeoutId = setTimeout(() => {\n // Odometer workaround - when setting animation to false it will revert the display to the start value, which is not desirable\n oldPrice.current = newPrice.current\n\n // Odometer workaround - the animation must be assigned false for a 'period of time' before it can be started again\n setStartAnim(false)\n }, animationDuration)\n\n return () => clearTimeout(timeoutId)\n }, [betslipItems])\n\n return (\n \n Multi\n \n $\n \n \n \n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { BetslipExpandableTypes, BetslipItem } from '@core/Areas/Betslip/driver'\nimport { CloseBetslipExpandable } from '@core/Areas/Betslip/signals'\nimport { OverlayOpen } from '@core/Components/Overlay'\nimport { Betslip } from '@core/Areas/Betslip/Betslip'\nimport { MultiToastContainerStyled } from './MultiToast.styles'\nimport { MultiToastPrice } from './MultiToastPrice'\n\nexport const MultiToast: React.FC<{ show: boolean; betslipItems: BetslipItem[] }> = ({\n show,\n betslipItems,\n}) => {\n const [changed, setChanged] = React.useState(false)\n\n React.useEffect(() => {\n // show == true means there is a valid multi in selected betslip items\n if (!show) {\n setChanged(false)\n return\n }\n\n setChanged(true)\n\n const timerId = window.setTimeout(() => {\n setChanged(false)\n }, 4000)\n\n return () => {\n window.clearTimeout(timerId)\n }\n }, [show, betslipItems])\n\n return ReactDOM.createPortal(\n \n {show && }\n ,\n document.body\n )\n}\n\nfunction handleOnClick() {\n CloseBetslipExpandable(BetslipExpandableTypes.single)\n OverlayOpen(Betslip)\n trackKey('multi_toast_clicked')\n}\n","import React from 'react'\nimport { type BetslipItem, state$ as betslipState$ } from '@core/Areas/Betslip/driver'\nimport { calculateMultiReturn } from '@core/Areas/Betslip/helpers/calculator'\nimport { getMultiBetslipItems } from '@core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/helpers/getMultiBetslipItems'\nimport { MultiToast } from '@core/Areas/Racing/Components/SmartBetSlip/Components/MultiToast/MultiToast'\n\nexport const SmartBetslipToast: React.FC = React.memo(() => {\n const multiReturnRef = React.useRef()\n const hasRunFirstSubscriptionCBRef = React.useRef(false)\n\n const [state, setState] = React.useState({\n shouldShow: false,\n multiBetslipItems: [],\n })\n\n React.useEffect(() => {\n const subscription = betslipState$.subscribe(state => {\n if (state.isOpen) return\n\n const { isValidMulti, multiBetslipItems } = getMultiBetslipItems(state.items.toArray())\n\n if (!isValidMulti) {\n multiReturnRef.current = 0\n setState({ shouldShow: false, multiBetslipItems: [] })\n return\n }\n\n const newMultiReturn = calculateMultiReturn(state.items, { shouldRound: true })\n\n if (hasRunFirstSubscriptionCBRef.current && multiReturnRef.current !== newMultiReturn) {\n setState({ shouldShow: true, multiBetslipItems })\n }\n multiReturnRef.current = newMultiReturn\n })\n\n hasRunFirstSubscriptionCBRef.current = true\n\n return () => subscription.dispose()\n }, [])\n\n return \n})\n\n// Types\n\ntype SmartBetslipToastState = {\n shouldShow: boolean\n multiBetslipItems: BetslipItem[]\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { useIsNewBetSlipFeatureActive } from '@core/Areas/BetSlipNew/hooks'\nimport { getEnhancedBetslipSetting } from '@core/Areas/Settings/Store/selectors'\nimport { SmartBetslipToast } from './Components/MultiToast/Components/SmartBetslipToast'\n\nexport const SmartBetSlipMultiToastLegacy: React.FC = React.memo(() => {\n const isSmartBetslipSettingActive = useSelector(getEnhancedBetslipSetting)\n const isNewBetslipFeatureActive = useIsNewBetSlipFeatureActive()\n\n if (isNewBetslipFeatureActive || !isSmartBetslipSettingActive) {\n return null\n }\n return \n})\n","import React from 'react'\nimport QueryString from 'query-string'\nimport { useLocation } from 'react-router-dom'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { H3 } from '@core/Components/Text/Heading.styles'\nimport type {\n BlackbookEntry,\n BlackbookEntryNotRacing,\n BlackbookEntryRacingToday,\n} from '@core/Areas/Blackbook/types'\nimport { trackBlackbookChangeView } from '@core/Areas/Blackbook/analytics'\nimport { JockeysRunningSoon, RunnersRunningSoon } from './Components'\nimport { SlimEntryExpandable } from '../../../RunnerItem/Components/SlimEntryExpandable'\nimport { useIsNewBetSlipFeatureActive } from '@core/Areas/BetSlipNew/hooks'\nimport { useSmartBetSlip } from '@core/Areas/Racing/Components/SmartBetSlip/hooks/useSmartBetSlip'\nimport { SmartBetSlipMultiToastLegacy } from '@core/Areas/Racing/Components/SmartBetSlip/SmartBetSlipMultiToastLegacy'\n\nexport const RunnerListWithData: React.FC<{ entries: BlackbookEntry[] }> = ({ entries }) => {\n const isNewBetslipFeatureActive = useIsNewBetSlipFeatureActive()\n const smartBetslipState = useSmartBetSlip(isNewBetslipFeatureActive)\n\n const { incoming, view } = QueryString.parse(useLocation().search) as SearchParams\n const incomingIdRef = React.useRef(incoming)\n\n const [currentFilterType, setCurrentFilterType] = React.useState(() =>\n getEntryTabType({ entries, incoming, view })\n )\n\n const filteredEntries = entries.filter(entry =>\n currentFilterType === 'Jockeys' ? entry.Code === 'Jockeys' : entry.Code !== 'Jockeys'\n )\n\n const racingToday = getEntriesRacingToday(filteredEntries)\n const allOther = getEntriesNotRacing(filteredEntries)\n\n const handleFilterClick = (type: FilterTypes) => () => {\n if (currentFilterType === type) return\n setCurrentFilterType(type)\n trackBlackbookChangeView(type)\n }\n\n return (\n \n {smartBetslipState.shouldAutoAddToBetslip && }\n\n
    \n \n Runners\n \n \n Jockeys\n \n
    \n\n {currentFilterType === 'Jockeys' ? (\n \n ) : (\n \n )}\n\n {allOther.length > 0 && (\n <>\n

    All Other {currentFilterType}

    \n {allOther.map(runner => (\n \n ))}\n \n )}\n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getEntriesRacingToday(entries: BlackbookEntry[]): BlackbookEntryRacingToday[] {\n const runningSoonEntries = entries.filter(entry => entry.RacingToday)\n if (!hasRunnersRacingToday(runningSoonEntries)) return []\n return runningSoonEntries\n}\n\nfunction getEntriesNotRacing(entries: BlackbookEntry[]): BlackbookEntryNotRacing[] {\n return entries.filter(entry => !entry.RacingToday) as BlackbookEntryNotRacing[]\n}\n\nfunction hasRunnersRacingToday(runners: BlackbookEntry[]): runners is BlackbookEntryRacingToday[] {\n return !!runners.length\n}\n\nfunction getEntryTabType({\n entries,\n incoming,\n view,\n}: {\n entries: BlackbookEntry[]\n incoming?: string\n view?: string\n}): FilterTypes {\n if (incoming && Number.isInteger(+incoming)) {\n return entries.some(entry => entry.Id === +incoming && entry.Code === 'Jockeys')\n ? 'Jockeys'\n : 'Runners'\n }\n\n if (view && typeof view === 'string') {\n window.history.replaceState('', document.title, '/#account/blackbook')\n return view.toLowerCase() === 'jockeys' ? 'Jockeys' : 'Runners'\n }\n\n return 'Runners'\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n '[data-js-bb-entry-filter]': {\n display: 'flex',\n padding: '0.5rem 1rem',\n\n button: {\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '4rem',\n fontSize: '1.2rem',\n background: hexColors.white,\n border: 0,\n color: hexColors.black,\n\n '&[data-js-bb-entry-filter-active=\"true\"]': {\n background: hexColors.vividViolet,\n color: hexColors.white,\n },\n\n span: { position: 'relative' },\n },\n },\n\n // List titles\n '& > h3': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '3rem',\n margin: '1rem 0 0.5rem',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n\n // Select Holder\n '& > div': {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: '3rem',\n\n 'svg, span': {\n position: 'absolute',\n right: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n color: hexColors.studio,\n },\n\n svg: { right: 0 },\n\n span: {\n width: 'auto',\n right: '1.5rem',\n fontSize: '1.2rem',\n fontWeight: 'normal',\n lineHeight: 1,\n textAlign: 'right',\n },\n\n select: {\n opacity: 0,\n position: 'relative',\n zIndex: 1,\n boxSizing: 'border-box',\n height: '3rem',\n margin: 0,\n padding: 0,\n paddingRight: '1.5rem',\n background: 0,\n fontSize: '1.2rem',\n appearance: 'none',\n MozAppearance: 'none',\n MozUserSelect: 'none',\n WebkitAppearance: 'none',\n cursor: 'pointer',\n },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype SearchParams = {\n incoming?: string\n view?: Lowercase\n}\ntype FilterTypes = 'Jockeys' | 'Runners'\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useHistory } from 'react-router-dom'\nimport { debounceFn } from '@mobi/utils'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport type { BlackbookEntry } from '@core/Areas/Blackbook/types'\nimport { RunnerListWithData } from './Components/RunnerListWithData'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const RunnerList: React.FC<{\n isLoading: boolean\n isError: boolean\n refetch(): void\n entries?: BlackbookEntry[] | null\n}> = ({ isLoading, isError, entries, refetch }) => {\n const history = useHistory()\n if (isLoading) {\n return (\n \n \n \n )\n }\n\n if (isError || !entries) {\n return (\n \n refetch(), 1000)}\n noticeBoxType={NoticeBoxTypes.Error}\n />\n \n )\n }\n\n if (!entries || entries.length === 0) {\n return (\n \n history.push(AppRoutes.NextEvents[0])}\n />\n \n )\n }\n\n return (\n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n padding: '0.5rem',\n})\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { RaceDayAlertPreference, RunnerList } from '@core/Areas/Blackbook/Components'\nimport { getBlackbookDetails } from '@core/Areas/Blackbook/helpers/api'\n\nexport const Blackbook: React.FC = () => {\n const { isLoading, isError, data, refetch } = useQuery({\n queryKey: queryKeys.blackbookDetails,\n queryFn: getBlackbookDetails,\n retry: false,\n cacheTime: 0,\n refetchOnWindowFocus: false,\n })\n\n return (\n \n \n\n \n\n \n \n )\n}\n","import { fontFamiliesBold } from '@core/Settings/fonts'\nimport styled from '@emotion/styled'\nimport { colors, hexColors } from '@mobi/settings'\n\nexport const TransactionTabsStyled = styled('div')({\n height: '4.8rem',\n display: 'flex',\n background: colors.brand.primary,\n})\n\nexport const TransactionTabStyled = styled('a')({\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n margin: '0 0.1rem',\n fontSize: '1.4rem',\n textDecoration: 'none',\n color: colors.text.light,\n background: hexColors.vividViolet,\n\n '&:first-of-type, &:last-of-type': {\n margin: 0,\n },\n})\n\nexport const TransactionTabActiveStyled = styled(TransactionTabStyled)({\n pointerEvents: 'none',\n color: colors.text.dark,\n background: colors.kambi.container.background,\n})\n\nexport const RacingTransactionTitleStyled = styled('div')({\n display: 'flex',\n alignItems: 'center',\n height: '4.8rem',\n padding: '0.8rem 0',\n background: colors.kambi.container.background,\n\n '& > h1': {\n margin: 0,\n paddingLeft: '1.5rem',\n fontFamily: fontFamiliesBold.brand,\n fontSize: '2rem',\n color: colors.brand.primary,\n },\n})\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Tabs } from '@core/Areas/AccountActivity/types'\nimport {\n RacingTransactionTitleStyled,\n TransactionTabActiveStyled as TabActive,\n TransactionTabStyled as Tab,\n TransactionTabsStyled as TransactionTabs,\n} from './RacingSportsTabs.styles'\nimport { KAMBI_PENDING_HASH_ROUTE } from '@core/Areas/Kambi/constants'\n\ntype ActiveTabs = Tabs | 'sports'\n\nconst racingTabs: ActiveTabs[] = ['pending', 'results', 'rebet']\n\nexport const RacingSportsTabs: React.FC<{ activeTab: ActiveTabs; isRacing?: boolean }> = ({\n isRacing,\n activeTab,\n}) => {\n return (\n <>\n \n \n Racing Bets\n \n\n \n Sports Bets\n \n\n \n Debit / Credit\n \n \n\n {isRacing && (\n \n

    \n My {activeTab === 'transactions' ? 'Debit / Credit' : 'Racing Bets'}\n

    \n
    \n )}\n \n )\n}\n","import { RootState } from '@core/Store'\nimport type { SortOrder } from '@core/Areas/AccountActivity/types'\n\nexport function getPendingSortOrder(state: RootState): SortOrder {\n return state.accountActivity.pendingSortOrder\n}\n\nexport function getResultsSortOrder(state: RootState): SortOrder {\n return state.accountActivity.resultsSortOrder\n}\n","import React from 'react'\nimport { useFeature } from '@core/Utils/hooks'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { Tabs } from '@core/Areas/AccountActivity/types'\n\ninterface RebetTicketsCountResponse {\n rebetTicketsCount: number\n}\n\ninterface RebetCount {\n isReBetFeatureActive: boolean\n hasRebetBadge: boolean\n isRebetCountMax: boolean\n rebetTicketsCount: number | undefined\n fetchRebetCount: () => void\n}\n\nexport const useRebetBetCount = (activeTab: Tabs): RebetCount => {\n const isReBetFeatureActive = useFeature('REBET_TAB')\n const [rebetTicketsCount, setRebetTicketsCount] = React.useState(0)\n const isRebetCountMax = !!rebetTicketsCount && rebetTicketsCount >= 99\n const hasRebetBadge = !!rebetTicketsCount && rebetTicketsCount > 0\n\n const fetchRebetCount = React.useCallback(() => {\n if (isReBetFeatureActive)\n getRebetTicketsCount()\n .then(res => setRebetTicketsCount(res))\n .catch(() => setRebetTicketsCount(0))\n }, [isReBetFeatureActive])\n\n React.useEffect(() => {\n fetchRebetCount()\n }, [activeTab, fetchRebetCount])\n\n return {\n isReBetFeatureActive,\n hasRebetBadge,\n isRebetCountMax,\n rebetTicketsCount,\n fetchRebetCount,\n }\n}\n\nconst getRebetTicketsCount = async (): Promise => {\n let count = 0\n\n await get({ url: '/$_/accountActivity/tickets/rebet/count' }).then(\n res => {\n if (res && res.rebetTicketsCount) {\n count = res.rebetTicketsCount\n }\n }\n )\n\n return count\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\nimport type { Ticket, Transaction } from '@core/Areas/AccountActivity/types'\n\nexport const DATE_HEADER_DATA_SELECTOR = 'data-js-account-activity-date-header'\n\ntype DateHeaderProps = {\n latestDateRef: React.MutableRefObject\n isFirstDate: boolean\n} & (\n | {\n timestamp: Transaction['timestamp']\n isOrderByEvent?: never\n eventStartDateTime?: never\n }\n | {\n timestamp: Ticket['timestamp']\n eventStartDateTime: Ticket['eventStartDateTime']\n isOrderByEvent: boolean\n }\n)\n\nexport const DateHeader: React.FC = ({\n latestDateRef,\n isOrderByEvent,\n timestamp,\n eventStartDateTime,\n isFirstDate,\n}) => {\n const ticketDate = isOrderByEvent ? eventStartDateTime : timestamp\n const ticketDisplayDate = dayjs(ticketDate).isValid()\n ? dayjs(ticketDate).startOf('day').format('D MMMM YYYY')\n : ''\n\n const shouldHideDate = isFirstDate || latestDateRef.current === ticketDisplayDate\n\n if (!latestDateRef.current || latestDateRef.current !== ticketDisplayDate) {\n latestDateRef.current = ticketDisplayDate\n }\n\n if (shouldHideDate) return null\n\n const dateDataSelectorWithValue = { [DATE_HEADER_DATA_SELECTOR]: '' }\n\n return (\n
    \n \n \n {ticketDisplayDate}\n \n \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst DateHeaderLabelStyled = styled.div({\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.neutral[900],\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { colors, font } from '@mobi/component-library/Theme/Common'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\n\nconst enum LocalConstants {\n PreviousDateClass = 'acc-act__header__prev-date',\n}\n\nexport const HeaderDate: React.FC<{ date: string; isOrderByEvent: boolean }> = React.memo(\n ({ date, isOrderByEvent }) => {\n const previousDisplayDateRef = React.useRef('')\n\n React.useEffect(() => {\n previousDisplayDateRef.current = date\n }, [date])\n\n const prevDate = previousDisplayDateRef.current\n const shouldFindTimeDiff = date && prevDate && date !== prevDate\n\n const isNewDateBefore = shouldFindTimeDiff\n ? isOrderByEvent\n ? dayjs(date).isAfter(prevDate)\n : dayjs(date).isBefore(prevDate)\n : null\n\n return (\n \n \n {date ? (\n <>\n {date}\n \n {prevDate}\n \n \n ) : (\n \n \n \n )}\n \n \n )\n }\n)\n\n// ======\n// Styles\n// ======\n\nconst AccountActivityHeaderDateStyled = styled.div({\n flex: 1,\n position: 'relative',\n overflowY: 'hidden',\n marginLeft: '1rem',\n})\n\ntype DateAnimationDirection = 'up' | 'down' | 'neutral'\n\nconst AccountActivityDateStyled = styled.div<{\n direction: DateAnimationDirection\n}>(\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n overflow: 'hidden',\n width: '100%',\n height: '4.8rem',\n color: colors.lavender[700],\n transition: 'transform 1s ease',\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n fontWeight: font.weight.medium,\n lineHeight: font.size.md.lineHeight,\n\n '& > span': {\n display: 'flex',\n alignItems: 'center',\n minHeight: '4.8rem',\n position: 'absolute',\n top: 0,\n overflow: 'hidden',\n },\n\n '@keyframes animateUp': {\n '0%': {\n transform: 'translate3d(0, 100%, 0)',\n opacity: 0,\n },\n '90%': {\n opacity: 1,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n },\n },\n\n '@keyframes animateDown': {\n '0%': {\n transform: 'translate3d(0, -100%, 0)',\n opacity: 0,\n },\n '90%': {\n opacity: 1,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n },\n },\n },\n ({ direction }) => {\n if (direction === 'neutral') return undefined\n\n return {\n '& > span': {\n animation: `${direction === 'down' ? 'animateDown' : 'animateUp'} 0.4s ease-out`,\n },\n\n [`.${LocalConstants.PreviousDateClass}`]: {\n transform: `translateY(${direction === 'down' ? '100%' : '-100%'})`,\n animation: `${direction === 'down' ? 'animateUp' : 'animateDown'} 0.4s ease-in reverse`,\n },\n }\n }\n)\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link, useParams } from 'react-router-dom'\nimport { font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport {\n getPendingSortOrder,\n getResultsSortOrder,\n} from '@core/Areas/AccountActivity/Store/selectors'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { fontFamilies, fontFamiliesBold } from '@core/Settings'\nimport type { SortOrder, Tabs } from '@core/Areas/AccountActivity/types'\nimport { setPendingSortOrder, setResultsSortOrder } from '@core/Areas/AccountActivity/Store'\nimport { ACCOUNT_ACTIVITY_ROUTE } from '@core/Areas/AccountActivity/constants'\nimport { useRebetBetCount } from './hooks/useRebetBetCount'\nimport { useHeaderScrollEvents } from './hooks/useScrollHeaderEvents'\nimport { HeaderDate } from './Components/HeaderDate'\n\nconst EVENT_START: SortOrder = 'eventStart'\nconst BET_PLACED: SortOrder = 'betPlaced'\n\nconst MONTHS_FOR_HISTORY_SELECT = [...Array(24).keys()]\n\nconst enum LocalConstants {\n ActiveNavClass = 'account-activity__nav--active',\n KambiBetHistoryBarHeight = '4.8rem', // 48px on Kambi\n kambiBetHistoryBarColor = '#29193d',\n}\n\nexport const Header: React.FC<{\n firstDate: string\n setSelectedDate: React.Dispatch\n selectedDate: string\n onRefresh: () => void\n}> = ({ firstDate, setSelectedDate, selectedDate, onRefresh }) => {\n const { tab: activeTab } = useParams<{ tab: Tabs }>()\n\n const dispatch = useDispatch()\n const pendingSortOrder = useSelector(getPendingSortOrder)\n const resultsSortOrder = useSelector(getResultsSortOrder)\n\n const rebetInsights = useRebetBetCount(activeTab)\n\n const { fixedHeaderWrapperElRef, fixedHeaderElRef, displayDate } = useHeaderScrollEvents({\n firstDate,\n })\n\n const isPendingTab = activeTab === 'pending'\n const isResultsTab = activeTab === 'results'\n const isRebetTab = activeTab === 'rebet'\n const isTransactionsTab = activeTab === 'transactions'\n const isOrderByEvent =\n (isPendingTab && pendingSortOrder === 'eventStart') ||\n // TODO: Remove upon confirmation that result sort by event is DESC\n // (isResultsTab && resultsSortOrder === 'eventStart') ||\n isRebetTab\n\n const handlePendingSortOrderChange = (e: React.ChangeEvent) => {\n dispatch(setPendingSortOrder(e.target.value as SortOrder))\n }\n\n const handleResultsSortOrderChange = (e: React.ChangeEvent) => {\n dispatch(setResultsSortOrder(e.target.value as SortOrder))\n }\n\n const handlSelectedDateChange = (e: React.ChangeEvent) => {\n setSelectedDate(e.currentTarget.value)\n }\n\n const handleRefresh = () => {\n onRefresh()\n rebetInsights.fetchRebetCount()\n }\n\n return (\n
    \n \n {!isTransactionsTab && (\n \n \n \n Pending\n \n \n\n \n \n Resulted\n \n \n\n {rebetInsights.isReBetFeatureActive && (\n \n \n Re-Bet\n {rebetInsights.hasRebetBadge && (\n \n {rebetInsights.rebetTicketsCount}\n \n )}\n \n \n )}\n \n )}\n\n \n
    \n {isPendingTab ? (\n \n \n \n \n \n\n \n \n ) : isResultsTab ? (\n \n \n \n \n \n\n \n \n ) : (\n \n {activeTab === 'transactions' && 'Date'}\n {activeTab === 'rebet' && 'Event Start'}\n \n )}\n\n \n \n\n {(isResultsTab || isTransactionsTab) && (\n <>\n \n \n \n\n \n {MONTHS_FOR_HISTORY_SELECT.map(monthNumber => {\n const date = dayjs().subtract(monthNumber, 'months').date(1)\n return (\n \n )\n })}\n \n \n )}\n \n
    \n\n \n \n \n
    \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst HeaderContainerStyled = styled.div({\n display: 'block',\n top: 0,\n backfaceVisibility: 'hidden',\n margin: 0,\n width: '100%',\n maxWidth: '80em',\n transform: 'translateZ(0)',\n zIndex: 9,\n position: 'relative',\n})\n\nconst TabNavStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n height: LocalConstants.KambiBetHistoryBarHeight,\n padding: '0 0.8rem',\n backgroundColor: LocalConstants.kambiBetHistoryBarColor,\n\n '& > a': {\n display: 'flex',\n alignItems: 'center',\n height: LocalConstants.KambiBetHistoryBarHeight,\n fontSize: '1.3rem',\n fontFamily: fontFamilies.brand,\n textDecoration: 'none',\n\n '& > span': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 1rem',\n minWidth: 'auto',\n height: '2.4rem',\n color: 'rgba(255, 255, 255, 0.7)',\n background: 'transparent',\n borderRadius: '1.6rem',\n marginRight: '0',\n\n '&:hover': {\n background: 'rgba(255, 255, 255, 0.12)',\n },\n\n [`&.${LocalConstants.ActiveNavClass}`]: {\n fontFamily: fontFamiliesBold.brand,\n color: colors.white,\n background: 'rgba(255, 255, 255, 0.12)',\n pointerEvents: 'none',\n },\n },\n },\n})\n\nconst SortingBarStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n minHeight: spacing.lg,\n padding: `0 ${spacing.md}`,\n fontSize: '1.2rem',\n background: colors.white,\n\n '> div:first-of-type': {\n position: 'relative',\n flex: 1,\n display: 'flex',\n },\n})\n\nconst DateLabelStyled = styled.span({\n display: 'flex',\n alignItems: 'center',\n marginLeft: '1rem',\n marginRight: '1rem',\n fontSize: '1.4rem',\n color: 'grey',\n})\n\nconst SortButtonWrapperStyled = styled.div({\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n minWidth: '9.5rem',\n border: 0,\n margin: 0,\n\n '& > select': {\n display: 'block',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n boxSizing: 'border-box',\n width: '100%',\n margin: 0,\n padding: 0,\n borderRadius: 0,\n border: 0,\n background: 'none',\n appearance: 'none',\n MozAppearance: 'none',\n WebkitAppearance: 'none',\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.lavender[700],\n outline: 'none',\n cursor: 'pointer',\n MozUserSelect: 'none',\n },\n\n '& > span': {\n position: 'absolute',\n right: `-${spacing.smx2}`,\n width: '2.5rem',\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n fill: colors.lavender[700],\n },\n})\n\nconst SecondayHeaderIconStyled = styled.div({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n marginLeft: spacing.smx1,\n})\n\nconst SecondaryDateSelectStyled = styled.select({\n position: 'absolute',\n left: 0,\n right: 0,\n top: '50%',\n width: '100%',\n minHeight: '4rem',\n transform: 'translateY(-50%)',\n height: '100%',\n opacity: 0.01,\n fontSize: '1.4rem',\n})\n\nconst DateWrapperStyled = styled.div({\n position: 'relative',\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n})\n\nconst RefreshButtonStyled = styled(SecondayHeaderIconStyled)({\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '4rem',\n padding: 0,\n border: 0,\n background: 'none',\n fontSize: 'inherit',\n textDecoration: 'none',\n margin: 0,\n}).withComponent('button')\n\nconst RebetCountBadgeStyled = styled.span<{ isMaxCount?: boolean }>(\n {\n display: 'inline-block',\n marginLeft: '0.5rem',\n marginRight: 'auto',\n width: '2rem',\n minWidth: '2rem',\n height: '2rem',\n borderRadius: '50%',\n lineHeight: '2rem',\n textAlign: 'center',\n backgroundColor: colors.error[600],\n color: colors.white,\n },\n ({ isMaxCount = false }) => ({\n fontSize: isMaxCount ? '1rem' : '1.2rem',\n ...(isMaxCount && {\n '&::after': {\n content: '\"+\"',\n letterSpacing: '-2px',\n },\n }),\n })\n)\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { shadow } from '@mobi/component-library/Theme/Common'\nimport { throttle } from '@core/Utils'\nimport { DATE_HEADER_DATA_SELECTOR } from '@core/Areas/AccountActivity/Components/PagesDateHeader/DateHeader'\n\ninterface UseHeaderScrollEvents {\n firstDate: string\n}\n\ninterface UseHeaderScrollEventsReturn {\n fixedHeaderWrapperElRef: React.MutableRefObject\n fixedHeaderElRef: React.MutableRefObject\n displayDate: string\n}\n\nconst scrollThrottleMs = 50\n\nexport const useHeaderScrollEvents = ({\n firstDate,\n}: UseHeaderScrollEvents): UseHeaderScrollEventsReturn => {\n const dispatch = useDispatch()\n\n const fixedHeaderWrapperElRef = React.useRef(null)\n const fixedHeaderElRef = React.useRef(null)\n\n const [displayDate, setDisplayDate] = React.useState(firstDate)\n const prevDisplayDateRef = React.useRef(null)\n\n // Reset first date\n React.useEffect(() => {\n setDisplayDate(firstDate)\n }, [firstDate])\n\n // Set up scroll listener\n React.useEffect(() => {\n if (!fixedHeaderWrapperElRef.current || !fixedHeaderElRef.current) return undefined\n\n const headerContainerEl = fixedHeaderWrapperElRef.current\n const fixedHeaderContainerEl = fixedHeaderElRef.current\n\n const handleScroll = throttle(() => {\n // =============================\n // Handle fixing header position\n // =============================\n const shouldFix = headerContainerEl.getBoundingClientRect().top < 1\n\n headerContainerEl.style.height = shouldFix\n ? fixedHeaderContainerEl.offsetHeight + 'px'\n : 'auto'\n\n fixedHeaderContainerEl.style.position = shouldFix ? 'fixed' : ''\n fixedHeaderContainerEl.style.boxShadow = shouldFix ? shadow.md : ''\n\n // ==========================\n // Handle setting header date\n // ==========================\n let closestToHeader = Number.MIN_SAFE_INTEGER\n let newDisplayDate = firstDate\n const dateHeaders = document.querySelectorAll(`[${DATE_HEADER_DATA_SELECTOR}]`)\n dateHeaders.forEach(dateHeader => {\n const topPosition = dateHeader.getBoundingClientRect().top\n const isDateBelowFixedHeader = topPosition > fixedHeaderContainerEl.offsetHeight\n if (isDateBelowFixedHeader || topPosition < closestToHeader) return\n\n closestToHeader = topPosition\n newDisplayDate = dateHeader.textContent || ''\n })\n\n if (\n newDisplayDate &&\n (!prevDisplayDateRef.current || prevDisplayDateRef.current !== newDisplayDate)\n ) {\n setDisplayDate(newDisplayDate)\n prevDisplayDateRef.current = newDisplayDate\n }\n }, scrollThrottleMs)\n\n window.document.addEventListener('scroll', handleScroll)\n return () => {\n window.document.removeEventListener('scroll', handleScroll)\n }\n }, [firstDate, dispatch])\n\n return { fixedHeaderElRef, fixedHeaderWrapperElRef, displayDate }\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport type { BonusType } from '../../types'\n\nexport const TransactionCardStyled = styled.div({\n padding: '1rem',\n marginBottom: '1rem',\n fontSize: '1.2rem',\n background: hexColors.white,\n borderRadius: '0.5rem',\n boxShadow: 'rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px',\n})\n\nexport const TransactionStyled = styled('div')<{ bonusType: BonusType | null }>(\n {\n display: 'flex',\n flexDirection: 'column',\n fontSize: '1.2rem',\n color: hexColors.nero,\n\n '& > div:first-of-type': {\n display: 'flex',\n paddingBottom: '0.5rem',\n marginBottom: '0.5rem',\n borderBottom: `0.1rem solid ${hexColors.gainsboro}`,\n fontSize: '1.4rem',\n },\n },\n ({ bonusType }) => ({\n ...(bonusType && {\n '& > div:first-of-type > div:nth-of-type(2), > div:first-of-type > div:nth-of-type(4)': {\n color: bonusType === 'BonusBet' ? hexColors.tangerine : hexColors.cobalt,\n },\n }),\n })\n)\n\nexport const PendingStatusStyled = styled('div')({\n borderRadius: '10rem',\n textAlign: 'center',\n border: '1px solid',\n color: hexColors.grey,\n padding: '0.2rem 0.5rem',\n display: 'inline',\n fontSize: '1rem',\n margin: '0 0.5rem',\n})\n","import styled from '@emotion/styled'\n\nexport const TransactionRowStyled = styled('dl')({\n display: 'flex',\n margin: '0.5rem 0',\n lineHeight: '1.2rem',\n\n '& > dt': {\n display: 'inline-block',\n flex: 1,\n },\n\n '& > dd': {\n display: 'inline-block',\n flex: 1,\n },\n})\n","import React from 'react'\nimport { TransactionRowStyled } from './TransactionRow.styles'\n\nexport const TransactionRow: React.FC<{ name: string; value: string }> = ({ name, value }) => {\n if (!value) return null\n\n return (\n \n
    {name}
    \n
    {value}
    \n
    \n )\n}\n","import styled from '@emotion/styled'\n\nexport const PendingWithdrawalDetailsStyled = styled('div')({\n display: 'flex',\n})\n","import React from 'react'\nimport { dayjs } from '@mobi/utils'\nimport type { CancellationState, Transaction } from '@core/Areas/AccountActivity/types'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { post } from '@classic/Foundation/Services/ApiService'\nimport { trackWithdrawalCancel } from '@core/Areas/Withdraw/analytics'\nimport { UpdateAccountBalance } from '@core/State/UserAccount/userAccountDriver'\nimport { PendingWithdrawalDetailsStyled } from './PendingWithdrawalDetails.styles'\n\nexport const PendingWithdrawalDetails: React.FC<{\n cancellationState: CancellationState\n setCancellationState: React.Dispatch>\n transactionNumber: Transaction['tranTransSeq']\n transactionTimestamp: Transaction['timestamp']\n}> = ({ cancellationState, setCancellationState, transactionNumber, transactionTimestamp }) => {\n return (\n \n \n cancelWithdrawal(setCancellationState, transactionNumber, transactionTimestamp)\n }\n disabled={cancellationState === 'waiting'}\n isBusy={cancellationState === 'waiting'}\n >\n {cancellationState === 'initial' && Cancel Withdrawal}\n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nexport interface WithdrawalCancellationResponse {\n success: boolean\n failureReason: string | null\n cancelTransactionNumber: number | null\n cancelTransactionTimestamp: Date | null\n balance: number | null\n}\n\nconst cancelWithdrawal = async (\n setState: React.Dispatch>,\n transactionNumber: Transaction['tranTransSeq'],\n transactionTimestamp: Transaction['timestamp']\n) => {\n setState('waiting')\n\n const response = await post({\n url: '/$_/accountActivity/tickets/transactions/withdrawal-cancel',\n body: {\n TransactionNumber: transactionNumber,\n },\n }).catch(() => {\n setState('error')\n })\n\n if (!response || !response.success) {\n setState('error')\n } else {\n setState('completed')\n\n trackWithdrawalCancel(\n dayjs(response.cancelTransactionTimestamp).diff(transactionTimestamp, 'hours')\n )\n\n if (UpdateAccountBalance !== undefined && response.balance !== null) {\n UpdateAccountBalance({ balance: response.balance })\n }\n }\n}\n","import styled from '@emotion/styled'\n\nexport const CompletedWithdrawalDetailsStyled = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n marginTop: '1rem',\n justifyContent: 'center',\n textAlign: 'center',\n\n '& > div': {\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n\n '& > svg:first-of-type': {\n marginRight: '1rem',\n },\n\n span: {\n display: 'flex',\n alignItems: 'center',\n },\n },\n})\n","import React from 'react'\nimport { CompletedWithdrawalDetailsStyled } from './CompletedWithdrawalDetails.styles'\nimport { CancellationState } from '@core/Areas/AccountActivity/types'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport const CompletedWithdrawalDetails: React.FC<{\n cancellationState: CancellationState\n selectedDate: string\n}> = ({ cancellationState, selectedDate }) => {\n const isSuccessfullyCompleted = cancellationState === 'completed'\n const message = isSuccessfullyCompleted\n ? 'Cancellation was successful. Your balance has been updated.'\n : 'Your transaction could not be cancelled.'\n\n const clearTransactionsCache = () => {\n queryClient.invalidateQueries(\n queryKeys.accountActivityData('transactions', false, selectedDate)\n )\n }\n\n return (\n \n
    \n \n
    \n
    \n \n Close\n \n
    \n
    \n )\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport {\n CancellationState,\n Transaction as TransactionType,\n} from '@core/Areas/AccountActivity/types'\nimport { TransactionCardStyled, PendingStatusStyled, TransactionStyled } from './Transaction.styles'\nimport { Money } from '@core/Components/Text/Money'\nimport { TransactionRow } from './TransactionRow/TransactionRow'\nimport { PendingWithdrawalDetails } from './PendingWithdrawalDetails/PendingWithdrawalDetails'\nimport { CompletedWithdrawalDetails } from './CompletedWithdrawalDetails/CompletedWithdrawalDetails'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\n\nexport const Transaction: React.FC<{ transaction: TransactionType; selectedDate: string }> = ({\n transaction,\n selectedDate,\n}) => {\n const [cancellationState, setCancellationState] = React.useState('initial')\n\n return (\n \n \n \n \n \n {dayjs(transaction.timestamp).format('HH:mm')}\n \n \n\n \n {transaction.name}\n \n\n \n \n {transaction.description}\n {transaction.withdrawalCancelable && cancellationState != 'completed' && (\n Pending\n )}\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n {transaction.withdrawalCancelable &&\n (cancellationState === 'completed' || cancellationState === 'error' ? (\n \n ) : (\n \n ))}\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { font, colors, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const DetailsSecondaryInfoStyled = styled.div({\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.neutral[800],\n\n dl: {\n margin: 0,\n\n dt: { fontWeight: font.weight.medium },\n\n dd: {\n margin: 0,\n padding: 0,\n fontWeight: font.weight.regular,\n },\n },\n\n 'dl > div': {\n display: 'flex',\n justifyContent: 'space-between',\n gap: spacing.smx2,\n paddingTop: spacing.smx2,\n paddingBottom: spacing.smx2,\n },\n\n 'dl > span': {\n display: 'block',\n paddingTop: spacing.smx2,\n paddingBottom: spacing.smx2,\n\n 'dt, dd': { display: 'inline' },\n dd: { marginLeft: spacing.smx2 },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useAddToBlackbook } from '@core/Areas/Blackbook/Hooks/useAddToBlackbook'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { getIconName } from '@core/Areas/Blackbook/helpers'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { spacing } from '@mobi/component-library/Theme/Common'\n\nexport const BlackbookButton: React.FC = ({\n starterName,\n starterType,\n entryType,\n source,\n isReady,\n}) => {\n const { matchedRunnerInBlackbook, isLoading, clickHandler } = useAddToBlackbook({\n starterName,\n starterType,\n source,\n })\n\n const isRunnerInBlackbook = Boolean(matchedRunnerInBlackbook)\n\n const iconName = isRunnerInBlackbook ? 'tickCircleSolid' : getIconName(starterType)\n\n return (\n \n \n {!isReady || isLoading ? (\n \n ) : (\n <>\n \n\n {isRunnerInBlackbook ? ` See ${entryType}` : ` Add ${entryType}`}\n \n )}\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst InnerButtonStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.smx1,\n})\n\n// =====\n// Types\n// =====\n\ntype BlackbookParams = Parameters[0] & {\n isReady: boolean\n entryType: 'Runner' | 'Jockey'\n}\n","import React from 'react'\nimport { useAddToBlackbook } from '@core/Areas/Blackbook/Hooks/useAddToBlackbook'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport { BlackbookButton } from './BlackbookButton'\n\nexport const BlackbookJockey: React.FC = ({\n fixtureId,\n fixtureDate,\n raceNumber,\n starterName: runnerName,\n source,\n}) => {\n const { isLoading, race, isError } = useRacePageData({\n meetingId: fixtureId,\n meetingDate: fixtureDate,\n raceNumber,\n })\n\n const jockeyName = getJockeyNameFromRace({ runnerName, race })\n\n if (isError || (!isLoading && !jockeyName)) return null\n\n return (\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getJockeyNameFromRace({\n runnerName,\n race,\n}: {\n runnerName: string\n} & Pick, 'race'>): string {\n if (!race) return ''\n\n if (race.Tag === 'Starters') {\n const selectedRace = race.RaceStarters.find(\n ({ RaceKey }) => RaceKey.Key === race.MeetingInformation.SelectedRace.Key\n )\n if (!selectedRace) return ''\n\n const runner = selectedRace.Starters.find(\n starter => starter.Name.toLowerCase() === runnerName.toLowerCase()\n )\n if (!runner) return ''\n\n return runner.StarterPersonName || ''\n }\n\n if (race.Tag === 'Results') {\n const runner = race.Finishers.find(finisher => finisher.Name === runnerName)\n if (!runner) return ''\n\n return runner.StarterPersonName\n }\n\n return ''\n}\n\n// =====\n// Types\n// =====\n\ntype BlackbookParams = Parameters[0] & { isReady: boolean }\n\ntype BlackbookJockeyProps = Pick &\n Pick\n","import React from 'react'\nimport { meetingIdToContestType } from '@core/Areas/Racing/helpers'\nimport type { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport {\n getTicketLayoutType,\n isFobRacingWithIncorrectStarterNumbers,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { BlackbookButton } from './Components/BlackbookButton'\nimport { BlackbookJockey } from './Components/BlackbookJockey'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2'\n\nexport const BlackbookButtons: React.FC<{\n ticket: Ticket\n activeTab: Tabs\n}> = ({ ticket, activeTab }) => {\n const ticketLayoutType = getTicketLayoutType(ticket)\n\n const shouldDisplayBlackbookControl =\n ticketLayoutType === 'single-single' &&\n !isFobRacingWithIncorrectStarterNumbers(ticket.planSeq, ticket.legs[0].betType)\n\n if (!shouldDisplayBlackbookControl) return null\n\n const leg = ticket.legs[0]\n const starterName = leg.selections[0].selectionDetails[0].acceptorDetails[0]?.name.toUpperCase()\n const starterType = meetingIdToContestType(leg.fixtureId, true)\n\n if (!(starterName && starterType)) return null\n\n return (\n \n

    \n Blackbook\n

    \n\n
    \n }\n />\n\n {starterType === 'Races' && (\n }\n />\n )}\n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n\n h4: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx2,\n margin: 0,\n padding: `${spacing.smx1} ${spacing.smx2}`,\n textAlign: 'unset',\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.black,\n },\n\n '> div': {\n display: 'flex',\n justifyContent: 'space-between',\n gap: spacing.smx1,\n },\n})\n","import { BonusType } from '@core/Areas/AccountActivity/types'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const BonusBetRowStyled = styled.tr<{ bonusAmount: number; bonusType: BonusType | null }>(\n ({ bonusAmount, bonusType }) => ({\n fontWeight: 'bold',\n color:\n bonusAmount && bonusAmount > 0 && bonusType\n ? bonusType === 'BonusBet'\n ? hexColors.tangerine\n : hexColors.cobalt\n : 'default',\n })\n)\n","import { Ticket } from '@core/Areas/AccountActivity/types'\nimport { Money } from '@core/Components/Text/Money'\nimport { BonusBetRowStyled } from './BonusBet.styles'\nimport React from 'react'\n\nexport const BonusBet: React.FC> = ({\n investment: { bonusBet, total, bonusType },\n}) => {\n return bonusBet && bonusBet > 0 && bonusType ? (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {bonusType == 'BonusBet' ? 'Bonus Bet' : 'Bonus Cash'}\n \n
    Amount Paid\n \n
    \n ) : null\n}\n","import React from 'react'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { Money } from '@core/Components/Text/Money'\nimport { roundEstimateDown } from '@mobi/utils/money'\n\nexport const Cost: React.FC> = props => {\n if (props.investment.lines.length == 1 && !props.investment.lines[0].count) return null\n\n if (props.investment.lines.length == 0)\n return (\n
    \n
    \n
    Cost
    \n
    \n \n
    \n
    \n
    \n )\n\n return (\n
    \n \n \n \n \n \n \n \n \n\n \n {props.investment.lines.map((investmentLine, index) => {\n return (\n \n \n\n \n\n \n \n )\n })}\n \n
    \n {props.investment.lines[0].projectedPay === null ? 'Bet Amount' : 'Proj. Pay'}\n Cost
    \n {investmentLine.displayName}\n {investmentLine.count > 1 ? ` x ${investmentLine.count}` : ''}\n \n \n \n \n
    \n
    \n )\n}\n","import styled from '@emotion/styled'\n\nexport const TableStyled = styled('table')({\n '& th': {\n textAlign: 'start',\n },\n})\n","import React from 'react'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { Money } from '@core/Components/Text/Money'\nimport { TableStyled } from './Formulas.styles'\n\nexport const Formulas: React.FC<{ formulaDetail: Ticket['formula'] }> = ({ formulaDetail }) => {\n if (!formulaDetail || formulaDetail?.lines.length === 0) return null\n return (\n
    \n \n \n \n \n {formulaDetail?.formulaString.replace(/\\./g, '.\\u200B')}\n \n Bet Amount\n Cost\n \n \n\n \n {formulaDetail?.lines.map(line => (\n \n \n {line.key}\n {line.combos > 0 ? ` \\u00D7 ${line.combos}` : null}\n \n \n {line.stake > 0 ? : null}\n \n \n \n \n \n ))}\n \n \n
    \n )\n}\n","import { Ticket } from '@core/Areas/AccountActivity/types'\nimport { Money } from '@core/Components/Text/Money'\nimport React from 'react'\n\nexport const TippingOrFooto: React.FC<{ investment: Ticket['investment']['lines'][0] }> = ({\n investment,\n}) => {\n if (investment.count === 1) return null\n\n return (\n
    \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
    CombsBet AmountCost
    {investment.count}\n \n \n \n
    \n
    \n )\n}\n","import React from 'react'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { PlanSeq } from '@mobi/api-types'\nimport { Cost } from './Components/Cost/Cost'\nimport { Formulas } from './Components/Formulas/Formulas'\nimport { TippingOrFooto } from './Components/TippingOrFooto/TippingOrFooto'\n\nexport const TicketInvestment: React.FC<{ ticket: Ticket }> = ({ ticket }) => {\n if (ticket.planSeq === PlanSeq.FavouriteNumbers) return null\n\n if (ticket.productName == 'Tipping' || ticket.productName == 'Footo') {\n return \n }\n\n if (ticket.formula !== null) {\n return \n }\n\n if (ticket.flexPercent == null || ticket.flexPercent === '')\n return \n\n return null\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { List } from 'immutable'\nimport { useQuery } from 'react-query'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { SpinnerStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons/Button'\nimport { zip } from '@mobi/utils/functions/zip'\nimport { useFeature } from '@core/Utils/hooks'\nimport type { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { convertToBetSelection } from '@core/Utils/betting/handleBetSelection/helpers/convertToBetSelection'\nimport { isFobSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { calculateMultiReturn } from '@core/Areas/Betslip/helpers/calculator'\nimport { createItemForLegacyBetslip } from '@core/Areas/Betslip/helpers/addToBetslip'\nimport { getLegStatus } from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport {\n buildBaseBetSelection,\n createLoadBetDetails,\n loadBet,\n LoadBetDetails,\n} from '@core/Utils/betting/loadBet'\nimport { trackRebet } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { canAllowReBetForTicket } from './helpers/canAllowReBetForTicket'\n\nexport const ReBetButton: React.FC<{ ticket: Ticket; activeTab: Tabs }> = ({\n ticket,\n activeTab,\n}) => {\n const isReBetFeatureActive = useFeature('REBET_PENDING_TICKET')\n\n if (!isReBetFeatureActive || !canAllowReBetForTicket(activeTab, ticket)) {\n return null\n }\n\n return \n}\n\n// ===============\n// Local Component\n// ===============\n\nconst ReBetButtonLocal: React.FC<{ ticket: Ticket; source: Tabs }> = ({ ticket, source }) => {\n const pendingLegs = ticket.legs.filter(leg => getLegStatus(leg.result) === 'Pending')\n const loadDetails = createLoadBetDetails({ ...ticket, legs: pendingLegs })\n const [loading, setLoading] = React.useState(false)\n\n // show a spinner while fetching current odds. if no odds found then just show 'Bet Now'\n const { data, isLoading, isError } = useQuery({\n queryKey: ['ticketodds', ticket.ticketSequence],\n cacheTime: 3 * 60 * 1000,\n staleTime: 3 * 60 * 1000,\n queryFn: () => Promise.all(loadDetails.map(x => buildBaseBetSelection(x))),\n })\n\n const { win, place } = calcOdds(loadDetails, data)\n\n return (\n \n

    \n Re-Bet\n

    \n\n {\n setLoading(true)\n loadBet(loadDetails, 'rebet', data).finally(() => setLoading(false))\n\n const resultedCount = ticket.legs.length - pendingLegs.length\n trackRebet({ source, resultedCount, pendingCount: pendingLegs.length })\n }}\n >\n {isLoading || loading ? (\n \n ) : isError || !data ? (\n 'Bet Now'\n ) : (\n <>\n
    {win.toFixed(2)}
    \n
    {place?.toFixed(2)}
    \n \n )}\n \n
    \n )\n}\n\nfunction calcOdds(loadDetails: LoadBetDetails[], data?: QuickbetSelection[]) {\n if (!data) {\n return { win: 0, place: 0 }\n }\n\n if (data.length === 1 && isFobSelection(data[0].selection)) {\n return { win: data[0].selection.winPrice, place: data[0].selection.placePrice }\n }\n\n const betSlipItems = zip(data, loadDetails).map(([bet, loadDetail]) => {\n const res = createItemForLegacyBetslip(convertToBetSelection(bet))\n if ('betType' in loadDetail) {\n res.multiLegBetType = loadDetail.betType === LocalConstants.PlaceBetType ? 'P' : 'W'\n }\n return res\n })\n\n const win = calculateMultiReturn(List(betSlipItems), { shouldRound: true })\n return { win, place: null }\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n h4: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx2,\n margin: 0,\n padding: `${spacing.smx1} ${spacing.smx2}`,\n textAlign: 'unset',\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.black,\n },\n\n button: {\n minWidth: '10rem',\n minHeight: '4.8rem',\n fontSize: font.size.lg.fontSize,\n lineHeight: '1.8rem',\n letterSpacing: font.size.lg.letterSpacing,\n color: colors.studio[900],\n fontWeight: font.weight.semibold,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n})\n\nconst enum LocalConstants {\n PlaceBetType = 'Place - Fixed',\n}\n","import { PlanSeq } from '@mobi/api-types'\nimport {\n getLegStatus,\n getTicketLayoutType,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\n\nexport const canAllowReBetForTicket = (activeTab: Tabs, ticket: Ticket) => {\n if (activeTab === 'rebet') return true\n\n if (\n ticket.planSeq !== PlanSeq.FOBRacing ||\n !ticket.legs.some(leg => leg.status === 'A') ||\n ticket.legs.some(x => x.betType === FixedOddsMarketDisplayNames.SP)\n ) {\n return false\n }\n\n if (activeTab === 'pending') return true\n\n if (\n activeTab === 'results' &&\n getTicketLayoutType(ticket) === 'multi' &&\n ticket.legs.some(leg => getLegStatus(leg.result) === 'Pending')\n ) {\n return true\n }\n\n return false\n}\n","import React from 'react'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { SummaryLine } from '@mobi/betslip/Components/Common/SummaryLine'\n\nexport const FavouriteNumbers: React.FC<{ ticket: Ticket }> = ({ ticket }) => {\n return (\n
    \n {ticket.legs[0].selections.map(({ header, selectionDetails }) => (\n \n ))}\n
    \n )\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils/date'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport type { BetStatus, Ticket } from '@core/Areas/AccountActivity/types'\nimport { getLegStatus, getStatusText } from '@core/Areas/AccountActivity/Components/Ticket/helpers'\n\nexport const CountdownStatus: React.FC<{ multiLeg: Ticket['legs'][0] }> = ({ multiLeg }) => {\n const isPreviewMode = React.useContext(TicketDisplayContext).type === 'share-preview'\n\n const legStatus = getLegStatus(multiLeg.result)\n\n if (legStatus === 'Pending') {\n const countdownDate = multiLeg.advertisedStartTime\n if (!countdownDate) return null\n\n if (isPreviewMode) {\n return (\n \n {dayjs(countdownDate).format('D MMM | H:mm')}\n \n )\n }\n return \n }\n\n const betLegStatus = getBetLegStatus(legStatus)\n return betLegStatus ? (\n \n {betLegStatus}\n \n ) : null\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getBetLegStatus(legStatus: BetStatus): string | null {\n if (legStatus === 'Lost') {\n return 'No Payout'\n }\n\n return getStatusText(legStatus)\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport { getIconTypeFromMeetingCode } from '@core/Areas/Quickbet/helpers/IconTypeHelper'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport {\n getNumberFromString,\n getSingleTicketTitle,\n shouldUseFallbackIcon,\n TicketLayoutType,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { SilkFallback } from '@core/Areas/AccountActivity/Components/Ticket/Components/Common'\nimport { getRaceLink, meetingIdToContestType } from '@core/Areas/Racing/helpers'\nimport { SilkImageContained } from '@core/Components/SilkImage/SilkImageContained'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { CountdownStatus } from './Components/CountdownStatus'\nimport { RunnerNumber } from '@core/Areas/RaceCard/Components/RunnerNumber'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport const Multi: React.FC<{ ticket: Ticket; ticketLayoutType: TicketLayoutType }> = ({\n ticket,\n ticketLayoutType,\n}) => {\n const isTipping = ticketLayoutType === 'tipping'\n\n return (\n \n {ticket.legs.map(leg => {\n const shouldHideSilk = shouldUseFallbackIcon(leg, ticket.planSeq)\n\n const shouldProvideLink = !!(leg.fixtureId && leg.fixtureDate && leg.raceNumber)\n\n const runnerCode = meetingIdToContestType(leg.fixtureId, true)\n const { title, runnerNumber } = getSingleTicketTitle(leg, ticket.planSeq, true)\n\n const runnerNameForBlackbook =\n runnerNumber &&\n runnerCode &&\n leg.selections[0]?.selectionDetails[0]?.acceptorDetails[0]?.name\n const shouldRenderBlackbookNumber = runnerCode && runnerNameForBlackbook && runnerNumber\n\n const linkInfo = shouldProvideLink\n ? {\n pathname: getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: leg.raceNumber,\n isFOO: false,\n }),\n }\n : undefined\n\n const selectionSubHeading = (\n leg.eventNameLine2 ||\n leg.selections[0].header ||\n leg.betType\n )?.replace('-Fixed', '')\n\n return (\n
    \n \n }\n heading={\n isTipping ? (\n leg.eventName\n ) : leg.raceNumber && leg.meetingName ? (\n \n ) : (\n `${leg.sportName ? leg.sportName + ' ' : ''}${ticket.legs[0].eventName}`\n )\n }\n statusComponent={}\n linkInfoPrimary={linkInfo}\n />\n\n \n {shouldRenderBlackbookNumber ? (\n <>\n \n  - \n \n ) : runnerNumber ? (\n `${runnerNumber} - `\n ) : (\n ''\n )}\n {title}\n \n }\n subHeading={selectionSubHeading}\n priceWin={getStarterPrice(leg)}\n iconComponent={\n shouldHideSilk ? (\n \n ) : (\n \n )\n }\n linkInfo={linkInfo}\n />\n
    \n )\n })}\n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getStarterPrice(leg: Ticket['legs'][0]) {\n const isPlace = leg.betType?.toLowerCase().includes('place')\n const returnRate = isPlace ? (leg.return?.split(',')[1] ?? leg.return) : leg.return\n return returnRate ? getNumberFromString(returnRate) : undefined\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n padding: spacing.smx1,\n border: `1px solid ${colors.neutral[200]}`,\n borderRadius: radius.lgx1,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { PlanSeq } from '@mobi/api-types'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { getSilk } from '@core/Areas/AccountActivity/helpers'\nimport { SilkImage } from '@core/Components/SilkImage/SilkImage'\nimport { BetStatusIcon } from '@core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/BetStatusIcon'\nimport { getRaceLink } from '@core/Areas/Racing/helpers/getRaceLink'\n\nexport const SingleMultiple: React.FC<{\n leg: Ticket['legs'][0]\n planSeq: PlanSeq\n}> = ({ leg, planSeq }) => {\n const labelElementsRef = React.useRef([])\n\n React.useLayoutEffect(() => {\n const widths = labelElementsRef.current.map(el => Math.ceil(el.getBoundingClientRect().width))\n const largestWidth = Math.max(...widths)\n labelElementsRef.current.forEach(el => (el.style.width = largestWidth + 'px'))\n }, [])\n\n const captureLabelEls = React.useCallback((el: HTMLDivElement) => {\n if (!el) return\n labelElementsRef.current.push(el)\n }, [])\n\n const isAllUp = planSeq === PlanSeq.AllUp\n const isDoubleOrQuaddie = [PlanSeq.Double, PlanSeq.Quaddie].includes(planSeq)\n\n const { selections, fixtureId, raceNumber: legRaceNumber, fixtureDate } = leg\n\n return (\n \n {selections.map((selection, index) => {\n const {\n raceNumber,\n raceResult,\n header,\n expandedHeader,\n expandedHeaderSecondLine,\n selectionDetails,\n } = selection\n\n const { silkUrl, silkHeight, silkWidth, isDogsSilk } = getSilk({\n fixtureId,\n fixtureDate,\n raceNumber: raceNumber || legRaceNumber,\n })\n\n const subHeader =\n (selectionDetails[0].selectionString?.split(' ').some(a => a.toLowerCase() === 'fd') &&\n selectionDetails[0].selectionString) ||\n expandedHeaderSecondLine\n\n const shouldProvideLink =\n (isDoubleOrQuaddie || isAllUp) &&\n !!(fixtureId && fixtureDate && (raceNumber || legRaceNumber))\n\n const raceLink = shouldProvideLink\n ? getRaceLink({\n meetingDate: leg.fixtureDate,\n meetingId: leg.fixtureId,\n raceNumber: raceNumber || legRaceNumber,\n isFOO: false,\n })\n : null\n\n return (\n
    \n
    \n {!!(expandedHeader || header) && (\n \n \n {isDoubleOrQuaddie || isAllUp ? `R${raceNumber}` : expandedHeader || header}\n\n {subHeader && (\n <>\n {' '}\n
    \n {subHeader}\n \n )}\n
    \n
    \n )}\n
    \n\n
      \n {selectionDetails[0].acceptorDetails.map(({ number, name }) => {\n const isWinner =\n !!number && isDoubleOrQuaddie && !!(raceResult && raceResult[number - 1] === '1')\n return (\n
    • \n \n \n {number} - {toTitleCase(name)}\n \n\n {isWinner && (\n \n \n \n )}\n
    • \n )\n })}\n
    \n
    \n )\n })}\n
    \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst LinkWrapper: React.FC<{ linkPath: string | null; children: React.ReactNode }> = ({\n linkPath,\n children,\n}) => {\n if (!linkPath) return <>{children}\n return {children}\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx2,\n fontFamily: font.family.primary,\n\n ':empty': { display: 'none' },\n\n '> div': {\n display: 'flex',\n gap: spacing.sm,\n padding: spacing.smx1,\n backgroundColor: colors.surface[200],\n borderRadius: radius.md,\n\n // Label\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n ':empty': { display: 'none' },\n\n '> span': {\n display: 'inline-flex',\n alignItems: 'center',\n paddingLeft: spacing.smx2,\n paddingRight: spacing.smx2,\n minHeight: '2rem',\n maxWidth: 'fit-content',\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.neutral[900],\n borderRadius: radius.smx1,\n backgroundColor: colors.surface[300],\n\n a: { textDecoration: 'none', color: 'inherit' },\n },\n },\n\n // Runner List\n '> ul': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n padding: 0,\n margin: 0,\n listStyle: 'none',\n\n '> li': {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx2,\n minHeight: '2rem',\n marginTop: spacing.smx2,\n paddingBottom: spacing.smx2,\n fontWeight: font.weight.regular,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n color: colors.black,\n borderBottom: `0.5px solid ${colors.neutral[200]}`,\n\n ':first-of-type': { marginTop: 0 },\n ':last-of-type': { border: 0, paddingBottom: 0 },\n\n '> span': { display: 'inline-flex', alignItems: 'center', gap: spacing.smx2 },\n '> span:nth-of-type(2)': { marginLeft: 'auto' },\n },\n },\n },\n})\n","import React from 'react'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { DetailsSecondaryInfoStyled } from '@core/Areas/AccountActivity/Components/Ticket/Components/Details/Details.styles'\n\nexport const SingleSingle: React.FC<{\n leg: Ticket['legs'][0]\n}> = ({ leg }) => {\n const { sportName, eventNameLine2 } = leg\n\n if (!sportName && !eventNameLine2) return null\n\n return (\n \n
    \n {eventNameLine2 && (\n
    \n
    Comp:
    \n
    {eventNameLine2}
    \n
    \n )}\n {sportName && (\n
    \n
    Sport:
    \n
    {sportName}
    \n
    \n )}\n
    \n
    \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { RunnerNumber } from '@core/Areas/RaceCard/Components/RunnerNumber'\nimport { SilkImageContained } from '@core/Components/SilkImage/SilkImageContained'\nimport {\n sameRaceMultiPositionToText,\n sortSameRaceMultiTicketLegs,\n} from '@core/Areas/AccountActivity/helpers'\nimport {\n getSingleTicketTitle,\n isRefundedStatus,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { BetStatusIcon } from '@core/Areas/AccountActivity/Components/Ticket/Components/Investment/Components/StatusSilks/BetStatusIcon'\n\nexport const SameRaceMulti: React.FC<{\n ticket: Ticket\n}> = ({ ticket }) => {\n const sortedLegs = sortSameRaceMultiTicketLegs(ticket)\n const isRefunded = isRefundedStatus(ticket)\n\n return (\n \n {sortedLegs.map(leg => {\n const { selectionDetails } = leg.selections[0]\n const srmPosition = sameRaceMultiPositionToText(\n selectionDetails[0].acceptorDetails[0].srmPosition\n )\n\n const { title, runnerNumber } = getSingleTicketTitle(leg, ticket.planSeq, true)\n\n const runnerNameForBlackbook =\n runnerNumber && leg.selections[0]?.selectionDetails[0]?.acceptorDetails[0]?.name\n const shouldRenderBlackbookNumber = runnerNameForBlackbook && runnerNumber\n\n return (\n \n {shouldRenderBlackbookNumber ? (\n <>\n \n  - \n \n ) : runnerNumber ? (\n `${runnerNumber} - `\n ) : (\n ''\n )}\n {title}\n \n }\n subHeading={srmPosition}\n iconComponent={\n \n }\n rightAlignedComponent={\n (leg.result === 'WIN' || leg.result === 'LOSE') && !isRefunded ? (\n \n ) : leg.result === 'SCR' || leg.result === '-' ? (\n \n {leg.result === 'SCR' ? 'Scratched' : 'Pending'}\n \n ) : null\n }\n />\n )\n })}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n\n '.srm-leg-status': {\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n fontWeight: font.weight.regular,\n lineHeight: font.size.sm.lineHeight,\n color: colors.neutral[800],\n },\n})\n","import React from 'react'\nimport { PlanSeq } from '@mobi/api-types'\nimport { SingleSingle, SingleMultiple, Multi, FavouriteNumbers, SameRaceMulti } from './Components'\nimport { getTicketLayoutType } from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\n\nexport const SelectionInfo: React.FC<{ ticket: Ticket }> = React.memo(\n ({ ticket }) => {\n if (PlanSeq.FavouriteNumbers === ticket.planSeq) return \n\n const ticketLayoutType = getTicketLayoutType(ticket)\n\n if (ticketLayoutType === 'same-race-multi') return \n\n if (ticketLayoutType === 'single-single') return \n\n if (ticketLayoutType === 'single-multiple') {\n return \n }\n\n if (ticketLayoutType === 'multi' || ticketLayoutType === 'tipping')\n return \n\n return null\n },\n (prev, next) => prev.ticket.ticketSequence === next.ticket.ticketSequence\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SpecialsStyled = styled('div')({\n color: hexColors.nero,\n\n '& > table svg:first-of-type': {\n margin: 'auto',\n marginRight: '1rem',\n },\n})\n","import React from 'react'\nimport { Ticket } from '@core/Areas/AccountActivity/types'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Money } from '@core/Components/Text/Money'\nimport { toMoney } from '@mobi/utils/money'\nimport { SpecialsStyled } from './Specials.styles'\n\nexport const Specials: React.FC<{\n specials: Ticket['specialInformation']\n shouldHideCost: boolean\n}> = ({ specials, shouldHideCost }) => {\n if (!specials?.length) return null\n const powerPlaySpecials = specials.filter(s => s.isPowerPlay)\n const otherSpecials = specials.filter(s => !s.isPowerPlay)\n\n return (\n \n {powerPlaySpecials.length > 0 && (\n \n \n {powerPlaySpecials.map((special, i) => (\n \n {\n \n }\n {!shouldHideCost &&\n special.specialTypeCode !== 'BST' &&\n special.specialTypeCode !== 'WBI' && (\n \n )}\n \n ))}\n \n
    \n \n SuperPick: \n \n {special.title}\n {!shouldHideCost &&\n special.specialTypeCode === 'WBI' &&\n ` (${toMoney(special.insuranceReward ?? 0)})`}\n \n \n \n
    \n )}\n\n {otherSpecials.length > 0 && (\n \n \n {otherSpecials.map((special, i) => (\n \n \n \n \n \n \n \n \n \n \n ))}\n \n
    \n \n {special.title}
    {special.description}
    \n )}\n
    \n )\n}\n","import React from 'react'\nimport { useParams } from 'react-router-dom'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { PlanSeq } from '@mobi/api-types'\nimport { colors, spacing } from '@mobi/component-library/Theme/Common'\nimport type { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport {\n formatDateTime,\n getTicketLayoutType,\n isTippingTicket,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { DetailsSecondaryInfoStyled as SecondaryInfo } from './Details.styles'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport {\n BettingInformationOverrides,\n FixedOddsMarketDisplayNames,\n} from '@core/Areas/RaceCard/constants'\nimport {\n BlackbookButtons,\n BonusBet,\n ReBetButton,\n TicketInvestment,\n Specials,\n SelectionInfo,\n} from './Components'\n\nconst enum LocalConstants {\n PreviewModeClass = 'js-details--preview',\n ShortcutSectionClass = 'js-details__shortcuts',\n}\n\nexport const Details: React.FC<{ ticket: Ticket }> = ({ ticket }) => {\n const { tab: activeTab } = useParams<{ tab: Tabs }>()\n const ticketDisplayContext = React.useContext(TicketDisplayContext)\n\n const isPreviewMode = ticketDisplayContext.type === 'share-preview'\n const shouldHideCost = isPreviewMode && ticketDisplayContext.data.shouldHideCost\n\n const selection = ticket.legs[0].selections[0]\n\n if (!selection || selection.selectionDetails.length === 0) return null\n\n const ticketLayoutType = getTicketLayoutType(ticket)\n const isFavouriteNumbers = ticket.planSeq === PlanSeq.FavouriteNumbers\n const isSameRaceMulti = ticketLayoutType === 'same-race-multi'\n\n const shouldHideStartTime =\n isFavouriteNumbers || isTippingTicket(ticket) || (ticket.legs.length > 1 && !isSameRaceMulti)\n const shouldDisplayNewStartTime: boolean =\n activeTab === 'pending' &&\n !!ticket.updatedEventStartDateTime &&\n ticket.eventStartDateTime !== ticket.updatedEventStartDateTime\n\n return (\n \n {!isPreviewMode && (\n
    \n \n\n \n
    \n )}\n\n \n\n {ticket.specialInformation && (\n \n )}\n\n {!shouldHideCost && (\n <>\n \n \n \n )}\n\n {!isPreviewMode && (\n \n
    \n {!shouldHideStartTime && (\n
    \n
    Event Start:
    \n
    \n {formatDateTime(ticket.updatedEventStartDateTime)}\n\n {shouldDisplayNewStartTime && (\n New\n )}\n
    \n
    \n )}\n\n
    \n
    Bet Placed on:
    \n
    {formatDateTime(ticket.timestamp, true)}
    \n
    \n\n
    \n
    Bet ID:
    \n
    {ticket.ticketSequence}
    \n
    \n
    \n
    \n )}\n\n {!isPreviewMode && ticket.bettingInformation && !isSameRaceMulti && (\n \n
    \n {getBettingInformationWithOverrides(ticket)?.map(b => (\n \n
    {b.title}:
    \n
    {b.detail.join('. ')}
    \n
    \n ))}\n\n {ticket.specialInformation?.map(s => (\n \n
    {s.title}:
    \n
    {s.description}
    \n
    \n ))}\n
    \n
    \n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getBettingInformationWithOverrides(ticket: Ticket) {\n if (ticket.productName === FixedOddsMarketDisplayNames.SP) {\n return BettingInformationOverrides.StartingPrice\n } else {\n return ticket.bettingInformation\n }\n}\n\n// ======\n// Styles\n// ======\n\nconst DetailsStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n paddingTop: spacing.smx1,\n\n '> div:empty': { display: 'none' },\n\n [`.${LocalConstants.ShortcutSectionClass}`]: {\n ':empty': { display: 'none' },\n\n '> div': {\n paddingTop: spacing.smx1,\n paddingBottom: spacing.smx1,\n borderTop: `0.5px solid ${colors.neutral[200]}`,\n },\n },\n\n table: {\n fontSize: '1.2rem',\n color: hexColors.nero,\n width: '100%',\n padding: 0,\n border: 0,\n borderSpacing: 0,\n },\n\n [`.${LocalConstants.PreviewModeClass}`]: {\n paddingTop: 0,\n },\n})\n","import React from 'react'\n\nexport const TABtouchBrandLogo = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import html2canvas from 'html2canvas'\nimport { colors } from '@mobi/settings'\n\nexport async function createImageUrlFromHtml(el: HTMLElement): Promise {\n const { width } = el.getBoundingClientRect()\n\n const canvas = await html2canvas(el, {\n scale: 2,\n backgroundColor: colors.brand.primary,\n width,\n /**\n * MOBI-2301: Additional config below for PROD bug causing browser to freeze\n * https://github.com/niklasvh/html2canvas/issues/3053\n */\n useCORS: true,\n allowTaint: true,\n ignoreElements: e =>\n // @ts-expect-error Type issue, host is available on certain els\n (e.tagName === 'A' && e.host !== window.location.host) ||\n e.getAttribute('loading') === 'lazy',\n })\n return canvas.toDataURL('image/png')\n}\n","import { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { trackShareBet } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { logError } from '@core/Utils'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\nimport type { Ticket, TicketStatus } from '@core/Areas/AccountActivity/types'\nimport { createLoadBetDetails } from '@core/Utils/betting/loadBet'\nimport { createImageUrlFromHtml } from './createImageUrlFromHtml'\nimport { postShareBetDataAndGenerateLink } from '@core/Services/ShareIncoming/ShareBet/helpers/api'\n\nconst enum ShareCopy {\n Title = 'My TABTouch Bet',\n MessageWin = \"I've got the touch! Check out this bet I placed on TABtouch.\\n\",\n MessagePending = \"Here's hoping I've got the touch! Check out this bet I placed on TABtouch.\\n\",\n MessageNoPayout = \"I'll have the touch next time! Check out this bet I placed on TABtouch.\\n\",\n MessageDefault = 'Check out this bet I placed on TABtouch.\\n',\n LinkStatic = 'https://tabtouch.page.link/tcn4',\n}\n\nexport async function handleShareBetClick({\n ticket,\n ticketStatus,\n fileBlob,\n previewEl,\n isImageOnlyShare,\n isCostShared,\n}: HandleShareBetClick) {\n try {\n const data: ShareBetData = {\n title: ShareCopy['Title'],\n message: (() => {\n switch (ticketStatus) {\n case 'Won':\n return ShareCopy['MessageWin']\n case 'Pending':\n return ShareCopy['MessagePending']\n case 'NoPayout':\n return ShareCopy['MessageNoPayout']\n default:\n return ShareCopy['MessageDefault']\n }\n })(),\n }\n\n if (isReactNativeApp) {\n await shareBetWithReactNative({ ticket, data, previewEl, isImageOnlyShare })\n } else {\n await shareBetWithBrowser({ ticket, data, fileBlob, isImageOnlyShare })\n }\n\n // Analytics\n trackShareBet({\n product: ticket.productName,\n spend: ticket.investment.total,\n payout: ticket.return,\n betStatus: ticket.status,\n costShared: isCostShared,\n })\n } catch (err) {\n const errorString: string | undefined = (err as Error).toString?.().toLowerCase()\n if (errorString && (errorString.includes('cancel') || errorString.includes('abort'))) return\n\n logError(err as Error, true)\n\n RegisterToast({\n timeout: 0,\n type: 'error',\n position: 'bottom',\n message: 'Sorry, we are unable to create your share',\n })\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nasync function createShareBetAndPost(ticket: Ticket) {\n const betsToShare = createLoadBetDetails(ticket)\n const response = await postShareBetDataAndGenerateLink(betsToShare)\n\n if (!response.link) throw Error('ShareBet: Error ' + response.message)\n\n return response\n}\n\n// React Native\nasync function shareBetWithReactNative({\n ticket,\n data: { title, message },\n isImageOnlyShare,\n previewEl,\n}: ShareBetWithReactNative) {\n if (!previewEl) throw Error('No HTML element to generate preview')\n\n const [{ link }, url] = await Promise.all([\n isImageOnlyShare\n ? Promise.resolve({ link: ShareCopy['LinkStatic'] })\n : createShareBetAndPost(ticket),\n createImageUrlFromHtml(previewEl),\n ])\n\n return sendToNative('SHARE_SHEET_REQUEST', {\n url,\n ...(!isImageOnlyShare && {\n title,\n subject: title,\n message: message + link + ' 🤘',\n }),\n })\n}\n\n// Browser\nasync function shareBetWithBrowser({\n ticket,\n data: { title, message },\n isImageOnlyShare,\n fileBlob,\n}: ShareBetWithBrowser) {\n if (!fileBlob) throw Error('Unexpected image format')\n\n const { link } = isImageOnlyShare\n ? { link: ShareCopy['LinkStatic'] }\n : await createShareBetAndPost(ticket)\n\n const navigatorShareData: ShareData = {\n ...(!isImageOnlyShare && { title, text: message + link + ' 🤘' }),\n files: [\n new File([fileBlob], 'share-bet-preview.png', {\n type: fileBlob.type,\n }),\n ],\n }\n\n if (navigator.canShare?.(navigatorShareData)) {\n return await navigator.share(navigatorShareData)\n }\n throw Error('No capability to share')\n}\n\n// ==========\n// Types Defs\n// ==========\n\ninterface HandleShareBetClick {\n ticket: Ticket\n ticketStatus: TicketStatus\n isImageOnlyShare: boolean\n fileBlob?: Blob\n previewEl?: HTMLDivElement | null\n isCostShared?: boolean\n}\n\ninterface ShareBetWithShared {\n ticket: Ticket\n data: ShareBetData\n isImageOnlyShare: boolean\n}\ntype ShareBetWithReactNative = ShareBetWithShared & { previewEl?: HTMLDivElement | null }\ntype ShareBetWithBrowser = ShareBetWithShared & { fileBlob?: Blob }\n\ninterface ShareBetData {\n title: string\n message: string\n}\n","export const convertImageUrlToBlob = async (imageUrl: string) => {\n try {\n const fetchObject = await fetch(imageUrl)\n return await fetchObject.blob()\n } catch {\n return undefined\n }\n}\n","/** Sets hard-coded width to fix iOS issue on output image */\nexport function setTemporaryWidthOfPreviewElement(el: HTMLDivElement): ResetTemporaryWidthFn {\n if (!el?.style) return () => undefined\n el.style.width = el.getBoundingClientRect().width + 'px'\n const reset = () => {\n if (!el?.style) return\n el.style.width = 'auto'\n }\n return reset\n}\n\ntype ResetTemporaryWidthFn = () => void\n","import React from 'react'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { createImageUrlFromHtml } from '../helpers/createImageUrlFromHtml'\nimport { convertImageUrlToBlob } from '../helpers/convertImageUrlToBlob'\nimport { setTemporaryWidthOfPreviewElement } from '../helpers'\n\nexport const useCreateImageForBrowser = (\n shouldHideCost: boolean,\n setIsBusy: React.Dispatch>,\n previewImageElRef: React.RefObject\n): Blob | undefined => {\n const previewImageDataRef = React.useRef()\n\n React.useEffect(() => {\n if (isReactNativeApp || !previewImageElRef.current) return\n\n setIsBusy(true)\n const previewEl = previewImageElRef.current\n const resetTempWidth = setTemporaryWidthOfPreviewElement(previewEl)\n\n setImageBlobOnRef(previewEl, previewImageDataRef).finally(() => {\n setIsBusy(false)\n resetTempWidth()\n })\n }, [shouldHideCost, setIsBusy, previewImageElRef])\n\n return previewImageDataRef.current\n}\n\n// Helpers\nasync function setImageBlobOnRef(el: HTMLElement, ref: React.MutableRefObject) {\n const imageUrl = await createImageUrlFromHtml(el)\n const blob = await convertImageUrlToBlob(imageUrl)\n ref.current = blob\n}\n","import React from 'react'\nimport { setTemporaryWidthOfPreviewElement } from '../helpers'\nimport { createImageUrlFromHtml } from '../helpers/createImageUrlFromHtml'\n\nexport const useImageOutputDevTool = (\n htmlEl: React.RefObject,\n shouldHideCost: boolean\n): [clickHandler: () => void, outputImage: React.ReactElement | null] => {\n const clickCountRef = React.useRef(0)\n const timerIdRef = React.useRef()\n const [isDevModeEnabled, setIsDevModeEnabled] = React.useState(false)\n const [outputImage, setOutputImage] = React.useState(null)\n\n React.useEffect(() => {\n if (!isDevModeEnabled || !htmlEl.current) {\n setOutputImage(null)\n return\n }\n const el = htmlEl.current\n const resetTempWidth = setTemporaryWidthOfPreviewElement(el)\n createImageUrlFromHtml(el).then(imageUrl => {\n setOutputImage(\n React.createElement('figure', { style: { margin: '1rem' } }, [\n React.createElement(\n 'figcaption',\n null,\n React.createElement(\n 'pre',\n { style: { color: 'white', marginBottom: 0 } },\n 'DEV ONLY - Preview of output image:'\n )\n ),\n React.createElement('img', { src: imageUrl, style: { maxWidth: '100%' } }),\n ])\n )\n resetTempWidth()\n })\n }, [isDevModeEnabled, htmlEl, shouldHideCost])\n\n const clickHandler = React.useCallback(() => {\n clickCountRef.current = ++clickCountRef.current\n clearTimeout(timerIdRef.current)\n if (clickCountRef.current === 7) setIsDevModeEnabled(curr => !curr)\n timerIdRef.current = window.setTimeout(() => (clickCountRef.current = 0), 800)\n }, [])\n\n return [clickHandler, outputImage]\n}\n","import styled from '@emotion/styled'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { colors, hexColors } from '@mobi/settings'\n\nexport const SharePreviewOverlayHeaderStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n height: measurements.mobi.headerHeight,\n minHeight: measurements.mobi.headerHeight,\n background: colors.brand.primary,\n filter: 'drop-shadow(0 0.1rem 0.2rem rgba(0,0,0,0.2))',\n\n h2: {\n flex: 1,\n marginLeft: '1rem',\n textAlign: 'left',\n textTransform: 'uppercase',\n fontSize: '1.8rem',\n lineHeight: 1.2,\n color: hexColors.white,\n\n span: {\n display: 'block',\n fontSize: '1.1rem',\n fontWeight: 'normal',\n textTransform: 'none',\n color: hexColors.lola,\n },\n },\n\n button: {\n span: {\n fontSize: '1.2rem',\n paddingRight: '0.5rem',\n },\n },\n})\n\nexport const SharePreviewContentWrapperStyled = styled.div({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: '0',\n overflowY: 'scroll', // scroll, not auto for momentum scroll to work\n WebkitOverflowScrolling: 'touch', // enables momentum scroll < IOS11\n overscrollBehavior: 'contain',\n padding: '0.5rem 0',\n background: hexColors.black,\n})\n\nexport const SharePreviewContentStyled = styled.div({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n\n // DIV used for image output\n '& > div': {\n boxSizing: 'border-box',\n position: 'relative',\n minWidth: measurements.mobi.minWidth,\n maxWidth: '40rem',\n margin: 'auto 0',\n padding: '1rem',\n paddingBottom: 0,\n backgroundColor: colors.brand.primary,\n\n // Fixes styles issues on output image\n fontFamily: 'sans-serif',\n fontVariant: 'normal !important',\n fontVariantLigatures: 'none !important',\n letterSpacing: '0.01rem',\n\n figure: {\n display: 'none',\n },\n\n '& > *': {\n position: 'relative',\n zIndex: 2,\n },\n\n // Brand logo\n '& > div:first-of-type': {\n boxSizing: 'border-box',\n textAlign: 'center',\n paddingBottom: '1.5rem',\n\n svg: {\n width: '15rem',\n maxHeight: '8rem',\n margin: 0,\n padding: 0,\n },\n },\n\n // Responsible text\n '& > div:last-of-type': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '1rem 0',\n\n p: {\n margin: 0,\n fontSize: '1rem',\n color: hexColors.lola,\n },\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors, Constants } from '@mobi/settings'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { Details } from '@core/Areas/AccountActivity/Components/Ticket/Components/Details/Details'\nimport { isLoadBetSupported } from '@core/Utils/betting/loadBet'\nimport {\n getTicketLayoutType,\n getTicketStatus,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport type { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport { AppHeaderButtonStyled } from '@core/Areas/AppHeader/Components/Buttons/Buttons.styles'\nimport { BusyIndicator } from '@mobi/component-library/Feedback/BusyIndicator'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { TABtouchBrandLogo } from '@core/Components/Logos/TABtouchBrandLogo'\nimport { OverlayClose } from '@core/Components/Overlay'\nimport { useFeature } from '@core/Utils/hooks/useFeature'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { BetInfo } from '@core/Areas/AccountActivity/Components/Ticket/Components/BetInfo'\nimport { Investment } from '@core/Areas/AccountActivity/Components/Ticket/Components/Investment'\nimport { handleShareBetClick } from './helpers/handleShareBetClick'\nimport { useCreateImageForBrowser } from './hooks/useCreateImageForBrowser'\nimport { useImageOutputDevTool } from './hooks/useImageOutputDevTool'\nimport {\n SharePreviewContentStyled as Content,\n SharePreviewContentWrapperStyled as Wrapper,\n SharePreviewOverlayHeaderStyled,\n} from './SharePreview.styles'\nimport { setTemporaryWidthOfPreviewElement } from './helpers'\n\nexport const SharePreview: React.FC<{\n ticket: Ticket\n activeTab: Tabs\n}> = ({ ticket, activeTab }) => {\n const previewImageElRef = React.useRef(null)\n const [shouldHideCost, setShouldHideCost] = React.useState(true)\n const [isBusy, setIsBusy] = React.useState(false)\n\n const scrollableContentRef = useBodyScrollLock()\n const imageFileBob = useCreateImageForBrowser(shouldHideCost, setIsBusy, previewImageElRef)\n const isShareBetLinkFeatureActive = useFeature('SHARE_BET_LINK')\n const [devOutputClickHandler, DevOutputImage] = useImageOutputDevTool(\n previewImageElRef,\n shouldHideCost\n )\n\n const ticketStatus = getTicketStatus(ticket, activeTab)\n const ticketTypeLayout = getTicketLayoutType(ticket)\n\n const shouldEnableLinkShare =\n activeTab === 'pending' && isShareBetLinkFeatureActive && isLoadBetSupported(ticket.planSeq)\n const isImageOnlyShare = activeTab === 'results' || !shouldEnableLinkShare\n\n const handleShareClick = () => {\n if (!previewImageElRef.current) return\n\n setIsBusy(true)\n const previewEl = previewImageElRef.current\n const resetTempWidth = setTemporaryWidthOfPreviewElement(previewEl)\n handleShareBetClick({\n ticket,\n ticketStatus,\n fileBlob: imageFileBob,\n previewEl,\n isImageOnlyShare,\n isCostShared: !shouldHideCost,\n }).finally(() => {\n setIsBusy(false)\n resetTempWidth()\n })\n }\n\n return (\n <>\n \n

    \n Share My Bet Preview image before sharing\n

    \n\n setShouldHideCost(curr => !curr)}\n >\n {shouldHideCost ? 'Show' : 'Hide'} Cost{' '}\n \n \n\n \n \n \n
    \n\n \n \n
    \n
    \n \n
    \n\n \n \n \n\n
    \n\n {!shouldHideCost && }\n \n \n\n
    \n

    Gamble responsibly. Call Gambling Help on {Constants.GamblingHelpPhoneNumber}

    \n
    \n
    \n {DevOutputImage && DevOutputImage}\n
    \n
    \n\n \n \n Cancel\n \n\n \n {isBusy ? : <>Share Bet}\n \n \n \n )\n}\n\nconst ButtonWrapperStyled = styled.div({\n display: 'flex',\n padding: '0.5rem',\n background: hexColors.white,\n\n button: {\n flex: 1,\n minHeight: '4rem',\n margin: 0,\n\n '&:first-of-type': {\n marginRight: '0.5rem',\n },\n '&:last-of-type': {\n marginLeft: '0.5rem',\n },\n\n 'svg:last-of-type': {\n marginLeft: '0.2rem',\n },\n 'svg:first-of-type': {\n marginLeft: '0.2rem',\n },\n },\n})\n","import { isReactNativeApp } from '@mobi/web-native-comms/web'\n\nlet canUserShare: boolean | null = null\n\nexport function doesClientSupportShare(): boolean {\n if (canUserShare !== null) {\n return canUserShare\n }\n\n canUserShare =\n isReactNativeApp ||\n // Determines if browser allows sharing with provided parameters\n !!navigator.canShare?.({\n title: 'sample',\n text: 'testing if the text param is accepted',\n files: [\n new File([new Blob(['Hello, world!'], { type: 'text/plain' })], 'test', {\n type: 'text/plain',\n }),\n ],\n })\n\n return canUserShare\n}\n","import React from 'react'\nimport { useParams } from 'react-router-dom'\nimport { FooterButtons } from '@mobi/betslip/Components/Common/BetCard'\nimport { useFeature } from '@core/Utils/hooks'\nimport type { Tabs, Ticket } from '@core/Areas/AccountActivity/types'\nimport { SharePreview } from './Components/SharePreview/SharePreview'\nimport { OverlayOpen } from '@core/Components/Overlay'\nimport { doesClientSupportShare } from './helpers/doesClientSupportShare'\n\nexport const ShareBet: React.FC<{ ticket: Ticket }> = ({ ticket }) => {\n const isShareBetFeatureActive = useFeature('SHARE_BET')\n const { tab: activeTab } = useParams<{ tab: Tabs }>()\n\n if (!isShareBetFeatureActive || !doesClientSupportShare()) return null\n\n return (\n launchSharePreview(ticket, activeTab)}\n testId='share-bet-button'\n />\n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction launchSharePreview(ticket: Ticket, activeTab: Tabs) {\n OverlayOpen(() => )\n}\n","import React, { useEffect, useRef } from 'react'\nimport {\n trackRaceReplayVideoClosed,\n trackRaceReplayVideoFullScreen,\n trackRaceReplayVideoMute,\n} from './analytics'\n\nexport function ReplayVideoPlayer({\n raceLocation,\n raceDate,\n videoSource,\n onCloseTapped,\n onFinished,\n}: {\n raceLocation: string\n raceDate: string\n videoSource: string\n onCloseTapped?: () => void\n onFinished?: () => void\n}) {\n const videoRef = useRef(null)\n\n const handleMuteToggle = () => {\n if (!videoRef.current) return\n const videoEl = videoRef.current\n const isMuted = videoEl.volume < 0.1 || videoEl.muted\n trackRaceReplayVideoMute(isMuted)\n }\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n trackRaceReplayVideoFullScreen(!!document.fullscreenElement)\n }\n\n document.addEventListener('fullscreenchange', handleFullscreenChange)\n document.addEventListener('webkitfullscreenchange', handleFullscreenChange)\n const videoEl = videoRef.current as unknown as HTMLVideoElement\n if (videoEl.webkitSupportsPresentationMode) {\n videoEl.addEventListener('webkitpresentationmodechanged', handleFullscreenChange)\n }\n\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange)\n document.removeEventListener('webkitfullscreenchange', handleFullscreenChange)\n videoEl.removeEventListener('webkitpresentationmodechanged', handleFullscreenChange)\n trackRaceReplayVideoClosed()\n }\n }, [])\n\n return (\n
    \n
    \n
    \n {raceLocation}\n {raceDate}\n onCloseTapped && onCloseTapped()}\n >\n \n \n
    \n\n onFinished && onFinished()}\n onVolumeChange={handleMuteToggle}\n data-testid='race-replay-video'\n >\n \n \n
    \n
    \n )\n}\n","import React from 'react'\nimport { ReplayVideoPlayer as Player } from '@core/Areas/Racing/Components/RaceReplay/ReplayVideoPlayer'\nimport { useAppSelector } from '@core/Store/hooks'\n\nexport const RaceReplayVideoPlayer: React.FC<\n { ticketId: number } & React.ComponentProps\n> = ({ ticketId, ...props }) => {\n const activeReplayTicketId = useAppSelector(state => state.accountActivity.activeReplayTicketId)\n\n if (activeReplayTicketId && ticketId != activeReplayTicketId) {\n const { onCloseTapped } = props\n onCloseTapped?.()\n }\n\n return \n}\n","import React, { useCallback, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useQueryClient } from 'react-query'\nimport { SkyTvButton } from '@mobi/component-library/Racing/SkyTvIndicator'\nimport { trackRaceReplayVideoLaunched } from '@core/Areas/Racing/Components/RaceReplay/analytics'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { getTicketLayoutType } from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { setActiveReplayTicketId } from '@core/Areas/AccountActivity/Store'\nimport { trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { logError } from '@core/Utils'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { getReplayInfoFromApi } from '@core/Areas/Racing/Components/RaceReplay/api'\nimport type { ReplayInfo } from '@core/Areas/Racing/Components/RaceReplay/types'\nimport { RegisterToast } from '@core/Components/Toast/ToastDriver'\n\nexport const RaceReplayButton: React.FC<{\n ticket: Ticket\n isPlaying: boolean\n onPlayClick?: (replayInfo: ReplayInfo) => void\n onCloseClick(): void\n}> = ({ ticket, onPlayClick, isPlaying, onCloseClick }) => {\n const dispatch = useDispatch()\n\n const ticketType = getTicketLayoutType(ticket)\n const firstLeg = ticket.legs[0]\n const canReplay =\n (ticketType === 'single-single' || ticketType === 'same-race-multi') &&\n firstLeg &&\n firstLeg.fixtureId &&\n ticket.status === 'Resolved'\n\n if (!canReplay) {\n return null\n }\n\n const onClick = (replayInfo: ReplayInfo) => {\n onPlayClick?.(replayInfo)\n dispatch(setActiveReplayTicketId(ticket.ticketSequence))\n trackKey(keys.raceReplayOpened)\n }\n\n return (\n onClick(info)}\n isPlaying={isPlaying}\n onCloseClick={onCloseClick}\n />\n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst ReplayButtonLocal: React.FC<{\n ticket: Ticket\n isPlaying: boolean\n onCloseClick(): void\n onReady?: (replayInfo: ReplayInfo) => void\n}> = ({ ticket, onReady, isPlaying, onCloseClick }) => {\n const [buttonState, setButtonState] = useState<'ready' | 'loading' | 'no_replay'>('ready')\n\n React.useEffect(() => {\n if (buttonState === 'no_replay') {\n RegisterToast({\n id: buttonState,\n type: 'error',\n message: 'No replay found',\n })\n }\n }, [buttonState])\n\n const queryClient = useQueryClient()\n\n const handleClick = useCallback(async () => {\n setButtonState('loading')\n try {\n const { fixtureId, fixtureDate, raceNumber } = ticket.legs[0]\n const data = await queryClient.fetchQuery({\n queryKey: queryKeys.raceReplayRequest(fixtureId, fixtureDate, +raceNumber),\n queryFn: () => getReplayInfoFromApi(fixtureId, fixtureDate, +raceNumber),\n staleTime: Infinity,\n })\n\n if (data) {\n setButtonState('ready')\n onReady?.(data)\n } else {\n setButtonState('no_replay')\n }\n\n trackRaceReplayVideoLaunched('resulted-bets', !!data)\n } catch {\n setButtonState('no_replay')\n logError('Could not load race replay')\n }\n }, [ticket, queryClient, onReady, setButtonState])\n\n if (!ticket.legs[0] || buttonState === 'no_replay') {\n return null\n }\n\n const isLoading = buttonState === 'loading'\n\n return (\n \n \n \n )\n}\n","import { colors } from '@mobi/component-library/Theme/Common'\nimport type { PromoTypeClass } from './types'\n\nexport const promoTypeColorThemes: Record<`&.${PromoTypeClass}`, { '--main-color': string }> = {\n '&.PromoType-Bonus': {\n '--main-color': colors.lavender[50],\n },\n\n '&.PromoType-Special': {\n '--main-color': colors.celery[50],\n },\n\n '&.PromoType-SuperPick': {\n '--main-color': colors.orange[50],\n },\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport type { PromoType } from '../PromoSelector/types'\nimport { promoTypeColorThemes } from '../PromoSelector/constants'\n\nexport const PromoBanner: React.FC<{ promoType: PromoType; text: string }> = ({\n promoType,\n text,\n}) => {\n const promoTypeClass = `PromoType-${promoType}`\n return (\n \n {promoType === 'SuperPick' && (\n \n \n \n )}\n\n {text}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div(\n {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx1,\n padding: `${spacing.smx1} ${spacing.sm}`,\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.medium,\n backgroundColor: 'var(--main-color)',\n borderRadius: radius.md,\n overflow: 'hidden',\n\n '> span:first-of-type': {\n flexShrink: 0,\n },\n\n '> span:last-of-type': {\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n promoTypeColorThemes\n)\n","import React from 'react'\nimport { PromoBanner } from '@mobi/betslip/Components/Common/PromoBanner'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\n\nexport const SuperPick: React.FC<{ ticket: Ticket }> = ({ ticket }) => {\n const superPick =\n ticket.isSpecial &&\n ticket.specialInformation &&\n ticket.specialInformation.find(s => s.isPowerPlay)\n\n if (!superPick) return null\n\n return \n}\n","import React from 'react'\nimport { useParams } from 'react-router-dom'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport type { ReplayInfo } from '@core/Areas/Racing/Components/RaceReplay/types'\nimport type { Tabs, Ticket as TicketType } from '@core/Areas/AccountActivity/types'\nimport { useFeature } from '@core/Utils/hooks'\nimport { Details } from './Components/Details/Details'\nimport { ShareBet } from './Components/ShareBet/ShareBet'\nimport { getTicketStatus } from './helpers/getTicketStatus'\nimport { Investment } from './Components/Investment'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { RaceReplayVideoPlayer } from './Components/RaceReplayVideoPlayer'\nimport { RaceReplayButton } from './Components/RaceReplayButton'\nimport { BetInfo } from './Components/BetInfo'\nimport { getTicketLayoutType } from './helpers'\nimport { SuperPick } from './Components/SuperPick'\n\nexport const Ticket: React.FC<{\n ticket: TicketType\n}> = ({ ticket }) => {\n const { tab: activeTab } = useParams<{ tab: Tabs }>()\n\n const ticketDisplayContext = React.useContext(TicketDisplayContext)\n\n const [status] = React.useState(() => getTicketStatus(ticket, activeTab))\n const [activeReplayInfo, setActiveReplayInfo] = React.useState(null)\n\n const isReplayTicketFeatureActive = useFeature('RESULTED_TICKET_REPLAYS')\n\n const isPreviewMode = ticketDisplayContext.type === 'share-preview'\n const shouldHideCost = isPreviewMode && ticketDisplayContext.data.shouldHideCost\n\n const ticketLayoutType = getTicketLayoutType(ticket)\n const expandableText =\n ticketLayoutType === 'multi' || ticketLayoutType === 'same-race-multi'\n ? 'Legs & More'\n : undefined\n\n return (\n \n \n\n {!shouldHideCost && }\n\n \n\n }\n rightSection={\n <>\n \n\n {isReplayTicketFeatureActive && (\n setActiveReplayInfo(info)}\n onCloseClick={() => setActiveReplayInfo(null)}\n isPlaying={!!activeReplayInfo}\n />\n )}\n \n }\n />\n\n {activeReplayInfo && (\n setActiveReplayInfo(null)}\n onFinished={() => setActiveReplayInfo(null)}\n />\n )}\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const CenterContentStyled = styled.div({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: '1.2rem',\n padding: '2rem',\n})\n","import React from 'react'\nimport { TicketResponseData, TransactionsResponseData } from '@core/Areas/AccountActivity/types'\nimport { Transaction } from '@core/Areas/AccountActivity/Components/Transaction'\nimport { Ticket } from '@core/Areas/AccountActivity/Components/Ticket'\nimport {\n getIdFromSortedString,\n isFauxTicketTransaction,\n isTransactionResponse,\n} from '@core/Areas/AccountActivity/helpers'\nimport { CenterContentStyled as Center } from '@core/Areas/AccountActivity/Components/Main/AccountActivityMain.styles'\nimport { DateHeader } from '@core/Areas/AccountActivity/Components/PagesDateHeader'\n\n// Main export to render collections of pages\nexport const Pages: React.FC<{\n pages: (TicketResponseData | TransactionsResponseData)[]\n isOrderByEvent: boolean\n selectedDate: string\n}> = ({ pages, isOrderByEvent, selectedDate }) => {\n const latestDateRef = React.useRef(null)\n\n return (\n <>\n {pages.map((page, i) => {\n return (\n \n )\n })}\n \n )\n}\n\n// Single page to ensure best performance\nconst Page = React.memo<{\n page: TicketResponseData | TransactionsResponseData\n isOrderByEvent: boolean\n latestDateRef: React.MutableRefObject\n isFirstPage: boolean\n selectedDate: string\n}>(({ page, isOrderByEvent, latestDateRef, isFirstPage, selectedDate }) => {\n return (\n <>\n {isTransactionResponse(page)\n ? page.sortedIds.map((transactionId, i) => {\n const item = page.transactionsById[getIdFromSortedString(transactionId)]\n if (isFauxTicketTransaction(item))\n return (\n
    \n {item.message}\n
    \n )\n\n return [\n ,\n ,\n ]\n })\n : page.sortedIds.map((ticketId, i) => {\n const item = page.ticketsById[getIdFromSortedString(ticketId)]\n if (isFauxTicketTransaction(item))\n return (\n
    \n {item.message}\n
    \n )\n\n return [\n ,\n ,\n ]\n })}\n \n )\n})\n\nPage.displayName = 'Page'\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useRef, useState, useEffect } from 'react'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\n\nexport const PullToRefreshContainer = ({\n children,\n onRefresh,\n}: {\n children: React.ReactNode\n onRefresh: () => void\n}) => {\n const [isPulling, setIsPulling] = useState(false)\n const pulledDistRef = useRef(0)\n\n const startYRef = useRef(null)\n const containerRef = useRef(null)\n const spinnerRef = useRef(null)\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) return\n\n const handleTouchStart = (e: TouchEvent) => {\n if (window.scrollY === 0) {\n startYRef.current = e.touches[0].clientY\n }\n }\n\n const handleTouchMove = (e: TouchEvent) => {\n if (startYRef.current === null || !containerRef.current || !spinnerRef.current) return\n\n const currentY = e.touches[0].clientY\n const diff = currentY - startYRef.current\n pulledDistRef.current = diff\n setIsPulling(true)\n\n if (diff > 0) {\n spinnerRef.current.style.height = '5rem'\n\n const clampedDistance = Math.min(diff / 3, 105)\n containerRef.current.style.transform = `translateY(${clampedDistance}px)`\n\n if (diff > 125) {\n spinnerRef.current.style.opacity = '1'\n }\n }\n }\n\n const handleTouchEnd = () => {\n if (!containerRef.current || !spinnerRef.current) return\n\n containerRef.current.style.transform = 'unset'\n spinnerRef.current.style.transform = 'unset'\n spinnerRef.current.style.opacity = '0'\n spinnerRef.current.style.height = '0'\n\n if (pulledDistRef.current > 250) {\n onRefresh()\n }\n\n startYRef.current = null\n setIsPulling(false)\n pulledDistRef.current = 0\n }\n\n container.addEventListener('touchstart', handleTouchStart)\n container.addEventListener('touchmove', handleTouchMove)\n container.addEventListener('touchend', handleTouchEnd)\n\n return () => {\n container.removeEventListener('touchstart', handleTouchStart)\n container.removeEventListener('touchmove', handleTouchMove)\n container.removeEventListener('touchend', handleTouchEnd)\n }\n }, [onRefresh])\n\n return (\n
    \n {isPulling && }\n {children}\n
    \n )\n}\n\nconst SpinnerContianer = styled.div({\n position: 'absolute',\n top: '-7rem',\n left: 0,\n right: 0,\n height: 0,\n display: 'flex',\n justifyContent: 'center',\n transition: 'opacity 0.25s ease-in',\n opacity: 0,\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport styled from '@emotion/styled'\nimport { useSelector } from 'react-redux'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport {\n getPendingSortOrder,\n getResultsSortOrder,\n} from '@core/Areas/AccountActivity/Store/selectors'\nimport { Header } from '@core/Areas/AccountActivity/Components/Header'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport type {\n Tabs,\n Ticket,\n TicketResponseData,\n TransactionsResponseData,\n} from '@core/Areas/AccountActivity/types'\nimport { Pages } from '@core/Areas/AccountActivity/Components/Pages'\nimport {\n getIdFromSortedString,\n isFauxTicketTransaction,\n isTransactionResponse,\n} from '@core/Areas/AccountActivity/helpers'\nimport { CenterContentStyled as Center } from './AccountActivityMain.styles'\nimport { trackAccountActivityTab } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useAccountActivityData } from '@core/Areas/AccountActivity/Hooks'\nimport { useRefreshOnBetPlaced } from './hooks'\nimport { PullToRefreshContainer } from '@mobi/component-library/Common/PullToRefreshContainer'\n\nlet timeSinceLastRefresh: number | null = null\n\nexport const AccountActivityMain: React.FC<{ activeTab: Tabs }> = ({ activeTab }) => {\n const pendingSortOrder = useSelector(getPendingSortOrder)\n const resultsSortOrder = useSelector(getResultsSortOrder)\n\n const [selectedDate, setSelectedDate] = React.useState(() => getCurrentMonth())\n\n useRefreshOnBetPlaced()\n\n // Reset selected date on tab change & tab anlaytics\n React.useEffect(() => {\n if (!activeTab) return\n setSelectedDate(getCurrentMonth())\n trackAccountActivityTab({ activeTab })\n }, [activeTab, setSelectedDate])\n\n const isOrderByEventStart =\n (activeTab === 'pending' && pendingSortOrder === 'eventStart') ||\n (activeTab === 'results' && resultsSortOrder === 'eventStart') ||\n activeTab === 'rebet'\n\n const {\n data,\n isLoading,\n isError,\n isFinalPage,\n isEmptyState,\n LoadMoreButton,\n SkeletonLoader,\n refetch,\n } = useAccountActivityData({ activeTab, isOrderByEventStart, selectedDate })\n\n const firstDate =\n data && data.pages.length && data.pages[0].sortedIds.length\n ? getFirstDate(data.pages[0], isOrderByEventStart)\n : isEmptyState\n ? dayjs().format('D MMMM YYYY')\n : ''\n\n const onRefresh = () => {\n if (timeSinceLastRefresh && Date.now() - timeSinceLastRefresh < 2000) return\n setSelectedDate(getCurrentMonth())\n refetch()\n timeSinceLastRefresh = Date.now()\n }\n\n return (\n <>\n \n\n \n \n {isLoading ? (\n \n ) : (\n data && (\n <>\n \n\n {isFinalPage ? (\n
    \n {isEmptyState ? (\n \n You have no {getTicketsTransactionsLabel(activeTab)}\n \n ) : (\n \n End of {getTicketsTransactionsLabel(activeTab)}\n \n )}\n
    \n ) : (\n \n )}\n \n )\n )}\n\n {isError && (\n
    \n refetch()}\n >\n Try again\n \n
    \n )}\n
    \n
    \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\nfunction getTicketsTransactionsLabel(activeTab: Tabs) {\n return activeTab === 'transactions' ? 'Transactions' : 'Tickets'\n}\n\nfunction getFirstDate(\n data: TransactionsResponseData | TicketResponseData,\n isOrderByEvent: boolean\n): string {\n const firstId = data.sortedIds[0]\n const item = isTransactionResponse(data)\n ? data.transactionsById[getIdFromSortedString(firstId)]\n : data.ticketsById[getIdFromSortedString(firstId)]\n\n const firstDate =\n isFauxTicketTransaction(item) || !isOrderByEvent\n ? item.timestamp\n : (item as Ticket).eventStartDateTime\n\n return dayjs(firstDate).isValid() ? dayjs(firstDate).format('D MMMM YYYY') : ''\n}\n\nfunction getCurrentMonth() {\n return dayjs().date(1).format('YYYY-MM-DD')\n}\n\n// ======\n// Styles\n// ======\n\nconst AccountActivityContainerStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n position: 'relative',\n margin: `1rem ${spacing.md}`,\n})\n","import React from 'react'\nimport { ConfirmAllBetsSuccessful } from '@core/Areas/Betslip/signals'\nimport { ConfirmBetSucceeded } from '@core/Areas/Quickbet/signals'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\n/** Used primarily for ReBet, as Quickbet and Betslip can be opened over account activity */\nexport const useRefreshOnBetPlaced = () => {\n React.useEffect(() => {\n const clearAccountActivityCache = () =>\n queryClient.invalidateQueries({\n queryKey: [queryKeys.accountBase, queryKeys.accountActivityBase],\n })\n\n const betslipBetPlacedSupscription =\n ConfirmAllBetsSuccessful.signal$.subscribe(clearAccountActivityCache)\n const quickbetBetPlacedSubscription =\n ConfirmBetSucceeded.signal$.subscribe(clearAccountActivityCache)\n\n return () => {\n quickbetBetPlacedSubscription.dispose()\n betslipBetPlacedSupscription.dispose()\n }\n }, [])\n}\n","import React from 'react'\nimport { Redirect, useParams } from 'react-router-dom'\nimport { useDisableAppHeaderSticky } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderSticky'\nimport { useIsFobSportsFeatureActive } from '@core/Areas/Sports/hooks/useIsFobSportsFeatureActive'\nimport { RacingSportsTabs } from './Components/RacingSportsTabs'\nimport { AccountActivityMain } from './Components/Main'\nimport type { Tabs } from './types'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ACCOUNT_ACTIVITY_ROUTE } from './constants'\n\nconst tabs: Tabs[] = ['pending', 'results', 'rebet', 'transactions']\n\n/** MOBI Only */\nexport const AccountActivity: React.FC = () => {\n const { tab = 'pending' } = useParams<{ tab: Tabs }>()\n\n useDisableAppHeaderSticky()\n const isSportsFeatureActive = useIsFobSportsFeatureActive()\n\n if (!tabs.includes(tab)) {\n return \n }\n\n return (\n \n {!isSportsFeatureActive && }\n\n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const DetailsListStyled = styled.dl({\n textAlign: 'left',\n})\n\nexport const HorizontalDivider = styled.div({\n borderTop: `1px solid ${hexColors.veryLightGrey}`,\n height: 0,\n margin: '1.5rem 0',\n})\n\nexport const DescriptionStyled = styled.dt({\n fontSize: '1.1rem',\n lineHeight: '1.1rem',\n color: hexColors.dimGrey,\n marginBottom: '1.0rem',\n\n // desktop overrides\n float: 'none',\n width: '100%',\n})\n\nexport const DataStyled = styled.dd({\n fontSize: '1.6rem',\n lineHeight: '2rem',\n margin: 0,\n\n // desktop overrides\n float: 'none',\n width: '100%',\n})\n\nexport const AdditionalLinksStyled = styled.a({\n color: hexColors.sushi,\n textDecoration: 'underline',\n fontSize: '1.2rem',\n padding: '1rem 0 0',\n display: 'block',\n})\n\nexport const NoticeBoxInternationalStyled = styled.div({\n boxSizing: 'border-box',\n padding: '0.2rem 1.5rem',\n border: `2px solid ${hexColors.black}`,\n lineHeight: 2,\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const MessageStyled = styled('div')({\n marginLeft: '1rem',\n fontSize: '1.2rem',\n lineHeight: '1.5',\n})\n\nexport const DueMessageContainerStyled = styled('div')({\n backgroundColor: hexColors.whiteSmoke,\n margin: '1rem -1rem',\n padding: '1rem',\n position: 'relative',\n})\n\nexport const DueMessageCountdownNumber = styled('div')({\n fontSize: '2rem',\n})\n\nexport const DueMessageCountdownDays = styled('div')({\n fontSize: '1rem',\n})\n","import styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { hexColors } from '@mobi/settings'\n\nconst urgencyColors: Record = {\n high: hexColors.freeSpeechRed,\n medium: hexColors.orange,\n low: hexColors.sushi,\n}\n\nexport const RadialCountdownContainerStyled = styled('div')({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n fontSize: '1.5em',\n justifyContent: 'center',\n lineHeight: 1,\n userSelect: 'none',\n})\n\nexport const RadialCountdownWrapStyled = styled('div')({\n backgroundColor: hexColors.white,\n borderRadius: '50%',\n display: 'inline-block',\n position: 'relative',\n})\n\nexport const RadialCountdownTextStyled = styled('div')({\n alignItems: 'center',\n bottom: 0,\n display: 'flex',\n fontSize: '1.2rem',\n height: '100%',\n flexDirection: 'column',\n justifyContent: 'center',\n left: 0,\n margin: 'auto',\n position: 'absolute',\n right: 0,\n textAlign: 'center',\n top: 0,\n})\n\nexport const RadialCountdownArcStyled = styled('svg')({\n fill: 'none',\n strokeLinecap: 'round',\n transform: 'rotate(-90deg)',\n width: '6rem',\n height: '6rem',\n})\n\nexport const RadialCountdownArcBackgroundStyled = styled('circle')({\n stroke: hexColors.veryLightGrey,\n})\n\ninterface RadialCountdownArcFilledStyledProps {\n offset: number\n urgency: 'high' | 'medium' | 'low'\n}\n\nconst fillArc = (offset: number) =>\n keyframes({\n '0%': {\n strokeDashoffset: '0',\n },\n '100%': {\n strokeDashoffset: `${offset}`,\n },\n })\n\nexport const RadialCountdownArcFillStyled = styled('circle')(\n {\n transition: 'stroke-dashoffset 9000ms ease-in-out',\n },\n\n ({ offset, urgency }) => ({\n animation: `${fillArc(offset)} 0.5s ease-out forwards`,\n stroke: urgencyColors[urgency],\n })\n)\n","import React from 'react'\n\nimport {\n RadialCountdownContainerStyled,\n RadialCountdownWrapStyled,\n RadialCountdownTextStyled,\n RadialCountdownArcStyled,\n RadialCountdownArcBackgroundStyled,\n RadialCountdownArcFillStyled,\n} from './RadialCountdown.styles'\n\ninterface RadialCountdownProps {\n progress: number\n urgency: 'high' | 'medium' | 'low'\n children?: React.ReactNode\n sizeInPx?: number\n}\n\nexport function RadialCountdown({\n progress,\n children,\n urgency,\n sizeInPx = 80,\n}: RadialCountdownProps) {\n return (\n \n \n {children}\n \n \n )\n}\n\ntype ProgressProps = Required> &\n Pick\n\nfunction Progress({ progress, urgency, children, sizeInPx }: ProgressProps) {\n const center = sizeInPx / 2\n const strokeWidth = sizeInPx * 0.1\n const radius = sizeInPx / 2 - strokeWidth / 2\n const circumference = 2 * Math.PI * radius\n const offset = ((100 - progress) / 100) * circumference\n\n return (\n \n \n \n \n \n {children}\n \n )\n}\n","import React from 'react'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport colors from '../../../../Settings/colors'\nimport {\n DueMessageContainerStyled,\n MessageStyled,\n DueMessageCountdownNumber,\n DueMessageCountdownDays,\n} from './DueMessage.styles'\nimport { RadialCountdown } from '../../../../Components/RadialCountdown'\n\nexport function getDueMessageText({\n hasAttemptedReverification,\n numDaysRemaining,\n reverificationDue,\n}: DueMessageProps) {\n if (reverificationDue && hasAttemptedReverification) {\n return 'Additional personal ID is required.'\n }\n\n if (reverificationDue) {\n return 'Please confirm your account details to re-activate your account.'\n }\n\n if (numDaysRemaining === 0) {\n return 'Reverification is due today!'\n }\n\n if (hasAttemptedReverification) {\n if (numDaysRemaining == null || numDaysRemaining < 0) {\n return 'Additional personal ID is required.'\n }\n return 'Re-verification required within:'\n }\n\n if (numDaysRemaining == null || numDaysRemaining < 0) {\n return 'Please confirm your account details below:'\n }\n\n return 'Please confirm your account details below within the next:'\n}\n\ninterface DueMessageProps {\n hasAttemptedReverification: boolean\n numDaysRemaining: number\n reverificationDue: boolean\n}\n\nexport function DueMessage({\n hasAttemptedReverification,\n numDaysRemaining,\n reverificationDue,\n}: DueMessageProps) {\n const showCountdown = !reverificationDue && numDaysRemaining !== null && numDaysRemaining > 0\n\n return (\n \n \n \n \n \n \n \n \n {getDueMessageText({\n hasAttemptedReverification,\n numDaysRemaining,\n reverificationDue,\n })}\n \n \n \n {showCountdown && }\n \n \n \n \n )\n}\n\nexport function DueCountdown({ numDaysRemaining }: { numDaysRemaining: number }) {\n const progress = numDaysRemaining === 0 ? 100 : (100 * numDaysRemaining) / 14\n const urgency = numDaysRemaining < 3 ? 'high' : numDaysRemaining < 8 ? 'medium' : 'low'\n\n return (\n \n {numDaysRemaining}\n Day{numDaysRemaining === 1 ? '' : 's'}\n \n )\n}\n","import React from 'react'\nimport { navigateHistoryBack } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { observeImmutable } from '@core/Components/HOCs/observe'\nimport { PopupNoticeBox } from '@core/Components/PopupNoticeBox'\nimport { NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { state$ as reverificationState$, ReverificationCompleted } from './../../driver'\nimport {\n state$ as contactDetailsState$,\n ContactDetailsStateRecord,\n} from '@core/Areas/ContactDetails/driver'\n\ninterface ReverificationCompleteMessageProps {\n isReverificationSuccess: boolean\n isReverificationFailed?: boolean\n isReverificationCompleted: boolean\n navigateToHistoryBack?: boolean\n}\n\nexport const ReverificationComplete = observeImmutable(reverificationState$, ({ record }) => {\n const { isReverificationSuccess, isReverificationFailed, isReverificationCompleted } = record\n return (\n \n )\n})\n\nexport const ContactDetailsReverificationSuccess = observeImmutable<\n ContactDetailsStateRecord,\n { navigateToHistoryBack?: boolean }\n>(contactDetailsState$, ({ record, navigateToHistoryBack }) => {\n const { isReverificationSuccess } = record\n return (\n \n )\n})\n\nexport class ReverificationCompleteMessage extends React.Component {\n private reverificationCompleteRef: HTMLElement | null = null\n\n public onClose = () => {\n ReverificationCompleted()\n if (this.props.navigateToHistoryBack) {\n navigateHistoryBack()\n }\n }\n\n public componentDidMount() {\n // on mount scroll to message\n if (this.reverificationCompleteRef) {\n window.scrollTo(0, -this.reverificationCompleteRef.offsetTop)\n }\n }\n\n public render() {\n if (!this.props.isReverificationSuccess && !this.props.isReverificationFailed) {\n return null\n }\n\n if (this.props.isReverificationCompleted) {\n return null\n }\n\n const message = this.props.isReverificationSuccess\n ? 'Re-verification was successful'\n : 'Re-verification was unsuccessful please try again later.'\n const noticeBoxType = this.props.isReverificationSuccess\n ? NoticeBoxTypes.Success\n : NoticeBoxTypes.Error\n const subtitle = this.props.isReverificationSuccess ? 'Thank you!' : ''\n\n return (\n {\n this.reverificationCompleteRef = node\n }}\n >\n \n \n )\n }\n}\n","import styled from '@emotion/styled'\n\nexport const MessageStyled = styled('p')({\n textAlign: 'left',\n wordWrap: 'normal',\n fontSize: '1.2rem',\n lineHeight: 1.5,\n margin: '1rem 0',\n})\n","import React from 'react'\nimport { Observable } from 'rx'\nimport { recordify, TypedRecord } from 'typed-immutable-record'\nimport { isLoading, isErrored, LoadingInstance, ErroredInstance } from 'rwwa-data-access'\nimport { navigateToContactDetailsEdit } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { ContactDetails as ContactDetailsRepo } from '../../Data/Account/contactDetails'\nimport { BetAccountHolder } from '@mobi/api-types'\nimport { connect } from '../../Components/HOCs/connect'\nimport { observeImmutable } from '../../Components/HOCs/observe'\nimport {\n PopupContainerStyled,\n PopupStyled,\n PopupTitleStyled,\n} from '../../Components/Popup/Popup.styles'\nimport { ButtonBlock, CloseButton } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { isHome } from '@classic/Foundation/Navigation/Nav'\nimport { ErrorMessage } from '../../Components/Messages'\nimport {\n buildName,\n buildDateOfBirth,\n buildPhoneNumber,\n buildAddress,\n isInternationalCustomer,\n} from '../ContactDetails/data-transforms'\nimport {\n DescriptionStyled,\n DataStyled,\n DetailsListStyled,\n AdditionalLinksStyled,\n HorizontalDivider,\n NoticeBoxInternationalStyled,\n} from './ReverificationPopup.styles'\nimport { DueMessage } from './Components/DueMessage'\nimport { ReverificationComplete } from './Components/ReverificationComplete'\nimport { ProvideExtraPersonalIdMessage } from './Components/ProvideExtraPersonalIdMessage'\nimport {\n state$ as reverificationState$,\n RemindMeLater,\n ConfirmReverificationDetails,\n} from './driver'\nimport { state$ as userAccountState$ } from '../../State/UserAccount/userAccountDriver'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2/'\n\nexport interface PopupState {\n hasAttemptedReverification: boolean\n reverificationDue: boolean\n numDaysRemaining: number\n isReverificationSuccess: boolean\n isReverificationFailed: boolean\n isFeatureActive: boolean\n requiresReverification: boolean\n remindMeLater: boolean\n userInitiatedReverification: boolean\n isLoggedIn: boolean\n isProcessing: boolean\n betAccountHolderNumber: number\n isReverificationCompleted: boolean\n}\n\ninterface PopupStateRecord extends TypedRecord, PopupState {}\n\nconst popupState$: Observable = Observable.combineLatest(\n reverificationState$,\n userAccountState$,\n (reverification, userAccount) =>\n recordify({\n hasAttemptedReverification: reverification.hasAttemptedReverification,\n reverificationDue: reverification.reverificationDue,\n numDaysRemaining: reverification.numDaysRemaining,\n isReverificationSuccess: reverification.isReverificationSuccess,\n isReverificationFailed: reverification.isReverificationFailed,\n isFeatureActive: reverification.isFeatureActive,\n requiresReverification: reverification.requiresReverification,\n remindMeLater: reverification.remindMeLater,\n userInitiatedReverification: reverification.userInitiatedReverification,\n isLoggedIn: userAccount.isLoggedIn,\n isProcessing: reverification.isLoading,\n betAccountHolderNumber: reverification.betAccountHolderNumber,\n isReverificationCompleted: reverification.isReverificationCompleted,\n })\n)\n\nexport const ReverificationPopup = (props: { isDesktop: boolean }) =>\n observeImmutable(popupState$, ({ record }) => {\n const {\n hasAttemptedReverification,\n reverificationDue,\n numDaysRemaining,\n isReverificationSuccess,\n isReverificationFailed,\n isProcessing,\n betAccountHolderNumber,\n } = record\n const showPopup = shouldShowPopup(record)\n\n return (\n
    \n {isProcessing && }\n \n
    \n )\n })\n\nexport const ReverificationPopupMobi = ReverificationPopup({ isDesktop: false })\n\nexport function shouldShowPopup({\n isFeatureActive,\n isLoggedIn,\n requiresReverification,\n remindMeLater,\n userInitiatedReverification,\n betAccountHolderNumber,\n}: PopupState) {\n return (\n isFeatureActive &&\n isLoggedIn &&\n requiresReverification &&\n ((isHome() && !remindMeLater) || userInitiatedReverification) &&\n !!betAccountHolderNumber\n )\n}\n\ninterface ReverificationPopupComponentProps {\n showPopup: boolean\n hasAttemptedReverification: boolean\n reverificationDue: boolean\n numDaysRemaining: number\n isReverificationSuccess: boolean\n isReverificationFailed: boolean\n betAccountHolderNumber: number\n isDesktop: boolean\n}\n\nexport function ReverificationPopupComponent({\n showPopup,\n hasAttemptedReverification,\n reverificationDue,\n numDaysRemaining,\n isReverificationSuccess,\n isReverificationFailed,\n betAccountHolderNumber,\n isDesktop,\n}: ReverificationPopupComponentProps) {\n if (isReverificationSuccess || isReverificationFailed) {\n return \n }\n\n if (!showPopup) {\n return null\n }\n\n return (\n \n )\n}\n\ninterface ReverificationPopupContentsProps {\n numDaysRemaining: number\n reverificationDue: boolean\n hasAttemptedReverification: boolean\n betAccountHolderNumber: number\n isDesktop: boolean\n}\n\nfunction ReverificationPopupContents({\n numDaysRemaining,\n reverificationDue,\n hasAttemptedReverification,\n betAccountHolderNumber,\n isDesktop,\n}: ReverificationPopupContentsProps) {\n return (\n \n \n } />\n Account Re-verification\n \n {hasAttemptedReverification ? (\n \n ) : (\n \n )}\n \n \n \n )\n}\n\ninterface ReverificationDetailsProps {\n fullName?: string\n dateOfBirth?: string\n email?: string\n phoneMobile?: string\n addressResidential?: string | null\n isInternationalCustomer: boolean\n betAccountHolderNumber: number\n isDesktop: boolean\n}\n\nfunction navigateToEditContactDetails({\n isDesktop,\n betAccountHolderNumber,\n}: {\n isDesktop?: boolean\n betAccountHolderNumber: number\n}) {\n return () => {\n RemindMeLater()\n navigateToContactDetailsEdit({ isDesktop, betAccountHolderNumber })\n }\n}\n\nfunction ReverificationDetails({\n betAccountHolderNumber,\n isDesktop,\n}: {\n betAccountHolderNumber: number\n isDesktop?: boolean\n}) {\n // @ts-expect-error Legacy usage, needs refactor\n const ConnectReverificationDetails: React.ComponentClass<{\n contactDetails: string\n isDesktop?: boolean\n }> = connect({\n contactDetails: ContactDetailsRepo,\n })(ReverificationDetailsLoader)\n return (\n \n )\n}\n\nfunction ReverificationDetailsLoader({\n contactDetails,\n isDesktop,\n}: {\n contactDetails: typeof LoadingInstance | typeof ErroredInstance | BetAccountHolder\n isDesktop: boolean\n}) {\n if (isLoading(contactDetails)) {\n return \n }\n\n if (isErrored(contactDetails)) {\n return An error occurred while loading your contact details ...\n }\n\n const props: ReverificationDetailsProps = {\n fullName: contactDetails.NameDetails && buildName(contactDetails.NameDetails),\n dateOfBirth: buildDateOfBirth(contactDetails.DateOfBirth as Date),\n email: contactDetails.Contact && contactDetails.Contact.Email,\n phoneMobile:\n contactDetails.Contact &&\n contactDetails.Contact.Mobile &&\n buildPhoneNumber(contactDetails.Contact.Mobile),\n addressResidential:\n contactDetails.ResidentialAddress && buildAddress(contactDetails.ResidentialAddress),\n betAccountHolderNumber: contactDetails.BetAccountHolderNumber,\n isInternationalCustomer: isInternationalCustomer(contactDetails.ResidentialAddress),\n isDesktop: isDesktop,\n }\n\n return \n}\n\nexport function ReverificationDetailsView({\n fullName,\n dateOfBirth,\n email,\n phoneMobile,\n addressResidential,\n betAccountHolderNumber,\n isInternationalCustomer: isInternational,\n isDesktop,\n}: ReverificationDetailsProps) {\n const confirm = () => ConfirmReverificationDetails({ betAccountHolderNumber })\n\n return (\n
    \n \n Full Name\n {fullName}\n\n \n\n Date of Birth\n {dateOfBirth}\n\n \n\n Email\n {email}\n\n \n\n Mobile\n {phoneMobile}\n\n \n\n Address - Residential\n {addressResidential}\n \n\n \n \n \n \n Confirm\n \n \n \n \n \n {isInternational ? (\n \n ) : (\n \n )}\n \n \n \n
    \n )\n}\n\nfunction NoticeBoxInternational() {\n return (\n \n If your name, address or date of birth are incorrect, please call us on{' '}\n for assistance.\n \n )\n}\n\nfunction UpdateDetailsButton({\n isDesktop,\n betAccountHolderNumber,\n}: {\n isDesktop?: boolean\n betAccountHolderNumber: number\n}) {\n return (\n \n No, I need to update my details\n \n )\n}\n\nfunction ProvideExtraPersonalIdButton({\n betAccountHolderNumber,\n}: {\n betAccountHolderNumber: number\n}) {\n return (\n
    \n \n \n Provide Extra Personal ID\n \n
    \n )\n}\n\nfunction AdditionalLinks() {\n return (\n \n \n \n \n Learn more\n \n \n \n Remind Me Later\n \n \n \n )\n}\n","import React from 'react'\nimport { MessageStyled } from './ProvideExtraPersonalIdMessage.styles'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\nexport const ProvideExtraPersonalIdMessage = () => {\n return (\n \n To increase the success of re-verification please provide additional information such as{' '}\n Driver's Licence, Passport, Medicare Card{' '}\n or call for assistance.\n \n )\n}\n","import React from 'react'\nimport { DisplayKambiClient, HideKambiClient } from '@core/Areas/Kambi/driver'\nimport { toggleKambiVisiblity } from '../helpers/visibility'\n\nexport const useToggleVisibility = (isHidden: boolean): void => {\n React.useEffect(() => {\n if (isHidden) {\n hideKambi()\n } else {\n DisplayKambiClient()\n }\n\n return () => {\n hideKambi()\n }\n }, [isHidden])\n}\n\n// Ensure visiblity state is hidden and in-sync with driver\n// - Fixes issue where kambi initiates own display, making signal not work due to same state (distinctUntilChanged)\nfunction hideKambi() {\n HideKambiClient()\n toggleKambiVisiblity(false)\n}\n","import React from 'react'\nimport { getWapi } from '../helpers'\n\n// Ensure Kambi displays the home page. Workaround for an open issue (2021/07/09) whereby the Kambi client\n// navigates back to the Bet History page, when we explicitly link to the home page\nexport const useRouteEnterRedirect = (isNewSportsFeatureActive: boolean): void => {\n const enterHashRef = React.useRef(window.location.hash)\n\n React.useEffect(() => {\n if (isNewSportsFeatureActive) return\n getWapi().then(wapi => {\n wapi.navigate(enterHashRef.current)\n })\n }, [isNewSportsFeatureActive])\n}\n","import React from 'react'\nimport { state$ as kambiState$ } from '../driver'\n\nlet hasPageRendered = false\n\nexport const useShouldShowSpinner = (): boolean => {\n const [shouldShowSpinner, setShouldShowSpinner] = React.useState(false)\n\n // Only show spinner before \"pageRendered\" event & route is visible\n React.useEffect(() => {\n if (hasPageRendered) return undefined\n\n const subscription = kambiState$\n .map(state => state.get('isKambiRendered'))\n .distinctUntilChanged()\n .subscribe(isKambiRendered => {\n setShouldShowSpinner(!isKambiRendered)\n\n if (isKambiRendered) {\n hasPageRendered = true\n subscription?.dispose?.()\n }\n })\n return () => {\n subscription?.dispose?.()\n }\n }, [])\n\n return shouldShowSpinner\n}\n","import styled from '@emotion/styled'\nimport { ButtonStyled } from '@mobi/component-library/Common/Buttons'\nimport { measurements } from '@mobi/component-library/Theme/Common'\nimport { colors } from '@mobi/settings'\n\nexport const KambiCenteredContainerStyled = styled.div({\n position: 'absolute',\n zIndex: 0,\n width: '100%',\n minHeight: `calc(100vh - ${measurements.mobi.headerHeight})`,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: colors.kambi.container.background,\n fontSize: '4rem',\n})\n\nexport const KambiUnsupportedBrowserTextStyled = styled.p({\n fontSize: '1.6rem',\n})\n\nexport const LinkButton = styled(ButtonStyled)({\n textDecoration: 'none',\n}).withComponent('a')\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { RacingSportsTabs } from '@core/Areas/AccountActivity/Components/RacingSportsTabs'\nimport {\n KAMBI_BETHISTORY_HASH_ROUTE,\n KAMBI_BETSLIP_DIV_CLASS,\n KAMBI_CSS_HIDDEN_CLASS,\n KAMBI_DIV_ID,\n KAMBI_WRAPPER_DIV_ID,\n} from './constants'\nimport {\n useToggleVisibility,\n useRouteEnterRedirect,\n useShowTransactionTabs,\n useShouldShowSpinner,\n useShowBrowserUnsupported,\n useKambiRouteGuard,\n useKambiMaintenanceFeature,\n} from './hooks'\nimport { state$ as kambiState$ } from './driver'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n KambiCenteredContainerStyled as Container,\n KambiUnsupportedBrowserTextStyled as Text,\n LinkButton,\n} from './KambiClient.styles'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { Redirect } from 'react-router-dom'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { useIsFobSportsFeatureActive } from '@core/Areas/Sports/hooks/useIsFobSportsFeatureActive'\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n hour: 'numeric',\n minute: 'numeric',\n}\n\n// Handles enter / leave events in react-router\nexport const KambiRouteEffects: React.FC = () => {\n const history = useHistory()\n const endDate = useKambiMaintenanceFeature()\n const isNewSportsFeatureEnabled = useIsFobSportsFeatureActive()\n\n useToggleVisibility(!!endDate)\n useRouteEnterRedirect(isNewSportsFeatureEnabled)\n useKambiRouteGuard()\n const shouldShowTransactionTabs = useShowTransactionTabs()\n const shouldShowSpinner = useShouldShowSpinner()\n const shouldShowBrowserUnsupported = useShowBrowserUnsupported()\n\n if (\n isNewSportsFeatureEnabled &&\n !history.location.pathname.includes(KAMBI_BETHISTORY_HASH_ROUTE.replace('#', ''))\n ) {\n return \n }\n\n if (endDate) return KambiMaintenance(endDate)\n\n if (shouldShowSpinner) {\n return (\n \n \n \n )\n }\n\n if (shouldShowBrowserUnsupported) {\n const browserOrDeviceText = isReactNativeApp ? 'Device' : 'Browser'\n return (\n \n \n Sports is unavailable on this {browserOrDeviceText.toLowerCase()}.\n \n Please try a newer{' '}\n version.\n \n \n \n )\n }\n\n return shouldShowTransactionTabs ? : null\n}\n\n// Main component to render kambi into\nexport const KambiClient: React.FC = React.memo(() => {\n const kambiDivElRef = React.useRef(null)\n\n // Fix white space bug (MVPS-86: Kambi has inline styles overriding hidden class)\n React.useEffect(() => {\n if (!kambiDivElRef.current) return undefined\n const kambiDivEl = kambiDivElRef.current\n const subscription = kambiState$\n .map(state => state.get('isVisible'))\n .distinctUntilChanged()\n .subscribe(isVisible => !isVisible && kambiDivEl.removeAttribute('style'))\n return () => {\n subscription.dispose()\n }\n }, [])\n\n return (\n
    \n
    \n\n \n
    \n )\n})\n\nconst KambiMaintenance: React.FC = (endDate: string) => {\n return (\n \n \n \n We expect to be back up and running by{' '}\n {new Date(endDate).toLocaleString('en-AU', dateOptions)}\n \n Our customer service centre can be contacted on 1300 36 36 88\n \n Return to Home Page\n \n \n \n )\n}\n","import React from 'react'\nimport { FeatureFlags } from '@mobi/settings'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\n\nexport function useKambiMaintenanceFeature(): false | string {\n const [maintenancePayload, setMaintenancePayload] = React.useState(false)\n\n // Kambi Feature Toggle\n React.useEffect(() => {\n const subscription = featureState$\n .map(state => ({\n isMaintenanceActive: state.get('features').get(FeatureFlags.KAMBI_MAINTENANCE.key),\n }))\n .distinctUntilChanged(\n s => s,\n (a, b) => JSON.stringify(a) === JSON.stringify(b)\n )\n .subscribe(({ isMaintenanceActive }) => {\n setMaintenancePayload(isMaintenanceActive?.get('endTime'))\n })\n\n return () => subscription.dispose()\n }, [])\n\n return maintenancePayload\n}\n","import React from 'react'\nimport { KAMBI_WRAPPER_DIV_ID } from '../constants'\n\n// Used to ensure that Kambi is hidden on non Kambi routes\nexport const useKambiRouteGuard = (): void => {\n React.useEffect(() => {\n document.getElementById(KAMBI_WRAPPER_DIV_ID)?.style.setProperty('display', 'block')\n\n return () => {\n document.getElementById(KAMBI_WRAPPER_DIV_ID)?.style.setProperty('display', 'none')\n }\n }, [])\n}\n","import React from 'react'\nimport { state$ as navState$ } from '@core/State/Navigation'\nimport { KAMBI_BETHISTORY_HASH_ROUTE } from '../constants'\n\nexport const useShowTransactionTabs = (): boolean => {\n const [shouldShowTransactionTabs, setShouldShowTransactionTabs] = React.useState(false)\n\n // Shows racing/sports transaction tabs on bethistory route\n React.useEffect(() => {\n const subscription = navState$.subscribe(state => {\n const isBetHistory = state.get('currentUrl').includes(KAMBI_BETHISTORY_HASH_ROUTE)\n if (isBetHistory === shouldShowTransactionTabs) return\n setShouldShowTransactionTabs(isBetHistory)\n })\n return () => {\n subscription.dispose()\n }\n }, [shouldShowTransactionTabs])\n\n return shouldShowTransactionTabs\n}\n","import React from 'react'\nimport { state$ as kambiState$ } from '../driver'\n\nexport const useShowBrowserUnsupported = (): boolean => {\n const [shouldShowBrowserUnsupported, setShouldShowBrowserUnsupported] = React.useState(false)\n\n React.useEffect(() => {\n const subscription = kambiState$\n .map(state => state.get('isBrowserSupported'))\n .distinctUntilChanged()\n .subscribe(isBrowserSupported => {\n setShouldShowBrowserUnsupported(!isBrowserSupported)\n })\n return () => {\n subscription.dispose()\n }\n })\n\n return shouldShowBrowserUnsupported\n}\n","import {\n fetchAccountBalanceAsync,\n fetchCampaignsAsync,\n} from '@core/State/UserAccount/async-signals'\nimport {\n HasLoggedOut,\n state$ as userAccountState$,\n UserAccountStateRecord,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as kambiState$, RemoveKambiSpinner } from '@core/Areas/Kambi/driver'\nimport {\n determineUserRegulationId,\n createLogger,\n tryToLoginKambiPlayer,\n tryToLogoutKambiPlayer,\n} from '@core/Areas/Kambi/helpers'\nimport { invalidateKambiPendingTicketsQueryData } from '@core/Data/Account/PendingTicketsCount/helpers'\nimport { KAMBI_BETHISTORY_HASH_ROUTE, KAMBI_BETSLIP_DIV_CLASS } from '@core/Areas/Kambi/constants'\nimport { showLogin, getIsLoggedOn } from '@core/Areas/Login/helpers'\nimport { RegisterToast, RemoveToast } from '@core/Components/Toast/ToastDriver'\nimport { openDepositModal } from '@core/Areas/Deposit'\n\nconst SESSION_TOAST_ID = 'kambi-session-toast'\n\nexport default {\n enableNewFrameworkLayout: true,\n hideHeader: true,\n enableLandingPageFeed: false,\n enableLandingPageLiveRightNow: false,\n enableLandingPageLiveRightNowAggregate: false,\n attachBetslipToBody: false,\n enablePreviouslySearchedTerms: true,\n enableFootballVisualisation: false,\n enableQuickBrowse: true,\n enableLiveStats: true,\n routeRoot: 'tabtouch-sports',\n ignoredRoutes: [],\n enableBetslipDepositButton: true,\n enablePinnedBetslip: false,\n showFooterSettingsLink: false,\n\n betslipQuerySelectors: {\n // pinned: 'NOT SPECIFIED', // Handled by Kambi\n unpinned: `.${KAMBI_BETSLIP_DIV_CLASS}`,\n },\n\n /**\n * The URL location to redirect to when the user clicks on the\n * customers logo in the header. This URL can be an absolute URL or\n * a relative URL which is relative to the HTML file.\n *\n * @type String\n * @default undefined\n */\n homeUrl: '/#',\n /**\n * The URL location to redirect to when the user clicks on the\n * login button in the header. This URL can be an absolute URL or\n * a relative URL which is relative to the HTML file.\n *\n * @type String\n * @default undefined\n */\n loginUrl: 'notification',\n /**\n * The URL location to redirect to when the user clicks on the lobby\n * button in the header. This URL can be an absolute URL or\n * a relative URL which is relative to the HTML file.\n *\n * @type String\n * @default undefined\n */\n lobbyUrl: undefined,\n /**\n * Toggles the visibility of deposit button/links.\n *\n * @type Bool\n * @default undefined\n */\n enableDeposit: true,\n /**\n * The URL location to redirect to when the user wants to deposit\n * money into his/her account. This URL can be an absolute URL or\n * a relative URL which is relative to the HTML file.\n *\n * @type String\n * @default undefined\n */\n depositUrl: 'notification',\n /**\n * Toggles live betting. When set to false no live events or live\n * bet offers will be available in the client.\n *\n * @type Boolean\n * @default true\n */\n enableLiveBetting: false,\n liveBettingByPhoneOnlyEnabled: true,\n liveBettingPhoneNumber: '+611300238548',\n liveBettingHumanReadablePhoneNumber: '1300 238 548',\n\n /**\n * Toggles visibility of odds format selector in the client\n *\n * @type Boolean\n * @default false\n */\n enableOddsFormatSelector: false,\n /**\n * For tracking with Google Universal Analytics.\n * Google calls this the Web Property Id and\n * calls it UA-XXXX-Y in their documentation.\n *\n * @type String\n * @default ''\n */\n googleAnalyticsWebPropertyID: '',\n /**\n * Live betting by phone only:\n * A freetext string witch will added to the more generic message regarding Call to place bet.\n *\n * It tells which regulation applies\n * E.g 'Australian regulations'\n *\n * @type String\n * @default undefined\n */\n liveBettingRegulationString: undefined,\n /**\n * An object containing the different links that are available in the\n * account section in the client.\n *\n * Link information should be presented as an object where the name of\n * the object is the link 'type'. The 'type' is used within the app to\n * display the right icon next to the link, if applicable. The link\n * 'type' can be a pre-defined type that the client is aware of, or any\n * custom type defined by the customer.\n *\n * Each link is defined with the following properties:\n * - url: The URL of the link\n * - label: The label to display for the link\n * - sortOrder: The sort order of the link. Should be a whole\n * number. The lower the number, the higher up on the page\n * the link should be. Sort order 1 is the first item\n * - external: True if the link is opened in a new window or false\n * in the same window [Optional]\n * - skipAnimation: To skip the closing animation of the account\n * menu when opening links\n *\n * @type Object\n * @default undefined\n */\n\n enableAllSportsInNavpanel: true,\n\n accountLinks: {\n // NOTE: This is only example code. Customer should replace with their\n // own implementation\n // support: {\n // url: 'http://kambi.com/',\n // label: 'Support',\n // sortOrder: 1,\n // external: true,\n // },\n // deposit: {\n // url: 'http://kambi.com/',\n // label: 'Deposit',\n // sortOrder: 2,\n // external: true,\n // },\n // faq: {\n // url: 'http://kambi.com/',\n // label: 'FAQ',\n // sortOrder: 3,\n // external: true,\n // },\n },\n /**\n * An object containing the different links that are available in the\n * footer in the client.\n *\n * Link information should be presented as an object where the name of\n * the object is the link 'type'. The 'type' is used within the app to\n * display the right icon next to the link, if applicable. The link\n * 'type' can be a pre-defined type that the client is aware of, or any\n * custom type defined by the customer.\n *\n * Each link is defined with the following properties:\n * - url: The URL of the link\n * - label: The label to display for the link\n * - sortOrder: The sort order of the link. Should be a whole\n * number. The lower the number, the higher up on the page\n * the link should be. Sort order 1 is the first item\n * - external: True if the link is opened in a new window or false\n * in the same window [Optional]\n * - featured: True if the link is to be highlighted on the start\n * page below the normal content but above all other footer\n * links. The link will be displayed as a full-width link with\n * a pre-defined icon on the right. [Optional]\n *\n * If the link is an image link the following should be added:\n * - imageHref: The url to the image that should be shown as a link\n * - label: Note that the label will be used as the 'alt' property\n * of the HTML img tag (shown if the image URL is wrong, image\n * type is not supported and while the image is downloading).\n *\n * @type Object\n * @default undefined\n *\n * E.g.:\n */\n footerLinks: {\n // NOTE: This is only example code. Customer should replace with their\n // own implementation\n },\n /**\n * An object containing the optional links to be displayed at the bottom\n * of the betslip.\n *\n * The link is defined with the following properties:\n * - url: The URL of the link\n * - label: The label to display for the link\n * - external: True if the link is opened in a new window or false in\n * the same window [Optional]\n *\n * @type Object\n * @default undefined\n */\n betslipLinks: {\n // NOTE: This is only example code. Customer should replace with their\n // own implementation\n // link: {\n // url: 'http://kambi.com/',\n // label: 'Play It Safe',\n // external: true,\n // },\n },\n /**\n * An object containing the optional links to be displayed at the bottom\n * of the bet history, below the 'More' bets link.\n *\n * The link is defined with the following properties:\n * - url: The URL of the link\n * - label: The label to display for the link\n * - external: True if the link is opened in a new window or false in\n * the same window [Optional]\n *\n * @type Object\n * @default undefined\n */\n bethistoryLinks: {\n // NOTE: This is only example code. Customer should replace with their\n // own implementation\n // link: {\n // url: 'http://kambi.com/',\n // label: 'German regulations',\n // external: true,\n // },\n },\n /**\n * Toggles visibility of the navigation menu in the client (if browser-window is wide enough)\n *\n * @type Boolean\n * @default false\n */\n enableNavigationPanel: true,\n\n notification: (event: KambiEvent): void => {\n notificationLog(event.name)\n\n switch (event.name) {\n case 'pageRendered': {\n // timeout for smoother rendering\n setTimeout(RemoveKambiSpinner, 1000)\n break\n }\n\n case 'sessionTimedOut': {\n getIsLoggedOn().then(async isMobiSessionActive => {\n if (!isMobiSessionActive) {\n HasLoggedOut()\n return\n }\n\n const userAccountState = await userAccountState$.take(1).toPromise()\n if (!userAccountState.isLoggedIn || !userAccountState.accountNumber) return\n\n const kambiState = await kambiState$.take(1).toPromise()\n\n // Only display toast when user interface is impacted from session renewal\n if (\n kambiState.get('isBetslipMaximized') ||\n window.location.href.includes(KAMBI_BETHISTORY_HASH_ROUTE)\n ) {\n RegisterToast({\n message: 'Verifying Session',\n id: SESSION_TOAST_ID,\n timeout: 10,\n position: 'top',\n spinner: true,\n })\n }\n\n handleKambiSessionLogin(\n userAccountState.accountNumber,\n userAccountState.residentialDetail\n )\n })\n break\n }\n\n case 'loginRequested': {\n userAccountState$.take(1).subscribe(userAccountState => {\n if (userAccountState.isLoggedIn && userAccountState.accountNumber) {\n handleKambiSessionLogin(\n userAccountState.accountNumber,\n userAccountState.residentialDetail\n )\n } else {\n notificationLog('player requested to login to tab touch')\n showLogin()\n }\n })\n break\n }\n\n case 'loginRequestDone': {\n RemoveToast(SESSION_TOAST_ID)\n break\n }\n\n case 'depositRequested': {\n openDepositModal('account-deposit')\n break\n }\n\n case 'cashInEnd': {\n fetchAccountBalanceAsync()\n break\n }\n\n case 'placedBet': {\n fetchAccountBalanceAsync()\n fetchCampaignsAsync()\n invalidateKambiPendingTicketsQueryData()\n break\n }\n }\n },\n\n logout: (): void => {\n kambiState$.take(1).subscribe(kambiAccountState => {\n const logoutToken = kambiAccountState.get('logoutToken')\n if (logoutToken) {\n notificationLog('trying to logout kambi player')\n tryToLogoutKambiPlayer(logoutToken)\n }\n })\n },\n\n getBalance: (): void => {\n // not implemented\n },\n\n heartbeat: (): void => {\n // not implemented\n },\n}\n\nconst notificationLog = createLogger('deeppink', 'KAMBI: Notification')\n\n// =============\n// Local Helpers\n// =============\nfunction handleKambiSessionLogin(\n accountNumber: number,\n residentialDetail: UserAccountStateRecord['residentialDetail']\n) {\n notificationLog('trying to login to Kambi to place bet')\n tryToLoginKambiPlayer(accountNumber, determineUserRegulationId(residentialDetail))\n}\n","// As specified in https://www.kambipartner.com/techhub/api_docs/gen_doc/client_documentation/widgets/basic_setup\nexport default {\n widgets: [\n {\n widgetId: 'NavivationSectionWidget',\n tag: 'navigation-section',\n widgetType: 'web-component',\n },\n ],\n targets: {\n navPanel: [\n {\n widgetId: 'NavivationSectionWidget',\n order: 999, // bottom\n },\n ],\n },\n}\n","/**\n * Web component required to use inside the Kambi client\n * https://developer.mozilla.org/en-US/docs/Web/Web_Components\n */\nclass NavigationSection extends HTMLElement {\n connectedCallback() {\n this.innerHTML = `\n
    \n

    Other

    \n \n
    \n `\n }\n}\n\n// Consider having a high level ts file to define all widgets if we end up having\n// more widgets\nexport const defineNavigationSectionWidget = (): void => {\n if (window.customElements && !window.customElements.get('navigation-section')) {\n window.customElements.define('navigation-section', NavigationSection)\n }\n}\n","import React from 'react'\nimport { logError } from '@core/Utils/logging/logging'\nimport { getStartupParameters } from '@core/Areas/Kambi/config/startupParameters'\nimport customerSettings from '@core/Areas/Kambi/config/customerSettings'\nimport widgetSettings from '@core/Areas/Kambi/config/widgetSettings'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport {\n isUserResidentOfSA,\n isUserAccountStatePending,\n waitForWapi,\n toggleKambiVisiblity,\n BootstrapJurisdiction,\n handleScriptLoading,\n setInitialVisibilityState,\n kambiLog,\n handleKambiLogin,\n handleKambiLogout,\n handleClientSubscriptions,\n isKambiSupportedBrowser,\n} from '@core/Areas/Kambi/helpers'\nimport { defineNavigationSectionWidget } from '@core/Areas/Kambi/widgets/NavigationSection.widget'\nimport { state$ as kambiState$, UnsupportedBrowser } from '@core/Areas/Kambi/driver'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { serverConfigQuery } from '@core/Data/ServerConfig/query'\n\nlet hasLoadedScript = false\n\nexport const useKambiClient = (): void => {\n const bootstrapJurisdictionRef = React.useRef()\n\n // ============\n // Load Scripts\n // ============\n React.useEffect(() => {\n if (hasLoadedScript || bootstrapJurisdictionRef.current) return\n\n if (!isKambiSupportedBrowser()) {\n UnsupportedBrowser()\n return\n }\n\n hasLoadedScript = true\n\n queryClient.fetchQuery(serverConfigQuery).then(({ serverEnvironment }) => {\n window._kc = getStartupParameters(serverEnvironment)\n window.customerSettings = customerSettings\n window.widgetSettings = widgetSettings\n\n // Loads the widget to embed inside the Kambi client\n defineNavigationSectionWidget()\n\n handleScriptLoading()\n .then(bootstrapJurisdiction => {\n bootstrapJurisdictionRef.current = bootstrapJurisdiction\n })\n .catch(() => {\n logError('Error loading Kambi scripts', true)\n })\n })\n }, [])\n\n // ==================================\n // Register WAPI when widget is ready\n // ==================================\n React.useEffect(() => {\n if (window.wapi) return\n\n waitForWapi().then(wapi => {\n // Set initial betslip state minimized + sets up subscription\n wapi.set(wapi.BETSLIP_MAXIMIZED, { maximized: false })\n wapi.request(wapi.USER_DATA)\n\n setInitialVisibilityState(wapi)\n\n wapi.subscribe(response => {\n kambiLog('client event', response)\n handleClientSubscriptions(response)\n })\n })\n }, [])\n\n // ================================================\n // Handle Authentication and Bootstrap Jurisdiction\n // ================================================\n React.useEffect(() => {\n let shouldTryLogout: boolean\n\n const subscription = userAccountState$\n .skipWhile(isUserAccountStatePending)\n .map(userAccountState => ({\n accountNumber: userAccountState.accountNumber,\n isLoggedIn: userAccountState.isLoggedIn,\n residentialDetail: userAccountState.residentialDetail,\n }))\n .distinctUntilChanged(\n s => s,\n (a, b) => JSON.stringify(a) === JSON.stringify(b)\n )\n .subscribe(({ residentialDetail, isLoggedIn, accountNumber }) => {\n shouldTryLogout = !!isLoggedIn\n\n if (isLoggedIn && accountNumber && residentialDetail)\n handleKambiLogin(accountNumber, residentialDetail)\n else handleKambiLogout()\n\n if (!bootstrapJurisdictionRef.current) return\n\n const requiredBootstrap: BootstrapJurisdiction = isUserResidentOfSA(residentialDetail)\n ? 'SA'\n : 'WA'\n\n if (requiredBootstrap !== bootstrapJurisdictionRef.current) {\n window.location.reload()\n }\n })\n\n return () => {\n if (shouldTryLogout) handleKambiLogout()\n subscription.dispose()\n }\n }, [])\n\n // =======================\n // Visibility Subscription\n // =======================\n React.useEffect(() => {\n const subscription = kambiState$\n .map(x => x.get('isVisible'))\n .distinctUntilChanged()\n .subscribe(toggleKambiVisiblity)\n\n return () => {\n subscription.dispose()\n }\n }, [])\n}\n","import * as Bowser from 'bowser'\n\nexport function isKambiSupportedBrowser(): boolean {\n /**\n * iOS 10 and above\n * Chrome 62 and above\n */\n const browser = Bowser.getParser(window.navigator.userAgent)\n const isInvalidBrowser = !!browser.satisfies({\n chrome: '<=61',\n safari: '<=10',\n })\n return !isInvalidBrowser\n}\n","import React from 'react'\nimport { Global } from '@emotion/react'\nimport { checkIfIsInIPad } from './helpers'\n\n/** DO NOT add styles here! This is a temporary solution to phase out SCSS hacks */\nexport const GlobalCss: React.FC = () => {\n const [isInIPad] = React.useState(checkIfIsInIPad)\n\n return (\n \n )\n}\n","import { get, post } from '@classic/Foundation/Services/ApiService'\n\nconst enum LocalConstants {\n apiEndpoint = '/services/preferences/api/communicationpreferences',\n}\n\nexport const getPreferencesFromApi = () =>\n get({ url: LocalConstants.apiEndpoint })\n\nexport const postPreferencesToApi = (newPrefs: OptInPreferences) =>\n post({ url: LocalConstants.apiEndpoint, body: newPrefs })\n\n// Types\n\nexport interface OptInPreferences {\n Email: boolean\n Mail: boolean\n Phone: boolean\n Sms: boolean\n Marketing: boolean\n}\n\ninterface CommunicationPreferences {\n ContactInfo: {\n Email: string\n MailingAddress: string\n Mobile: string\n Phone: string\n }\n OptInPreferences: OptInPreferences\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useMutation, useQuery } from 'react-query'\nimport { useHistory } from 'react-router-dom'\nimport { hexColors } from '@mobi/settings'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { useLogon } from '@core/Utils/hooks'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { getPreferencesFromApi, postPreferencesToApi, type OptInPreferences } from './api'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nexport const MyPreferences: React.FC = () => {\n const mutateDataRef = React.useRef()\n\n const history = useHistory()\n const { accountNumber } = useLogon()\n\n const { data, isLoading, isError } = useQuery(\n queryKeys.accountPreferences(accountNumber as number),\n getPreferencesFromApi,\n { refetchOnMount: true, refetchOnWindowFocus: false }\n )\n\n const {\n mutate,\n isError: isMutateError,\n isLoading: isLoadingMutate,\n data: mutateData,\n } = useMutation(options =>\n postPreferencesToApi(options)\n )\n\n React.useEffect(() => {\n if (!mutateData) return\n mutateDataRef.current = mutateData\n }, [mutateData])\n\n const isEmailChecked = mutateData\n ? mutateData.Email\n : mutateDataRef.current\n ? mutateDataRef.current.Email\n : !!data?.OptInPreferences.Email\n const isSmsChecked = mutateData\n ? mutateData.Sms\n : mutateDataRef.current\n ? mutateDataRef.current.Sms\n : !!data?.OptInPreferences.Sms\n const isPhoneChecked = mutateData\n ? mutateData.Phone\n : mutateDataRef.current\n ? mutateDataRef.current.Phone\n : !!data?.OptInPreferences.Phone\n const isMailChecked = mutateData\n ? mutateData.Mail\n : mutateDataRef.current\n ? mutateDataRef.current.Mail\n : !!data?.OptInPreferences.Mail\n\n const isAnyCommsChecked = isEmailChecked || isSmsChecked || isPhoneChecked || isMailChecked\n\n const isBusy = isLoading || isLoadingMutate\n\n return (\n \n \n \n {(isError || isMutateError) && (\n \n )}\n\n
      \n
    • \n I would like to receive bonus bets and offers\n \n mutate({\n Email: !isAnyCommsChecked,\n Sms: !isAnyCommsChecked,\n Phone: !isAnyCommsChecked,\n Mail: !isAnyCommsChecked,\n Marketing: !isAnyCommsChecked,\n })\n }\n />\n
    • \n
    \n\n
    \n Contact me via:\n
    \n\n
      \n
    • \n \n Email \n \n \n mutate({\n ...(data?.OptInPreferences as OptInPreferences),\n ...mutateData,\n Email: !isEmailChecked,\n })\n }\n />\n
    • \n\n
    • \n \n SMS \n \n \n mutate({\n ...(data?.OptInPreferences as OptInPreferences),\n ...mutateData,\n Sms: !isSmsChecked,\n })\n }\n />\n
    • \n\n
    • \n \n Phone \n \n \n mutate({\n ...(data?.OptInPreferences as OptInPreferences),\n ...mutateData,\n Phone: !isPhoneChecked,\n })\n }\n />\n
    • \n\n
    • \n \n Mail{' '}\n \n \n \n mutate({\n ...(data?.OptInPreferences as OptInPreferences),\n ...mutateData,\n Mail: !isMailChecked,\n })\n }\n />\n
    • \n
    \n\n
    \n \n
    \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n fontSize: '1.4rem',\n\n ul: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n borderTop: '0.1rem solid ' + hexColors.veryLightGrey,\n\n li: {\n margin: 0,\n fontSize: '1.4rem',\n backgroundColor: hexColors.white,\n borderBottom: '0.1rem solid ' + hexColors.veryLightGrey,\n\n label: { marginBottom: 0 },\n '> div': { display: 'flex' },\n\n '> strong': {\n display: 'flex',\n\n span: { minWidth: '6.5rem' },\n\n label: {\n fontWeight: 'normal',\n color: hexColors.dimGrey,\n },\n },\n },\n },\n\n '> div, ul > li': {\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '5rem',\n padding: '0.5rem 1rem',\n },\n\n '> div > button': {\n display: 'block',\n width: '100%',\n minHeight: '5rem',\n marginTop: '2rem',\n },\n})\n","import React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\n\nimport { BettingDrawerStyled, MAX_DRAWER_CONTENT_WIDTH } from './BettingDrawer.styles'\n\ninterface RaceClosedDrawerProps {\n open: boolean\n noticeBox?: JSX.Element\n onNextRace: () => void\n onGoToMeeting: () => void\n}\n\nexport function NextRaceDrawer({\n open,\n noticeBox,\n onNextRace,\n onGoToMeeting,\n}: RaceClosedDrawerProps): JSX.Element {\n return ReactDOM.createPortal(\n \n \n \n \n {noticeBox || (\n \n )}\n \n \n \n \n \n Back To Meeting\n \n \n \n \n Next Race To Jump\n \n \n \n \n ,\n document.body\n )\n}\n","import React from 'react'\nimport { useQueryClient } from 'react-query'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableImmutable } from './useObservableImmutable'\nimport { showLogin } from '@core/Areas/Login/helpers/showLogin'\nimport { usePrevious } from './usePrevious'\n\nexport const useIsAuthenticated = (): boolean => {\n const { isLoggedIn = null } = useObservableImmutable(userAccountState$, ['isLoggedIn'])\n const prevIsLoggedIn = usePrevious(isLoggedIn)\n const queryClient = useQueryClient()\n\n // initialize the logged in state by synchronously reading from Rx\n // - this is required to avoid interpreting the temporary value of isLoggedIn=null (which is not retrieved synchronously) as false\n // - without this change, it will cause unusual (and unexplained) effects with useFeature() which fails to retrieve the current state synchronously\n const [isLoggedInInitialValue] = React.useState(() => {\n let value: boolean | null = null\n userAccountState$.take(1).subscribe(record => {\n value = record.get('isLoggedIn')\n })\n return value\n })\n\n React.useEffect(() => {\n if (isLoggedIn === false && !prevIsLoggedIn) {\n // Timeout fixes first nav where routing code resets actions\n window.setTimeout(() => {\n queryClient.invalidateQueries()\n showLogin({\n onLoginCancelledRedirectUrl: '/#',\n })\n }, 200)\n }\n }, [isLoggedIn, prevIsLoggedIn, queryClient])\n\n return isLoggedIn !== null ? isLoggedIn : isLoggedInInitialValue || false\n}\n","import type { MysteryBetTypes } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport type { MysterySelection, RacingBetType, BettingType, Race } from '@mobi/betslip/types'\n\nexport const MysteryBetType = {\n Combo: 'Combo',\n Trifecta: 'Trifecta',\n First4: 'First4',\n}\n\nexport interface MysteryQuickPickOption {\n uniqueKey: string\n label: string\n displayPrice: number\n investment: number\n productCode: string // Passed to the API\n mysteryType: MysterySelection['mysteryType']\n isAlways: boolean\n mysteryOption: number\n productSeq: number // Not currently used by Quickbet/API but have been included to help match the options to the database records\n productPlanSeq: number // Not currently used by Quickbet/API but have been included to help match the options to the database records\n displayOrder: number\n}\n\nexport interface CustomizedMysteryBetType {\n type: MysteryBetTypes\n name: RacingBetType\n options: CustomizedMysteryOption[]\n defaultOptionNumber: number\n}\n\nexport interface CustomizedMysteryOption {\n optionNumber: number\n numberOfCombinations: number\n description: string\n}\n\nexport const MysteryQuickPickOptions: MysteryQuickPickOption[] = [\n {\n uniqueKey: '$3 Combo',\n displayPrice: 3,\n label: 'Combo',\n investment: 1,\n productCode: MysteryBetType.Combo,\n mysteryType: 'Combo',\n isAlways: false,\n mysteryOption: 3,\n displayOrder: 1,\n productSeq: 60,\n productPlanSeq: 60,\n },\n {\n uniqueKey: '$1 Trifecta Classic',\n displayPrice: 1,\n label: 'Trifecta Classic',\n investment: 1,\n productCode: MysteryBetType.Trifecta,\n mysteryType: 'Novelty',\n isAlways: false,\n mysteryOption: 2,\n displayOrder: 2,\n productSeq: 11,\n productPlanSeq: 13,\n },\n {\n uniqueKey: '$10 Combo',\n displayPrice: 10,\n label: 'Combo',\n investment: 1,\n productCode: MysteryBetType.Combo,\n mysteryType: 'Combo',\n isAlways: false,\n mysteryOption: 10,\n displayOrder: 3,\n productSeq: 61,\n productPlanSeq: 61,\n },\n {\n uniqueKey: '$3 Mystery Trifecta',\n displayPrice: 3,\n label: 'Mystery Trifecta',\n investment: 3,\n productCode: MysteryBetType.Trifecta,\n mysteryType: 'Novelty',\n isAlways: true,\n mysteryOption: 3,\n displayOrder: 4,\n productSeq: 11,\n productPlanSeq: 14,\n },\n {\n uniqueKey: '$1 First 4 Classic',\n displayPrice: 1,\n label: 'First 4 Classic',\n investment: 1,\n productCode: MysteryBetType.First4,\n mysteryType: 'Novelty',\n isAlways: false,\n mysteryOption: 2,\n displayOrder: 5,\n productSeq: 35,\n productPlanSeq: 35,\n },\n {\n uniqueKey: '$6 Mystery Trifecta',\n displayPrice: 6,\n label: 'Mystery Trifecta',\n investment: 6,\n productCode: MysteryBetType.Trifecta,\n mysteryType: 'Novelty',\n isAlways: true,\n mysteryOption: 3,\n productSeq: 11,\n displayOrder: 6,\n productPlanSeq: 14,\n },\n]\n\nexport const CustomMysteryBetTypes: CustomizedMysteryBetType[] = [\n {\n type: 'WinPlace',\n name: 'Win & Place',\n defaultOptionNumber: 1,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: 'Tote only, 1 starter, Win and/or Place investment',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: 'Tote only, 2 starters, Win and/or Place investment',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 3,\n description: 'Tote only, 3 starters, Win and/or Place investment',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 4,\n description: 'Tote only, 4 starters, Win and/or Place investment',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 5,\n description: 'Tote only, 5 starters, Win and/or Place investment',\n },\n ],\n },\n {\n type: 'Quinella',\n name: 'Quinella',\n defaultOptionNumber: 1,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: '2 starters any order',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: '1 starter for 1st, 1 of 2 starters for 2nd',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 3,\n description: '3 starters any order',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 6,\n description: '4 starters any order',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 10,\n description: '5 starters any order',\n },\n {\n optionNumber: 6,\n numberOfCombinations: 15,\n description: '6 starters any order',\n },\n {\n optionNumber: 7,\n numberOfCombinations: 21,\n description: '7 starters any order',\n },\n ],\n },\n {\n type: 'Exacta',\n name: 'Exacta',\n defaultOptionNumber: 1,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: '2 starters in order',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: '1 starter with 2 starters',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 6,\n description: '3 starters any order',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 12,\n description: '4 starters any order',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 20,\n description: '5 starters any order',\n },\n {\n optionNumber: 6,\n numberOfCombinations: 30,\n description: '6 starters any order',\n },\n {\n optionNumber: 7,\n numberOfCombinations: 42,\n description: '7 starters any order',\n },\n ],\n },\n {\n type: 'Trifecta',\n name: 'Trifecta',\n defaultOptionNumber: 2,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: '1st, 2nd and 3rd in order',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: '1 first, 2 and 3 any order',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 6,\n description: '1, 2, 3 any order',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 24,\n description: '3 of 4 any place or order',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 60,\n description: '3 of 5 any place or order',\n },\n {\n optionNumber: 6,\n numberOfCombinations: 120,\n description: '3 of 6 any place or order',\n },\n {\n optionNumber: 7,\n numberOfCombinations: 36,\n description: '1 of 2 starters 1st, 1 of 4 2nd, 1 of 8 3rd',\n },\n ],\n },\n {\n type: 'First4',\n name: 'First 4',\n defaultOptionNumber: 1,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: '1st, 2nd, 3rd and 4th in order',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: '1 starter 1st, 1 starter 2nd, 2 other starters 3rd or 4th in any order',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 6,\n description: '1 starter 1st, 3 other starters 2nd, 3rd or 4th in any order',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 24,\n description: '1st, 2nd, 3rd and 4th in any order',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 120,\n description: 'Any 4 of 5 starters to come 1st, 2nd, 3rd and 4th in any order',\n },\n {\n optionNumber: 6,\n numberOfCombinations: 360,\n description: 'Any 4 of 6 starters to come 1st, 2nd, 3rd and 4th in any order',\n },\n {\n optionNumber: 7,\n numberOfCombinations: 36,\n description: '2 of 3 starters to come 1st or 2nd and 2 of 3 starters to come 3rd or 4th',\n },\n ],\n },\n {\n type: 'Quaddie',\n name: 'Quaddie',\n defaultOptionNumber: 1,\n options: [\n {\n optionNumber: 1,\n numberOfCombinations: 1,\n description: '1 starter in all four legs',\n },\n {\n optionNumber: 2,\n numberOfCombinations: 2,\n description: '2 starters in first leg, 1 starter in remaining three legs',\n },\n {\n optionNumber: 3,\n numberOfCombinations: 8,\n description: '2 starters in first 3 legs, 1 starter in remaining fourth leg',\n },\n {\n optionNumber: 4,\n numberOfCombinations: 16,\n description: '2 starters in all four legs',\n },\n {\n optionNumber: 5,\n numberOfCombinations: 36,\n description: '3 starters in first two legs, 2 starters in remaining two legs',\n },\n {\n optionNumber: 6,\n numberOfCombinations: 81,\n description: '3 starters in all four legs',\n },\n {\n optionNumber: 7,\n numberOfCombinations: 256,\n description: '4 starters in all four legs',\n },\n ],\n },\n]\n\nexport interface CreateMysterySelection {\n productCode: string\n mysteryOption: number\n mysteryType: MysterySelection['mysteryType']\n isAlways: boolean\n investmentWin: number\n investmentPlace: number\n betTypeName: string\n raceInformation: Race\n betType: BettingType\n}\n","import { fromJS } from 'immutable'\nimport { StateMap } from 'typings/immutable'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport type { BetError } from '@mobi/betslip/types'\nimport { MysteryDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport {\n CustomizedMysteryBetType,\n CustomizedMysteryOption,\n CustomMysteryBetTypes,\n} from '../Racing/Components/Mystery/MysteryTypes'\n\nexport interface MysteryBetState {\n currentData: MysteryDataTransferObject | undefined\n isRaceClosed: boolean\n selectedQuickPick: string\n selectedCustomBetType: CustomizedMysteryBetType | undefined\n selectedCustomBetCombination: CustomizedMysteryOption | undefined\n selectedQuickPickBetCount: number | undefined\n selectedCustomBetCount: number | undefined\n isBetConfirmed: boolean\n betError: BetError | null\n goToNextRace: () => void\n goToMeeting: () => void\n}\n\ntype MysteryBetStateMap = StateMap\nexport const DEFAULT_MYSTERY_QUICK_PICK = '$1 Trifecta Classic'\nexport const DEFAULT_MYSTERY_CUSTOM_BET_TYPE = CustomMysteryBetTypes.find(\n x => x.type === 'Trifecta'\n) as CustomizedMysteryBetType\nexport const DEFAULT_MYSTERY_CUSTOM_BET_COMBINATION = DEFAULT_MYSTERY_CUSTOM_BET_TYPE.options.find(\n x => x.optionNumber === DEFAULT_MYSTERY_CUSTOM_BET_TYPE.defaultOptionNumber\n) as CustomizedMysteryOption\nconst DEFAULT_QUICK_PICK_BET_COUNT = 1\nconst DEFAULT_CUSTOM_BET_COUNT = 1\n\n// Signals\n\nexport const SetMysteryData = createSignal('SetMysteryData')\nexport const SetIsRaceClosed = createSignal('SetIsRaceClosed')\nexport const SetSelectedQuickPick = createSignal('SetSelectedMysteryQuickPick')\nexport const SetSelectedCustomBetType = createSignal(\n 'SetSelectedCustomBetType'\n)\nexport const SetSelectedCustomBetCombination = createSignal(\n 'SetSelectedCustomBetCombination'\n)\nexport const SetSelectedQuickPickBetCount = createSignal('SetSelectedQuickPickBetCount')\nexport const SetSelectedCustomBetCount = createSignal('SetSelectedCustomBetCount')\nexport const SetIsBetConfirmed = createSignal('SetIsBetConfirmed')\nexport const SetBetError = createSignal('SetBetError')\nexport const SetGoToNextRace = createSignal<() => void>('GoToNextRace')\nexport const SetGoToMeeting = createSignal<() => void>('GoToMeeting')\n\n// Driver\n\nexport const defaultState: MysteryBetState = {\n currentData: undefined,\n isRaceClosed: false,\n selectedQuickPick: DEFAULT_MYSTERY_QUICK_PICK,\n selectedCustomBetType: DEFAULT_MYSTERY_CUSTOM_BET_TYPE,\n selectedCustomBetCombination: DEFAULT_MYSTERY_CUSTOM_BET_COMBINATION,\n selectedQuickPickBetCount: DEFAULT_QUICK_PICK_BET_COUNT,\n selectedCustomBetCount: DEFAULT_CUSTOM_BET_COUNT,\n isBetConfirmed: false,\n betError: null,\n goToNextRace: () => null,\n goToMeeting: () => null,\n}\n\nexport const driver = (state = fromJS(defaultState), signal: Signal): MysteryBetStateMap => {\n switch (signal.tag) {\n case SetMysteryData: {\n const mysteryDto = signal.data as MysteryDataTransferObject\n const isDefaultQuickPickAvailable = !mysteryDto?.DisabledQuickPickOptions?.includes(\n DEFAULT_MYSTERY_QUICK_PICK\n )\n const isDefaultCustomBetTypeAvailable = !mysteryDto?.DisabledCustomOptions?.includes(\n DEFAULT_MYSTERY_CUSTOM_BET_TYPE.type\n )\n const selectedQuickPick = isDefaultQuickPickAvailable ? DEFAULT_MYSTERY_QUICK_PICK : undefined\n const selectedCustomBetType = isDefaultCustomBetTypeAvailable\n ? DEFAULT_MYSTERY_CUSTOM_BET_TYPE\n : undefined\n const selectedCustomBetCombination = selectedCustomBetType?.options.find(\n x => x.optionNumber === selectedCustomBetType.defaultOptionNumber\n )\n return state.merge({\n currentData: mysteryDto,\n selectedQuickPick,\n selectedCustomBetType,\n selectedCustomBetCombination,\n isBetConfirmed: false,\n } as MysteryBetState)\n }\n\n case SetIsRaceClosed:\n return state.merge({ isRaceClosed: signal.data } as Partial)\n\n case SetSelectedQuickPick:\n return state.merge({\n selectedQuickPick: signal.data,\n isBetConfirmed: false,\n } as Partial)\n\n case SetSelectedCustomBetType: {\n const selectedCustomBetType = signal.data as CustomizedMysteryBetType | undefined\n const selectedCustomBetCombination = selectedCustomBetType?.options.find(\n x => x.optionNumber === selectedCustomBetType.defaultOptionNumber\n )\n return state.merge({\n selectedCustomBetType,\n selectedCustomBetCombination,\n isBetConfirmed: false,\n } as Partial)\n }\n\n case SetSelectedCustomBetCombination:\n return state.merge({\n selectedCustomBetCombination: signal.data,\n isBetConfirmed: false,\n } as Partial)\n\n case SetSelectedQuickPickBetCount:\n return state.merge({\n selectedQuickPickBetCount: signal.data,\n isBetConfirmed: false,\n } as Partial)\n\n case SetSelectedCustomBetCount:\n return state.merge({\n selectedCustomBetCount: signal.data,\n isBetConfirmed: false,\n } as Partial)\n\n case SetIsBetConfirmed:\n return state.merge({ isBetConfirmed: signal.data } as Partial)\n\n case SetBetError:\n return state.merge({ betError: signal.data } as Partial)\n\n case SetGoToNextRace:\n return state.merge({ goToNextRace: signal.data } as Partial)\n\n case SetGoToMeeting:\n return state.merge({ goToMeeting: signal.data } as Partial)\n\n default:\n return state\n }\n}\n\nexport const state$ = attachDriver({\n driver,\n path: 'mystery-bet',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { BaseButtonStyled } from '@mobi/component-library/Common/Buttons'\n\nexport interface MysteryToggleButtonProps {\n isSelected: boolean\n disabled?: boolean\n}\n\nexport const MysteryToggleButtonStyled = styled(BaseButtonStyled)(\n {\n fontSize: '1.2rem',\n fontWeight: 'normal',\n height: '4.5rem',\n boxShadow: '0 0 1px rgba(0,0,0,0.1)',\n borderRadius: '0.3rem',\n },\n\n ({ isSelected, disabled }) => ({\n background: disabled\n ? hexColors.gainsboro\n : isSelected\n ? hexColors.black\n : `${hexColors.white} linear-gradient(to bottom,\n ${hexColors.white} 0%,\n ${hexColors.whiteSmoke} 100%)`,\n color: disabled ? hexColors.nightRider : isSelected ? hexColors.white : hexColors.black,\n border:\n isSelected && !disabled ? `1px solid transparent` : `1px solid ${hexColors.veryLightGrey}`,\n })\n)\n\nexport const MysteryContainerStyled = styled.div({\n marginBottom: '0.5rem',\n boxShadow: `0 0.1rem 0.1rem rgba(0, 0, 0, 0.1)`,\n backgroundColor: hexColors.white,\n})\n\nexport const MysteryQuickPicksStyled = styled.div(\n ({ optionsPerRow = 3 }: { optionsPerRow?: number }) => ({\n padding: optionsPerRow === 3 ? '0.8rem' : 0,\n display: 'grid',\n gridTemplateColumns: `repeat(${optionsPerRow}, 1fr)`,\n gap: '0.5rem',\n margin: '0 0 1em 0',\n })\n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { measurements, layering } from '@mobi/component-library/Theme/Common'\nimport { Heading } from '@core/Components/Text/Heading'\nimport { MysteryToggleButtonStyled } from '../Racing/Components/Mystery/Mystery.styles'\nimport { transparentize } from 'polished'\n\nexport const MeetingInformationContainerStyled = styled.div({\n backgroundColor: hexColors.nero,\n color: hexColors.white,\n padding: '1rem',\n fontWeight: 'bold',\n})\n\nexport const MeetingInformationSectionStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n background: hexColors.sushi,\n padding: '0.5rem 1rem',\n textAlign: 'center',\n lineHeight: '1em',\n})\n\nexport const RaceNumberStyled = styled.div({\n fontSize: '2rem',\n textAlign: 'center',\n lineHeight: '1em',\n})\n\nexport const RaceTimeStyled = styled.div({\n fontSize: '1.2rem',\n textAlign: 'center',\n})\n\nexport const MeetingNameStyled = styled.div({\n fontSize: '1.6rem',\n lineHeight: '2rem',\n})\n\nexport const RaceNameStyled = styled.div({\n fontSize: '1.2rem',\n lineHeight: '2rem',\n color: hexColors.grey,\n})\n\nexport const MysteryBetContainerStyled = styled.div({\n padding: '1rem',\n})\n\nexport const MysteryHeadingStyled = styled(Heading)({\n margin: '0 0 1rem 0',\n fontSize: '1.4rem',\n lineHeight: '1.6rem',\n color: hexColors.nightRider,\n textTransform: 'uppercase',\n})\n\nexport const CustomBetButtonContainerStyled = styled.div({\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '0.5rem',\n margin: '0 0 1rem 0',\n})\n\nexport const MysteryComboButtonStyled = styled(MysteryToggleButtonStyled)({\n ['> :first-of-type']: {\n fontWeight: 'bold',\n marginBottom: '0.33em',\n },\n})\n\nexport const BetNumberButtonStyled = styled(MysteryToggleButtonStyled)(\n {\n width: '100%',\n borderRadius: 0,\n },\n ({ num }: { num: number }) => ({\n borderRightWidth: num === 5 ? '1px' : 0,\n })\n)\n\nexport const BettingDrawerSpacerStyled = styled.div(({ isOpen }: { isOpen: boolean }) => ({\n height: isOpen ? '7rem' : 0,\n}))\n\nexport const FullScreenOverlayContainerStyled = styled.div({\n position: 'fixed',\n display: 'flex',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: layering.appHeader + 1,\n overflowY: 'auto',\n overscrollBehaviorY: 'contain',\n backgroundColor: hexColors.whiteSmoke,\n})\n\nexport const FullScreenContentsStyled = styled.div({\n position: 'relative',\n marginLeft: 'auto',\n marginRight: 'auto',\n maxWidth: measurements.mobi.maxWidth,\n width: `min(100vw, ${measurements.mobi.maxWidth})`,\n})\n\nexport const FullScreenTopSectionStyled = styled.div({\n backgroundColor: hexColors.blueDiamond,\n color: hexColors.white,\n padding: '1rem',\n '#mystery-meeting-name-and-race-number': {\n fontSize: '1.6rem',\n fontWeight: 'bold',\n },\n '#mystery-bet-type, #mystery-bet-betting-closed': {\n backgroundColor: hexColors.darkPurple,\n padding: '0 1em',\n fontWeight: 'bold',\n fontSize: '1.4rem',\n },\n '#mystery-bet-countdown': {\n backgroundColor: hexColors.darkPurple,\n padding: '0 1em',\n },\n})\n\nexport const CustomizeSpendInputContainerStyled = styled.div<{\n infoText: string\n isSelected: boolean\n}>(({ infoText, isSelected }) => ({\n position: 'relative',\n color: isSelected ? hexColors.blueDiamond : hexColors.white,\n '&:before': {\n content: infoText ? `\"${infoText}\"` : undefined,\n position: 'absolute',\n display: 'inline-block',\n left: '1rem',\n top: '33.33%',\n bottom: 0,\n pointerEvents: 'none',\n fontSize: '1.4rem',\n fontWeight: 'normal',\n verticalAlign: 'middle',\n zIndex: 1,\n },\n}))\n\ninterface CustomizeSpendInputStyledProps {\n isSelected: boolean\n}\n\nexport const CustomizeSpendInputStyled = styled.button(\n {\n backgroundColor: transparentize(0.88, hexColors.white),\n color: 'inherit',\n border: 'none',\n fontSize: '2.2rem',\n fontWeight: 'bold',\n padding: '1.6rem 1rem 1.6rem 5rem',\n textAlign: 'right',\n width: '100%',\n },\n ({ isSelected }) => ({\n backgroundColor: isSelected ? hexColors.white : transparentize(0.88, hexColors.white),\n color: isSelected ? hexColors.blueDiamond : hexColors.white,\n outline: 'none',\n })\n)\n\nexport const BiggerTextStyled = styled.div({\n fontSize: '1.4rem',\n})\n\nexport const BetAmountButtonsContainerStyled = styled.div({\n display: 'grid',\n gridTemplateColumns: '1fr 1fr 1fr 1fr',\n gap: '0.5rem',\n margin: '1.5rem 1rem',\n})\n\nexport const StudioHeadingStyled = styled(Heading)({\n display: 'flex',\n justifyContent: 'space-between',\n backgroundColor: hexColors.studio,\n color: hexColors.white,\n fontSize: '1.2rem',\n fontWeight: 'bold',\n padding: '0.5rem 1rem 0.5rem 1rem',\n margin: 0,\n '> :first-of-type': {\n textTransform: 'uppercase',\n },\n})\n\nexport const BetContainerStyled = styled.table({\n borderCollapse: 'collapse',\n border: 0,\n fontSize: '1.2rem',\n width: '100%',\n})\n\nexport const BetLineContainerStyled = styled.tr({\n borderTop: '1px solid ' + hexColors.gainsboro,\n borderBottom: '1px solid ' + hexColors.gainsboro,\n backgroundColor: hexColors.white,\n ['> td']: {\n padding: '0.5rem 1rem',\n ['&:nth-of-type(2)']: {\n fontWeight: 'bold',\n width: '50%',\n },\n },\n})\n\nexport const MysteryBetCloseButtonStyled = styled.button({\n position: 'absolute',\n top: 0,\n right: 0,\n width: '5.5rem',\n height: '4rem',\n padding: 0,\n border: 0,\n backgroundColor: 'transparent',\n fontSize: '1.6rem',\n color: hexColors.white,\n})\n","import React from 'react'\n\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { useObservableImmutable } from '@core/Utils/hooks'\n\nimport { SetSelectedQuickPickBetCount, SetSelectedCustomBetCount, state$ } from '../driver'\nimport { MysteryHeadingStyled, BetNumberButtonStyled } from '../MysteryBetPage.styles'\n\ntype NumberOfBetType = 'QuickPick' | 'Custom'\n\ninterface NumberOfBetsProps {\n isDisabled: boolean\n type: NumberOfBetType\n}\n\nconst BET_BUTTON_VALUES = [1, 2, 3, 4, 5]\n\nexport const NumberOfBets = ({ isDisabled, type }: NumberOfBetsProps): JSX.Element => {\n const quickPickCount = useObservableImmutable(state$, [\n 'selectedQuickPickBetCount',\n ]).selectedQuickPickBetCount\n const customCount = useObservableImmutable(state$, [\n 'selectedCustomBetCount',\n ]).selectedCustomBetCount\n const selectedBetCount = type === 'QuickPick' ? quickPickCount : customCount\n const setBetCount =\n type === 'QuickPick' ? SetSelectedQuickPickBetCount : SetSelectedCustomBetCount\n return (\n <>\n Number of Bets\n \n \n {BET_BUTTON_VALUES.map(x => (\n \n setBetCount(selectedBetCount === x ? undefined : x)}\n data-tid-number-of-bets={x}\n data-tid-mystery-qp-type={x}\n >\n {x}\n \n \n ))}\n \n \n \n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport { layering } from '@mobi/component-library/Theme/Common'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { BettingDrawerStyled, MAX_DRAWER_CONTENT_WIDTH } from './BettingDrawer.styles'\n\ninterface ReviewSelectionsDrawerProps {\n open: boolean\n canReviewSelections: boolean\n onEditBet: () => void\n onReviewSelections: () => void\n}\n\nexport function ReviewSelectionsDrawer({\n open,\n canReviewSelections,\n onEditBet,\n onReviewSelections,\n}: ReviewSelectionsDrawerProps): JSX.Element {\n return ReactDOM.createPortal(\n \n \n \n \n \n Edit Bet\n \n \n \n \n Review Selections\n \n \n \n \n ,\n document.body\n )\n}\n","import React from 'react'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { BetAmountButtonsContainerStyled } from '../MysteryBetPage.styles'\n\ninterface BetAmountButtonsProps {\n isDisabled: boolean\n onAmountSelected: (amount: number) => void\n onClear: () => void\n}\n\nexport const BetAmountButtons = ({\n isDisabled,\n onAmountSelected,\n onClear,\n}: BetAmountButtonsProps): JSX.Element => {\n return (\n \n {\n onAmountSelected(0.5)\n }}\n data-tid-numpad-50c\n data-tid-amt-50c\n >\n + 50c\n \n onAmountSelected(1)}\n data-tid-amt-1\n >\n + $1\n \n onAmountSelected(2)}\n data-tid-amt-2\n >\n + $2\n \n onAmountSelected(5)}\n data-tid-amt-5\n >\n + $5\n \n onAmountSelected(10)}\n data-tid-amt-10\n >\n + $10\n \n onAmountSelected(20)}\n data-tid-amt-20\n >\n + $20\n \n onAmountSelected(50)}\n data-tid-amt-50\n >\n + $50\n \n \n Clear\n \n \n )\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\n\nimport { MysteryDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\n\nimport { TimeToJumpComponent } from '@core/Areas/NextEvents/Components/TimeToJump/TimeToJump'\nimport { GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { PillStyled } from '@core/Components/Pill'\nimport { RaceCodesLowerCase } from '@core/Areas/Racing/Types/MeetingInformation'\n\nexport const MysteryRaceDetailsHeader: React.FC<{\n mysteryData: MysteryDataTransferObject\n betTypeText: string\n isRaceClosed: boolean\n}> = ({ mysteryData, betTypeText, isRaceClosed }) => (\n <>\n \n \n \n \n \n \n {mysteryData.Meeting.MeetingName}: R{mysteryData.Race.RaceNumber}\n \n \n \n \n \n {betTypeText}\n \n \n \n {!isRaceClosed && (\n \n )}\n {isRaceClosed && Betting closed}\n \n \n \n \n)\n","import type { MysteryBetTypes } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { CustomizedMysteryOption } from '@core/Areas/Racing/Components/Mystery/MysteryTypes'\nimport { toMoney } from '@mobi/utils/money'\n\nexport const ZERO_DOLLARS = '$0.00'\n\nexport function getFlexi(numberOfCombinations: number, spendPerBet: number): string {\n const percentage = (1 / numberOfCombinations) * spendPerBet * 100\n let roundedValue = parseFloat(percentage.toFixed(2))\n if (roundedValue > percentage) {\n roundedValue -= 0.01\n }\n\n return `${Number.isInteger(roundedValue) ? roundedValue : roundedValue.toFixed(2)}%`\n}\n\nexport function getBetTypeText(\n betType: MysteryBetTypes | undefined,\n option: CustomizedMysteryOption | undefined,\n winStake: string | number,\n placeStake: string | number\n): string {\n if (betType == null) {\n return 'Mystery'\n }\n\n if (betType === 'WinPlace') {\n if (getAsNumber(placeStake) === 0) {\n return 'Mystery Win'\n }\n\n if (getAsNumber(winStake) === 0) {\n return 'Mystery Place'\n }\n\n return 'Mystery Win & Place'\n }\n\n if (betType === 'Quinella') {\n return option?.optionNumber === 2 && option?.numberOfCombinations === 2\n ? 'Mystery Quinella - Leg In'\n : 'Mystery Quinella - Allways'\n }\n\n if (betType === 'Exacta') {\n return (option?.optionNumber || 0) <= 2\n ? 'Mystery Exacta - In Order'\n : 'Mystery Exacta - Allways'\n }\n\n if (betType === 'Trifecta') {\n const TRIFECTA_IN_ORDER = 'Mystery Trifecta - In Order'\n const TRIFECTA_ALLWAYS = 'Mystery Trifecta - Allways'\n if (!option?.numberOfCombinations) {\n return getAsNumber(winStake) === 1 ? TRIFECTA_IN_ORDER : TRIFECTA_ALLWAYS\n }\n\n const inOrderTrifectaCombos = [1, 2, 36] as (number | undefined)[]\n return inOrderTrifectaCombos.includes(option.numberOfCombinations)\n ? TRIFECTA_IN_ORDER\n : TRIFECTA_ALLWAYS\n }\n\n if (betType === 'First4') {\n const inOrderFirst4Combos = [1, 2, 6, 36] as (number | undefined)[]\n return !option || inOrderFirst4Combos.includes(option.numberOfCombinations)\n ? 'Mystery First 4 - In Order'\n : 'Mystery First 4 - Allways'\n }\n\n return 'Mystery ' + betType\n}\n\nexport function getAsNumber(value: string | number): number {\n if (typeof value === 'number') {\n return value\n }\n\n return parseFloat(value.replace('$', '').replace(/,/g, ''))\n}\n\nexport function toDisplayMoney(value: string | number): string {\n let number = getAsNumber(value)\n if (isNaN(number) || number < 0.5) {\n return ZERO_DOLLARS\n }\n\n const MAX_BET = 99_999\n if (number > MAX_BET) {\n number = MAX_BET\n }\n\n return toMoney(number, { decimalPlaces: 2 })\n}\n\nexport function getTotalCost(\n winStake: string | number,\n placeStake: string | number,\n spendPerBet: string | number,\n numberOfBets: number,\n numberOfCombinations?: number\n): string {\n const winStakeNumber = getAsNumber(winStake)\n const placeStakeNumber = getAsNumber(placeStake)\n const spendPerBetNumber = getAsNumber(spendPerBet)\n if (winStakeNumber > 0 || placeStakeNumber > 0) {\n return toMoney(\n (winStakeNumber + placeStakeNumber) * numberOfBets * (numberOfCombinations || 1),\n { decimalPlaces: 2 }\n )\n }\n\n return toMoney(spendPerBetNumber * numberOfBets, { decimalPlaces: 2 })\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport type {\n MysteryBetTypes,\n MysteryDataTransferObject,\n} from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { BalanceInfoBar } from '@core/Areas/Quickbet/Components/BalanceBar/BalanceBar'\nimport { CustomizedMysteryOption } from '@core/Areas/Racing/Components/Mystery/MysteryTypes'\nimport { ReviewSelectionsDrawer } from '@core/Components/BettingDrawer/ReviewSelectionsDrawer'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { BetAmountButtons } from './BetAmountButtons'\nimport { MysteryRaceDetailsHeader } from './MysteryRaceDetailsHeader'\nimport {\n BiggerTextStyled,\n FullScreenOverlayContainerStyled,\n FullScreenContentsStyled,\n CustomizeSpendInputContainerStyled,\n CustomizeSpendInputStyled,\n FullScreenTopSectionStyled,\n MysteryBetCloseButtonStyled,\n} from '../MysteryBetPage.styles'\nimport {\n getAsNumber,\n getBetTypeText,\n getFlexi,\n getTotalCost,\n toDisplayMoney,\n ZERO_DOLLARS,\n} from '../Data/MysteryUtils'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nenum ActiveInput {\n Win,\n Place,\n Spend,\n}\n\ninterface CustomizeSpendProps {\n open: boolean\n mysteryData: MysteryDataTransferObject\n betType: MysteryBetTypes\n option: CustomizedMysteryOption\n numberOfBets: number\n isRaceClosed: boolean\n onClosed: () => void\n onReviewDetails: (winStake: number, placeStake: number) => void\n}\n\nexport const CustomizeSpend = ({\n open,\n mysteryData,\n betType,\n option,\n numberOfBets,\n isRaceClosed,\n onClosed,\n onReviewDetails,\n}: CustomizeSpendProps): React.ReactPortal | null => {\n const [winStake, setWinStake] = React.useState(ZERO_DOLLARS)\n const [placeStake, setPlaceStake] = React.useState(ZERO_DOLLARS)\n const [spendPerBet, setSpendPerBet] = React.useState(ZERO_DOLLARS)\n const [activeInput, setActiveInput] = React.useState(ActiveInput.Win)\n const isWinPlace = betType === 'WinPlace'\n\n const isAmountSelected = isWinPlace\n ? getAsNumber(winStake) > 0 || getAsNumber(placeStake) > 0\n : getAsNumber(spendPerBet) > 0\n\n React.useEffect(() => {\n setActiveInput(isWinPlace ? ActiveInput.Win : ActiveInput.Spend)\n }, [isWinPlace])\n\n if (!open) {\n return null\n }\n\n const betTypeText = getBetTypeText(betType, option, winStake, placeStake)\n\n const addAmount = (amount: number): void => {\n switch (activeInput) {\n case ActiveInput.Win:\n setWinStake(toDisplayMoney((getAsNumber(winStake) + amount).toString()))\n break\n case ActiveInput.Place:\n setPlaceStake(toDisplayMoney((getAsNumber(placeStake) + amount).toString()))\n break\n case ActiveInput.Spend:\n setSpendPerBet(toDisplayMoney((getAsNumber(spendPerBet) + amount).toString()))\n break\n }\n }\n\n const isWinActive = !isRaceClosed && activeInput === ActiveInput.Win\n const isPlaceActive = !isRaceClosed && activeInput === ActiveInput.Place\n const isSpendActive = !isRaceClosed && activeInput === ActiveInput.Spend\n\n const clearAmounts = (): void => {\n setWinStake(ZERO_DOLLARS)\n setPlaceStake(ZERO_DOLLARS)\n setSpendPerBet(ZERO_DOLLARS)\n }\n\n const contents = (\n \n \n \n \n \n \n \n \n \n \n \n \n {option?.numberOfCombinations && (\n <>\n \n x{option.numberOfCombinations}\n {' '}\n Combo\n \n )}\n \n \n \n \n \n x{numberOfBets}\n {' '}\n Bet\n \n \n \n {isWinPlace && (\n \n \n \n setActiveInput(ActiveInput.Win)}\n isSelected={isWinActive}\n >\n {winStake}\n \n \n \n \n \n setActiveInput(ActiveInput.Place)}\n isSelected={isPlaceActive}\n >\n {placeStake}\n \n \n \n \n )}\n {!isWinPlace && (\n \n \n \n setActiveInput(ActiveInput.Spend)}\n isSelected={isSpendActive}\n >\n {spendPerBet}\n \n \n \n \n )}\n \n \n {!isWinPlace && (\n \n \n \n {getFlexi(option?.numberOfCombinations || 1, getAsNumber(spendPerBet))}\n \n {' '}\n Flexi\n \n )}\n \n \n \n Total Cost{' '}\n \n \n {getTotalCost(\n winStake,\n placeStake,\n spendPerBet,\n numberOfBets,\n option?.numberOfCombinations\n )}\n \n \n \n \n \n \n \n \n\n {!isRaceClosed && (\n {\n onReviewDetails(\n isWinPlace ? getAsNumber(winStake) : getAsNumber(spendPerBet),\n getAsNumber(placeStake)\n )\n onClosed()\n }}\n />\n )}\n \n \n )\n\n return ReactDOM.createPortal(contents, document.body)\n}\n","import styled from '@emotion/styled'\nimport { colors } from '@core/Settings'\nimport { hexColors } from '@mobi/settings'\n\nexport const CampaignStyled = styled('div')({\n background: colors.campaigns.panel.background,\n color: colors.campaigns.panel.text,\n padding: '0.5rem 1.5rem',\n})\n\nexport const CampaignTitleStyled = styled('p')({\n fontSize: '1.2rem',\n margin: 0,\n})\n\nexport const RemoveCampaignButtonStyled = styled('button')({\n width: '2rem',\n height: '2rem',\n margin: 0,\n padding: 0,\n border: 0,\n backgroundColor: 'transparent',\n fontSize: 0,\n color: hexColors.white,\n})\n","import React from 'react'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nimport { CampaignStyled, CampaignTitleStyled, RemoveCampaignButtonStyled } from './Campaigns.styles'\n\ntype ActiveCampaignsProps = {\n handleRemoveBonusCashButtonClick: () => void\n}\n\nexport function ActiveCampaignsComponent({\n handleRemoveBonusCashButtonClick,\n}: ActiveCampaignsProps) {\n const title = `Bonus cash applied`\n\n return (\n \n \n \n \n \n \n {title}\n \n \n \n \n \n \n \n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { BaseButtonStyled } from '@mobi/component-library/Common/Buttons'\n\nexport const MysteryBonusButtonStyled = styled(BaseButtonStyled)({\n fontSize: '1.2rem',\n fontWeight: 'bold',\n padding: '1rem',\n background: hexColors.orange,\n color: hexColors.black,\n})\n","import React from 'react'\nimport { GridRow, GridCell } from '@mobi/component-library/Common/Grid'\n\nimport { ActiveCampaignsComponent } from './ActiveCampaign'\nimport { MysteryBonusButtonStyled } from '../Buttons/BonusBetButton.styles'\nimport { useFeature } from '@core/Utils/hooks'\n\ntype BonusCashCampaignProps = {\n defaultValue: boolean\n toggleCampaign: (isApplied: boolean) => void\n}\n\nexport function BonusCashCampaign({ defaultValue, toggleCampaign }: BonusCashCampaignProps) {\n const isBonusCashImprovementsActive = useFeature('BONUS_CASH_IMPROVEMENTS')\n const [useBonusCash, setUseBonusCash] = React.useState(defaultValue)\n\n if (!isBonusCashImprovementsActive) {\n return null\n }\n\n const handleBonusHandler = () => {\n const newState = !useBonusCash\n setUseBonusCash(newState)\n toggleCampaign(newState)\n }\n\n return (\n \n \n {!useBonusCash ? (\n \n Use My Bonus\n \n ) : (\n \n )}\n \n \n )\n}\n","import React from 'react'\nimport type { BetError } from '@mobi/betslip/types'\nimport {\n ReceiptListItemStyled,\n ReceiptListItemTextStyled,\n ReceiptListRowStyled,\n} from '@core/Areas/Quickbet/Components/Receipt/Receipt.styles'\nimport { Grid, GridRow, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Money } from '@core/Components/Text/Money'\nimport { useIsAuthenticated } from '@core/Utils/hooks/useIsAuthenticated'\nimport { toMoney } from '@mobi/utils/money'\nimport {\n BettingDrawerStyled,\n BonusBetReceiptRowStyled,\n MAX_DRAWER_CONTENT_WIDTH,\n} from './BettingDrawer.styles'\nimport { BonusCashCampaign } from './Campaigns/BonusCashCampaign'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useFeature, useObservableImmutable } from '@core/Utils/hooks'\n\ninterface ConfirmBetDrawerProps {\n open: boolean\n hideNoticeBox?: boolean\n totalCost: number\n accountBalance: number\n editTId: string\n confirmTId: string\n isConfirmDisabled?: boolean\n bonusBetBalance: number\n betError?: BetError\n onEditBet: () => void\n onConfirmBet: (useBonusCash: boolean) => void\n onDeposit: () => void\n}\n\nexport function ConfirmBetDrawer({\n open,\n hideNoticeBox,\n totalCost,\n accountBalance,\n editTId,\n confirmTId,\n isConfirmDisabled,\n bonusBetBalance,\n betError,\n onEditBet,\n onConfirmBet,\n onDeposit,\n}: ConfirmBetDrawerProps): JSX.Element {\n const isAuthenticated = useIsAuthenticated()\n const hasBonusBet = bonusBetBalance > 0\n const bonusBetToUse = Math.min(bonusBetBalance, totalCost)\n const isInsufficientFunds = betError && betError.type === 'InsufficientFunds'\n const totalBalance = accountBalance + bonusBetBalance\n const isPartialPlacement = totalCost > totalBalance\n const warningText = isPartialPlacement\n ? 'Your account has insufficient funds, all bets cannot be placed.'\n : 'Bets cannot be cancelled once placed.'\n\n const isBonusCashImprovementsActive = useFeature('BONUS_CASH_IMPROVEMENTS')\n\n const [useBonusCash, setUseBonusCash] = React.useState(!isBonusCashImprovementsActive)\n\n const { accountNumber, bonusCashBalance } = useObservableImmutable(userAccountState$, [\n 'accountNumber',\n 'bonusCashBalance',\n ])\n\n const calculateTotalCost = (): number => (useBonusCash ? totalCost - bonusBetToUse : totalCost)\n\n const handleBonusCashToggle = (isApplied: boolean) => {\n setUseBonusCash(isApplied)\n trackEvent(\n isApplied ? keys.mysteryBonusCashButtonDeactivated : keys.mysteryBonusCashButtonActivated,\n {\n accountNumber: accountNumber ?? '',\n accountBalance: accountBalance,\n bonusBetBalance: bonusBetBalance,\n bonusCashBalance: bonusCashBalance,\n }\n )\n }\n\n return (\n \n \n {!hideNoticeBox && (\n <>\n {hasBonusBet && (\n \n )}\n \n \n \n {hasBonusBet && (\n <>\n \n Total Bet Cost\n \n \n \n \n {useBonusCash && (\n \n Bonus Cash\n \n \n \n \n )}\n \n Amount Paying\n \n \n \n \n \n )}\n {!hasBonusBet && (\n The total bet cost will be {toMoney(totalCost)}.\n )}\n
    \n {warningText}\n
    \n
    \n
    \n \n )}\n \n \n \n Edit your Bet\n \n \n \n {isInsufficientFunds && (\n \n Deposit\n \n )}\n {!isInsufficientFunds && (\n {\n onConfirmBet(useBonusCash)\n }}\n {...{ [confirmTId]: '' }}\n >\n Confirm Bet\n \n )}\n \n \n
    \n
    \n )\n}\n","import React from 'react'\n\nimport {\n MysteryProposeAcceptor,\n MysteryProposeBet,\n MysteryProposeBetLine,\n} from '@core/Data/betting'\nimport { ProductCode } from '@core/Data/Betting/selections'\n\nimport { BetContainerStyled, BetLineContainerStyled } from '../MysteryBetPage.styles'\n\ninterface ProposedMysteryBetProps {\n bet: MysteryProposeBet\n}\n\nexport const ProposedMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => {\n switch (bet.productCode) {\n case ProductCode[ProductCode.Win]:\n case ProductCode[ProductCode.Place]:\n case ProductCode[ProductCode.WinPlace]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.Quinella]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.Exacta]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.Trifecta]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.Combo]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.First4]:\n return (\n \n \n \n )\n case ProductCode[ProductCode.Quaddie]:\n return (\n \n \n \n )\n default:\n return <>\n }\n}\n\nconst ProposedWinPlaceMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => {\n // Win/place bets will have 2 bet lines with 1 leg each, but the acceptors in each bet line will always be the same.\n // So we can just output the acceptors from the first leg that we find. As with the other components here, if there\n // are more than 3 acceptors then we just display the numbers, rather than the names.\n const acceptors = bet.betLines[0].legs[0].acceptors\n return (\n \n {acceptors.length <= 3 ? (\n acceptors.map(acceptor => (\n \n \n {getAcceptorText([acceptor], true)}\n \n ))\n ) : (\n \n \n {bet.betLines[0].selections}\n \n )}\n \n )\n}\n\nconst ProposedQuinellaMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => {\n const betLine = bet.betLines[0]\n const firstLeg = betLine.legs[0]\n return (\n \n {betLine.legs.length === 1 &&\n firstLeg.acceptors.length <= 3 &&\n firstLeg.acceptors.map(acceptor => (\n \n \n {getAcceptorText([acceptor], true)}\n \n ))}\n {betLine.legs.length === 1 && firstLeg.acceptors.length >= 4 && (\n \n \n {betLine.selections}\n \n )}\n {betLine.legs.length === 2 &&\n firstLeg.acceptors.length === 1 &&\n betLine.legs[1].acceptors.length === 2 &&\n betLine.legs.map((leg, legIndex) => (\n \n \n {legIndex === 0 ? 'Leg-In' : 'With'}\n \n \n {leg.acceptors.length === 1 ? (\n getAcceptorText(leg.acceptors, true)\n ) : (\n <>\n {getAcceptorText([leg.acceptors[0]], true)}\n
    \n {getAcceptorText([leg.acceptors[1]], true)}\n \n )}\n \n
    \n ))}\n \n )\n}\n\nconst ProposedExactaMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => {\n const betLine = bet.betLines[0]\n return (\n \n {betLine.legs.length === 2 &&\n !betLine.isAllways &&\n betLine.legs.map(leg => (\n \n {toNth(leg.legNumber)}\n {getAcceptorText(leg.acceptors, true)}\n \n ))}\n {betLine.legs.length === 1 &&\n betLine.isAllways &&\n betLine.legs[0].acceptors.length <= 3 &&\n betLine.legs[0].acceptors.map(acceptor => (\n \n \n {getAcceptorText([acceptor], true)}\n \n ))}\n {betLine.legs.length === 1 && betLine.isAllways && betLine.legs[0].acceptors.length >= 4 && (\n \n \n {betLine.selections}\n \n )}\n \n )\n}\n\nconst ProposedComboMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => {\n return (\n \n {bet.betLines.map((betLine, betLineIndex) => {\n const previousAcceptors = bet.betLines\n .slice(0, betLineIndex)\n .flatMap(x => x.legs[0].acceptors.map(y => y.name))\n const selections = betLine.selections\n const firstLeg = betLine.legs[0]\n const runnerName = firstLeg.acceptors\n .map(x => x.name)\n .filter(x => !previousAcceptors.includes(x))[0]\n return (\n \n \n {betLine.poolCode === ProductCode[ProductCode.Win]\n ? betLine.poolCode\n : `${betLine.poolCode} - ${isAllways(betLine) ? 'Allways' : 'In Order'}`}\n \n \n {betLine.legs.length === 1 && `${selections}${runnerName ? ' - ' + runnerName : ''}`}\n {betLine.legs.length > 1 &&\n `${selections} - ${betLine.legs[betLine.legs.length - 1].acceptors[0].name}`}\n \n \n {betLine.poolCode === ProductCode[ProductCode.Win] && `Div x${betLine.dividend}`}\n \n \n )\n })}\n \n )\n}\n\nconst ProposedTrifectaMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element | null => {\n const betLine = bet.betLines[0]\n const firstLeg = betLine.legs[0]\n if (isAllways(betLine)) {\n return (\n \n {firstLeg.acceptors.length <= 3 &&\n betLine.legs[0].acceptors.map(acceptor => (\n \n \n {`${acceptor.number}${\n acceptor.name ? ' - ' + acceptor.name : ''\n }`}\n \n ))}\n {firstLeg.acceptors.length >= 4 && (\n \n \n {betLine.selections}\n \n )}\n \n )\n }\n\n return (\n \n {betLine.legs.map(leg => (\n \n {toNth(leg.legNumber)}\n {getAcceptorText(leg.acceptors, true)}\n \n ))}\n \n )\n}\n\nconst ProposedFirst4MysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => (\n \n {bet.betLines[0].legs.map(leg => (\n \n {!bet.betLines[0].isAllways && toNth(leg.legNumber)}\n \n {getAcceptorText(leg.acceptors, true)}\n {bet.betLines[0].isAllways && ' (Allways)'}\n \n \n ))}\n \n)\n\nconst ProposedQuaddieMysteryBet = ({ bet }: ProposedMysteryBetProps): JSX.Element => (\n \n {bet.betLines[0].legs.map(leg => (\n \n Race {leg.raceNumber}\n {getAcceptorText(leg.acceptors, true)}\n \n ))}\n \n)\n\nfunction getAcceptorText(\n acceptors: MysteryProposeAcceptor[],\n hasDotsInsteadOfSlashes: boolean\n): string {\n const text =\n acceptors.length === 1 && acceptors[0].name\n ? `${acceptors[0].number} - ${acceptors[0].name}`\n : acceptors.map(x => x.number).join(hasDotsInsteadOfSlashes ? '.' : '/')\n return text\n}\n\nexport function toNth(n: number): string {\n if (n > 20 || n < 0) {\n throw new Error('Unexpected number supplied. Choose a number between 0 and 20.')\n }\n\n if (n === 1) {\n return '1st'\n }\n\n if (n === 2) {\n return '2nd'\n }\n\n if (n === 3) {\n return '3rd'\n }\n\n return `${n}th`\n}\n\nfunction isAllways(betLine: MysteryProposeBetLine) {\n const isAllways = betLine.isAllways || betLine.poolCode === ProductCode[ProductCode.Quinella]\n return isAllways\n}\n","import React from 'react'\nimport ReactDOM, { flushSync } from 'react-dom'\nimport { useMutation, useQuery } from 'react-query'\nimport type { BetError } from '@mobi/betslip/types'\nimport type {\n MysteryBetTypes,\n MysteryDataTransferObject,\n} from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { ApiServiceError, post } from '@classic/Foundation/Services/ApiService'\nimport {\n ReceiptListRowStyled,\n ReceiptListItemStyled,\n ReceiptListItemTextStyled,\n} from '@core/Areas/Quickbet/Components/Receipt/Receipt.styles'\nimport { BalanceInfoBar } from '@core/Areas/Quickbet/Components/BalanceBar/BalanceBar'\nimport { CustomizedMysteryOption } from '@core/Areas/Racing/Components/Mystery/MysteryTypes'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { BonusBetReceiptRowStyled } from '@core/Components/BettingDrawer/BettingDrawer.styles'\nimport { ConfirmBetDrawer } from '@core/Components/BettingDrawer/ConfirmBetDrawer'\nimport { NextRaceDrawer } from '@core/Components/BettingDrawer/NextRaceDrawer'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Money } from '@core/Components/Text/Money'\nimport {\n confirmBet,\n MysteryCommitRequest,\n MysteryCommitResponse,\n MysteryProposeRequest,\n MysteryProposeResponse,\n} from '@core/Data/betting'\nimport { ProductCode } from '@core/Data/Betting/selections'\nimport {\n state$ as userAccountState$,\n UpdateAccountBalance,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { fetchCampaignsAsync } from '@core/State/UserAccount/async-signals'\nimport {\n BiggerTextStyled,\n FullScreenOverlayContainerStyled,\n FullScreenContentsStyled,\n FullScreenTopSectionStyled,\n MysteryHeadingStyled,\n MysteryBetContainerStyled,\n StudioHeadingStyled,\n CustomizeSpendInputStyled,\n CustomizeSpendInputContainerStyled,\n MysteryBetCloseButtonStyled,\n} from '../MysteryBetPage.styles'\nimport { MysteryRaceDetailsHeader } from './MysteryRaceDetailsHeader'\nimport { ProposedMysteryBet } from './ProposedMysteryBet'\nimport { SetBetError, SetIsBetConfirmed, state$ } from '../driver'\nimport { getBetTypeText, getFlexi, toDisplayMoney } from '../Data/MysteryUtils'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { openDeposit } from '@core/Areas/Deposit'\n\ninterface ReviewMysteryDetailsProps {\n open: boolean\n mysteryData: MysteryDataTransferObject\n betType: MysteryBetTypes\n optionNumber: number\n customOption?: CustomizedMysteryOption\n winStake: number\n placeStake: number\n // for combos, the investment win and investment place can\n // be different from the stake\n investmentWin?: number\n investmentPlace?: number\n numberOfBets: number\n isRaceClosed: boolean\n onClosed: () => void\n}\n\nexport const ReviewMysteryDetails = ({\n open,\n mysteryData,\n betType,\n optionNumber,\n customOption,\n winStake,\n placeStake,\n investmentWin,\n investmentPlace,\n numberOfBets,\n isRaceClosed,\n onClosed,\n}: ReviewMysteryDetailsProps): React.ReactPortal | null => {\n const isSingleBet = numberOfBets === 1\n const isWinPlace = betType === 'WinPlace'\n const betTypeText = getBetTypeText(betType, customOption, winStake, placeStake)\n const { isLoggedIn, accountBalance } = useObservableImmutable(userAccountState$, [\n 'isLoggedIn',\n 'accountBalance',\n ])\n const betError = useObservableImmutable(state$, ['betError']).betError?.toJS()\n\n const onDeposit = () => {\n openDeposit()\n commitReset()\n SetBetError(null)\n }\n\n const requestBody: MysteryProposeRequest = {\n fixtureDate: mysteryData.Meeting.MeetingDate,\n fixtureId: mysteryData.Meeting.MeetingId,\n investmentWin: investmentWin ?? winStake,\n investmentPlace: investmentPlace ?? placeStake,\n numberOfBets,\n option: optionNumber,\n raceNumber: mysteryData.Race.RaceNumber,\n productCode: betType,\n }\n const goToNextRace = useObservableImmutable(state$, ['goToNextRace'])\n .goToNextRace as unknown as () => void\n const goToMeeting = useObservableImmutable(state$, ['goToMeeting'])\n .goToMeeting as unknown as () => void\n\n const { isFetching, isError, data, error } = useQuery(\n [queryKeys.mysteryQuickPickPropose, mysteryData.Race.Key],\n () => post({ url: '/api/betting/tote/propose/mystery', body: requestBody }),\n {\n retry: 1,\n refetchOnWindowFocus: false,\n }\n )\n\n const sendCommitBet = (): Promise => {\n if (data) {\n return confirmBet({\n proposalIds: data.bets.map(x => x.id),\n metaData: data.metaData,\n useBonusCash: useBonusCash,\n } as MysteryCommitRequest) as Promise\n }\n\n return Promise.resolve(null)\n }\n\n const {\n data: commitData,\n isLoading: isMutating,\n mutate: commitBet,\n error: commitError,\n isError: isCommitError,\n reset: commitReset,\n } = useMutation(sendCommitBet, {\n mutationKey: ['commitMystery', ...(data?.bets?.map(bet => bet.id) || [])],\n onSuccess: confirmation => {\n SetIsBetConfirmed(!!confirmation && !confirmation.errorMessage && !confirmation.errorReason)\n if (confirmation?.accountBalance != null) {\n UpdateAccountBalance({ balance: confirmation.accountBalance })\n }\n fetchCampaignsAsync()\n },\n onError: error => {\n SetBetError((error as ApiServiceError).response as unknown as BetError)\n },\n })\n\n const [errorText, setErrorText] = React.useState(\n typeof error === 'string' ? error : null\n )\n const [shouldShowNextRaceDrawer, setShouldShowNextRaceDrawer] = React.useState(false)\n const [useBonusCash, setUseBonusCash] = React.useState(false)\n React.useEffect(() => {\n if (error) {\n ;(error as ApiServiceError).response\n ?.json()\n ?.then((errorBody: BetError) => setErrorText(errorBody.message))\n } else if (commitError) {\n // For the mutation, the body has already been parsed.\n setErrorText(((commitError as ApiServiceError).response as unknown as BetError).message)\n } else {\n setErrorText('')\n }\n }, [error, commitError])\n\n const isBetConfirmed = !!commitData && !isCommitError && !isMutating\n\n React.useEffect(() => {\n if (!open) return\n\n if (isBetConfirmed) {\n setTimeout(() => setShouldShowNextRaceDrawer(true), 800)\n } else {\n setShouldShowNextRaceDrawer(false)\n }\n }, [open, isBetConfirmed])\n\n if (!open) {\n return null\n }\n\n const firstBet = data?.bets?.[0]\n const flexiBetLines = firstBet?.betLines.filter(x => x.poolCode !== ProductCode[ProductCode.Win])\n const spendPerBet =\n !isFetching && data && firstBet\n ? firstBet.betCost\n : isWinPlace\n ? (winStake + placeStake) * (customOption?.numberOfCombinations || 1)\n : winStake\n\n const totalBetAmountPaid = commitData?.bets?.map(bet => bet.betCost).reduce(sum) || 0\n const bonusBetUsed =\n data && commitData && data.bonusBalanceAvailable > 0\n ? commitData.accountBalance - data.accountBalance + (totalBetAmountPaid || 0)\n : undefined\n\n let betPlacedText = 'All'\n\n if (data?.bets?.length && commitData?.bets?.length && data.bets.length > commitData.bets.length) {\n betPlacedText = `${commitData.bets.length}/${data.bets.length}`\n }\n\n const contents = (\n \n \n \n \n \n \n \n \n \n {customOption?.numberOfCombinations && (\n <>\n \n \n \n \n x{customOption.numberOfCombinations}\n {' '}\n Combo\n \n \n \n \n \n x{numberOfBets}\n {' '}\n Bet\n \n \n \n\n {isWinPlace && (\n \n \n \n \n {toDisplayMoney(winStake)}\n \n \n \n \n \n \n {toDisplayMoney(placeStake)}\n \n \n \n \n )}\n \n )}\n \n {!isFetching &&\n (firstBet?.isFlexi || firstBet?.productCode === ProductCode[ProductCode.Combo]) &&\n flexiBetLines?.every(x => x.dividend === flexiBetLines?.[0].dividend) && (\n \n \n \n \n {getFlexi(\n customOption?.numberOfCombinations || 1,\n customOption?.numberOfCombinations\n ? spendPerBet\n : flexiBetLines[0].dividend\n )}{' '}\n \n \n Flexi\n \n \n )}\n\n \n \n {!commitData && (\n <>\n {isSingleBet ? 'Bet' : 'Spend Per Bet'}{' '}\n \n {toDisplayMoney(spendPerBet)}\n \n \n )}\n {isBetConfirmed && (\n <>\n Total Cost{' '}\n \n {toDisplayMoney(totalBetAmountPaid || 0)}\n \n \n )}\n \n \n \n \n \n {!isRaceClosed && (\n <>\n \n \n {commitData && !isMutating && !isCommitError ? 'Selections' : 'Review Selections'}\n \n {(isFetching || isMutating) && }\n \n\n {!isFetching && (isError || isCommitError) && (\n \n )}\n\n {!isBetConfirmed &&\n !isFetching &&\n !isMutating &&\n !isError &&\n !isCommitError &&\n data &&\n data.bets?.map((bet, index) => (\n \n \n \n Bet {index + 1} of {data.bets.length}\n \n \n \n \n ))}\n\n {isBetConfirmed &&\n !isFetching &&\n !isMutating &&\n !isError &&\n !isCommitError &&\n data &&\n data.bets?.map(\n (bet, index) =>\n commitData.bets[index] && (\n \n \n \n Bet {index + 1} of {data.bets.length}\n \n \n Ticket \n {commitData.bets[index].ticketNumber}\n \n \n \n \n )\n )}\n \n )}\n {\n flushSync(() => setUseBonusCash(useBonusCash))\n commitBet()\n }}\n onDeposit={onDeposit}\n />\n\n \n \n Total Bet Cost\n \n \n \n \n {commitData?.bets.some(bet => bet.bonusBet > 0) && (\n <>\n \n Bonus Cash\n \n \n \n \n \n Amount Paid\n \n \n \n \n \n )}\n \n }\n onNextRace={goToNextRace}\n onGoToMeeting={goToMeeting}\n />\n\n {(data || commitData) && (\n
    0 ? '23rem' : '15rem' }} />\n )}\n \n \n )\n\n return ReactDOM.createPortal(contents, document.body)\n}\n\nfunction sum(total: number, next: number) {\n if (!total) {\n total = 0\n }\n\n return total + next\n}\n","import React from 'react'\nimport { MysteryDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { CustomMysteryBetTypes } from '@core/Areas/Racing/Components/Mystery/MysteryTypes'\nimport { MysteryToggleButtonStyled } from '@core/Areas/Racing/Components/Mystery/Mystery.styles'\nimport { BettingDrawer } from '@core/Components/BettingDrawer/BettingDrawer'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { NumberOfBets } from './NumberOfBets'\nimport { CustomizeSpend } from './CustomizeSpend'\nimport { ReviewMysteryDetails } from './ReviewMysteryDetails'\nimport {\n state$,\n SetSelectedCustomBetType,\n SetSelectedCustomBetCombination,\n SetBetError,\n} from '../driver'\nimport {\n MysteryBetContainerStyled,\n MysteryHeadingStyled,\n CustomBetButtonContainerStyled,\n MysteryComboButtonStyled,\n BettingDrawerSpacerStyled,\n} from '../MysteryBetPage.styles'\n\nexport const CustomizeBet = (): JSX.Element => {\n const [isCustomizeSpendOpen, setIsCustomizeSpendOpen] = React.useState(false)\n const [isDetailsOpen, setIsDetailsOpen] = React.useState(false)\n const [winStake, setWinStake] = React.useState(0)\n const [placeStake, setPlaceStake] = React.useState(0)\n const mysteryData = useObservableImmutable(state$, [\n 'currentData',\n ]).currentData?.toJS() as MysteryDataTransferObject\n const selectedBetType = useObservableImmutable(state$, [\n 'selectedCustomBetType',\n ]).selectedCustomBetType?.toJS()\n const selectedCombination = useObservableImmutable(state$, [\n 'selectedCustomBetCombination',\n ]).selectedCustomBetCombination?.toJS()\n const selectedBetCount = useObservableImmutable(state$, [\n 'selectedCustomBetCount',\n ]).selectedCustomBetCount\n const isRaceClosed = useObservableImmutable(state$, ['isRaceClosed']).isRaceClosed\n const hasQuaddie = mysteryData?.QuaddieRaceNumbers?.length === 4\n const betTypes = hasQuaddie\n ? CustomMysteryBetTypes\n : CustomMysteryBetTypes.filter(x => x.type !== 'Quaddie')\n const hasAnyDisabledOptions = betTypes.some(betType =>\n mysteryData?.DisabledCustomOptions?.includes(betType.type)\n )\n const shouldBettingDrawerBeOpen =\n !isCustomizeSpendOpen && !isRaceClosed && !!selectedBetType && !!selectedBetCount\n const hasBetCountBeenSelected = !!selectedBetCount\n\n React.useEffect(() => {\n if (hasBetCountBeenSelected && document?.body?.scrollHeight) {\n setTimeout(() => window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }), 0)\n }\n }, [hasBetCountBeenSelected])\n\n return (\n \n Bet Type\n \n {betTypes.map(betType => {\n const isDisabled =\n isRaceClosed || mysteryData?.DisabledCustomOptions?.includes(betType.type) || false\n const buttonText =\n betType.type === 'Quaddie' && (mysteryData?.QuaddieRaceNumbers?.length || 0) > 0\n ? `${betType.name} (${mysteryData?.QuaddieRaceNumbers?.join(', ')})`\n : betType.name\n return (\n !isDisabled && SetSelectedCustomBetType(betType)}\n data-tid-mystery-option={buttonText}\n >\n {buttonText}\n \n )\n })}\n \n\n {hasAnyDisabledOptions && (\n \n )}\n
    \n {selectedBetType && (\n <>\n Number of Combinations\n \n {selectedBetType?.options?.map(option => {\n return (\n SetSelectedCustomBetCombination(option)}\n disabled={isRaceClosed}\n data-tid-mystery-option={option.optionNumber}\n >\n
    {option.optionNumber}
    \n {option.numberOfCombinations}{' '}\n {option.numberOfCombinations === 1 ? 'Combination' : 'Combinations'}\n \n )\n })}\n
    \n\n {!isRaceClosed && selectedBetType && selectedCombination && (\n \n )}\n \n )}\n
    \n \n \n setIsCustomizeSpendOpen(true)}\n />\n {selectedBetType && selectedCombination && (\n setIsCustomizeSpendOpen(false)}\n onReviewDetails={(win: number, place: number) => {\n SetBetError(null)\n setWinStake(win)\n setPlaceStake(place)\n setIsDetailsOpen(true)\n }}\n />\n )}\n {isDetailsOpen && selectedBetType && selectedCombination && (\n setIsDetailsOpen(false)}\n />\n )}\n
    \n )\n}\n","import type { MysterySelection, MysteryDetails, Race } from '@mobi/betslip/types'\nimport {\n QuickbetSelection,\n SetMysteryQuickPickPresetInvestment,\n} from '@core/Areas/Quickbet/signals'\nimport { logError } from '@classic/Foundation/Services/LoggingService'\nimport { MysteryQuickPickOptions, CreateMysterySelection } from './MysteryTypes'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nexport function createMysterySelection({\n productCode,\n mysteryOption,\n mysteryType,\n isAlways,\n investmentWin,\n investmentPlace,\n betTypeName,\n raceInformation,\n betType,\n}: CreateMysterySelection): QuickbetSelection {\n const race = raceInformation\n\n const selection: MysterySelection = {\n fixtureId: race.meetingId,\n fixtureDate: race.meetingDate,\n raceNumber: race.raceNumber,\n mysteryType,\n isAlways,\n productCode,\n mysteryOption,\n bets: null,\n metaData: null,\n }\n const selectionDetails: MysteryDetails = {\n race,\n investmentWin,\n investmentPlace,\n productCode,\n mysteryOption,\n betTypeName,\n betType,\n }\n\n return {\n bettingType: betType,\n selection,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment: false,\n presetInvestment: betType === 'mystery-quick-pick' ? true : undefined,\n selectionDetails,\n }\n}\n\nexport const betFromRaceBettingPageQuickPick = (\n selectedKey: string | null,\n raceInformation: Race\n): void => {\n if (!selectedKey) {\n return\n }\n\n const quickPick = MysteryQuickPickOptions.find(qp => qp.uniqueKey === selectedKey)\n\n if (!quickPick) {\n if (!PRODUCTION) {\n logError('Mystery Quick Pick details not found')\n }\n return\n }\n const {\n productCode,\n mysteryType,\n mysteryOption,\n investment: investmentWin,\n uniqueKey: betTypeName,\n displayPrice,\n isAlways,\n } = quickPick\n\n const betSelection = createMysterySelection({\n productCode,\n mysteryOption,\n mysteryType,\n isAlways,\n investmentWin,\n investmentPlace: 0,\n betTypeName,\n raceInformation,\n betType: 'mystery-quick-pick',\n })\n\n openQuickBetMystery(betSelection, displayPrice)\n}\n\nexport function openQuickBetMystery(selection: QuickbetSelection, displayPrice: number): void {\n handleBetSelection({\n betFlow: {\n location: 'Quickbet',\n options: {\n setUp: () => {\n SetMysteryQuickPickPresetInvestment(displayPrice)\n },\n quickbetProps: { shouldShowSuperPicks: false },\n },\n },\n selection,\n })\n}\n\nexport interface MysteryProductPlanBetLine {\n template: string\n poolType: string\n defaultInvestment: number\n isMultiLeg: boolean\n}\n","import React from 'react'\nimport { MysteryQuickPicksStyled, MysteryToggleButtonStyled } from '../Mystery.styles'\nimport { MysteryQuickPickOptions, MysteryQuickPickOption } from '../MysteryTypes'\n\ninterface MysteryQuickPicksProps {\n selectedKey: string | null\n disabledQuickPicks?: string[]\n optionsPerRow?: number\n selectionCallback: (key: string) => void\n}\n\nexport function sortQuickPicks(options: MysteryQuickPickOption[]): MysteryQuickPickOption[] {\n return options.sort((a, b) =>\n a.displayOrder > b.displayOrder ? 1 : a.displayOrder === b.displayOrder ? 0 : -1\n )\n}\n\nexport function MysteryQuickPicks({\n selectedKey,\n disabledQuickPicks,\n optionsPerRow,\n selectionCallback,\n}: MysteryQuickPicksProps): JSX.Element {\n const quickPickOptions = sortQuickPicks(MysteryQuickPickOptions)\n\n const quickPicks = quickPickOptions.map(quickPick => {\n return (\n \n )\n })\n\n return (\n {quickPicks}\n )\n}\n\ntype MysteryQuickPickProps = Pick &\n MysteryQuickPicksProps\n\nfunction MysteryQuickPick({\n displayPrice,\n label,\n uniqueKey,\n selectedKey,\n disabledQuickPicks,\n selectionCallback,\n}: MysteryQuickPickProps): JSX.Element {\n disabledQuickPicks = disabledQuickPicks || []\n return (\n uniqueKey === disabledQuickPick)}\n onClick={() => selectionCallback(uniqueKey)}\n data-tid-mystery-quickpick={uniqueKey}\n data-tid-mystery-qp-type={`$${displayPrice}${label.toUpperCase()}`}\n >\n ${displayPrice} {label}\n \n )\n}\n","import React from 'react'\nimport { fromJS } from 'immutable'\nimport type { MysteryBetTypes } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { MysteryQuickPickOptions } from '@core/Areas/Racing/Components/Mystery/MysteryTypes'\nimport { createMysterySelection } from '@core/Areas/Racing/Components/Mystery/utils'\nimport { MysteryQuickPicks } from '@core/Areas/Racing/Components/Mystery/Components/MysteryQuickPick'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { createRaceObjectFromResponse } from '@core/Data/Racing'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { NumberOfBets } from './NumberOfBets'\nimport { ReviewMysteryDetails } from './ReviewMysteryDetails'\nimport { SetBetError, SetSelectedQuickPick, state$ } from '../driver'\nimport {\n MysteryHeadingStyled,\n MysteryBetContainerStyled,\n BettingDrawerSpacerStyled,\n} from '../MysteryBetPage.styles'\n\nexport const QuickPick = (): JSX.Element => {\n const [isDetailsOpen, setIsDetailsOpen] = React.useState(false)\n const mysteryData = useObservableImmutable(state$, ['currentData']).currentData?.toJS()\n const selectedQuickPick = useObservableImmutable(state$, ['selectedQuickPick']).selectedQuickPick\n const selectedBetCount = useObservableImmutable(state$, [\n 'selectedQuickPickBetCount',\n ]).selectedQuickPickBetCount\n const isRaceClosed = useObservableImmutable(state$, ['isRaceClosed']).isRaceClosed\n const hasAnyDisabledOptions = !!mysteryData?.DisabledQuickPickOptions?.length\n const shouldBettingDrawerBeOpen = !isRaceClosed && !!selectedQuickPick && !!selectedBetCount\n\n const selectedMysteryOption = MysteryQuickPickOptions.find(x => x.uniqueKey === selectedQuickPick)\n const selectedDisplayPrice = selectedMysteryOption?.displayPrice\n const mysterySelection =\n selectedMysteryOption && mysteryData\n ? createMysterySelection({\n betType: 'mystery-quick-pick',\n betTypeName: selectedMysteryOption.uniqueKey,\n investmentWin: selectedMysteryOption.investment,\n investmentPlace: 0,\n isAlways: selectedMysteryOption.isAlways,\n mysteryOption: selectedMysteryOption.mysteryOption,\n mysteryType: selectedMysteryOption.mysteryType,\n productCode: selectedMysteryOption.productCode,\n raceInformation: fromJS(createRaceObjectFromResponse(mysteryData.Meeting)),\n })\n : undefined\n\n return (\n \n Bet Type\n x.uniqueKey)\n : mysteryData?.DisabledQuickPickOptions\n }\n optionsPerRow={2}\n selectionCallback={SetSelectedQuickPick}\n />\n {hasAnyDisabledOptions && (\n \n )}\n
    \n \n \n {\n SetBetError(null)\n if (selectedDisplayPrice && mysterySelection) setIsDetailsOpen(true)\n }}\n />\n {isDetailsOpen &&\n mysteryData &&\n mysterySelection &&\n selectedMysteryOption &&\n selectedDisplayPrice && (\n setIsDetailsOpen(false)}\n />\n )}\n
    \n )\n}\n","import React, { useState } from 'react'\n\nimport { Tabs, TabList, TabPanel, Tab } from '@core/Components/Tabs'\n\nimport { CustomizeBet } from './CustomizeBet'\nimport { QuickPick } from './QuickPick'\n\nexport const MysteryBetTabs = (): JSX.Element => {\n const [selectedTabIndex, setSelectedTabIndex] = useState(0)\n\n return (\n \n \n Quick Pick\n Customise Bet\n \n \n \n \n \n \n \n \n )\n}\n","import dayjs from 'dayjs'\nimport React from 'react'\n\nimport { GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { useObservableImmutable } from '@core/Utils/hooks'\n\nimport { state$ } from '../driver'\n\nimport {\n MeetingInformationContainerStyled,\n RaceNumberStyled,\n MeetingInformationSectionStyled,\n RaceTimeStyled,\n MeetingNameStyled,\n RaceNameStyled,\n} from '../MysteryBetPage.styles'\n\nexport const MeetingInformation = (): JSX.Element | null => {\n const currentData = useObservableImmutable(state$, ['currentData']).currentData?.toJS()\n\n return (\n \n \n \n \n {currentData?.Meeting?.MeetingId}\n {currentData?.Race?.RaceNumber}\n \n {dayjs(currentData?.Race?.RaceTime).format('HH:mm')}\n \n \n {currentData?.Meeting?.MeetingName}\n {currentData?.Race?.RaceName}\n \n \n \n )\n}\n","import { MysteryDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { fetchFromApi } from '@classic/Foundation/Services/ApiService'\n\nexport const queryDefaults = {\n retry: false,\n cacheTime: 0,\n refetchOnWindowFocus: false,\n}\n\nconst API_PREFIX = '/api/mysterybet'\n\nexport const getMysteryBetDetails = async (\n meetingId?: string,\n raceNumber?: number,\n date?: Date | string\n): Promise => {\n const url =\n meetingId && (raceNumber || 0) > 0 && date\n ? `${API_PREFIX}/${meetingId}/${raceNumber}/${date}`\n : API_PREFIX\n const response = await fetchFromApi(url)\n return await response.json()\n}\n","import React from 'react'\nimport { useHistory, useLocation, useParams } from 'react-router-dom'\nimport dayjs from 'dayjs'\n\nimport { NextRaceDrawer } from '@core/Components/BettingDrawer/NextRaceDrawer'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport {\n getToteRaceTopic,\n ToteRaceAbandonedPushEvent,\n ToteRaceStatusChangedPushEvent,\n} from '@core/State/PushData'\nimport { iotSubscribeTopics, iotUnsubscribeTopics } from '@mobi/utils/awsiot'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { useIsAuthenticated } from '@core/Utils/hooks/useIsAuthenticated'\nimport { fetchCampaignsAsync } from '@core/State/UserAccount/async-signals'\n\nimport { SetGoToMeeting, SetGoToNextRace, SetIsRaceClosed, SetMysteryData, state$ } from './driver'\nimport { MysteryBetTabs } from './Components/MysteryBetTabs'\nimport { MeetingInformation } from './Components/MeetingInformation'\nimport { useMysteryBetDetails } from '@core/Areas/MysteryBet/Hooks/useMysteryBetDetails'\n\nconst NEXT_RACE_PATH = '/tote/mystery'\n\nexport const MysteryBetPage = (): JSX.Element | null => {\n const history = useHistory()\n const location = useLocation()\n const { meetingId, raceNumber } = useParams<{ meetingId: string; raceNumber: string }>()\n const date = new URLSearchParams(location.search).get('date') || undefined\n const { isRaceClosed, isBetConfirmed } = useObservableImmutable(state$, [\n 'isRaceClosed',\n 'isBetConfirmed',\n ])\n const isAuthenticated = useIsAuthenticated()\n\n const isForSpecificRace = !!meetingId && !!raceNumber && !!date\n\n const { isError, data, isFetching, refetch } = useMysteryBetDetails({\n meetingId,\n date,\n raceNumber: raceNumber ? +raceNumber : undefined,\n })\n\n React.useEffect(() => {\n SetMysteryData(data)\n }, [data])\n\n React.useEffect(() => {\n if (isAuthenticated) {\n fetchCampaignsAsync()\n }\n }, [isAuthenticated])\n\n React.useEffect(() => {\n SetIsRaceClosed(data?.Race != null && data.Race.RaceStatusText !== 'Open')\n const raceKey = data?.RaceKeyForLiveUpdates\n let subscription: Rx.IDisposable\n if (raceKey) {\n subscription = iotSubscribeTopics(getTopics(raceKey)).subscribe(e => {\n if (e.topic?.includes(raceKey)) {\n if (e.payload?.eventType === 'ToteRaceStatusChanged') {\n const statusChangedPayload = e.payload as ToteRaceStatusChangedPushEvent\n SetIsRaceClosed(statusChangedPayload.status !== 'open')\n } else if (e.payload?.eventType === 'ToteRaceAbandonChanged') {\n const abandonChangedPayload = e.payload as ToteRaceAbandonedPushEvent\n if (abandonChangedPayload.status !== 'unabandoned') {\n SetIsRaceClosed(true)\n }\n }\n }\n })\n }\n\n return function cleanUp(): void {\n subscription?.dispose()\n if (raceKey) {\n iotUnsubscribeTopics(getTopics(raceKey))\n }\n }\n }, [data])\n\n const formattedDate = dayjs(data?.Meeting?.MeetingDate).format('YYYY-MM-DD')\n const goToNextRace = React.useCallback(\n () => (location.pathname === NEXT_RACE_PATH ? refetch() : history.push(NEXT_RACE_PATH)),\n [history, location.pathname, refetch]\n )\n const goToMeeting = React.useCallback(\n () => history.push(`/tote/meetings/${data?.Meeting?.MeetingId}?date=${formattedDate}`),\n [data?.Meeting?.MeetingId, formattedDate, history]\n )\n SetGoToNextRace(goToNextRace)\n SetGoToMeeting(goToMeeting)\n\n if (isFetching) {\n return (\n
    \n \n
    \n )\n }\n\n if (isError || !data) {\n return (\n \n )\n }\n\n return (\n \n !isForSpecificRace && refetch()} />\n \n \n {isRaceClosed && !isBetConfirmed && (\n \n )}\n \n )\n}\n\nfunction getTopics(raceKey: string): string[] {\n return [\n getToteRaceTopic(raceKey, { type: 'statusChanged' }),\n getToteRaceTopic(raceKey, { type: 'abandonedChanged' }),\n ]\n}\n","import { useQuery } from 'react-query'\nimport { MysteryDataTransferObject } from '@classic/Betting-v2/DataTransferObjects/MysteryDataTransferObject'\nimport { getMysteryBetDetails, queryDefaults } from '@core/Areas/MysteryBet/Data/MysteryBetRequests'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\ntype Props = {\n meetingId: string | undefined\n raceNumber: number | undefined\n date: string | undefined\n}\n\nexport function useMysteryBetDetails({ raceNumber, date, meetingId }: Props) {\n return useQuery({\n ...queryDefaults,\n queryKey: [queryKeys.mysteryBetDetails, meetingId, raceNumber, date],\n queryFn: () => getMysteryBetDetails(meetingId, raceNumber, date),\n })\n}\n","import * as ko from 'knockout'\nimport { CookieAttributes } from 'js-cookie'\nimport atob from 'atob'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { getLastKnownLocationAsString } from '@core/NativeServices/Location/LocationService'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport {\n getCookieValue,\n setCookieValue,\n clearCookieValue,\n} from '@classic/Foundation/Services/CookieService'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { state$ as launchDarkState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport {\n checkNotificationStatusAsync,\n ShowNotificationAuthPopup,\n} from '@core/Areas/Settings/Components/PayoutNotification/PayoutNotificationPopup'\n\nexport enum PresetCookieExpiry {\n Session,\n Custom,\n OneMinute,\n OneHour,\n OneDay,\n OneWeek,\n OneMonth,\n SixMonths,\n OneYear,\n}\n\ninterface PresetCookieExpiryOption {\n value: string\n label: string\n}\n\ninterface VenueLocation {\n Venue: string\n Location: number\n GpsVenue: string\n GpsLocation: number\n SecondaryProviderCode: string\n IsGpsVenueLocationSet: boolean\n}\n\ntype NullableDate = Date | null\n\nlet userAccountStateSubscription$: Rx.IDisposable\nexport class ToolboxViewModel {\n now: Date\n selectedCookieName: ko.Observable\n customCookieName: ko.Observable\n cookieName: ko.PureComputed\n cookieValue: ko.Observable\n cookieResultMessage: ko.Observable\n selectedExpiryPreset: ko.Observable\n cookieExpiryOptions: ko.ObservableArray\n customExpirySelected: ko.PureComputed\n customCookieExpiry: ko.Observable\n cookieExpiry: ko.PureComputed\n\n lastKnownLocation: ko.Observable\n lastKnownLocationText: ko.PureComputed\n dateLastKnownLocationUpdated: ko.Observable\n\n currentVenueLocation: ko.Observable\n currentVenueLocationUpdatedAt: ko.Observable\n\n ldFeatures: ko.Observable<[string, unknown][]>\n appCapability: ko.Observable\n\n deviceId: ko.Observable\n firstLoad: ko.Observable\n segment: ko.Observable\n\n fcmToken: ko.Observable\n authStatus: ko.Observable\n\n constructor(now?: string) {\n this.now = now ? new Date(now) : new Date()\n this.selectedCookieName = ko.observable('')\n this.customCookieName = ko.observable('')\n this.cookieValue = ko.observable('')\n this.cookieName = ko.pureComputed(() => {\n return this.selectedCookieName() ? this.selectedCookieName() : this.customCookieName()\n })\n this.cookieResultMessage = ko.observable('')\n this.selectedExpiryPreset = ko.observable(PresetCookieExpiry.OneMonth)\n this.cookieExpiryOptions = ko.observableArray(this.getPresetOptions())\n this.customExpirySelected = ko.pureComputed(() => {\n return this.selectedExpiryPreset() === PresetCookieExpiry.Custom\n })\n this.customCookieExpiry = ko.observable('')\n this.cookieExpiry = ko.pureComputed(() => {\n let date: Date\n\n switch (this.selectedExpiryPreset()) {\n case PresetCookieExpiry.Custom:\n date = new Date(this.customCookieExpiry())\n break\n case PresetCookieExpiry.OneMinute:\n date = new Date(this.now)\n date.setMinutes(new Date(this.now).getMinutes() + 1)\n break\n case PresetCookieExpiry.OneHour:\n date = new Date(this.now)\n date.setHours(new Date(this.now).getHours() + 1)\n break\n case PresetCookieExpiry.OneDay:\n date = new Date(this.now)\n date.setDate(new Date(this.now).getDate() + 1)\n break\n case PresetCookieExpiry.OneWeek:\n date = new Date(this.now)\n date.setDate(new Date(this.now).getDate() + 7)\n break\n case PresetCookieExpiry.OneMonth:\n date = new Date(this.now)\n date.setMonth(new Date(this.now).getMonth() + 1)\n break\n case PresetCookieExpiry.SixMonths:\n date = new Date(this.now)\n date.setMonth(new Date(this.now).getMonth() + 6)\n break\n case PresetCookieExpiry.OneYear:\n date = new Date(this.now)\n date.setFullYear(new Date(this.now).getFullYear() + 1)\n break\n default:\n return null\n }\n\n if (!isNaN(date.getTime())) {\n return date\n } else {\n return null\n }\n })\n\n this.lastKnownLocation = ko.observable(getLastKnownLocationAsString())\n this.lastKnownLocationText = ko.pureComputed(() => {\n const location = this.lastKnownLocation()\n\n return location ? location : 'Unknown'\n })\n this.dateLastKnownLocationUpdated = ko.observable('')\n this.currentVenueLocation = ko.observable('Unknown')\n this.currentVenueLocationUpdatedAt = ko.observable('')\n\n const appCapabilityCookie = getCookieValue('AppCapability')\n this.appCapability = ko.observable(\n atob(appCapabilityCookie != undefined ? appCapabilityCookie : '') || '-'\n )\n\n this.deviceId = ko.observable(getCookieValue('tt-dv'))\n this.firstLoad = ko.observable(getCookieValue('tt-fl'))\n this.segment = ko.observable(getCookieValue('tt-sg'))\n\n this.ldFeatures = ko.observable<[string, unknown][]>([])\n this.fcmToken = ko.observable('unknown')\n this.authStatus = ko.observable('unknown')\n\n userAccountStateSubscription$ = userAccountState$\n .map(record => record.isLoggedIn)\n .distinctUntilChanged()\n .subscribe(this.updateFeatures)\n this.updateFeatures()\n this.getPushAuthStatus()\n }\n\n setCookie() {\n const name = this.cookieName()\n if (!name) {\n this.cookieResultMessage('Need a cookie name')\n return\n }\n\n let options: CookieAttributes | undefined = undefined\n\n if (this.cookieExpiry()) {\n options = {\n expires: this.cookieExpiry() as Date,\n }\n }\n\n setCookieValue(name, this.cookieValue(), options)\n\n if (name === 'tt-sg') {\n this.updateSegmentDetails()\n }\n\n this.cookieResultMessage(this.getSuccessfulResultMessage())\n }\n\n clearCookie() {\n const name = this.cookieName()\n\n if (!name) {\n this.cookieResultMessage('Need a cookie name')\n return\n }\n\n clearCookieValue(name)\n\n if (name === 'tt-sg') {\n this.updateSegmentDetails()\n }\n\n this.cookieResultMessage(`Cleared cookie: ${name}`)\n }\n\n getPresetOptions() {\n const options: PresetCookieExpiryOption[] = []\n\n for (const preset in PresetCookieExpiry) {\n if (typeof PresetCookieExpiry[preset] === 'number') {\n options.push({\n value: PresetCookieExpiry[preset],\n label: preset,\n })\n }\n }\n\n return options\n }\n\n getSuccessfulResultMessage() {\n const expiry = this.cookieExpiry()\n const expiryAsString = expiry ? expiry.toUTCString() : 'session'\n return `Cookie \"${this.cookieName()}\" set to \"${this.cookieValue()}\" with expiry \"${expiryAsString}\"`\n }\n\n updateLastKnownLocation() {\n this.lastKnownLocation(getLastKnownLocationAsString())\n this.dateLastKnownLocationUpdated(`Updated ${new Date().toLocaleTimeString()}`)\n }\n\n getCurrentVenueLocation() {\n const url = 'webapi/device/GetCurrentVenueLocation'\n apiService.get({ url }).then(data => {\n let currentVenueLocation = data.Venue + '/' + data.Location + ' -> GPS: '\n currentVenueLocation += data.IsGpsVenueLocationSet\n ? data.GpsVenue + '/' + data.GpsLocation + '/'\n : 'none'\n this.currentVenueLocation(currentVenueLocation)\n this.currentVenueLocationUpdatedAt(`Updated ${new Date().toLocaleTimeString()}`)\n })\n }\n\n getPushAuthStatus() {\n if (isReactNativeApp) {\n checkNotificationStatusAsync().then(response => {\n if (response.status !== 'Authorized') {\n ShowNotificationAuthPopup({\n reason: 'Notifications must be enabled to set race alerts',\n notificationAuthStatus: response.status,\n })\n }\n\n this.authStatus(response.status as string)\n this.fcmToken(response.fcmRegistrationToken as string)\n })\n }\n }\n\n private updateFeatures = () => {\n launchDarkState$.subscribe(record => {\n this.ldFeatures(\n Object.entries(record.features.toJS()).sort((a, b) =>\n a[0].toUpperCase().localeCompare(b[0].toUpperCase())\n )\n )\n })\n }\n\n private updateSegmentDetails() {\n this.updateFeatures() // Reload the features\n const segmentValue = getCookieValue('tt-sg') as string\n this.segment(segmentValue)\n }\n\n cleanup() {\n if (userAccountStateSubscription$) {\n userAccountStateSubscription$.dispose()\n }\n }\n}\n","import React, { lazy, Suspense } from 'react'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\n\nconst SignUpCompletePage = lazy(() => import('@core/Areas/Account/SignUp/Old/SignUpCompletePage'))\n\nexport const SignUpComplete = () => {\n return (\n }>\n \n \n )\n}\n","import React from 'react'\n\nexport const VersionInfo = () => {\n const versionInfo = getVersionInfo()\n\n if (!versionInfo) return null\n\n return (\n <>\n

    Version Info

    \n

    Version: {versionInfo.version}

    \n

    Git Commit SHA: {versionInfo.gitCommitShaShort}

    \n

    User: {versionInfo.gitUsername}

    \n

    \n Git Pipeline:{' '}\n \n {versionInfo.gitPipelineIid}\n \n

    \n

    \n \n GitLab Project\n \n

    \n \n )\n}\n\nconst getVersionInfo = () => {\n return window?.TABTOUCH?.versionInfo\n}\n","import React from 'react'\n\nexport const CookieManagement = () => {\n return (\n <>\n

    Set a Cookie

    \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

    Cookie Information

    \n
    \n
    Device
    \n
    \n \n
    \n
    First Load
    \n
    \n \n
    \n
    Segment:
    \n
    \n \n
    \n
    \n \n )\n}\n","import React from 'react'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { removeFromLocalStorage } from '@mobi/utils/storage'\n\nexport const LocalStorageManager: React.FC = () => {\n const [localStorageState, setLocalStorageState] = React.useState>()\n\n React.useEffect(() => {\n setLocalStorageState(getLocalStorageForState())\n }, [])\n\n if (!localStorageState) return null\n\n const handleLocalStorageDelete = (key: string) => {\n removeFromLocalStorage(key)\n setLocalStorageState(getLocalStorageForState())\n }\n\n return (\n <>\n

    Local Storage Manager

    \n
    \n {Object.keys(localStorageState).map(key => (\n
    \n \n {key}{' '}\n \n \n {localStorageState[key].startsWith('{') ? (\n
    {JSON.stringify(JSON.parse(localStorageState[key]), null, 2)}
    \n ) : (\n localStorageState[key]\n )}\n
    \n ))}\n
    \n \n )\n}\n\n// Local Helpers\n\nfunction getLocalStorageForState() {\n const storageKeys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n storageKeys.push(localStorage.key(i) as string)\n }\n const state = storageKeys.reduce>((acc, curr) => {\n acc[curr] = localStorage.getItem(curr) as string\n return acc\n }, {})\n return state\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport {\n selectLastUsedPaymentMethod,\n setLastUsedPaymentMethod,\n resetLastUsedPaymentMethod,\n} from '@mobi/account/Areas/Deposit/Store'\nimport { useLogon } from '@core/Utils/hooks/useLogon'\nimport { DepositSource } from '@mobi/component-library/Deposit/types'\n\nexport const LastPaymentMethod = () => {\n const dispatch = useDispatch()\n const { isLoggedIn, accountNumber } = useLogon()\n const lastUsedPaymentMethod = useSelector(selectLastUsedPaymentMethod(accountNumber))\n\n const savePaymentMethod = (paymentMethod: DepositSource | '') => {\n if (!isLoggedIn || !accountNumber) {\n throw new Error('Log in required to update stored deposit method')\n }\n\n if (paymentMethod === '') {\n dispatch(resetLastUsedPaymentMethod(accountNumber))\n } else {\n dispatch(\n setLastUsedPaymentMethod({\n accountNumber,\n paymentMethod,\n })\n )\n }\n }\n\n return (\n <>\n

    Last used payment method

    \n
    \n {isLoggedIn ? (\n
    \n savePaymentMethod(e.target.value as DepositSource)}\n >\n \n \n \n \n \n \n \n ) : (\n <>Last deposit payment method is recorded per-user in local storage. Log in to edit.\n )}\n
    \n \n )\n}\n","import React, { useState } from 'react'\nimport { captureException, captureMessage } from '@sentry/react'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { state$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useDebounce } from 'rooks'\nimport { Button } from '@mobi/component-library/Common/Buttons'\n\nexport const Sentry = () => {\n const { accountNumber, isLoggedIn } = useObservableImmutable(state$, [\n 'isLoggedIn',\n 'accountNumber',\n ])\n const [sentTest, setSentTest] = useState(false)\n\n const clearTestFlag = useDebounce(() => setSentTest(false), 3000)\n\n const sendToSentry = (message: string | Error) => {\n const captureFn =\n typeof message === 'string'\n ? captureMessage.bind(null, message)\n : captureException.bind(null, message)\n\n captureFn(scope => {\n scope.clear()\n scope.setTag('is_test', true)\n if (isLoggedIn && accountNumber) {\n scope.setUser({\n id: accountNumber.toString(),\n })\n }\n return scope\n })\n\n setSentTest(true)\n clearTestFlag()\n }\n\n return (\n <>\n

    Sentry {sentTest && ' - Sent!'}

    \n\n
    \n
    \n \n\n \n
    \n
    \n \n )\n}\n","import React from 'react'\nimport ko from 'knockout'\nimport { Redirect, Link } from 'react-router-dom'\nimport { ToolboxViewModel } from './viewModel'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '@core/Store'\nimport { Toggle } from '@mobi/component-library/Common/Input'\nimport { toggleReactQueryDevTools } from './Store'\nimport { VersionInfo } from './Components/VersionInfo'\nimport { CookieManagement } from './Components/CookieManagement'\nimport { LocalStorageManager } from './Components/LocalStorageManager/LocalStorageManager'\nimport { LastPaymentMethod } from '@core/Areas/Toolbox/Components/LastPaymentMethod/LastPaymentMethod'\nimport { Sentry } from '@core/Areas/Toolbox/Components/Sentry/Sentry'\nimport { useServerConfig } from '@core/Data/ServerConfig/useServerConfig'\n\nexport const Toolbox = () => {\n const toolboxElRef = React.useRef(null)\n const serverConfig = useServerConfig()\n\n const dispatch = useDispatch()\n const isReactQueryDevToolsEnabled = useSelector(\n (state: RootState) => state.toolbox.isReactQueryDevToolsEnabled\n )\n\n React.useEffect(() => {\n if (!serverConfig?.isInternalRequest || !toolboxElRef.current) return undefined\n\n const viewModel = new ToolboxViewModel()\n ko.applyBindings(viewModel, toolboxElRef.current)\n\n return () => {\n viewModel.cleanup()\n }\n }, [serverConfig?.isInternalRequest])\n\n if (!serverConfig) return null\n if (serverConfig.isInternalRequest === false) return \n\n return (\n
    \n \n\n

    \n \n Design System\n \n

    \n\n

    \n React-Query DevTools{' '}\n dispatch(toggleReactQueryDevTools())}\n toggledOn={isReactQueryDevToolsEnabled}\n isDisabled={false}\n />\n

    \n\n \n\n

    GPS and Location

    \n

    \n \n Get GPS Coords\n \n

    \n

    \n GPS Coords: \n
    \n \n

    \n
    \n

    \n \n Get Venue/Location\n \n

    \n\n

    \n Current Venue/Location: \n
    \n \n

    \n\n

    Feature Toggles

    \n
    \n
    \n AppCapability\n
    \n
    \n \n
    \n
    \n Launch Darkly Features\n
    \n
    \n
    \n :\n \n
    \n
    \n
    \n\n

    Notification

    \n
    \n
    authorization:
    \n
    \n \n
    \n
    fcmToken:
    \n
    \n \n
    \n \n
    \n\n \n\n \n\n \n
    \n )\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { ReactQueryDevtools } from 'react-query/devtools'\nimport { RootState } from '@core/Store'\n\n/** ONLY to be used within App.tsx */\nexport const DevTools: React.FC = () => {\n const isReactQueryDevToolsEnabled = useSelector(\n (state: RootState) => state.toolbox.isReactQueryDevToolsEnabled\n )\n\n if (PRODUCTION) return null\n\n return <>{isReactQueryDevToolsEnabled && }\n}\n","import React from 'react'\nimport { useIsAuthenticated } from '@core/Utils/hooks/useIsAuthenticated'\nexport const RequireAuth: React.FC<{ children: JSX.Element }> = ({ children }) => {\n const auth = useIsAuthenticated()\n if (!auth) return null\n\n return children\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const ContactDetailsContainer = styled('section')({\n fontSize: '1.2rem',\n padding: '2rem',\n})\n\nexport const ContactDetailsPreferredNameStyled = styled('p')({\n fontSize: '2.2rem',\n margin: 0,\n})\n\nexport const ContactDetailsItemStyled = styled('p')({\n fontSize: '1.6rem',\n margin: '0.5rem 0',\n})\n\nexport const ContactDetailsViewLabel = styled('dt')({\n borderTop: `1px solid ${hexColors.veryLightGrey}`,\n padding: '1rem 0 0 0',\n color: hexColors.dimGrey,\n width: '100%',\n float: 'none', // reset for desktop\n})\n\nexport const ContactDetailsViewItem = styled('dd')({\n fontSize: '1.4rem',\n margin: 0,\n padding: '0.5rem 0 0.75rem 0',\n width: '100%',\n float: 'none', // reset for desktop\n})\n\nexport const ContactDetailsTitleLabelStyled = styled('p')({\n fontSize: '1.2rem',\n color: hexColors.dimGrey,\n margin: '1rem 0 0.25rem',\n})\n\nexport const ContactDetailsEditLabelStyled = styled('label')({\n display: 'block',\n color: hexColors.dimGrey,\n fontSize: '1.2rem',\n})\n\nexport const ContactDetailsManualAddressButton = styled('button')({\n float: 'right',\n alignItems: 'normal',\n backgroundColor: 'rgba(0,0,0,0)',\n borderStyle: 'none',\n color: hexColors.sushi,\n font: 'inherit',\n padding: 0,\n textDecoration: 'underline',\n MozAppearance: 'none',\n})\n\nexport const NoticeBoxInternationalStyled = styled('div')({\n boxSizing: 'border-box',\n padding: '0.2rem 1.5rem',\n border: `2px solid ${hexColors.black}`,\n lineHeight: 2,\n})\n\nexport const VerifyTextContainerStyled = styled.div({\n margin: '1rem 0',\n textAlign: 'center',\n})\n","import React, { useEffect } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { BetAccountKey, BetAccountRecord, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { buildAddress, getContactDetailsFields } from './data-transforms'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { connect } from '../../Components/HOCs/connect'\nimport { ContentHeader } from '../../Components/ContentHeader'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\nimport { DesktopSpinner, Spinner } from '@mobi/component-library/Common/Spinner'\nimport { ErroredInstance, isErrored, isLoading, LoadingInstance } from 'rwwa-data-access'\nimport { ErrorMessage, SuccessMessage } from '../../Components/Messages'\nimport { getFromRepo } from '@core/Utils/repository'\nimport { MainContainer } from '../../Components/Containers'\nimport { observeImmutable } from '../../Components/HOCs/observe'\nimport { Reset } from '@core/Areas/ContactDetails/driver'\nimport { Text } from '@core/Components/Text'\nimport { useBetAccount } from '@mobi/account/Areas/Deposit/Hooks'\nimport { useLogon } from '@core/Utils/hooks'\nimport type { Address, BetAccountHolder } from '@mobi/api-types'\nimport {\n ContactDetails as ContactDetailsRepo,\n ContactDetailsKey,\n} from '../../Data/Account/contactDetails'\nimport {\n ContactDetailsContainer,\n ContactDetailsItemStyled,\n ContactDetailsPreferredNameStyled,\n ContactDetailsViewItem,\n ContactDetailsViewLabel,\n NoticeBoxInternationalStyled,\n VerifyTextContainerStyled,\n} from './ContactDetails.styles'\nimport { type ContactDetailsStateRecord, state$ as contactDetailsState$ } from './driver'\n\nexport interface ContactDetailsViewProps {\n betAccountHolderNumber?: number | null\n fullName?: string\n preferredName?: string\n dateOfBirth?: string\n email?: string\n phoneMobile?: string\n phoneHome?: string\n phoneWork?: string\n addressResidential?: Address | null\n addressPostal?: Address | null\n isDesktop?: boolean\n isIdVerified: boolean\n navigateToEditContactDetails: (accountNumber?: number | null) => void\n isInternationalCustomer: boolean\n}\n\nexport interface ContactDetailsProps {\n isDesktop?: boolean\n navigateToEditContactDetails: (accountNumber?: number | null) => void\n}\n\nexport function ContactDetailsMobiWrapper() {\n const history = useHistory()\n return (\n \n history.push('/account/contactdetails/edit/' + accountNumber)\n }\n />\n )\n}\n\nexport function ContactDetails({ isDesktop, navigateToEditContactDetails }: ContactDetailsProps) {\n return (\n \n )\n}\n\nconst ConnectContactDetails = connect({ contactDetails: ContactDetailsRepo })(\n ContactDetailsLoader\n)\n\nexport function ContactDetailsLoader({\n contactDetails,\n isDesktop,\n navigateToEditContactDetails,\n}: {\n contactDetails: typeof LoadingInstance | typeof ErroredInstance | BetAccountHolder\n} & ContactDetailsProps) {\n const { accountNumber, isLoggedIn } = useLogon()\n const betAccountQuery = useBetAccount({\n enabled: accountNumber === null || isLoggedIn !== true,\n queryFn: () => getFromRepo(BetAccountRepo, BetAccountKey),\n })\n\n useEffect(() => {\n return () => Reset()\n }, [])\n\n if (isLoading(contactDetails) || betAccountQuery.isLoading) {\n return isDesktop ? : \n }\n\n if (isErrored(contactDetails) || betAccountQuery.isError) {\n return An error occurred while loading your contact details.\n }\n\n const props = getContactDetailsFields(contactDetails)\n\n return (\n \n )\n}\n\nfunction NoticeBoxInternational() {\n return (\n \n If your name, address or date of birth are incorrect, please call us on{' '}\n for assistance.\n \n )\n}\n\nconst ContactDetailsObserver = observeImmutable(\n contactDetailsState$,\n ({ record, ...props }) => {\n const { updateSuccess } = record\n return \n }\n)\n\nexport function ContactDetailsView({\n betAccountHolderNumber,\n fullName,\n preferredName,\n dateOfBirth,\n email,\n phoneMobile,\n phoneHome,\n phoneWork,\n addressResidential,\n addressPostal,\n updateSuccess,\n isDesktop,\n isIdVerified,\n isInternationalCustomer: isInternational,\n navigateToEditContactDetails,\n}: ContactDetailsViewProps & { updateSuccess: boolean }) {\n const onEditDetailsClick = () => {\n if (isIdVerified) {\n navigateToEditContactDetails(betAccountHolderNumber)\n }\n }\n\n return (\n \n {!isDesktop && }\n {updateSuccess ? (\n Successfully updated\n ) : null}\n \n {preferredName && (\n \n {preferredName}\n \n )}\n {fullName && (\n {fullName}\n )}\n\n
    \n {dateOfBirth && Date of Birth:}\n {dateOfBirth && (\n {dateOfBirth}\n )}\n\n {email && Email: }\n {email && {email}}\n\n {phoneMobile && Mobile: }\n {phoneMobile && (\n {phoneMobile}\n )}\n\n {isDesktop && Home: }\n {isDesktop && (\n \n {phoneHome || '-'}\n \n )}\n\n {isDesktop && Work: }\n {isDesktop && (\n \n {phoneWork || '-'}\n \n )}\n\n {addressResidential && (\n Address (Residential):\n )}\n {addressResidential && (\n \n {buildAddress(addressResidential)}\n \n )}\n\n {addressPostal && Address (Postal):}\n {addressPostal && (\n \n {buildAddress(addressPostal)}\n \n )}\n
    \n\n {isInternational ? (\n \n ) : (\n \n Edit Details\n \n )}\n\n {!isIdVerified && (\n \n To edit your contact details, please verify now.\n \n )}\n
    \n
    \n )\n}\n","import React from 'react'\nimport { SelectField, SelectFieldProps, OptionStyled } from '@mobi/component-library/Common/Select'\nimport { useCountryList } from '@mobi/account/Areas/SignUp/Hooks'\nimport type { CountryList } from '@mobi/api-types'\n\nexport function PopularCountryList({ countries }: { countries: CountryList }) {\n const popularCountries = ['Australia', 'New Zealand', 'United Kingdom'] // Top three countries, selected based on country of origin of customers\n const popularOptions = countries.filter(c => popularCountries.find(p => p === c.description))\n\n return (\n \n {popularOptions.map(opt => (\n \n {opt.description}\n \n ))}\n \n )\n}\n\nexport function CountrySelect({ ...props }: SelectFieldProps) {\n const { isLoading, isError, data: countries } = useCountryList()\n\n return (\n \n {isLoading && Loading ...}\n\n {isError && Could not load countries}\n\n {!isLoading && !isError && countries && (\n <>\n Select a country\n \n \n \n )}\n \n )\n}\n\nconst AlphabeticalCountryList = ({ countries }: { countries: CountryList }) => (\n \n {countries.map(opt => (\n \n {opt.description}\n \n ))}\n \n)\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const SectionTitle = styled('legend')({\n fontSize: '1.6rem',\n lineHeight: 1.25,\n margin: '1rem 0',\n color: hexColors.black,\n})\n\nexport const HorizontalDivider = styled('div')({\n margin: '1rem 0',\n border: 0,\n borderBottom: `1px solid ${hexColors.veryLightGrey}`,\n})\n\nexport const MedicareIconStyled = styled('svg')({\n display: 'inline-block',\n fill: 'currentColor',\n fontSize: '10rem',\n verticalAlign: 'bottom',\n})\n\nexport const CheckboxContainer = styled('div')({\n margin: '1rem 0',\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const DateSelectionLabelStyled = styled.label({\n display: 'block',\n color: hexColors.dimGrey,\n fontSize: '1.2rem',\n})\n","import React from 'react'\nimport { SelectField, SelectOption } from '@mobi/component-library/Common/Select'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { ValidationErrorStyled } from '@mobi/component-library/Common/Input'\nimport { DateSelectionLabelStyled } from './DateSelection.styles'\n\nconst months: SelectOption[] = [\n { value: '', label: 'MMMM' },\n { value: '01', label: 'January' },\n { value: '02', label: 'February' },\n { value: '03', label: 'March' },\n { value: '04', label: 'April' },\n { value: '05', label: 'May' },\n { value: '06', label: 'June' },\n { value: '07', label: 'July' },\n { value: '08', label: 'August' },\n { value: '09', label: 'September' },\n { value: '10', label: 'October' },\n { value: '11', label: 'November' },\n { value: '12', label: 'December' },\n]\n\ninterface DateSelectionProps {\n name?: string\n day?: string | null // if null is passed date field is disabled\n month?: string\n year?: string\n errorMessage?: string | boolean\n onChange: (selectedDate: Date | null) => void\n onBlur?: () => void\n}\n\ninterface DateSelectionState {\n day: string\n month: string\n year: string\n}\n\nexport class DateSelection extends React.Component {\n constructor(props: DateSelectionProps) {\n super(props)\n\n this.state = {\n day: this.props.day || '',\n month: this.props.month || '',\n year: this.props.year || '',\n }\n }\n\n public onChangeDay = (event: React.FormEvent) => {\n this.setState(\n {\n day: event.currentTarget.value,\n },\n () =>\n callOnChange({\n onChange: this.props.onChange,\n state: this.state,\n isDayDisabled: this.props.day === null,\n })\n )\n }\n\n public onChangeMonth = (event: React.FormEvent) => {\n this.setState(\n {\n month: event.currentTarget.value,\n },\n () =>\n callOnChange({\n onChange: this.props.onChange,\n state: this.state,\n isDayDisabled: this.props.day === null,\n })\n )\n }\n\n public onChangeYear = (event: React.FormEvent) => {\n this.setState(\n {\n year: event.currentTarget.value,\n },\n () =>\n callOnChange({\n onChange: this.props.onChange,\n state: this.state,\n isDayDisabled: this.props.day === null,\n })\n )\n }\n\n public render() {\n return (\n
    \n {!!this.props.name && (\n {this.props.name}\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.errorMessage && (\n {this.props.errorMessage}\n )}\n
    \n )\n }\n}\n\ntype CallOnChangeOpts = {\n state: DateSelectionState\n onChange: (selectedDate: Date | null) => void\n isDayDisabled: boolean\n}\n\nexport function callOnChange({ onChange, state, isDayDisabled }: CallOnChangeOpts): void {\n let selectedDate: Date | null = null\n\n if (state.day && state.month && state.year) {\n selectedDate = new Date(`${state.year}-${state.month}-${state.day}`)\n }\n\n if (isDayDisabled && state.month && state.year) {\n selectedDate = new Date(`${state.year}-${state.month}-1`) // pass day as 1\n }\n onChange(selectedDate)\n}\n\nexport function getDaySelectOptions(month: string, year: string) {\n // Based on whether month and year is provided populate days\n const currentYear = new Date().getFullYear().toString()\n if (!month) {\n return getDayDefaultSelectOptions()\n }\n if (!!month && !year) {\n return getUpdatedDaySelectOptions(month, currentYear)\n }\n return getUpdatedDaySelectOptions(month, year)\n}\n\nexport function getDayDefaultSelectOptions(): SelectOption[] {\n const defaultSelectOptions = [{ value: '', label: 'DD' }]\n // Add 31 days as default selection options\n const days = new Array(31).fill('')\n days.map((_, i) => {\n const day = (i + 1).toString()\n defaultSelectOptions.push({\n value: day,\n label: day,\n })\n })\n return defaultSelectOptions\n}\n\nexport function getUpdatedDaySelectOptions(month: string, year: string): SelectOption[] {\n const selectOptions = [{ value: '', label: 'DD' }]\n const numOfDays = new Date(parseInt(year), parseInt(month), 0).getDate() // Find days in the given month and year\n // Add days of the given month and year to the selection options\n const days = new Array(numOfDays).fill('')\n days.map((_, i) => {\n const monthVal = (i + 1).toString()\n selectOptions.push({\n value: monthVal,\n label: monthVal,\n })\n })\n return selectOptions\n}\n\nexport function getYearSelectOptions(): SelectOption[] {\n const selectOptions = [{ value: '', label: 'YYYY' }]\n const currentYear = new Date().getFullYear()\n // Add current year to the selection options\n selectOptions.push({\n value: currentYear.toString(),\n label: currentYear.toString(),\n })\n // Add next 10 years to the selection options\n const days = new Array(10).fill('')\n days.map((_, i) => {\n const futureYear = (currentYear + (i + 1)).toString()\n selectOptions.push({\n value: futureYear,\n label: futureYear,\n })\n })\n\n return selectOptions\n}\n","import React from 'react'\nimport { MedicareIconStyled } from './AdditionalDetails.styles'\n\nexport function MedicareSvg() {\n return (\n \n Example Medicare card\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","import React from 'react'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { SelectField } from '@mobi/component-library/Common/Select'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { ValidationErrors, ChangeValue, ValidateField } from '../../../ContactDetails/driver'\nimport { DateSelection } from '../../../../Components/DateSelection/DateSelection'\nimport { MedicareSvg } from './MedicareSvg'\nimport { medicareCardColours } from '@mobi/account/Areas/SignUp/Components/Verification/Medicare'\n\ninterface MedicareFields {\n medicareBlueYellowExpiryDate: Date | null\n medicareGreenExpiry: string\n medicareCardColour: string\n medicareMiddleNameOnCard: string\n medicareNumber: string\n medicareReference: string\n}\n\nexport interface MedicareProps extends MedicareFields {\n validationErrors: ValidationErrors\n}\n\nexport function validateMedicareFields() {\n const validationFields: (keyof MedicareFields)[] = [\n 'medicareBlueYellowExpiryDate',\n 'medicareCardColour',\n 'medicareGreenExpiry',\n 'medicareNumber',\n 'medicareReference',\n ]\n validationFields.forEach(field => ValidateField({ field }))\n}\n\nexport function Medicare({\n medicareBlueYellowExpiryDate,\n medicareGreenExpiry,\n medicareCardColour,\n medicareNumber,\n medicareReference,\n medicareMiddleNameOnCard,\n validationErrors,\n}: MedicareProps) {\n const changeMedicareNumber = (event: React.FormEvent) => {\n const value = event.currentTarget.value\n const numberOfDigitsAllowed = 10\n if (value.length > numberOfDigitsAllowed) {\n return\n }\n ChangeValue({ field: 'medicareNumber', value })\n }\n const changeMedicareReference = (event: React.FormEvent) => {\n let value = event.currentTarget.value\n const numberOfDigitsAllowed = 1\n if (value.length > numberOfDigitsAllowed) {\n value = value.split('')[0]\n }\n // 0 is not allowed as reference\n if (value === '0') {\n return\n }\n ChangeValue({ field: 'medicareReference', value })\n }\n const changeMedicareMiddleNameOnCard = (event: React.FormEvent) =>\n ChangeValue({ field: 'medicareMiddleNameOnCard', value: event.currentTarget.value })\n const changeMedicareCardColor = (event: React.FormEvent) =>\n ChangeValue({ field: 'medicareCardColour', value: event.currentTarget.value })\n const changeMedicareGreenExpiry = (selectedDate: Date | null) => {\n if (!selectedDate) {\n ChangeValue({ field: 'medicareGreenExpiry', value: '' })\n return\n }\n const month = selectedDate.getMonth() + 1\n const monthFormatted = month < 10 ? `0${month}` : `${month}`\n const year = selectedDate.getFullYear()\n ChangeValue({ field: 'medicareGreenExpiry', value: `${monthFormatted}/${year}` })\n }\n const changeMedicareBlueYellowExpiry = (selectedDate: Date | null) => {\n ChangeValue({ field: 'medicareBlueYellowExpiryDate', value: selectedDate || '' })\n }\n const isMedicareGreenCard =\n medicareCardColour && medicareCardColour.trim().toLocaleLowerCase() === 'green'\n const isMedicareBlueOrYellowCard =\n medicareCardColour &&\n (medicareCardColour.trim().toLocaleLowerCase() === 'blue' ||\n medicareCardColour.trim().toLocaleLowerCase() === 'yellow')\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {isMedicareGreenCard && (\n \n )}\n {isMedicareBlueOrYellowCard && (\n \n )}\n
    \n )\n}\n\ninterface GreeCardExpiryDateProps {\n medicareGreenExpiry: string\n onChange: (selectedDate: Date | null) => void\n onBlur: () => void\n errorMessage: string | boolean\n}\n\nfunction GreenCardExpiryDate({\n medicareGreenExpiry,\n onChange,\n onBlur,\n errorMessage,\n}: GreeCardExpiryDateProps) {\n const greenExpiry = medicareGreenExpiry && medicareGreenExpiry.split('/')\n\n if (!greenExpiry) {\n return (\n \n )\n }\n const month = greenExpiry[0]\n const year = greenExpiry[1]\n return (\n \n )\n}\n\ninterface BlueOrYellowCardDateProps {\n medicareBlueYellowExpiry: Date | null\n onChange: (selectedDate: Date | null) => void\n onBlur: () => void\n errorMessage: string | boolean\n}\n\nfunction BlueOrYellowCardDate({\n medicareBlueYellowExpiry,\n onChange,\n onBlur,\n errorMessage,\n}: BlueOrYellowCardDateProps) {\n if (!medicareBlueYellowExpiry) {\n return (\n \n )\n }\n\n medicareBlueYellowExpiry =\n typeof medicareBlueYellowExpiry === 'string'\n ? new Date(medicareBlueYellowExpiry)\n : medicareBlueYellowExpiry\n const day = medicareBlueYellowExpiry.getDate()\n const month = medicareBlueYellowExpiry.getMonth() + 1\n const monthFormatted = month < 10 ? `0${month}` : `${month}`\n const year = medicareBlueYellowExpiry.getFullYear()\n return (\n \n )\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '../../../../Components/NoticeBox'\nimport { ProvideExtraPersonalIdMessage } from '../ProvideExtraPersonalIdMessage'\n\nexport class PastReverificationMessage extends React.Component<{\n isReverificationSuccess: boolean\n}> {\n private reverificationFailureRef: HTMLElement | null = null\n\n public componentDidMount() {\n // on error scrolls to the error\n if (this.reverificationFailureRef && this.reverificationFailureRef.scrollIntoView) {\n this.reverificationFailureRef.scrollIntoView()\n }\n }\n\n public render() {\n const isError = this.props.isReverificationSuccess === false\n const title = isError ? 'Re-verification failed' : 'Provide extra personal ID'\n const noticeBoxType = isError ? NoticeBoxTypes.Error : NoticeBoxTypes.Info\n\n return (\n {\n this.reverificationFailureRef = node\n }}\n >\n \n \n \n
    \n )\n }\n}\n","import React, { type FormEventHandler } from 'react'\nimport Rx from 'rx'\nimport { observeImmutable } from '../../../../Components/HOCs/observe'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { SelectField } from '@mobi/component-library/Common/Select'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { state$ as reverificationState$ } from '../../../Reverification/driver'\nimport {\n state$ as contactDetailsState$,\n ContactDetailsState,\n ValidationErrors,\n ChangeValue,\n ContactDetailsFields,\n ValidateField,\n} from '../../../ContactDetails/driver'\nimport { CountrySelect } from '../CountrySelect/CountrySelect'\nimport { HorizontalDivider, SectionTitle, CheckboxContainer } from './AdditionalDetails.styles'\nimport { Medicare } from './Medicare'\nimport { PastReverificationMessage } from '../../../Reverification/Components/PastReverificationMessage'\nimport { statesInAustralia } from '@mobi/settings/src/statesInAustralia'\n\ninterface AdditionalDetailsFields {\n driversLicenceNumber: string\n driversLicenceState: string\n driversLicenceCardNumber: string\n passportNumber: string\n passportCountry: string\n isAdditionalDetailsChanged: boolean\n agreeToVerifyAdditionalDetails: boolean\n medicareBlueYellowExpiryDate: Date | null\n medicareGreenExpiry: string\n medicareCardColour: string\n medicareMiddleNameOnCard: string\n medicareNumber: string\n medicareReference: string\n validationErrors: ValidationErrors\n isReverificationSuccess: boolean\n}\n\nexport type AdditionalDetailsProps = Pick // this is for type safety, when ContactDetailsState changes it forces to update AdditionalDetailsFields\n\nconst state$ = Rx.Observable.combineLatest(\n contactDetailsState$,\n reverificationState$,\n (contactDetails, reverfication) => ({ contactDetails, reverfication })\n)\n\nexport const AdditionalDetails = observeImmutable(state$, ({ record }) => {\n const { requiresReverification, hasAttemptedReverification } = record.reverfication\n\n if (requiresReverification && hasAttemptedReverification) {\n return \n }\n\n return null\n})\n\nexport function validateFields() {\n const validationFields: (keyof ContactDetailsFields)[] = [\n 'passportCountry',\n 'passportNumber',\n 'driversLicenceState',\n 'driversLicenceNumber',\n 'driversLicenceCardNumber',\n ]\n validationFields.forEach(field => ValidateField({ field }))\n}\n\nexport function AdditionalDetailsComponent({\n driversLicenceNumber,\n driversLicenceState,\n driversLicenceCardNumber,\n passportNumber,\n passportCountry,\n isAdditionalDetailsChanged,\n agreeToVerifyAdditionalDetails,\n medicareBlueYellowExpiryDate,\n medicareGreenExpiry,\n medicareCardColour,\n medicareNumber,\n medicareReference,\n medicareMiddleNameOnCard,\n validationErrors,\n isReverificationSuccess,\n}: AdditionalDetailsProps) {\n const changeDriversLicenceState: FormEventHandler = event =>\n ChangeValue({ field: 'driversLicenceState', value: event.currentTarget.value })\n const changeDriversLicenceNumber: FormEventHandler = event =>\n ChangeValue({ field: 'driversLicenceNumber', value: event.currentTarget.value })\n const changeDriversLicenceCardNumber: FormEventHandler = event =>\n ChangeValue({ field: 'driversLicenceCardNumber', value: event.currentTarget.value })\n\n const changePassportCountry: FormEventHandler = event =>\n ChangeValue({ field: 'passportCountry', value: event.currentTarget.value })\n const changePassportNumber: FormEventHandler = event =>\n ChangeValue({ field: 'passportNumber', value: event.currentTarget.value })\n\n return (\n
    \n \n\n
    \n \n Driver's licence\n \n \n \n \n
    \n\n \n\n
    \n \n Passport\n \n \n \n
    \n\n \n\n
    \n \n Medicare\n \n \n
    \n\n \n\n \n
    \n )\n}\n\nfunction AgreeToVerifyAdditionalDetails({\n isAdditionalDetailsChanged,\n agreeToVerifyAdditionalDetails,\n}: {\n isAdditionalDetailsChanged: boolean\n agreeToVerifyAdditionalDetails: boolean\n}) {\n if (!isAdditionalDetailsChanged) {\n return null\n }\n\n const changeAgreeToVerifyAdditionalDetails = (event: React.FormEvent) =>\n ChangeValue({ field: 'agreeToVerifyAdditionalDetails', value: event.currentTarget.checked })\n\n return (\n \n \n \n )\n}\n","import { searchAddresses } from '@mobi/account/Areas/SignUp/Data/Address'\nimport React from 'react'\nimport { Autocomplete } from '@core/Components/Autocomplete'\n\nconst AddressAutosuggest = Autocomplete as new () => Autocomplete\n\nconst getSuggestionValue = (suggestion: string) => suggestion\n\nconst fetchSuggestions = (inputValue: string) => {\n if (!inputValue) {\n return []\n }\n\n return searchAddresses(inputValue).then(resp => resp.map(({ value }) => value))\n}\n\ninterface AddressAutocompleteProps {\n id: string\n inputId?: string\n value?: string | null\n autoFocus?: boolean\n errorMessage: string | boolean\n backgroundColor?: string\n fontFamily?: string\n disabled?: boolean\n onSelection(suggestion: string | null): void\n}\n\nexport function AddressAutocomplete({\n id,\n inputId,\n value = null,\n errorMessage,\n onSelection,\n autoFocus,\n backgroundColor,\n fontFamily,\n disabled,\n}: AddressAutocompleteProps): JSX.Element {\n return (\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const FailedSaveMessageContainer = styled('div')({\n marginTop: '2rem',\n})\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '../../../../Components/NoticeBox'\nimport { FailedSaveMessageContainer } from './FailedSaveMessage.styles'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\nexport class FailedSaveMessage extends React.Component<{ showFailedMessage: boolean }> {\n private element: HTMLElement | null = null\n\n public componentDidUpdate() {\n // on error scrolls to the error\n if (this.element && this.element.scrollIntoView) {\n this.element.scrollIntoView()\n }\n }\n\n public render() {\n if (!this.props.showFailedMessage) {\n return null\n }\n\n return (\n {\n this.element = node\n }}\n >\n \n

    \n Please try again or call for assistance.\n

    \n \n \n )\n }\n}\n","import { createAddressMoniker } from '@mobi/utils/address'\nimport { createSignal, attachDriver, Signal } from 'rwwa-rx-state-machine'\nimport { TypedRecord, makeTypedFactory } from 'typed-immutable-record'\nimport { Address } from '@mobi/api-types'\nimport { ChangeResidentialAddress, ChangePostalAddress } from '../../driver'\n\nexport interface ManualAddressFields {\n unitNumber: string\n streetNumber: string\n streetName: string\n streetType: string | null\n suburb: string | null\n}\n\nexport type ManualAddressState = {\n isShown: boolean\n streetNumberHasError: boolean\n streetNameHasError: boolean\n streetTypeHasError: boolean\n suburbHasError: boolean\n isPostalAddress: boolean\n} & ManualAddressFields\n\nexport const defaultManualAddressState: ManualAddressState = {\n isShown: false,\n unitNumber: '',\n streetNumber: '',\n streetName: '',\n streetType: null,\n suburb: null,\n streetNumberHasError: false,\n streetNameHasError: false,\n streetTypeHasError: false,\n suburbHasError: false,\n isPostalAddress: false,\n}\n\nexport const ShowManualAddressForm = createSignal('ShowManualAddressForm')\nexport const ShowManualPostalAddressForm = createSignal('ShowManualPostalAddressForm')\nexport const CancelButtonClicked = createSignal('CancelButtonClicked')\nexport const SaveButtonClicked = createSignal('SaveButtonClicked')\nexport const ChangeFieldValue = createSignal<{\n field: keyof ManualAddressFields\n value: string | boolean\n}>('ChangeFieldValue')\nexport const ValidateManualAddressField = createSignal<{ field: keyof ManualAddressFields }>(\n 'ValidateManualAddressField'\n)\n\nexport interface ManualAddressStateRecord\n extends TypedRecord,\n ManualAddressState {}\nconst ManualAddressStateFactory = makeTypedFactory(\n defaultManualAddressState\n)\n\nexport function manualAddressDriver(\n state = ManualAddressStateFactory(),\n signal: Signal\n): ManualAddressStateRecord {\n switch (signal.tag) {\n case ShowManualAddressForm: {\n return state.merge({\n isShown: true,\n isPostalAddress: false,\n })\n }\n\n case ShowManualPostalAddressForm: {\n return state.merge({\n isShown: true,\n isPostalAddress: true,\n })\n }\n\n case SaveButtonClicked: {\n const validationErrors = validateFields(state)\n const hasError = anyFieldHasError(validationErrors)\n if (hasError) {\n return state.merge({\n ...validationErrors,\n })\n }\n\n if (state.isPostalAddress) {\n ChangePostalAddress({\n addressPostalMoniker: getManualAddressMoniker(state),\n addressPostal: getManualAddress(state) as Address,\n })\n } else {\n ChangeResidentialAddress({\n addressResidentialMoniker: getManualAddressMoniker(state),\n addressResidential: getManualAddress(state) as Address,\n })\n }\n\n return state.merge({\n ...defaultManualAddressState,\n })\n }\n\n case CancelButtonClicked: {\n return state.merge({\n ...defaultManualAddressState,\n })\n }\n\n case ChangeFieldValue: {\n const { field, value } = signal.data\n const newState = state.set(field, value)\n const validationErrors = validateSingleField(field, newState)\n return newState.merge({\n ...validationErrors,\n })\n }\n\n case ValidateManualAddressField: {\n const { field } = signal.data\n\n const validationErrors = validateSingleField(field, state)\n return state.merge({\n ...validationErrors,\n })\n }\n\n default:\n return state\n }\n}\n\ninterface FieldValidationErrors {\n streetNumberHasError: boolean\n streetNameHasError: boolean\n streetTypeHasError: boolean\n suburbHasError: boolean\n}\n\nexport function getErrorKey(field: keyof ManualAddressFields): keyof FieldValidationErrors | '' {\n switch (field) {\n case 'streetNumber':\n return 'streetNumberHasError'\n case 'streetName':\n return 'streetNameHasError'\n case 'streetType':\n return 'streetTypeHasError'\n case 'suburb':\n return 'suburbHasError'\n default:\n return ''\n }\n}\n\nexport function validateFields(newState: ManualAddressStateRecord): FieldValidationErrors {\n const streetNumber = newState.get('streetNumber')\n const streeName = newState.get('streetName')\n const streetType = newState.get('streetType')\n const suburb = newState.get('suburb')\n const isPostalAddress = newState.get('isPostalAddress')\n return {\n streetNumberHasError: !isPostalAddress && !streetNumber,\n streetNameHasError: !streeName,\n streetTypeHasError: !isPostalAddress && !streetType,\n suburbHasError: !suburb,\n }\n}\n\nexport function validateSingleField(\n field: keyof ManualAddressFields,\n state: ManualAddressStateRecord\n): Partial {\n switch (field) {\n case 'streetNumber':\n return { streetNumberHasError: !state.get('isPostalAddress') && !state.get(field) }\n case 'streetName':\n return { streetNameHasError: !state.get(field) }\n case 'streetType':\n return { streetTypeHasError: !state.get('isPostalAddress') && !state.get(field) }\n case 'suburb':\n return { suburbHasError: !state.get(field) }\n default:\n return {}\n }\n}\n\nexport function getManualAddressMoniker(state: ManualAddressStateRecord): string {\n return createAddressMoniker({\n unitNumber: state.get('unitNumber'),\n streetNumber: state.get('streetNumber'),\n streetName: state.get('streetName'),\n streetType: state.get('streetType'),\n suburb: state.get('suburb'),\n })\n}\n\nexport function getManualAddress(state: ManualAddressStateRecord): Partial
    {\n const UnitNumber = state.get('unitNumber', '')\n const StreetNumber = state.get('streetNumber')\n const StreetName = state.get('streetName')\n const StreetType = state.get('streetType')\n\n let Suburb\n let State\n let Postcode\n\n if (state.get('suburb')) {\n const suburbText = (state.get('suburb') as string).split(',')\n Suburb = suburbText[0] && suburbText[0].trim()\n State = suburbText[1] && suburbText[1].trim()\n Postcode = suburbText[2] && suburbText[2].trim()\n }\n\n return {\n UnitNumber,\n StreetNumber,\n StreetName,\n StreetType,\n Suburb,\n State,\n Postcode,\n Country: 'Australia',\n }\n}\n\nexport function anyFieldHasError(errors: FieldValidationErrors) {\n const { streetNumberHasError, streetNameHasError, streetTypeHasError, suburbHasError } = errors\n return streetNumberHasError || streetNameHasError || streetTypeHasError || suburbHasError\n}\n\nexport const state$ = attachDriver({\n path: 'manualAddress',\n driver: manualAddressDriver,\n})\n","import React from 'react'\nimport { Autocomplete } from '@core/Components/Autocomplete'\nimport { searchSuburbStatePostcodes } from '@mobi/account/Areas/SignUp/Data/Address'\n\nconst SuburbStatePostcodeAutosuggest = Autocomplete as new () => Autocomplete\n\nconst getSuggestionValue = (suggestion: string) => suggestion\n\nexport const fetchSuggestions = (inputValue: string) => {\n if (!inputValue.length) {\n return []\n }\n\n return searchSuburbStatePostcodes(inputValue).then(resp => resp.map(({ value }) => value))\n}\n\ninterface SuburbStatePostcodeAutocompleteProps {\n id: string\n inputId?: string\n value?: string | null\n autoFocus?: boolean\n errorMessage: string | boolean\n onSelection(suggestion: string | null): void\n onBlur?(): void\n}\n\nexport function SuburbStatePostcodeAutocomplete({\n id,\n inputId,\n value = null,\n errorMessage,\n onSelection,\n autoFocus,\n onBlur,\n}: SuburbStatePostcodeAutocompleteProps) {\n return (\n \n )\n}\n","import React from 'react'\nimport { Autocomplete } from '@core/Components/Autocomplete'\nimport { searchStreetTypes } from '@mobi/account/Areas/SignUp/Data/Address'\n\nconst StreetTypeAutosuggest = Autocomplete as new () => Autocomplete\n\nconst getSuggestionValue = (suggestion: string) => suggestion\n\nexport function fetchSuggestions(inputValue: string) {\n if (!inputValue.length) {\n return []\n }\n\n return searchStreetTypes(inputValue).then(resp => resp.map(({ value }) => value))\n}\n\ninterface StreetTypeAutocompleteProps {\n id: string\n inputId?: string\n value?: string | null\n autoFocus?: boolean\n errorMessage: string | boolean\n onSelection(suggestion: string | null): void\n onBlur?(): void\n}\n\nexport function StreetTypeAutocomplete({\n id,\n inputId,\n value = null,\n errorMessage,\n onSelection,\n autoFocus,\n onBlur,\n}: StreetTypeAutocompleteProps) {\n return (\n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const ManualAddressEntryFormStyled = styled('form')({\n textAlign: 'left',\n marginBottom: '1rem',\n})\n\nexport const ManualAddressEntryTitleStyled = styled('header')({\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: 2.5,\n textAlign: 'left',\n height: 'auto', // desktop override\n backgroundColor: 'white', // desktop override\n})\n","import React from 'react'\n\nimport {\n state$,\n ManualAddressFields,\n ChangeFieldValue,\n SaveButtonClicked,\n ManualAddressState,\n CancelButtonClicked,\n ValidateManualAddressField,\n} from './driver'\n\nimport { observeImmutable } from '../../../../Components/HOCs'\n\nimport { PopupContainerStyled, PopupStyled } from '../../../../Components/Popup/Popup.styles'\nimport { ButtonBlock, CloseButton } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { SuburbStatePostcodeAutocomplete } from './SuburbStatePostcodeAutocomplete'\nimport { StreetTypeAutocomplete } from './StreetTypeAutocomplete'\n\nimport {\n ManualAddressEntryFormStyled,\n ManualAddressEntryTitleStyled,\n} from './ManualAddressEntry.styles'\n\nimport { ContactDetailsEditLabelStyled } from '../../ContactDetails.styles'\n\nexport const ManualAddressEntry = observeImmutable(state$, ({ record }) => {\n return \n})\n\nfunction validateField(field: keyof ManualAddressFields) {\n return () => ValidateManualAddressField({ field })\n}\n\nexport function ManualAddressEntryComponent({\n unitNumber,\n streetNumber,\n isPostalAddress,\n streetName,\n streetType,\n suburb,\n streetNumberHasError,\n streetNameHasError,\n streetTypeHasError,\n suburbHasError,\n isShown,\n}: ManualAddressState) {\n if (!isShown) {\n return null\n }\n\n const disableSaveButton = isSaveButtonToBeDisabled({\n streetNumberHasError,\n streetNameHasError,\n streetTypeHasError,\n suburbHasError,\n })\n\n return (\n \n \n } />\n Manually Enter Your Address\n \n
    \n \n \n \n\n \n Street Type{isPostalAddress ? '' : '*'}\n \n \n\n \n Suburb*\n \n \n
    \n
    \n\n \n \n \n Cancel\n \n \n \n \n Save Address\n \n \n \n
    \n
    \n )\n}\n\nexport function changeUnitNumber(event: React.FormEvent): void {\n ChangeFieldValue({ field: 'unitNumber', value: event.currentTarget.value })\n}\n\nexport function changeStreetNumber(event: React.FormEvent) {\n ChangeFieldValue({ field: 'streetNumber', value: event.currentTarget.value })\n}\n\nexport function changeStreetName(event: React.FormEvent) {\n ChangeFieldValue({ field: 'streetName', value: event.currentTarget.value })\n}\n\nexport function changeStreetType(value: string) {\n ChangeFieldValue({ field: 'streetType', value })\n}\n\nexport function changeSuburb(value: string) {\n ChangeFieldValue({ field: 'suburb', value })\n}\n\nexport function isSaveButtonToBeDisabled({\n streetNumberHasError,\n streetNameHasError,\n streetTypeHasError,\n suburbHasError,\n}: {\n streetNumberHasError: boolean\n streetNameHasError: boolean\n streetTypeHasError: boolean\n suburbHasError: boolean\n}) {\n return streetNumberHasError || streetNameHasError || streetTypeHasError || suburbHasError\n}\n\nexport function getErrorMessage(\n field: keyof ManualAddressFields,\n isErrored: boolean\n): string | false {\n switch (field) {\n case 'streetNumber':\n return isErrored && 'Please enter a street number'\n case 'streetName':\n return isErrored && 'Please enter a street name'\n case 'streetType':\n return isErrored && 'Please enter a street type'\n case 'suburb':\n return isErrored && 'Please enter a suburb'\n default:\n return false\n }\n}\n","import React from 'react'\nimport { observeImmutable } from '../../../../Components/HOCs/observe'\nimport { state$ } from '../../driver'\nimport { NoticeBox } from '../../../../Components/NoticeBox/NoticeBox'\nimport { NoticeBoxTypes } from '../../../../Components/NoticeBox/NoticeBox.styles'\n\nexport const NameDateOfBirthChangedNotice = observeImmutable(state$, ({ record }) => {\n return (\n \n )\n})\n\nexport function NameDateOfBirthChangedNoticeComponent({\n nameDateOfBirthChanged,\n}: {\n nameDateOfBirthChanged: boolean\n}) {\n if (nameDateOfBirthChanged) {\n return (\n \n Please make sure your contact number is correct or update it before you select save.\n \n )\n }\n\n return null\n}\n","import React from 'react'\nimport { useHistory, useParams } from 'react-router-dom'\nimport { AdditionalDetails } from './Components/AdditionalDetails'\nimport { AddressAutocomplete } from './AddressAutocomplete'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { BetAccountKey, BetAccountRecord, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { connect } from '../../Components/HOCs/connect'\nimport { ContactDetailsReverificationSuccess } from '../Reverification/Components/ReverificationComplete'\nimport { ContentHeader } from '../../Components/ContentHeader'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\nimport { DesktopSpinner, Spinner } from '@mobi/component-library/Common/Spinner'\nimport { ErroredInstance, isErrored, isLoading, LoadingInstance } from 'rwwa-data-access'\nimport { ErrorMessage } from '../../Components/Messages'\nimport { FailedSaveMessage } from './Components/FailedSaveMessage/FailedSaveMessage'\nimport { getContactDetailsFields } from './data-transforms'\nimport { getFromRepo } from '@core/Utils/repository'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { MainContainer } from '../../Components/Containers'\nimport { ManualAddressEntry } from './Components/ManualAddressEntry'\nimport { NameDateOfBirthChangedNotice } from './Components/NameDateOfBirthChangedNotice/NameDateOfBirthChangedNotice'\nimport { navigateHistoryBack } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { observeImmutable } from '../../Components/HOCs/observe'\nimport { Reset } from '@core/Areas/ContactDetails/driver'\nimport { useBetAccount } from '@mobi/account/Areas/Deposit/Hooks'\nimport { useLogon } from '@core/Utils/hooks'\nimport {\n ContactDetails as ContactDetailsRepo,\n ContactDetailsKey,\n} from '../../Data/Account/contactDetails'\nimport type { BetAccountHolder } from '@mobi/api-types'\nimport {\n ShowManualAddressForm,\n ShowManualPostalAddressForm,\n} from './Components/ManualAddressEntry/driver'\n\nimport {\n state$,\n type ContactDetailsFields,\n type ContactDetailsStateRecord,\n ChangeValue,\n ChangeResidentialAddress,\n ChangePostalAddress,\n UpdateFields,\n SaveButtonClicked,\n type ContactDetailsState,\n isFieldValidationSuccess,\n ValidateField,\n} from './driver'\n\nimport {\n ContactDetailsContainer,\n ContactDetailsPreferredNameStyled,\n ContactDetailsItemStyled,\n ContactDetailsTitleLabelStyled,\n ContactDetailsEditLabelStyled,\n ContactDetailsManualAddressButton,\n} from './ContactDetails.styles'\n\nexport interface ContactEditDetailsProps {\n isDesktop?: boolean\n betAccountHolderNumber?: string | null\n navigateOnUpdateSuccess: () => void\n navigateOnUnverified: () => void\n}\n\nexport function ContactDetailsEditMobiWrapper() {\n const { accountNumber } = useParams<{ accountNumber?: string }>()\n const history = useHistory()\n\n return (\n history.push('/account/contactdetails')}\n navigateOnUnverified={() => history.push(AppRoutes.Verification)}\n />\n )\n}\n\nexport function ContactDetailsEdit({\n isDesktop,\n betAccountHolderNumber,\n navigateOnUpdateSuccess,\n navigateOnUnverified,\n}: ContactEditDetailsProps) {\n return (\n \n )\n}\n\nconst ConnectContactDetails = connect({\n contactDetails: ContactDetailsRepo,\n})(ContactDetailsEditLoader)\n\nexport function ContactDetailsEditLoader({\n contactDetails,\n isDesktop,\n navigateOnUpdateSuccess,\n navigateOnUnverified,\n}: {\n contactDetails: typeof LoadingInstance | typeof ErroredInstance | BetAccountHolder\n} & ContactEditDetailsProps) {\n const { accountNumber, isLoggedIn } = useLogon()\n const betAccountQuery = useBetAccount({\n enabled: accountNumber !== null && isLoggedIn === true,\n queryFn: () => getFromRepo(BetAccountRepo, BetAccountKey),\n onSuccess: ({ IsIDVerified: isIdVerified }) => {\n if (!isIdVerified) {\n navigateOnUnverified()\n }\n },\n })\n\n React.useEffect(() => Reset(), [])\n\n if (isLoading(contactDetails) || betAccountQuery.isLoading) {\n return isDesktop ? : \n }\n\n if (isErrored(contactDetails) || betAccountQuery.isError) {\n return An error occurred while loading your contact details.\n }\n\n // Catch non-verified users\n if (betAccountQuery.data?.IsIDVerified === false) {\n return null\n }\n\n const props = getContactDetailsFields(contactDetails)\n return (\n \n )\n}\n\ntype ContactDetailsEditSetupProps = ContactDetailsFields &\n Pick\n\nclass ContactDetailsEditSetup extends React.Component {\n public componentDidMount() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isDesktop, navigateOnUpdateSuccess, ...fields } = this.props\n UpdateFields(fields)\n }\n\n public render() {\n const { isDesktop, navigateOnUpdateSuccess } = this.props\n return (\n \n )\n }\n}\n\nconst ContactDetailsEditObserver = observeImmutable<\n ContactDetailsStateRecord,\n Pick &\n Pick\n>(state$, ({ record, isDesktop, navigateOnUpdateSuccess }) => {\n const state: ContactDetailsState = record.toJS()\n\n if (state.updateSuccess) {\n navigateOnUpdateSuccess()\n return null\n }\n\n return \n})\n\nconst changeAddressResidential = (value: string) =>\n ChangeResidentialAddress({ addressResidentialMoniker: value })\nconst changeAddressPostal = (value: string) => ChangePostalAddress({ addressPostalMoniker: value })\nconst changeAddressPostalSame = (event: React.FormEvent) =>\n ChangeValue({ field: 'addressPostalSame', value: event.currentTarget.checked })\nconst changeNameDateOfBirthChanged = (event: React.FormEvent) =>\n ChangeValue({ field: 'nameDateOfBirthChanged', value: event.currentTarget.checked })\nfunction changeInputField(field: keyof ContactDetailsFields) {\n return (event: React.FormEvent) =>\n ChangeValue({ field, value: event.currentTarget.value })\n}\nfunction blurInputField(field: keyof ContactDetailsFields) {\n return () => ValidateField({ field })\n}\n\nexport function ContactDetailsEditComponent({\n fullName,\n preferredName,\n dateOfBirth,\n email,\n phoneMobile,\n phoneHome,\n phoneWork,\n addressResidentialMoniker,\n addressPostalMoniker,\n addressPostalSame,\n validationErrors,\n updateFailed,\n loading,\n isAdditionalDetailsChanged,\n agreeToVerifyAdditionalDetails,\n isDesktop,\n nameDateOfBirthChanged,\n nameDateOfBirthChangedInitial,\n isInternationalCustomer,\n}: ContactDetailsState & Pick) {\n const fieldValidationSucceeded = isFieldValidationSuccess(\n addressPostalSame,\n isAdditionalDetailsChanged,\n !!agreeToVerifyAdditionalDetails,\n validationErrors\n )\n\n const nameDateOfBirthChangedMessage = isInternationalCustomer\n ? 'For name, date of birth or international address changes'\n : 'For name or date of birth changes'\n const nameDateOfBirthChangedLabel = (\n \n {nameDateOfBirthChangedMessage} please select the tick box and a customer representative will\n contact you. Alternatively call{' '}\n .\n \n )\n\n return (\n \n \n {!isDesktop && }\n \n {preferredName && (\n {preferredName}\n )}\n {fullName}\n\n Date of Birth\n {dateOfBirth}\n\n
    \n
    \n \n\n \n\n {isDesktop && (\n \n )}\n\n {isDesktop && (\n \n )}\n\n {isInternationalCustomer ? (\n \n ) : (\n \n )}\n\n \n
    \n
    \n\n \n\n \n\n \n\n \n \n \n Cancel\n \n \n \n \n Save\n \n {loading ? : null}\n \n \n\n \n
    \n
    \n )\n}\n\nfunction ReadonlyAddress({\n addressPostalSame,\n addressResidentialMoniker,\n addressPostalMoniker,\n}: Pick<\n ContactDetailsState,\n 'addressPostalSame' | 'addressResidentialMoniker' | 'addressPostalMoniker'\n>) {\n return (\n
    \n Residential Address\n {addressResidentialMoniker}\n\n {!addressPostalSame && (\n Postal Address\n )}\n {!addressPostalSame && (\n {addressPostalMoniker}\n )}\n
    \n )\n}\n\nfunction EditableAddress({\n addressPostalSame,\n addressResidentialMoniker,\n addressPostalMoniker,\n validationErrors,\n}: Pick<\n ContactDetailsState,\n 'addressPostalSame' | 'addressResidentialMoniker' | 'addressPostalMoniker' | 'validationErrors'\n>) {\n return (\n
    \n \n Manually Enter Address\n \n \n Residential Address*\n \n\n \n\n \n\n {addressPostalSame ? null : (\n \n Manually Enter Address\n \n )}\n {addressPostalSame ? null : (\n \n Postal address*\n \n )}\n {addressPostalSame ? null : (\n \n )}\n
    \n )\n}\n","import styled from '@emotion/styled'\nimport { greaterThan } from '@mobi/component-library/Utils/media'\n\nexport const CloseAccountContainerStyled = styled('div')({\n padding: '0 1rem',\n margin: '1rem 0 2rem',\n fontSize: '1.2rem',\n\n [greaterThan('xlarge')]: {\n fontSize: '1.4rem',\n },\n})\n\nexport const FieldSetStyled = styled('fieldset')({\n marginBottom: '1rem',\n})\n","import React from 'react'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { Heading } from '@core/Components/Text/Heading'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\nimport { ContactDetailsFields } from '@core/Areas/ContactDetails/driver'\nimport { PopupNoticeBox } from '@core/Components/PopupNoticeBox'\nimport { CloseAccountContainerStyled, FieldSetStyled } from './CloseAccount.styles'\nimport { navigateToLogout } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { CustomerServiceTelephone } from '@mobi/component-library/Common/V2'\n\nconst hoursBeforeMarketingStops = 72\nconst closeAccountButtonText = 'Close account and log out'\n\ninterface CheckBoxStates {\n pendingBets: boolean\n remainingFunds: boolean\n marketingMaterial: boolean\n loggedOut: boolean\n}\ninterface CloseAccountViewState {\n checkboxStates: CheckBoxStates\n confirmEnabled: boolean\n showError: boolean\n}\n\ntype CloseAccountViewProps = Pick & {\n isDesktop: boolean\n}\n\ninterface CloseBetAccountResponse {\n isSuccessful: boolean\n}\n\nexport class CloseAccountView extends React.Component<\n CloseAccountViewProps,\n CloseAccountViewState\n> {\n public static defaultProps = {\n isInternationalCustomer: false,\n isDesktop: false,\n }\n\n constructor(props: CloseAccountViewProps) {\n super(props)\n this.state = {\n checkboxStates: {\n pendingBets: false,\n remainingFunds: false,\n marketingMaterial: false,\n loggedOut: false,\n },\n confirmEnabled: false,\n showError: false,\n }\n }\n\n public componentDidUpdate(): void {\n if (this.state.showError) {\n window.scrollTo(0, 0)\n }\n }\n\n public render(): JSX.Element {\n const { isInternationalCustomer, isDesktop } = this.props\n\n return (\n \n {!isDesktop && }\n \n \n Before you choose to close your account, there are a few things you should know that\n will happen after your account closure.\n \n\n Pending Bets\n \n Pending bets will remain active and any winnings will be credited to your account.\n \n\n Withdrawals\n \n If any funds remain in your account after closure, you can only withdraw them by\n contacting TABtouch on{' '}\n .\n \n\n Marketing Communications\n \n You may continue to receive marketing material for up to {hoursBeforeMarketingStops}{' '}\n hours after closing your account.\n \n\n Please tick the boxes below to proceed.\n\n \n I understand that once my account is closed,\n \n\n
    \n \n \n \n remaining funds in my account can only be withdrawn by contacting TABtouch on{' '}\n .\n \n }\n required={true}\n onChange={this.onCheckboxChange('remainingFunds')}\n />\n \n \n \n \n Once the \"{closeAccountButtonText}\" button below is clicked, your account will be\n closed and you will be logged out immediately.\n \n \n {closeAccountButtonText}\n \n \n
    \n {this.state.showError && }\n
    \n )\n }\n\n private onFormSubmit(event: React.FormEvent) {\n event.preventDefault()\n }\n\n private onCloseAccountSubmit = () => {\n // Disable the confirm button to stop people from 'double-tapping' it.\n this.setState({ confirmEnabled: false })\n\n apiService\n .post({ url: '/$_/api/account/closebetaccount' })\n .then(response => {\n if (response.isSuccessful) {\n this.setState({ confirmEnabled: true })\n navigateToLogout({ isDesktop: this.props.isDesktop })\n } else {\n this.setState({ showError: true, confirmEnabled: true })\n }\n })\n .catch(() => {\n this.setState({ showError: true, confirmEnabled: true })\n })\n }\n\n private onCheckboxChange(field: keyof CheckBoxStates) {\n return (event: React.FormEvent) => {\n const checked = event.currentTarget.checked\n this.setState(state => {\n const checkboxStates = { ...state.checkboxStates, [field]: checked }\n const confirmEnabled =\n checkboxStates.pendingBets &&\n checkboxStates.remainingFunds &&\n checkboxStates.marketingMaterial &&\n checkboxStates.loggedOut\n return { checkboxStates, confirmEnabled }\n })\n }\n }\n\n private onPopupClose = () => {\n this.setState({ showError: false })\n }\n\n private ErrorPopupNoticeBox = () => {\n const { isInternationalCustomer } = this.props\n\n const subTitle = (\n \n \n We are experiencing technical difficulties that are stopping you from being able to close\n your account.\n \n \n Please try again or call the Customer Management Centre on{' '}\n .\n \n \n )\n\n return (\n \n {subTitle}\n \n )\n }\n}\n","import React from 'react'\nimport { LoadingInstance, ErroredInstance, isLoading, isErrored } from 'rwwa-data-access'\nimport { BetAccountHolder } from '@mobi/api-types'\nimport {\n ContactDetails as ContactDetailsRepo,\n ContactDetailsKey,\n} from '@core/Data/Account/contactDetails'\nimport { getContactDetailsFields } from '@core/Areas/ContactDetails/data-transforms'\nimport { connect } from '@core/Components/HOCs/connect'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { DesktopSpinner, Spinner } from '@mobi/component-library/Common/Spinner'\nimport { CloseAccountView } from './CloseAccountView'\n\nexport function CloseAccount({ isDesktop }: { isDesktop?: boolean }) {\n return \n}\n\nconst ConnectContactDetails: React.ComponentClass<{\n contactDetails: string\n isDesktop?: boolean\n}> = connect({ contactDetails: ContactDetailsRepo })<{ isDesktop?: boolean }>(CloseAccountLoader)\n\ninterface CloseAccountLoaderProps {\n contactDetails: typeof LoadingInstance | typeof ErroredInstance | BetAccountHolder\n isDesktop?: boolean\n}\n\nexport function CloseAccountLoader({ contactDetails, isDesktop }: CloseAccountLoaderProps) {\n if (isLoading(contactDetails)) {\n return isDesktop ? : \n }\n\n if (isErrored(contactDetails)) {\n return An error occurred while loading the \"Close Account\" page.\n }\n\n const { isInternationalCustomer } = getContactDetailsFields(contactDetails)\n return (\n \n )\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const ContentBodyStyled = styled('div')({\n margin: '0 1rem',\n})\n\nexport const GeneralSettingStyled = styled('div')({\n padding: '1rem 0',\n borderBottom: `1px solid ${hexColors.darkGrey}`,\n})\n\nexport const BiometricsPageSubHeaderStyled = styled('div')({\n fontWeight: 'bold',\n fontSize: '1.4rem',\n})\n","import React from 'react'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { useBiometricsStatus } from '@mobi/account/Areas/Verification/Biometrics/Hooks/useBiometricsStatus'\nimport {\n BiometricsPageSubHeaderStyled,\n ContentBodyStyled,\n GeneralSettingStyled,\n} from './BiometricsPage.styles'\nimport { BiometricsToggle } from '@mobi/account/Areas/Verification/Biometrics/Components/BiometricsToggle'\nimport { trackBiometricsToggle } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { sendToNative } from '@mobi/web-native-comms/web'\nimport styled from '@emotion/styled'\n\nexport function BiometricsPage(): JSX.Element {\n const testId = { 'data-tid-biometrics-page-container': '' }\n const { isBiometricsStatusReady, isBiometricsEnabled } = useBiometricsStatus()\n const isBiometricsToggleOn = isBiometricsStatusReady ? isBiometricsEnabled : false\n\n return (\n \n \n \n \n General Settings\n {\n \n {\n sendToNative('REQUEST_TOGGLE_BIOMETRICS')\n trackBiometricsToggle(keys.biometricsTogglePressed, {\n isEnabled: !isBiometricsToggleOn,\n })\n }}\n toggleTitle='Enable/Disable'\n />\n \n }\n \n \n \n )\n}\n\nconst BiometricsToggleWrapper = styled.div({\n '> div': { justifyContent: 'space-between' },\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { lessOrEqualThan } from '@mobi/component-library/Utils/media'\n\nexport const AccountListWrapperStyled = styled.div({\n padding: '0 0.5rem',\n marginBottom: '1.5rem',\n})\n\nexport const AccountListStyled = styled('ul')({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n})\n\nexport const AccountListItemStyled = styled('li')({\n width: 'calc(50% - 0.5px)',\n marginBottom: '1px',\n})\n\nexport const AccountLinkStyled = styled('a')({\n display: 'flex',\n alignItems: 'center',\n height: '5rem',\n margin: 0,\n padding: 0,\n\n fontWeight: 'bold',\n fontSize: '1.3rem',\n textDecoration: 'none',\n lineHeight: 1,\n color: hexColors.nightRider,\n background: hexColors.white,\n boxShadow: '0 1px 1px rgba(0,0,0,0.1)',\n\n '& > svg': {\n fontSize: '2rem',\n margin: '0 0.5rem',\n color: hexColors.lola,\n },\n\n [lessOrEqualThan('px350')]: {\n fontSize: '1.2rem',\n },\n})\n\nexport const AccountButtonStyled = styled(AccountLinkStyled)({\n width: '100%',\n border: 0,\n}).withComponent('button')\n\nexport const AccountBalanceStyled = styled.div({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n\n padding: '2rem 0 2rem 0.6rem',\n fontSize: '3rem',\n fontWeight: 'bold',\n\n '& > button': {\n padding: '0.5rem',\n marginLeft: '1rem',\n },\n})\n\nexport const BonusBalanceStyled = styled.div({\n display: 'flex',\n flexDirection: 'row',\n paddingBottom: '2rem',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '7em',\n})\n\nexport const BonusItemStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flex: '1',\n})\n\nexport const BonusBalanceTitleStyled = styled.div({\n textTransform: 'uppercase',\n fontSize: '1.3rem',\n fontWeight: 'bold',\n lineHeight: 1.2,\n color: hexColors.grey,\n})\n\nexport const BonusBalanceValueStyled = styled.div({\n color: hexColors.black,\n fontSize: '2rem',\n fontWeight: 'bold',\n paddingTop: '0.2em',\n})\n\nexport const AccountNumberBadgeStyled = styled('span')<{ isMaxCount?: boolean }>(\n {\n display: 'inline-block',\n marginLeft: 'auto',\n marginRight: '0.5rem',\n width: '2rem',\n minWidth: '2rem',\n height: '2rem',\n borderRadius: '50%',\n lineHeight: '2rem',\n textAlign: 'center',\n backgroundColor: hexColors.freeSpeechRed,\n color: hexColors.white,\n },\n ({ isMaxCount = false }) => ({\n fontSize: isMaxCount ? '1rem' : '1.2rem',\n ...(isMaxCount && {\n '&::after': {\n content: '\"+\"',\n letterSpacing: '-2px',\n },\n }),\n })\n)\n\nexport const AccountSubHeading = styled.div({\n color: hexColors.nero,\n fontSize: '1.3rem',\n fontWeight: 'bold',\n paddingBottom: '0.5rem',\n})\n","import { Link } from '@core/Components/Links'\nimport { ListUnstyled } from '@core/Components/List'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const DateContainer = styled.div({\n display: 'flex',\n marginBottom: '4em',\n width: '100%',\n\n '& > *:not(:first-of-type)': {\n marginLeft: '5px',\n },\n\n '& > *:not(:last-of-type)': {\n marginRight: '5px',\n },\n})\n\nexport const Heading = styled.h3({\n background: 'none',\n color: hexColors.black,\n fontWeight: 'bold',\n margin: 0,\n padding: 0,\n textTransform: 'none',\n})\n\nexport const ActivityStatementContainer = styled.div({\n padding: '0.75rem 0.5rem',\n})\n\nexport const ActivityStatementText = styled.p({\n fontSize: '1.2em',\n textAlign: 'left',\n})\n\nexport const ActivityStatementContactDetailsLink = styled(Link)({\n color: hexColors.pacificBlue,\n})\n\nexport const ActivityEmailList = styled(ListUnstyled)({\n fontSize: '1.2em',\n\n '& > li:not(:last-of-type)': {\n marginBottom: '1rem',\n },\n})\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const Select = styled.select({\n appearance: 'none',\n backgroundColor: hexColors.white,\n border: 'none',\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.15)',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n minWidth: '100px',\n paddingBottom: '6px',\n paddingTop: '6px',\n})\n\nexport const SelectContainer = styled.div({\n flex: '1 1 0%',\n position: 'relative',\n\n '&::after': {\n MozOsxFontSmoothing: 'grayscale',\n WebkitFontSmoothing: 'antialiased',\n color: hexColors.darkGrey,\n content: `'\\\\76'`,\n display: 'inline-block',\n flex: '1 1 0%',\n fontFamily: `'tticons'`,\n fontSize: '11px',\n pointerEvents: 'none',\n position: 'absolute',\n right: '3em',\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: '3',\n },\n\n '& select': {\n paddingLeft: '3em',\n paddingRight: '3em',\n width: '100%',\n },\n})\n","import { fetchFromApi, getPostParameters } from '@classic/Foundation/Services/ApiService'\nimport { CREATE_ACTIVITY_STATEMENT_PATH } from './constants'\n\nexport type ActivityStatementData = {\n accountNumber: number\n month: number\n year: number\n emailAddresses: string[]\n}\n\ntype CreateActivityStatementResponse = void\n\nexport async function createActivityStatement(\n body: ActivityStatementData\n): Promise {\n const response = await fetchFromApi(CREATE_ACTIVITY_STATEMENT_PATH, getPostParameters(body))\n if (response.status === 204) {\n throw new Error('No transactions')\n }\n}\n","import React, { PropsWithChildren } from 'react'\nimport { ActivityStatementContactDetailsLink } from '../ActivityStatement.styles'\nimport { trackActivityStatementsUpdateEmail } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\ninterface ContactDetailsLinkProps {\n accountNumber?: number\n}\n\nexport const ContactDetailsLink = ({\n accountNumber,\n children = 'here',\n}: PropsWithChildren): JSX.Element => {\n return (\n {\n if (accountNumber) trackActivityStatementsUpdateEmail(accountNumber)\n }}\n >\n {children}\n \n )\n}\n","import React from 'react'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { ContactDetailsLink } from './ContactDetailsLink'\n\ninterface Props {\n accountNumber?: number\n}\n\nexport const NoEmailAddress = ({ accountNumber }: Props): JSX.Element => {\n return (\n \n

    \n There are no email addresses on your account,{' '}\n click here to add one\n

    \n \n )\n}\n","import { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport React from 'react'\nimport { ActivityStatementContainer } from '../ActivityStatement.styles'\n\nconst CannotFetchData = (): JSX.Element => {\n return (\n \n \n\n \n \n \n \n )\n}\n\nexport default CannotFetchData\n","import Rx from 'rx'\nimport { BetAccountHolder } from '@mobi/api-types'\nimport { TypedRecord, recordify } from 'typed-immutable-record'\nimport { declareResourceType } from 'rwwa-data-access'\nimport * as apiService from '@classic/Foundation/Services/ApiService'\nimport { HasLoggedIn } from '@core/State/UserAccount/userAccountDriver'\n\nexport type AccountHolder = BetAccountHolder\n\nexport interface AccountHolders {\n primaryAccountHolder: AccountHolder\n secondaryAccountHolder: AccountHolder | null\n}\n\ninterface AccountHoldersRecord extends TypedRecord, AccountHolders {}\n\nconst AccountHoldersTypeKey = 'accountHolders'\nexport const AccountHoldersKey = 'all'\n\nexport const AccountHolders = declareResourceType({\n typeKey: AccountHoldersTypeKey,\n // @ts-expect-error Legacy - use better data management solution\n fetchMultipleNoPromise,\n hardTimeToLive: 120000, // 2 minutes\n map: x => recordify(x as AccountHolders),\n})\n\nfunction fetchMultipleNoPromise(keys: string[]) {\n return Rx.Observable.fromPromise(\n fetchAccountHolders()\n .then(response => ({\n [AccountHoldersTypeKey]: {\n [AccountHoldersKey]: response,\n },\n }))\n .then(result => ({ keys, result }))\n .catch(error => ({ keys, error }))\n )\n}\n\nfunction fetchAccountHolders() {\n return apiService.get({ url: `/$_/api/account/accountHolders` })\n}\n\n// @ts-expect-error Legacy - use better data management solution\nHasLoggedIn.signal$.subscribe(() => AccountHolders.hardInvalidate(null, AccountHoldersKey))\n","import { useQueries } from 'react-query'\nimport { getFromRepo } from '@core/Utils/repository'\nimport { AccountHolders, AccountHoldersKey } from '@core/Data/Account/accountHolder'\nimport { BetAccountKey, BetAccountRepo } from '@core/Data/Account/betAccount'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport const useActivityStatementQueries = (\n accountNumber: number | undefined | null,\n isFeatureActive = true\n) => {\n return useQueries([\n {\n queryKey: [queryKeys.activityStatementsAccountHolders, accountNumber],\n queryFn: () => getFromRepo(AccountHolders, AccountHoldersKey),\n enabled: isFeatureActive && !!accountNumber,\n cacheTime: 0, // fallback on rwwa-data-access cache\n },\n {\n queryKey: [queryKeys.activityStatementsAccountDetails, accountNumber],\n queryFn: () => getFromRepo(BetAccountRepo, BetAccountKey),\n enabled: isFeatureActive && !!accountNumber,\n cacheTime: 0, // fallback on rwwa-data-access cache\n },\n ])\n}\n","import React, { useRef, useMemo, useState } from 'react'\nimport { useMutation } from 'react-query'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { useLogon, useFeature } from '@core/Utils/hooks'\nimport { months } from '@mobi/utils'\nimport {\n ActivityEmailList,\n ActivityStatementContainer,\n ActivityStatementText,\n DateContainer,\n Heading,\n} from './ActivityStatement.styles'\nimport { Select, SelectContainer } from './Components/Select.styles'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport type { Month } from '@mobi/utils'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { dayjs } from '@mobi/utils'\nimport { ActivityStatementData, createActivityStatement } from './api'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n trackActivityStatementRequestFailure as trackFailure,\n trackActivityStatementRequestSubmitted as trackSubmitted,\n trackActivityStatementRequestSuccess as trackSuccess,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { NoEmailAddress } from './Components/NoEmailAddress'\nimport CannotFetchData from './Components/CannotFetchData'\nimport { useActivityStatementQueries as useQueries } from './Hooks/useActivityStatementQueries'\nimport { AccountHolders } from '@core/Data/Account/accountHolder'\nimport { ContactDetailsLink } from './Components/ContactDetailsLink'\n\nexport const ActivityStatements = (): JSX.Element => {\n function onStatementSubmit(): void {\n const currentMonth = +(month.current?.value ?? 0)\n\n const canSubmit =\n !!accountNumber && isDateValid(year, currentMonth) && selectedEmailAddresses.length > 0\n\n if (canSubmit) {\n trackSubmitted(accountNumber, currentMonth, year, selectedEmailAddresses)\n\n submit.mutate({\n accountNumber,\n emailAddresses: selectedEmailAddresses,\n month: currentMonth,\n year,\n })\n }\n }\n\n function onUpdateSelectedEmailAddresses(email: string, selected: boolean): void {\n const newSelections = new Set(selectedEmailAddresses)\n if (selected) {\n newSelections.add(email)\n } else {\n newSelections.delete(email)\n }\n setSelectedEmailAddresses(Array.from(newSelections))\n submit.reset()\n }\n\n const { accountNumber } = useLogon()\n\n const [selectedEmailAddresses, setSelectedEmailAddresses] = useState([])\n const month = useRef(null)\n const today = dayjs()\n const [year, setYear] = useState(today.year())\n\n const isFeatureActive = useFeature('NCPF_ACTIVITY_STATEMENTS') || false\n\n const [accountHoldersQuery, betAccountQuery] = useQueries(accountNumber, isFeatureActive)\n\n const validMonths = useMemo(() => {\n if (!betAccountQuery.data) return months\n\n const betAccountDetails = betAccountQuery.data\n const accountCreationDate = dayjs(betAccountDetails.AccountCreationDate)\n\n const filters: ((month: Month) => boolean)[] = []\n\n // When the selected year is the year the account was created in\n // then we need to filter out every month that comes before it\n if (year === accountCreationDate.year()) {\n filters.push(({ number }) => number >= accountCreationDate.month() + 1)\n }\n\n // When the selected year is the current year then we need\n // to remove every month that comes after the current\n if (year === today.year()) {\n filters.push(({ number }) => number <= today.month() + 1)\n }\n\n return filters\n .reduce((months, filter) => {\n return months.filter(filter)\n }, months.slice())\n .reverse()\n }, [betAccountQuery.data, today, year])\n\n const years = useMemo(() => {\n const betAccountDetails = betAccountQuery.data\n return betAccountDetails\n ? Array.from(\n range(dayjs(betAccountDetails.AccountCreationDate).year(), today.year())\n ).reverse()\n : []\n }, [betAccountQuery.data, today])\n\n const submit = useMutation(createActivityStatement, {\n onSuccess: (_, data) => {\n trackSuccess(data.accountNumber, data.month, data.year, data.emailAddresses)\n },\n onError: (error, data) => {\n if (error.message !== 'No transactions') {\n trackFailure(data.accountNumber, data.month, data.year, data.emailAddresses)\n }\n },\n })\n\n if (!accountNumber || accountHoldersQuery.isLoading || betAccountQuery.isLoading) {\n return \n }\n\n if (accountHoldersQuery.isError || betAccountQuery.isError) {\n return \n }\n\n const availableEmailAddresses = getEmailAddresses(accountHoldersQuery.data)\n\n return (\n \n \n\n \n {submit.isSuccess && !submit.isLoading && (\n \n

    \n Your activity statement will be sent to {selectedEmailAddresses[0]}\n {selectedEmailAddresses.length > 1 && (\n <>\n {' '}\n and {selectedEmailAddresses[1]}\n \n )}\n

    \n \n )}\n\n {submit.isError && !submit.isLoading && submit.error?.message === 'No transactions' && (\n \n )}\n\n {submit.isError && !submit.isLoading && submit.error?.message !== 'No transactions' && (\n \n )}\n\n \n You can view a detailed report of your TABtouch account activity by sending an Activity\n Statement to your registered email address (listed below).\n \n\n \n Activity statements can be provided for any month you have used your TABtouch account.\n Select the month and year you are interested in and an email will be sent once you have\n confirmed your dates.\n \n\n \n If you wish to add or update your email address please do so \n \n\n \n Activity statements provide you with information on your wagering activity, transactions,\n account balances and win/loss outcome.\n \n\n \n Your statement will be sent once details confirmed.\n \n\n {availableEmailAddresses.length === 0 && }\n\n {availableEmailAddresses.length > 0 && (\n <>\n Send email to:\n\n \n {availableEmailAddresses.map(email => (\n
  • \n \n
  • \n ))}\n
    \n\n Select Statement Period\n\n \n \n submit.reset()}\n >\n {validMonths.map(({ number, name }) => (\n \n ))}\n \n \n\n \n {\n setYear(parseInt(e.target.value))\n submit.reset()\n }}\n data-testid='year'\n disabled={submit.isLoading}\n >\n {years.map(year => (\n \n ))}\n \n \n \n\n \n Send Activity Statement\n \n \n )}\n
    \n
    \n )\n}\n\nfunction isDateValid(year: number, month: number): boolean {\n const selected = dayjs(new Date(year, month - 1)) // Date month is 0-indexed\n return selected.isSameOrBefore(dayjs(), 'month')\n}\n\nfunction getEmailAddresses(accountHolders?: AccountHolders): string[] {\n const emails = []\n if (accountHolders?.primaryAccountHolder?.Contact?.Email) {\n emails.push(accountHolders.primaryAccountHolder.Contact.Email)\n }\n if (accountHolders?.secondaryAccountHolder?.Contact?.Email) {\n emails.push(accountHolders.secondaryAccountHolder.Contact.Email)\n }\n return emails\n}\n\nfunction* range(from: number, to: number): Generator {\n for (let year = from; year <= to; year++) yield year\n}\n","import React from 'react'\nimport { FeatureFlags, Constants } from '@mobi/settings'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { close as modalClose } from '@classic/AppUtils/Framework/Intent/modal'\nimport {\n AccountListStyled as List,\n AccountListItemStyled as Item,\n AccountLinkStyled as Link,\n AccountButtonStyled as LinkButton,\n AccountNumberBadgeStyled as Badge,\n AccountBalanceStyled,\n BonusBalanceStyled,\n AccountListWrapperStyled as ListWrapper,\n AccountSubHeading as SubHeading,\n BonusBalanceTitleStyled,\n BonusBalanceValueStyled,\n BonusItemStyled,\n} from './Account.styles'\nimport { MainContainerStyled } from '@core/Components/Containers/MainContainer.styles'\nimport { Button } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useGetAccountDetails } from './helpers/useGetAccountDetails'\nimport { InvalidateAccountDetails } from './driver'\nimport { debounceFn } from '@mobi/utils'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { FeatureFlag } from '@core/State/LaunchDarklyFeatures/Components/FeatureFlag'\nimport { TAKE_A_BREAK_ROUTE } from '@core/Areas/Account/TakeABreak/constants'\nimport { openDeposit } from '@core/Areas/Deposit'\nimport { useObservableImmutable, useFeature } from '@core/Utils/hooks'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport { Money } from '@core/Components/Text/Money'\nimport { ACTIVITY_STATEMENTS_ROUTE } from './ActivityStatements'\nimport { trackActivityStatementsSelected } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\n\nconst invalidateAccountDetailsDebounced = debounceFn(InvalidateAccountDetails, 1000)\n\nexport const Account = (): JSX.Element | null => {\n const isNewWithdrawFeatureActive = useFeature('WITHDRAW_UPLIFT')\n const [isLoading, setIsLoading] = React.useState(true)\n const { accountNumber, bonusBetBalance, bonusCashBalance } = useObservableImmutable(\n userAccountState$,\n ['accountNumber', 'bonusBetBalance', 'bonusCashBalance']\n )\n\n React.useEffect(() => {\n // Deposit Modal - Update Balance On Close\n const legacyModalSubscription = modalClose.signal$.subscribe(InvalidateAccountDetails)\n return () => {\n legacyModalSubscription.dispose()\n }\n }, [])\n\n const {\n balance,\n blackBookAlertCount = 0,\n activeCampaignsCount = 0,\n } = useGetAccountDetails(true)?.toJS() || {}\n\n React.useEffect(() => {\n if (balance) setIsLoading(false)\n }, [balance])\n\n const handleRefresh = () => {\n setIsLoading(true)\n invalidateAccountDetailsDebounced()\n }\n\n const bonusCash = bonusCashBalance ?? 0\n const bonusBet = bonusBetBalance ?? 0\n\n return (\n \n \n\n \n \n {isLoading ? : balance}\n \n openDeposit()}\n aria-label='Deposit'\n >\n \n \n \n\n {!isLoading && (\n \n {bonusBet > 0 && (\n \n {'Bonus Bets'}\n \n \n \n \n )}\n\n {bonusCash > 0 && (\n \n {'Bonus Cash'}\n \n \n \n \n )}\n \n )}\n\n \n Racing\n \n \n \n Pending Bets\n \n \n\n \n \n Resulted Bets\n \n \n \n \n \n Sports\n \n \n \n Pending Bets\n \n \n\n \n \n Resulted Bets\n \n \n \n \n\n \n Account\n \n \n openDeposit()}>\n Deposit\n \n \n\n \n \n Withdraw\n \n \n\n \n \n Credits / Debits\n \n \n\n {activeCampaignsCount > 0 && (\n \n \n Bonus Offers {activeCampaignsCount}\n \n \n )}\n\n \n \n Blackbook{' '}\n {blackBookAlertCount > 0 && {blackBookAlertCount}}\n \n \n\n \n {!isNewWithdrawFeatureActive && (\n \n Bank Account\n \n )}\n \n \n \n\n \n Responsible Wagering\n \n \n \n Deposit Limits\n \n \n\n \n \n Bet Limits\n \n \n\n \n \n trackActivityStatementsSelected(accountNumber as number)}\n >\n Activity Statements\n \n \n \n\n \n \n \n Take a Break\n \n \n \n\n \n \n Close Account\n \n \n \n \n\n \n Details\n \n \n \n Change Password\n \n \n \n \n Settings\n \n \n \n \n Contact Details\n \n \n \n \n Subscription\n \n \n {isReactNativeApp && (\n \n \n Enable PIN/Biometrics\n \n \n )}\n \n \n Contact Us\n \n \n \n {\n trackOptimoveEvent({\n eventName: 'set_page_visit',\n data: {\n customURL: '/',\n pageTtile: 'HELP',\n },\n })\n }}\n href='https://help.tabtouch.com.au/'\n data-tid-my-account-help\n rel='noopener'\n target='_blank'\n >\n Help & Info\n \n \n \n \n\n

    \n Gamble responsibly.
    Call Gambling Help on {Constants.GamblingHelpPhoneNumber}.\n

    \n
    \n )\n}\n","import React, { useRef } from 'react'\nimport { GridCell } from '@mobi/component-library/Common/Grid'\nimport { observeImmutable } from '@core/Components/HOCs/observe'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport {\n state$ as userState$,\n Campaign,\n UserAccountState,\n UserAccountStateRecord,\n} from '@core/State/UserAccount/userAccountDriver'\nimport { FaqContainerStyled, FaqLinkStyled, NothingToShowStyled } from '../BetOfferPage.styles'\nimport { BetOfferItem } from './BetOfferItem'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\n\ntype BetOffersProps = Pick & {\n handleCampaignClick: (campaign: Campaign) => void\n}\n\nexport const BetOffersInternal = (data: BetOffersProps): JSX.Element | null => {\n const [loadFailed, setLoadFailed] = React.useState(false)\n const timeoutRef = useRef()\n\n React.useEffect(() => {\n trackOptimoveEvent({\n eventName: 'visited_and_has_bonus_offer',\n data: { has_bonus_offer: !!(data.campaigns && data.campaigns.count() > 0) },\n })\n }, [data.campaigns])\n\n React.useEffect(() => {\n setLoadFailed(false)\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [data.campaigns])\n\n if (!data.isLoggedIn) {\n return null\n }\n\n if (!data.campaigns || data.campaigns.count() === 0) {\n if (loadFailed) {\n return No offers available.\n }\n\n timeoutRef.current = setTimeout(() => {\n setLoadFailed(true)\n }, 5000)\n\n return (\n \n \n \n )\n }\n\n const offers = data.campaigns\n .toArray()\n .map(campaign => (\n \n ))\n\n return (\n
    \n {offers}\n {offers && (\n \n \n \n Frequently Asked Questions\n \n \n \n )}\n
    \n )\n}\n\nexport const BetOffers = observeImmutable<\n UserAccountStateRecord,\n { handleCampaignClick: (campaign: Campaign) => void }\n>(userState$, ({ record, handleCampaignClick }) => {\n return (\n \n )\n})\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Campaign } from '@core/State/UserAccount/userAccountDriver'\nimport { BetOffers } from './Components/BetOffers'\nimport { getRaceUrl } from '../helpers/getRaceUrl'\nimport { fetchCampaignsAsync } from '@core/State/UserAccount/async-signals'\nimport { useIsAuthenticated } from '@core/Utils/hooks/useIsAuthenticated'\nimport { openDeposit } from '@core/Areas/Deposit'\n\nexport const BetOfferPage: React.FC = () => {\n const history = useHistory()\n const isAuthenticated = useIsAuthenticated()\n\n React.useEffect(() => {\n if (isAuthenticated) fetchCampaignsAsync()\n }, [isAuthenticated])\n\n const handleCampaignClick = (campaign: Campaign) => {\n if (campaign.triggerType === 'AccountDepositTrigger' && campaign.isLive) openDeposit()\n else history.push(getRaceUrl(campaign))\n }\n\n return (\n \n \n \n \n )\n}\n","import { postLogout } from '@core/Areas/Login/helpers'\nimport React from 'react'\n\nexport const Logout = () => {\n React.useEffect(() => {\n postLogout()\n }, [])\n\n return null\n}\n","import styled from '@emotion/styled'\nimport { InputBoxStyled } from '@mobi/component-library/Common/Input'\nimport { Heading } from '@core/Components/Text/Heading'\nimport { hexColors } from '@mobi/settings/src/hexColors'\n\nexport const HeaderStyled = styled(Heading)(\n {\n margin: 0,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n textTransform: 'uppercase',\n paddingTop: '0.5em',\n paddingBottom: '0.5em',\n },\n ({ level }) => ({\n level: level || 3,\n })\n)\n\nexport const InfoHeaderStyled = styled(HeaderStyled)(\n {\n margin: 0,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n textTransform: 'uppercase',\n svg: {\n margin: 'auto',\n },\n },\n () => ({\n level: 3,\n })\n)\n\nexport const BoldedInputBoxStyled = styled(InputBoxStyled)({\n background: hexColors.gainsboro,\n fontWeight: 'bold',\n fontSize: '1.5rem',\n})\n\nexport const ParagraphStyled = styled('p')({\n textAlign: 'left',\n fontSize: '1.2rem',\n lineHeight: '1.5em',\n})\n\nexport const FieldHeaderStyled = styled('div')({\n color: hexColors.dimGrey,\n fontSize: '1.2rem',\n})\n\nexport const ReadOnlyFieldStyled = styled('div')({\n fontSize: '1.8rem',\n paddingBottom: '0.75rem',\n borderBottom: '1px solid ' + hexColors.veryLightGrey,\n marginTop: '0.5rem',\n marginBottom: '0.75rem',\n})\n\nexport const PaddingStyled = styled('div')({\n padding: '1rem',\n})\n\nexport const CreditCardBlockStyled = styled('div')({\n margin: '1em',\n})\n\nexport const NoticeBoxStyled = styled('div')({\n margin: '2em 0 1em 0',\n})\n","import React from 'react'\nimport { useMutation } from 'react-query'\nimport dayjs from 'dayjs'\n\nimport { post } from '@classic/Foundation/Services/ApiService'\n\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n PopupContainerStyled,\n PopupStyled,\n PopupTitleStyled,\n} from '@core/Components/Popup/Popup.styles'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\n\nimport { hexColors } from '@mobi/settings'\n\nimport {\n InfoHeaderStyled,\n FieldHeaderStyled,\n ReadOnlyFieldStyled,\n BoldedInputBoxStyled,\n PaddingStyled,\n} from './Precommitment.styles'\nimport type { PrecommitmentResponse } from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\nimport { DEFAULT_COOLING_OFF_PERIOD_DAYS, PRECOMMITMENT_API_PATH_PREFIX } from './constants'\nimport { toMoney } from '@mobi/utils/money'\n\nconst DEFAULT_MAX_BET_LIMIT = 999999\nconst DEFAULT_MIN_BET_LIMIT = 1\n\nconst CONFIRM_BET_LIMIT_URL = `${PRECOMMITMENT_API_PATH_PREFIX}UpdateBetLimit`\nconst OPT_OUT_BET_LIMIT_URL = `${PRECOMMITMENT_API_PATH_PREFIX}OptOutBetLimit`\n\nconst scrollToInfo = (evt: React.MouseEvent) => {\n document.getElementById('#bet-limit-info')?.scrollIntoView()\n evt.preventDefault()\n}\n\nexport const PrecommitmentBetLimit = ({\n data,\n hasDataFetchFailed,\n}: {\n data: PrecommitmentResponse | undefined\n hasDataFetchFailed: boolean\n}): JSX.Element => {\n const [isEditPopupShowing, setIsEditPopupShowing] = React.useState(false)\n const [isRemovalPopupShowing, setIsRemovalPopupShowing] = React.useState(false)\n const [precommitmentDetails, setPrecommitmentDetails] = React.useState(data)\n const [hasBetLimitBeenSuccessfullyChanged, setHasBetLimitBeenSuccessfullyChanged] =\n React.useState(false)\n\n React.useEffect(() => {\n setPrecommitmentDetails(data)\n }, [data])\n\n React.useLayoutEffect(() => {\n if (isEditPopupShowing || isRemovalPopupShowing) setHasBetLimitBeenSuccessfullyChanged(false)\n }, [isEditPopupShowing, isRemovalPopupShowing, setHasBetLimitBeenSuccessfullyChanged])\n\n const isBetLimitPendingRemoval = React.useCallback(\n () =>\n precommitmentDetails?.ProposedBetLimit?.ActiveDate &&\n !precommitmentDetails?.ProposedBetLimit?.Amount,\n [precommitmentDetails]\n )\n\n const canRemoveBetLimit = React.useCallback(\n () => precommitmentDetails?.BetLimit && !isBetLimitPendingRemoval(),\n [precommitmentDetails?.BetLimit, isBetLimitPendingRemoval]\n )\n\n return (\n
    \n {isEditPopupShowing && (\n setIsEditPopupShowing(false)}\n setPrecommitmentDetails={setPrecommitmentDetails}\n setHasBetLimitBeenSuccessfullyChanged={setHasBetLimitBeenSuccessfullyChanged}\n />\n )}\n {isRemovalPopupShowing && (\n setIsRemovalPopupShowing(false)}\n setPrecommitmentDetails={setPrecommitmentDetails}\n />\n )}\n \n Single Bet Limit\n \n \n \n \n \n {hasDataFetchFailed && (\n \n )}\n {!hasDataFetchFailed && (\n <>\n {hasBetLimitBeenSuccessfullyChanged &&\n !precommitmentDetails?.ProposedBetLimit?.ActiveDate && (\n \n )}\n {precommitmentDetails?.ProposedBetLimit?.ActiveDate && (\n \n Your single bet limit{' '}\n {isBetLimitPendingRemoval() ? (\n <>\n will be{' '}\n removed on {precommitmentDetails.ProposedBetLimit.ActiveDate}\n \n ) : (\n <>\n increase to ${precommitmentDetails.ProposedBetLimit.Amount} will be{' '}\n effective on {precommitmentDetails.ProposedBetLimit.ActiveDate}\n \n )}\n , after the mandatory cooling off period.\n \n )}\n Single Bet Limit\n \n {precommitmentDetails?.BetLimit ? `$${precommitmentDetails.BetLimit}` : 'No Limit'}\n \n \n \n {canRemoveBetLimit() && (\n \n setIsRemovalPopupShowing(true)}\n >\n Remove Limit\n \n \n )}\n \n setIsEditPopupShowing(true)}\n >\n Edit Limit\n \n \n \n \n \n )}\n \n \n )\n}\n\nconst EditPopup = ({\n existingBetLimit,\n maxBetLimit,\n minBetLimit,\n coolingOffPeriodDays,\n coolingOffDate,\n hidePopup,\n setPrecommitmentDetails,\n setHasBetLimitBeenSuccessfullyChanged,\n}: {\n existingBetLimit?: number\n maxBetLimit: number\n minBetLimit: number\n coolingOffPeriodDays: number\n coolingOffDate?: string\n hidePopup: () => void\n setPrecommitmentDetails: (x: PrecommitmentResponse) => void\n setHasBetLimitBeenSuccessfullyChanged: (x: boolean) => void\n}) => {\n const [newBetLimit, setNewBetLimit] = React.useState('')\n const [hasAgreed, setHasAgreed] = React.useState(false)\n\n const newBetLimitRef = React.useRef(null)\n\n React.useEffect(() => {\n if (newBetLimitRef.current) {\n newBetLimitRef.current.focus()\n }\n }, [])\n\n const editNewBetLimit = React.useCallback(\n (evt: React.ChangeEvent) => {\n // Remove all non-number characters.\n const attemptedNewValue = parseFloat(evt.target.value.replace(/[^0-9.-]/g, ''))\n if (isNaN(attemptedNewValue) || attemptedNewValue < 1) {\n setNewBetLimit('')\n return\n }\n\n if (attemptedNewValue < minBetLimit) {\n setNewBetLimit(minBetLimit.toString())\n return\n }\n\n if (attemptedNewValue > maxBetLimit) {\n setNewBetLimit(maxBetLimit.toString())\n return\n }\n\n setNewBetLimit(Math.trunc(attemptedNewValue).toString())\n },\n [maxBetLimit, minBetLimit]\n )\n\n const mutation = useMutation(\n () =>\n post({\n url: CONFIRM_BET_LIMIT_URL,\n body: newBetLimit,\n }),\n {\n onSuccess: data => {\n hidePopup()\n setPrecommitmentDetails(data)\n setHasBetLimitBeenSuccessfullyChanged(true)\n },\n }\n )\n\n return (\n \n \n {mutation.isLoading && }\n \n \n \n Edit Single Bet Limit\n \n \n {mutation.isError && (\n \n \n \n )}\n \n \n Set the dollar amount you wish to be the limit of a single bet:\n \n \n \n \n \n \n \n By proceeding:\n \n \n \n \n I understand that once my bet limit is set, there will be a {coolingOffPeriodDays} day\n cooling off period should I choose to increase the amount or frequency of the limit.\n Any limit decrease will be effective immediately.\n \n \n {existingBetLimit && newBetLimit && parseInt(newBetLimit) > existingBetLimit && (\n \n \n \n Your single bet limit increase will be{' '}\n \n effective on{' '}\n {coolingOffDate ||\n dayjs().add(coolingOffPeriodDays, 'days').format('DD/MM/YYYY')}\n \n , after the mandatory cooling off period.\n \n \n \n )}\n \n setHasAgreed(x.target.checked)}\n data-tid-confirm=''\n />\n \n \n \n \n Cancel\n \n \n \n mutation.mutate()}\n >\n Save\n \n \n \n \n \n \n )\n}\n\nconst RemovalPopup = ({\n coolingOffPeriodDays,\n coolingOffDate,\n hidePopup,\n setPrecommitmentDetails,\n}: {\n existingBetLimit?: number\n coolingOffPeriodDays: number\n coolingOffDate?: string\n hidePopup: () => void\n setPrecommitmentDetails: (x: PrecommitmentResponse) => void\n}) => {\n const [hasAgreed, setHasAgreed] = React.useState(false)\n\n const mutation = useMutation(\n () =>\n post({\n url: OPT_OUT_BET_LIMIT_URL,\n }),\n {\n onSuccess: data => {\n hidePopup()\n setPrecommitmentDetails(data)\n },\n }\n )\n\n return (\n \n \n {mutation.isLoading && }\n \n \n \n \n Remove Single Bet Limit\n \n \n \n {mutation.isError && (\n \n \n \n )}\n \n \n Your single bet limit will be{' '}\n \n removed on{' '}\n {coolingOffDate || dayjs().add(coolingOffPeriodDays, 'days').format('DD/MM/YYYY')}\n \n , after the mandatory cooling off period.\n \n \n \n setHasAgreed(x.target.checked)}\n data-tid-confirm=''\n />\n \n \n \n \n Cancel\n \n \n \n mutation.mutate()}\n >\n Save\n \n \n \n \n \n \n )\n}\n","import { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport React, { type FC } from 'react'\nimport { CreditCardBlockStyled, InfoHeaderStyled, NoticeBoxStyled } from './Precommitment.styles'\nimport { useMutation } from 'react-query'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { Grid, GridCell, GridRow } from '@mobi/component-library/Common/Grid'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport {\n PopupContainerStyled,\n PopupStyled,\n PopupTitleStyled,\n} from '@core/Components/Popup/Popup.styles'\nimport type { PrecommitmentResponse } from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\nimport { DEFAULT_COOLING_OFF_PERIOD_DAYS, PRECOMMITMENT_API_PATH_PREFIX } from './constants'\nimport { post } from '@classic/Foundation/Services/ApiService'\nimport dayjs from 'dayjs'\n\nconst BLOCK_CREDIT_CARD_URL = `${PRECOMMITMENT_API_PATH_PREFIX}UpdateCreditCardDeposits`\n\nexport const PrecommitmentCreditCardBlock = ({\n data,\n hasDataFetchFailed,\n}: {\n data: PrecommitmentResponse | undefined\n hasDataFetchFailed: boolean\n}): JSX.Element => {\n const [isPopupShowing, setIsPopupShowing] = React.useState(false)\n const [precommitmentDetails, setPrecommitmentDetails] = React.useState(data)\n\n React.useEffect(() => {\n setPrecommitmentDetails(data)\n }, [data])\n\n return (\n
    \n {isPopupShowing && (\n \n )}\n Block Debit Card\n \n {hasDataFetchFailed && (\n \n )}\n {!hasDataFetchFailed && (\n <>\n \n setIsPopupShowing(true)}\n >\n {precommitmentDetails?.BlockCreditCardDeposits\n ? precommitmentDetails?.ProposedCreditCardReleaseDate\n ? 'Cancel Unblock'\n : 'Remove Block'\n : 'Block'}\n \n \n )}\n \n \n )\n}\n\ntype CardBlockPopupProps = {\n setIsPopupShowing: (x: boolean) => void\n setPrecommitmentDetails: (x: PrecommitmentResponse) => void\n precommitmentDetails?: PrecommitmentResponse\n}\n\nconst CardBlockPopup: FC = ({\n setIsPopupShowing,\n setPrecommitmentDetails,\n precommitmentDetails,\n}) => {\n const [hasAgreed, setHasAgreed] = React.useState(false)\n\n const willUnblock =\n precommitmentDetails?.BlockCreditCardDeposits &&\n !precommitmentDetails.ProposedCreditCardReleaseDate\n\n const mutation = useMutation(\n () =>\n post({\n url: BLOCK_CREDIT_CARD_URL,\n body: !willUnblock,\n }),\n {\n onSuccess: data => {\n setIsPopupShowing(false)\n setPrecommitmentDetails(data)\n },\n }\n )\n\n return (\n \n \n {mutation.isLoading && }\n \n \n \n \n {willUnblock ? 'Remove Debit Card Block' : 'Block Debit Card'}\n \n \n \n {!willUnblock && (\n <>\n \n \n By proceeding:\n \n \n \n \n I understand that debit card deposits to my account will be blocked effective\n immediately. If I choose to remove this block in future, it will be subject to a{' '}\n {precommitmentDetails?.CoolingOffPeriodDays || DEFAULT_COOLING_OFF_PERIOD_DAYS}{' '}\n day cooling off period.\n \n \n \n )}\n {willUnblock && (\n \n \n \n Your debit card block will be{' '}\n \n removed on{' '}\n {dayjs()\n .add(\n precommitmentDetails?.CoolingOffPeriodDays ||\n DEFAULT_COOLING_OFF_PERIOD_DAYS,\n 'days'\n )\n .format('DD/MM/YYYY')}\n \n , after the mandatory cooling off period.\n \n \n \n )}\n \n setHasAgreed(x.target.checked)}\n data-tid-confirm=''\n />\n \n \n \n setIsPopupShowing(false)}\n >\n Cancel\n \n \n \n mutation.mutate()}\n >\n Save\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { callCenterPhoneNumber } from '@mobi/utils'\nimport { HeaderStyled, PaddingStyled, ParagraphStyled } from './Precommitment.styles'\n\nexport const PrecommitmentInfo = ({\n coolingOffPeriod,\n}: {\n coolingOffPeriod: number\n}): JSX.Element => (\n <>\n \n More Information\n \n \n

    Set and control your betting and deposit limits

    \n \n We want your betting experience with TABtouch to be a positive and happy one; therefore we\n have put in place a number of limits that you can set on your account to ensure you are not\n betting beyond your means. You can set a single bet limit and/or a total weekly deposit\n limit on your TABtouch account.\n \n \n Please note: When setting your ‘Total Weekly Deposit Limit’ please be aware\n that the new limit set will be inclusive of any deposits made to your account within the\n last 7 days.\n \n \n \n These limits apply to both racing and sports betting and must be in whole dollars.\n Increasing and removing bet limits from your account will be subject to a{' '}\n {coolingOffPeriod} day cooling off period.\n \n \n \n If you require any assistance in setting or editing your bet limits please call our Customer\n Management Team on 1300 36 36 88.\n \n
    \n \n)\n","import React from 'react'\nimport { PrecommitmentBetLimit } from './PrecommitmentBetLimit'\nimport { PrecommitmentCreditCardBlock } from './PrecommitmentCreditCardBlock'\nimport { PrecommitmentInfo } from './PrecommitmentInfo'\nimport type { PrecommitmentResponse } from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\nimport { DEFAULT_COOLING_OFF_PERIOD_DAYS } from './constants'\n\nexport const PrecommitmentForm: React.FC<{\n data: PrecommitmentResponse | undefined\n hasDataFetchFailed: boolean\n}> = ({ data, hasDataFetchFailed }): JSX.Element => (\n <>\n \n \n \n \n)\n","import React from 'react'\nimport { useQuery } from 'react-query'\n\nimport { get } from '@classic/Foundation/Services/ApiService'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nimport { PrecommitmentForm } from './PrecommitmentForm'\nimport type { PrecommitmentResponse } from '@mobi/account/Areas/SignUp/Utils/SignUpApi'\nimport { PRECOMMITMENT_API_PATH_PREFIX } from './constants'\n\nexport const PrecommitmentPage = (): JSX.Element | null => {\n const { isLoading, isError, data } = useQuery(\n queryKeys.precommitmentDetails,\n () => get({ url: `${PRECOMMITMENT_API_PATH_PREFIX}getprecommitmentdetails` }),\n {\n retry: false,\n refetchOnWindowFocus: false,\n }\n )\n\n return (\n <>\n {isLoading && }\n \n \n \n \n \n )\n}\n","import styled from '@emotion/styled'\n\nexport const DetailsWrapper = styled('div')({\n padding: '1rem',\n})\n\nexport const DetailsTextWrapper = styled('div')({\n fontWeight: 'bold',\n fontSize: '1.2rem',\n margin: '1rem',\n})\n","import React from 'react'\n\nimport { DetailsWrapper } from '../TakeABreak.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\n\nconst TakeABreakError = (): JSX.Element | null => {\n return (\n \n \n \n )\n}\n\nexport default TakeABreakError\n","import React from 'react'\n\nimport { DetailsTextWrapper, DetailsWrapper } from '../TakeABreak.styles'\nimport { NoticeBox, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { dayjs } from '@mobi/utils'\nimport { trackTakeABreakAlreadyActive } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nconst TakeABreakActive = ({\n accountNumber,\n endDate,\n justPostedAccountToTakeABreak,\n}: {\n accountNumber: number\n endDate: Date\n justPostedAccountToTakeABreak: boolean\n}): JSX.Element => {\n React.useEffect(() => {\n if (!justPostedAccountToTakeABreak) {\n // trigger event if active and NOT after a post to set tab\n trackTakeABreakAlreadyActive({ accountNumber, endDate })\n }\n }, [accountNumber, endDate, justPostedAccountToTakeABreak])\n\n return (\n \n \n \n Your Take a Break will end at {dayjs.utc(endDate).local().format('hh:mm a MMM Do, YYYY')}\n \n \n )\n}\n\nexport default TakeABreakActive\n","import { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const ContainerStyled = styled.div({\n color: hexColors.black,\n fontSize: '1.2em',\n padding: '1.5em 1.25em',\n})\n\nexport const HeaderImageStyled = styled.img({\n borderRadius: '0.75em',\n marginBottom: '1em',\n maxWidth: '100%',\n width: '100%',\n})\n\nexport const HeaderStyled = styled.h3({\n background: 'none',\n color: 'inherit',\n fontWeight: 'bold',\n fontSize: '1.1em',\n margin: '1.25em 0 0.25em',\n padding: 0,\n textTransform: 'none',\n})\n\nexport const TextStyled = styled.p({\n fontSize: '1em',\n lineHeight: 1.4,\n textAlign: 'left',\n margin: 0,\n})\n\nexport const ListStyled = styled.ul({\n margin: 0,\n})\n\nexport const LinkListStyled = styled(ListStyled)({\n listStyle: 'none',\n marginTop: '0.5em',\n padding: 0,\n})\n\nexport const ListItemStyled = styled.li({\n fontSize: '1em',\n lineHeight: 1.4,\n})\n\nexport const LinkStyled = styled.a({\n color: hexColors.studio,\n fontWeight: 'bold',\n fontSize: '1.1em',\n textDecoration: 'underline',\n})\n\nexport const ExternalLinkStyled = styled(LinkStyled)({\n alignItems: 'center',\n display: 'inline-flex',\n\n '> svg': {\n marginLeft: '0.25em',\n },\n})\n\nexport const Button = styled(ButtonBlock)({\n marginTop: '2em',\n})\n","import React from 'react'\nimport { Constants } from '@mobi/settings'\nimport { trackTakeABreakInformation } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport {\n Button,\n ContainerStyled,\n ExternalLinkStyled,\n HeaderImageStyled,\n HeaderStyled,\n LinkListStyled,\n LinkStyled,\n ListItemStyled,\n ListStyled,\n TextStyled,\n} from './TakeABreakInfo.styled'\n\nimport takeABreakImage from './images/take-a-break-header-v1.png'\n\ninterface TakeABreakInfoProps {\n setUserHasAgreedToBreakTerms: (setHasUserAgreedTabTerms: boolean) => void\n accountNumber: number\n}\n\nconst TakeABreakInfo = ({\n setUserHasAgreedToBreakTerms,\n accountNumber,\n}: TakeABreakInfoProps): JSX.Element => {\n React.useEffect(() => {\n trackTakeABreakInformation({ accountNumber })\n }, [accountNumber])\n\n return (\n \n \n\n \n We want your betting experience with TABtouch to be a positive and happy one, therefore we\n have put in place a number of features within your account to ensure you are betting\n responsibly. Take a Break is a way to take some time off betting for a selected period,\n chosen by you.\n \n\n Responsible Wagering at TABtouch\n\n \n TABtouch supports responsible wagering. In addition to Take a Break, we have a number of\n additional tools which can assist you with your responsible wagering requirements.\n \n\n \n \n Deposit Limits\n \n \n Bet Limits\n \n \n \n Responsible Wagering Policy \n \n \n \n\n Take a Break Details\n\n By taking a break you acknowledge that:\n\n \n You will be unable to bet\n You will be unable to deposit into your account\n \n Pending bets will stand and your remaining account balance can be withdrawn\n \n \n You may continue to receive marketing material for up to 72 hours after your break has\n been confirmed\n \n \n\n setUserHasAgreedToBreakTerms(true)}\n >\n Continue\n \n \n )\n}\n\nexport default TakeABreakInfo\n","import React from 'react'\n\nimport {\n Button,\n ContainerStyled,\n HeaderStyled,\n ListItemStyled,\n ListStyled,\n TextStyled,\n} from './TakeABreakInfo.styled'\nimport {\n Select,\n SelectContainer,\n} from '@core/Areas/Account/ActivityStatements/Components/Select.styles'\nimport { trackTakeABreakConfirmation } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\ninterface TakeABreakFormProps {\n onPostAccountToTakeABreakHandler: (breakDuration: number) => void\n isPostingAccountToTakeABreakBusy: boolean\n accountNumber: number\n}\n\ntype TakeABreakOptions = Readonly<{\n id: number\n name: string\n daysToBreak: number\n selectable: boolean\n}>\n\nconst TakeABreakForm = ({\n isPostingAccountToTakeABreakBusy,\n onPostAccountToTakeABreakHandler,\n accountNumber,\n}: TakeABreakFormProps) => {\n const [userSelectedBreakDuration, setUserSelectedBreakDuration] = React.useState(0)\n\n React.useEffect(() => {\n window.scrollTo(0, 0)\n }, [])\n\n React.useEffect(() => {\n trackTakeABreakConfirmation({ accountNumber })\n }, [accountNumber])\n\n const TakeABreakSelections: readonly TakeABreakOptions[] = React.useMemo(() => {\n return [\n {\n id: 0,\n name: 'Select duration',\n daysToBreak: 0,\n selectable: false,\n },\n {\n id: 1,\n name: '1 day',\n daysToBreak: 1,\n selectable: true,\n },\n {\n id: 2,\n name: '1 week (7 days)',\n daysToBreak: 7,\n selectable: true,\n },\n {\n id: 3,\n name: '1 month (30 days)',\n daysToBreak: 30,\n selectable: true,\n },\n {\n id: 4,\n name: '3 months (90 days)',\n daysToBreak: 90,\n selectable: true,\n },\n {\n id: 5,\n name: '6 months (180 days)',\n daysToBreak: 180,\n selectable: true,\n },\n ]\n }, [])\n\n return (\n \n By taking a break you acknowledge that:\n \n You will be unable to bet\n You will be unable to deposit into your account\n \n Pending bets will stand and your remaining account balance can be withdrawn\n \n \n You may continue to receive marketing material for up to 72 hours after your break has\n been confirmed\n \n \n Take a Break Duration\n\n \n setUserSelectedBreakDuration(+e.target.value)}\n defaultValue={0}\n >\n {TakeABreakSelections.map(x => (\n \n\n onPostAccountToTakeABreakHandler(userSelectedBreakDuration)}\n >\n Confirm\n \n \n )\n}\n\nexport default TakeABreakForm\n","import React from 'react'\nimport { useMutation, useQueryClient } from 'react-query'\n\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { useLogon } from '@core/Utils/hooks'\nimport { saveTakeABreak, TakeABreakResponse } from './api'\nimport TakeABreakError from './Components/TakeABreakError'\nimport TakeABreakActive from './Components/TakeABreakActive'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { dayjs } from '@mobi/utils'\nimport {\n trackTakeABreakSubmitSucceeded,\n trackTakeABreakSubmitFailed,\n trackTakeABreakCancel,\n trackTakeABreakSubmitSelection,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport TakeABreakInfo from './Components/TakeABreakInfo'\nimport TakeABreakForm from './Components/TakeABreakForm'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { useTakeABreak } from './Hooks'\n\nconst TakeABreak = (): JSX.Element => {\n const { accountNumber } = useLogon()\n const queryClient = useQueryClient()\n const queryKey = [queryKeys.takeABreak, accountNumber]\n const [userHasAgreedToBreakTerms, setUserHasAgreedToBreakTerms] = React.useState(false)\n const justPostedAccountToTakeABreak = React.useRef(false)\n\n const getTakeABreakDetails = useTakeABreak()\n\n const setTakeABreakDetails = useMutation(saveTakeABreak, {\n onSuccess: (data: TakeABreakResponse, variables) => {\n queryClient.setQueryData(queryKey, { ...data })\n justPostedAccountToTakeABreak.current = true\n trackTakeABreakSubmitSucceeded({ variables, accountNumber })\n },\n onError: (_, variables) => {\n justPostedAccountToTakeABreak.current = true\n trackTakeABreakSubmitFailed({ variables, accountNumber })\n },\n })\n\n const onPostAccountToTakeABreakHandler = (breakDuration: number) => {\n trackTakeABreakSubmitSelection({ accountNumber, breakDuration })\n setTakeABreakDetails.mutate({\n accountNumber: accountNumber ?? 0,\n endDate: dayjs().add(breakDuration, 'days').toDate(),\n })\n }\n\n const isLoading = getTakeABreakDetails.isLoading || !accountNumber\n const inError = getTakeABreakDetails.isError || setTakeABreakDetails.isError\n const takeABreakIsActive = getTakeABreakDetails.isSuccess && getTakeABreakDetails.data?.inProgress\n const takeABreakIsNotActive =\n getTakeABreakDetails.isSuccess && !getTakeABreakDetails.data?.inProgress\n\n React.useEffect(() => {\n return () => {\n if (takeABreakIsNotActive && !justPostedAccountToTakeABreak.current) {\n // user opts not to take a break send GA\n // only trigger event if inactive and NOT after a post to set tab\n trackTakeABreakCancel({ accountNumber })\n }\n }\n }, [takeABreakIsNotActive, accountNumber])\n\n return (\n \n \n\n {isLoading && }\n\n {inError && }\n\n {takeABreakIsActive && (\n \n )}\n\n {takeABreakIsNotActive &&\n (!userHasAgreedToBreakTerms ? (\n \n ) : (\n \n ))}\n \n )\n}\n\nexport default TakeABreak\n","import TakeABreak from './TakeABreak'\n\nexport { TAKE_A_BREAK_ROUTE } from './constants'\nexport const TakeABreakPage = TakeABreak\n","import React, { useEffect } from 'react'\nimport { useLocation, useHistory } from 'react-router-dom'\nimport {\n trackVerificationBannerLoaded,\n trackVerificationVerifyNowButtonClicked,\n} from '@core/Areas/Account/Verification/analytics'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { Banner, Button } from '@mobi/component-library/Common/V2'\nimport { state$ } from '@core/State/UserAccount/userAccountDriver'\nimport { useObservableProperties } from '@core/Utils/hooks'\nimport { useBetAccount } from '@mobi/account/Areas/Deposit/Hooks'\nimport { getFromRepo } from '@core/Utils/repository'\nimport { BetAccountKey, BetAccountRepo } from '@core/Data/Account/betAccount'\n\nexport const VerificationBanner = () => {\n const history = useHistory()\n const { isLoggedIn } = useObservableProperties(state$, ['isLoggedIn'], {\n isLoggedIn: false,\n })\n\n const {\n isError,\n isLoading,\n data: betAccount,\n } = useBetAccount({\n enabled: isLoggedIn ?? false,\n queryFn: () => getFromRepo(BetAccountRepo, BetAccountKey),\n })\n\n // isVerified can be undefined, meaning we don't know\n // whether the user is verified by means of the ID\n const isVerified = betAccount?.IsIDVerified\n const accountNumber = betAccount?.BetAccountNumber\n const isUnverified = isVerified === false\n const { pathname } = useLocation()\n const isSuppressedRoute = [\n AppRoutes.SignUp,\n AppRoutes.CompletedSignUp,\n AppRoutes.Verification,\n ].some(path => pathname.startsWith(path))\n\n const showBanner = !isLoading && !isError && !!isLoggedIn && isUnverified && !isSuppressedRoute\n\n useEffect(() => {\n if (showBanner && accountNumber !== undefined) {\n trackVerificationBannerLoaded({\n accountNumber,\n isVerified: !isUnverified,\n })\n }\n }, [showBanner, accountNumber, isUnverified])\n\n if (!showBanner || accountNumber === undefined) {\n return null\n }\n\n const button = (\n {\n history.push(`${AppRoutes.Verification}`)\n trackVerificationVerifyNowButtonClicked({\n accountNumber,\n })\n }}\n color='secondary_outline'\n size='sm'\n role='link'\n >\n Verify now\n \n )\n\n return (\n \n )\n}\n","import React, { Suspense, lazy } from 'react'\nimport { Spinner } from '@mobi/component-library/Common/Spinner'\nimport { useDisableAppHeaderRender } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderRender'\n\nconst VerificationPage = lazy(() => import('./Components/VerificationPage'))\n\nexport const Verification = () => {\n useDisableAppHeaderRender()\n\n return (\n }>\n \n \n )\n}\n\nVerification.displayName = 'Verification'\n","import jQuery from 'jquery'\nimport cookies from 'js-cookie'\nimport * as common from './Common'\n\n// Used in TabLocatorViewModel\nexport function initTabLocatorNotification(callback: () => void) {\n attachCloseHandlers('tabtouch-notification')\n const introToTabLocatorNotification = new Notification(\n 'tablocator-intro-notification',\n 'tabtouch.dont_show_tablocator_notification',\n callback\n )\n\n return introToTabLocatorNotification\n}\n\nclass Notification {\n private hasBeenDisabled = false\n private cookieName: string\n private notificationPopup: JQuery\n private callback: () => void\n\n constructor(wrapperId: string, cookieName: string, callback: () => void) {\n attachCloseHandlers(wrapperId, callback)\n\n this.notificationPopup = jQuery('#' + wrapperId)\n this.cookieName = cookieName\n this.callback = callback\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const thisClass = this\n\n jQuery('#' + wrapperId + ' .continue').off('click')\n jQuery('#' + wrapperId + ' .continue').click(function (this: HTMLElement) {\n if (jQuery('#dontShowNotification').is(':checked')) {\n if (cookieName) {\n cookies.set(cookieName, 'true')\n }\n thisClass.hasBeenDisabled = true\n }\n\n if ($(this).hasClass('close')) {\n thisClass.notificationPopup.fadeOut('fast', callback)\n } else if (callback && typeof callback === 'function') {\n callback()\n }\n })\n }\n\n public show(e: Event) {\n if ((!this.cookieName || cookies.get(this.cookieName) !== 'true') && !this.hasBeenDisabled) {\n if (e && e.preventDefault) e.preventDefault()\n\n common.showPopup(this.notificationPopup)\n jQuery('#dontShowNotification').removeAttr('checked')\n } else {\n if (typeof this.callback === 'function') {\n this.callback()\n }\n }\n }\n}\n\nfunction attachCloseHandlers(wrapperId: string, callback?: () => void) {\n const notificationPopup = jQuery('#' + wrapperId)\n jQuery('#' + wrapperId + ' .close').click(() => {\n notificationPopup.fadeOut('fast', callback)\n })\n}\n","/* eslint-disable @typescript-eslint/prefer-for-of */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport jQuery from 'jquery'\nimport { scriptLoader } from '@mobi/utils'\nimport * as NOTE from '../Notification'\nimport * as CMN from '../Common'\nimport dotIcon from './images/blue-dot.png'\nimport pinShadow from './images/pin-shadow.png'\nimport sl1Purple from './images/sl1-purple.png'\nimport sl2Yellow from './images/sl2-yellow.png'\nimport sl3Red from './images/sl3-red.png'\n\nlet getPositionTimeOut: ReturnType\nlet geoCodeWatchId: number\nlet loadingOverlay: JQuery\nlet currentLocationRequestInProgress: boolean\nlet canUpdateLocation = true\nlet newPosition: { coords: { latitude: number; longitude: number } }\nlet followingGPS = false\nlet hasGoogleMapsBeenFetched = false\n\nlet introNotification: any\nlet canCentreScreen: boolean\n\nlet map: any = null\nlet googleTabmarkers: any = []\nconst googleMarkerIcons: any = []\n\nlet geocoder: any\nlet usersGeoLocation: any\nlet currentGeoLocation: any\nlet infowindow: any\nlet iconShadow: any\nconst sl1CategoryCode = 'SL1'\nconst sl2CategoryCode = 'SL2'\nconst sl3CategoryCode = 'SL3'\nlet currentLocationMarker: any\n\nlet markerIconSize: any\nlet markerAnchor: any\nlet markerOrigin: any\n\nconst slColorDict = {\n ['sl1-purple']: sl1Purple,\n ['sl2-yellow']: sl2Yellow,\n ['sl3-red']: sl3Red,\n}\n\nconst GOOGLE_MAPS_API_KEY = 'AIzaSyCS2iWIkf3XzqFKGKm1aQY3EJs5svhKn8U'\n\nexport async function initPage() {\n // @ts-expect-error No types legacy\n if (!window.TABLocatorWebInit) {\n // @ts-expect-error No types legacy\n window.TABLocatorWebInit = initLocator\n }\n\n if (hasGoogleMapsBeenFetched) {\n initLocator()\n } else {\n scriptLoader(\n `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&loading=async&callback=TABLocatorWebInit`\n )\n hasGoogleMapsBeenFetched = true\n }\n}\n\nexport function initLocator() {\n loadingOverlay = jQuery('#loading-overlay')\n addHandlers()\n\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(function (geoLocation) {\n usersGeoLocation = geoLocation\n\n if (canUpdateLocation) {\n updateLocationOnMap(\n // @ts-expect-error No types legacy\n new google.maps.LatLng(geoLocation.coords.latitude, geoLocation.coords.longitude)\n )\n followingGPS = true\n geoCodeWatchId = navigator.geolocation.watchPosition(handlePositionChange)\n monitorCurrentLocation()\n }\n })\n\n setTimeout(function () {\n canUpdateLocation = false\n }, 10000)\n\n loadingOverlay.hide()\n }\n\n setMapHeight()\n initialize()\n resizeGoogleMap()\n\n jQuery('#tabtouch-notification, #tablocator-intro-notification').css({\n height: jQuery(document).height(),\n })\n}\n\nfunction setMapHeight() {\n const maxAllowedHeight =\n jQuery(window).height() - jQuery('#tabTypeSelectionContainer').height() - 50\n jQuery('#map_canvas').height(Math.min(600, maxAllowedHeight))\n resizeGoogleMap()\n}\n\nfunction addHandlers() {\n jQuery('#SL1Item').click(function () {\n monitorChangeLocationRequest(function () {\n boxclick('SL1')\n })\n })\n jQuery('#SL2Item').click(function () {\n monitorChangeLocationRequest(function () {\n boxclick('SL2')\n })\n })\n jQuery('#SL3Item').click(function () {\n monitorChangeLocationRequest(function () {\n boxclick('SL3')\n })\n })\n\n const addressTextBox = jQuery('#address')\n\n jQuery('#currentLocation').click(function () {\n addressTextBox.val('')\n addressTextBox.blur()\n if (!currentLocationRequestInProgress) {\n currentLocationRequestInProgress = true\n monitorChangeLocationRequest(changeLocationToCurrentLocation)\n }\n })\n\n const goButton = jQuery('#go_button')\n\n goButton.click(function () {\n addressTextBox.blur()\n monitorChangeLocationRequest(function () {\n if (!addressTextBox.hasClass('watermark-textbox')) {\n clearLocationWatch()\n followingGPS = false\n const query = addressTextBox.val()\n\n infowindow.close()\n // @ts-expect-error No types legacy\n geocoder = new google.maps.Geocoder()\n if (jQuery.trim(query).length > 0) {\n const address = query + ', Western Australia, Australia'\n\n geocoder.geocode(\n {\n address: address,\n partialmatch: true,\n },\n processGeocodeResult\n )\n }\n }\n })\n })\n\n addressTextBox.keydown(function (e) {\n if (e.keyCode == 13) {\n e.preventDefault()\n goButton.click()\n }\n })\n\n jQuery(window).resize(handleResize)\n}\n\nfunction handleResize() {\n if (jQuery('#map_canvas').length == 0) {\n jQuery(window).unbind('resize', handleResize)\n return\n }\n setMapHeight()\n jQuery('#tabtouch-notification, #tablocator-intro-notification').css({\n height: jQuery(document).height(),\n })\n loadingOverlay.css({ height: jQuery(document).height() })\n}\n\nfunction changeLocationToCurrentLocation() {\n loadingOverlay.show()\n clearLocationWatch()\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(handleSuccessfulLocationFind)\n clearTimeout(getPositionTimeOut)\n getPositionTimeOut = setTimeout(handleGetCurrentPositionError, 10000)\n }\n loadingOverlay.hide()\n}\n\nfunction clearLocationWatch() {\n navigator.geolocation.clearWatch(geoCodeWatchId)\n}\n\nfunction handleSuccessfulLocationFind(pos: any) {\n currentLocationRequestInProgress = false\n clearTimeout(getPositionTimeOut)\n // @ts-expect-error No types legacy\n updateLocationOnMap(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude))\n followingGPS = true\n geoCodeWatchId = navigator.geolocation.watchPosition(handlePositionChange)\n monitorCurrentLocation()\n}\n\nfunction handlePositionChange(position: any) {\n newPosition = position\n}\n\nfunction monitorCurrentLocation() {\n if (\n newPosition &&\n (newPosition.coords.latitude !== currentGeoLocation.latitude ||\n newPosition.coords.longitude !== currentGeoLocation.longitude) &&\n !currentLocationRequestInProgress &&\n followingGPS\n ) {\n updateLocationOnMap(\n // @ts-expect-error No types legacy\n new google.maps.LatLng(newPosition.coords.latitude, newPosition.coords.longitude),\n true\n )\n }\n\n if (jQuery('#map_canvas').length > 0) {\n setTimeout(monitorCurrentLocation, 5000)\n } else {\n navigator.geolocation.clearWatch(geoCodeWatchId)\n }\n}\n\nexport function monitorChangeLocationRequest(callback: () => void) {\n callback()\n loadingOverlay.hide()\n}\n\nfunction handleGetCurrentPositionError() {\n currentLocationRequestInProgress = false\n clearTimeout(getPositionTimeOut)\n CMN.showPopup(jQuery('#tabtouch-notification'))\n}\n\nfunction initialize() {\n // @ts-expect-error No types legacy\n markerIconSize = new google.maps.Size(15, 30)\n // @ts-expect-error No types legacy\n markerAnchor = new google.maps.Point(9, 30)\n // @ts-expect-error No types legacy\n markerOrigin = new google.maps.Point(0, 0)\n canCentreScreen = false\n addWaterMark('address', 'Other Location')\n let position = {\n coords: {\n latitude: -31.9554,\n longitude: 115.85859,\n },\n }\n if (usersGeoLocation) {\n position = usersGeoLocation\n }\n setCurrentLocation(position)\n addToRadFunctionToNumber()\n loadMarkerImages()\n introNotification = NOTE.initTabLocatorNotification(() => {\n canCentreScreen = true\n centreScreenOnMap()\n })\n\n initGoogleMapObjects()\n createGoogleMap()\n currentLocationMarker = createUsersLocationMarker()\n\n // Get Locations from File\n downloadUrl('../Content/tab-location.xml', parseXmlFlieForLocations)\n\n // @ts-expect-error No types legacy\n const latlng = new google.maps.LatLng(currentGeoLocation.latitude, currentGeoLocation.longitude)\n map?.setCenter(latlng)\n}\n\nfunction setCurrentLocation(position: any) {\n if (position.coords) {\n currentGeoLocation = position.coords\n } else if (position.lat) {\n currentGeoLocation = {\n latitude: position.lat(),\n longitude: position.lng(),\n }\n } else {\n currentGeoLocation = position\n }\n}\n\nfunction loadMarkerImages() {\n googleMarkerIcons[sl1CategoryCode] = getMarkerImage(getCssClassForCategory(sl1CategoryCode))\n googleMarkerIcons[sl2CategoryCode] = getMarkerImage(getCssClassForCategory(sl2CategoryCode))\n googleMarkerIcons[sl3CategoryCode] = getMarkerImage(getCssClassForCategory(sl3CategoryCode))\n}\n\nfunction addToRadFunctionToNumber() {\n // @ts-expect-error No type legacy\n if (!Number.prototype.toRad) {\n // @ts-expect-error No type legacy\n Number.prototype.toRad = function () {\n // @ts-expect-error No type legacy\n return (this * Math.PI) / 180\n }\n }\n}\n\nfunction createGoogleMap() {\n const myOptions = {\n panControl: false,\n zoom: 12,\n minZoom: 5,\n maxZoom: 18,\n // @ts-expect-error No types legacy\n center: new google.maps.LatLng(currentGeoLocation.latitude, currentGeoLocation.longitude),\n mapTypeControl: false,\n mapTypeControlOptions: {\n // @ts-expect-error No types legacy\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\n },\n streetViewControl: false,\n navigationControl: true,\n // @ts-expect-error No types legacy\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n zoomControl: true,\n styles: [{ featureType: 'poi', elementType: 'labels', stylers: [{ visibility: 'off' }] }],\n }\n\n const mapCanvas = jQuery('#map_canvas')\n // @ts-expect-error No types legacy\n map = new google.maps.Map(mapCanvas[0], myOptions)\n\n // @ts-expect-error No types legacy\n google.maps.event.addListener(map, 'click', function () {\n infowindow.close()\n })\n // @ts-expect-error No types legacy\n google.maps.event.addListenerOnce(map, 'tilesloaded', function () {\n centreScreenOnMap()\n introNotification.show()\n })\n}\n\nfunction createUsersLocationMarker() {\n // @ts-expect-error No types legacy\n return new google.maps.Marker({\n // @ts-expect-error No types legacy\n position: new google.maps.LatLng(currentGeoLocation.latitude, currentGeoLocation.longitude),\n icon: {\n url: dotIcon,\n // @ts-expect-error No types legacy\n anchor: new google.maps.Point(25, 25),\n },\n map,\n title: name,\n zIndex: 999900000,\n })\n}\n\nfunction parseXmlFlieForLocations(doc: any) {\n const xmlDoc = new DOMParser().parseFromString(doc, 'text/xml')\n const markers = xmlDoc.documentElement.getElementsByTagName('marker')\n\n googleTabmarkers = []\n for (let i = 0; i < markers.length; i++) {\n const category = markers[i].getAttribute('category')\n\n const html =\n \"
    \" +\n \"
    \" +\n markers[i].getAttribute('name') +\n \"
    \" +\n markers[i].getAttribute('address') +\n '
    ' +\n '
    '\n\n const lat = markers[i].getAttribute('lat')\n const lng = markers[i].getAttribute('lng')\n // @ts-expect-error No types legacy\n const point = new google.maps.LatLng(lat, lng)\n googleTabmarkers.push(createMarker(point, markers[i].getAttribute('name'), html, category))\n }\n\n showMarkerForCategory(sl1CategoryCode)\n showMarkerForCategory(sl2CategoryCode)\n showMarkerForCategory(sl3CategoryCode)\n}\n\nfunction getMarkerImage(iconColor: any) {\n if (!iconColor) {\n iconColor = 'default'\n }\n if (!googleMarkerIcons[iconColor]) {\n // @ts-expect-error No types legacy\n googleMarkerIcons[iconColor] = new google.maps.MarkerImage(\n slColorDict[iconColor as keyof typeof slColorDict] || '',\n markerIconSize,\n markerOrigin,\n markerAnchor\n )\n }\n return googleMarkerIcons[iconColor]\n}\n\nfunction getCssClassForCategory(category: any) {\n switch (category) {\n case sl2CategoryCode:\n return 'sl2-yellow'\n case sl3CategoryCode:\n return 'sl3-red'\n default:\n return 'sl1-purple'\n }\n}\n\nfunction createMarker(latlng: any, name: any, html: any, category: any) {\n const contentString = html\n // @ts-expect-error No types legacy\n const marker = new google.maps.Marker({\n position: latlng,\n icon: googleMarkerIcons[category],\n shadow: iconShadow,\n map,\n title: name,\n zIndex: Math.round(latlng.lat() * -100000) << 5,\n })\n marker.mycategory = category\n marker.myname = name\n\n // @ts-expect-error No types legacy\n google.maps.event.addListener(marker, 'click', function () {\n infowindow.close()\n infowindow.setContent(contentString)\n infowindow.open(map, marker)\n })\n\n return marker\n}\n\nfunction processGeocodeResult(results: any, status: string) {\n if (status == 'OK' && results.length > 0) {\n updateLocationOnMap(results[0].geometry.location)\n }\n}\n\nfunction updateLocationOnMap(latlng: any, dontGoToMap?: any) {\n setCurrentLocation(latlng)\n currentLocationMarker.setPosition(latlng)\n\n if (!dontGoToMap) {\n resizeGoogleMap()\n centreScreenOnMap()\n map.setCenter(latlng)\n }\n}\n\nfunction centreScreenOnMap(complete?: any) {\n const anchorOffset = jQuery('#anchor').offset()\n if (canCentreScreen && anchorOffset) {\n jQuery('html:not(:animated),body:not(:animated)').animate(\n { scrollTop: anchorOffset.top },\n 'fast',\n undefined,\n complete\n )\n }\n}\n\nfunction resizeGoogleMap() {\n if (map) {\n // @ts-expect-error No types legacy\n google.maps.event.trigger(map, 'resize')\n }\n}\n\nfunction showMarkerForCategory(category: string) {\n for (let i = 0; i < googleTabmarkers.length; i++) {\n if (googleTabmarkers[i].mycategory === category) {\n googleTabmarkers[i].setVisible(true)\n }\n }\n jQuery('#' + category + 'box').prop('checked', true)\n}\n\nfunction boxclick(category: any) {\n let isVisible = false\n for (let i = 0; i < googleTabmarkers.length; i++) {\n if (googleTabmarkers[i].mycategory === category) {\n isVisible = googleTabmarkers[i].getVisible() === false\n googleTabmarkers[i].setVisible(isVisible)\n }\n }\n jQuery('#' + category + 'box').prop('checked', isVisible)\n infowindow.close()\n}\n\nfunction initGoogleMapObjects() {\n // @ts-expect-error No types legacy\n infowindow = new google.maps.InfoWindow({\n maxWidth: 300,\n })\n\n // @ts-expect-error No types legacy\n google.maps.event.addListener(infowindow, 'clickclose', function () {\n infowindow.close()\n })\n\n // @ts-expect-error No types legacy\n googleMarkerIcons['default'] = new google.maps.MarkerImage(\n sl1Purple,\n markerIconSize,\n markerOrigin,\n markerAnchor\n )\n /* Marker sizes are expressed as a Size of X,Y\n where the origin of the image (0,0) is located\n in the top left of the image.\n\n Origins, anchor positions and coordinates of the marker\n increase in the X direction to the right and in\n the Y direction down.*/\n\n // @ts-expect-error No types legacy\n iconShadow = new google.maps.MarkerImage(\n pinShadow,\n /* The shadow image is larger in the horizontal dimension\n while the position and offset are the same as for the main image. */\n // @ts-expect-error No types legacy\n new google.maps.Size(15, 20),\n // @ts-expect-error No types legacy\n new google.maps.Point(0, 0),\n // @ts-expect-error No types legacy\n new google.maps.Point(1, 15)\n )\n}\n\nfunction addWaterMark(id: string, text: string) {\n const textBox = jQuery('#' + id)\n const waterMarkClass = 'watermark-textbox'\n\n textBox.val(text).addClass(waterMarkClass)\n\n textBox.on('blur', () => {\n if (textBox.val().length !== 0) return\n textBox.val(text)\n textBox.addClass(waterMarkClass)\n })\n\n textBox.on('focus', () => {\n textBox.val('')\n textBox.removeClass(waterMarkClass)\n })\n}\n\n/**\n * This functions wraps XMLHttpRequest open/send function.\n * It lets you specify a URL and will call the callback if\n * it gets a status code of 200.\n * @param {String} url The URL to retrieve\n * @param {Function} callback The function to call once retrieved.\n */\nexport function downloadUrl(url: string, callback: (resText: string, status: number) => void) {\n let status = -1\n const request = new XMLHttpRequest()\n if (!request) {\n return\n }\n\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n try {\n status = request.status\n } catch {\n // Usually indicates request timed out in FF.\n }\n if (status == 200 || status == 0) {\n callback(request.responseText, request.status)\n request.onreadystatechange = () => null\n }\n }\n }\n request.open('GET', url, true)\n try {\n request.send(null)\n } catch {\n // changeStatus(e)\n }\n}\n","import React from 'react'\nimport * as TABLocatorVM from '@classic/Foundation/ViewModels/TabLocatorViewModel'\nimport sl1Image from './images/sl1-purple.png'\n\nexport const TABLocatorWeb: React.FC = () => {\n React.useEffect(() => {\n TABLocatorVM.initPage()\n }, [])\n\n return (\n <>\n
    \n
    \n \n \n Home\n \n \n\n \n \n

    \n Find My TAB\n

    \n
    \n
    \n\n \n \n \n Refresh\n \n \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n
      \n
    1. \n \n
      \n \n \n
      \n
    2. \n
    3. \n \n
      \n \n \n
      \n
    4. \n
    5. \n \n
      \n \n \n
      \n
    6. \n
    \n
    \n \n\n
    \n
    \n
    \n
    \n\n
    \n
     
    \n
    \n Close Window\n

    Find my TAB

    \n\n

    Unable to detect your location you may need to enable location sharing.

    \n \n OK\n \n
    \n
    \n\n
    \n
     
    \n
    \n Close Window\n

    Welcome to Find My TAB

    \n\n

    \n Click on the icons to get more\n information about the TAB at that location.\n

    \n \n OK\n \n\n
    \n \n \n
    \n
    \n
    \n \n )\n}\n","import styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport { colors, hexColors } from '@mobi/settings'\nimport { measurements, layering } from '@mobi/component-library/Theme/Common'\n\nconst animateInUp = keyframes({\n from: {\n transform: 'translateY(3rem)',\n opacity: 0,\n },\n to: {\n transform: 'translateY(0)',\n opacity: 1,\n },\n})\n\nexport const LoginContainerStyled = styled.div({\n position: 'fixed',\n top: 0,\n bottom: 0,\n zIndex: layering.login,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n overflow: 'auto',\n backgroundColor: colors.brand.primary,\n animation: `${animateInUp} 0.15s cubic-bezier(0.165, 0.840, 0.440, 1.000) forwards`,\n\n h1: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n paddingLeft: '2rem',\n paddingRight: '5rem',\n textTransform: 'uppercase',\n fontSize: '1.8rem',\n color: hexColors.white,\n height: measurements.mobi.headerHeight,\n minHeight: measurements.mobi.headerHeight,\n\n '& > svg': {\n marginRight: '1rem',\n },\n\n button: {\n position: 'absolute',\n right: 0,\n height: measurements.mobi.headerHeight,\n width: 'auto',\n minWidth: '5rem',\n background: 'none',\n border: 0,\n color: hexColors.white,\n },\n },\n\n 'input[type=\"tel\"], input[type=\"password\"], input[type=\"text\"]': {\n fontSize: '2.4rem',\n },\n\n '& > div': {\n fontSize: '1.4rem',\n padding: '1rem 2rem',\n\n 'input:focus': {\n backgroundColor: hexColors.white,\n },\n\n label: {\n fontSize: '1.3rem',\n color: hexColors.white,\n },\n\n fieldset: {\n marginBottom: '2rem',\n },\n\n '& > div': {\n marginBottom: '1.5rem',\n },\n },\n})\n\nexport const LoginFieldOptionsStyled = styled.div({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '3rem',\n\n '& > *': {\n height: '3rem',\n lineHeight: 1,\n },\n\n label: {\n display: 'flex',\n alignItems: 'center',\n },\n\n button: {\n border: 0,\n background: 'none',\n color: hexColors.lavenderBlue,\n padding: 0,\n textDecoration: 'underline',\n },\n})\n\nexport const LoginCoverLoadingStyled = styled.div({\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n})\n","import { post } from '@classic/Foundation/Services/ApiService'\nimport type { DeliveryMethod } from '../../Shared/DeliveryMethods/types'\n\nconst enum LocalConstants {\n ApiRoot = '/$_/accountrecovery/recoverAccountNumber',\n GenericError = 'Sorry, something went wrong. Please try again.',\n NotFoundError = 'Sorry we could not find your account from the details provided.',\n}\n\nexport const postDeliveryMethod = (body: PostDeliveryMethodBody) =>\n post({ url: `${LocalConstants.ApiRoot}/deliveryMethods`, body })\n .then(data => {\n if (data.deliveryMethods.length === 0) {\n return \"Sorry, we don't have a registered email or mobile number for this account. Please call for assistance.\"\n }\n return data\n })\n .catch(err =>\n err.response?.status === 409\n ? LocalConstants.NotFoundError\n : err.response?.status === 404\n ? LocalConstants.NotFoundError\n : LocalConstants.GenericError\n )\n\nexport const postDeliverAccountNumber = (body: PostDeliverAccountNumber) =>\n post({\n url: `${LocalConstants.ApiRoot}/deliverAccountNumber`,\n body,\n })\n .then(res => {\n if (!!res.query?.email || !!res.query?.mobile) {\n return { isSuccessful: true }\n }\n return LocalConstants.GenericError\n })\n .catch(() => {\n return LocalConstants.GenericError\n })\n\n// =====\n// Types\n// =====\n\n// Step 1\n\ninterface PostDeliveryMethodBody {\n dobDay: number\n dobMonth: number\n dobYear: number\n firstName: string\n lastName: string\n emailOrMobile: string\n}\n\ntype PostDeliveryMethodReturn = Pick<\n PostDeliveryMethodBody,\n 'dobDay' | 'dobMonth' | 'dobYear' | 'firstName' | 'lastName' | 'emailOrMobile'\n> & {\n deliveryMethods: DeliveryMethod[]\n}\n\n// Step 2\n\ninterface PostDeliverAccountNumber {\n deliveryMethod: DeliveryMethod\n query: Pick<\n PostDeliveryMethodBody,\n 'dobDay' | 'dobMonth' | 'dobYear' | 'emailOrMobile' | 'firstName' | 'lastName'\n >\n}\ntype PostDeliverAccountNumberResponse = Pick & {\n query: PostDeliverAccountNumber['query'] & { email: string; mobile: string }\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Pagination } from '@core/Components/Pagination'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { SelectField } from '@mobi/component-library/Common/Select'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { trackLoginForgotAccountNumberSent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { postDeliverAccountNumber, postDeliveryMethod } from './helpers/api'\nimport {\n RecoverFooter,\n DeliveryMethodSent,\n DeliveryMethods,\n getDeliveryMethodName,\n type DeliveryMethod,\n} from '..'\n\nexport const AccountNumberRecovery: React.FC = ({\n handleSignUp,\n handleReturnToLogin,\n}) => {\n const [days] = React.useState(generateDays)\n const [months] = React.useState(generateMonths)\n const [years] = React.useState(generateValidYears)\n\n const [currentStep, setCurrentStep] = React.useState(1)\n const [isBusy, setIsBusy] = React.useState(false)\n const [errorMessage, setErrorMessage] = React.useState()\n\n const [emailOrMobile, setEmailOrMobile] = React.useState('')\n const [firstName, setFirstName] = React.useState('')\n const [lastName, setLastName] = React.useState('')\n\n const [dobDay, setDobDay] = React.useState(() => days[0])\n const [dobMonth, setDobMonth] = React.useState(() => months[0])\n const [dobYear, setDobYear] = React.useState(() => years[0])\n\n const [deliveryMethods, setDeliveryMethods] = React.useState([])\n const [selectedDeliveryMethod, setSelectedDeliveryMethod] = React.useState()\n\n const onDeliverMethodChange: InputChange = e => setSelectedDeliveryMethod(Number(e.target.value))\n\n const onInputChange: OnInput = setState => e => {\n setErrorMessage(undefined)\n setState(e.target.value)\n }\n\n const onSelectChange: OnSelect = setState => e => {\n setErrorMessage(undefined)\n setState(e.target.value)\n }\n\n const handleNextClick = async () => {\n if (currentStep === 1) {\n setIsBusy(true)\n const res = await postDeliveryMethod(\n createQuery({ dobDay, dobMonth, dobYear, emailOrMobile, firstName, lastName })\n )\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n if (res.deliveryMethods.length === 1) setSelectedDeliveryMethod(res.deliveryMethods[0].id)\n setDeliveryMethods(res.deliveryMethods)\n setCurrentStep(2)\n return\n }\n\n if (currentStep === 2 && selectedDeliveryMethod) {\n const deliveryMethod = getDeliveryMethod(deliveryMethods, selectedDeliveryMethod)\n setIsBusy(true)\n const res = await postDeliverAccountNumber({\n query: createQuery({ dobDay, dobMonth, dobYear, emailOrMobile, firstName, lastName }),\n deliveryMethod: deliveryMethod,\n })\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n\n setCurrentStep(3)\n trackLoginForgotAccountNumberSent(getDeliveryMethodName(deliveryMethod.type))\n return\n }\n\n if (currentStep === 3) handleReturnToLogin()\n }\n\n const shouldDisplayBackButton = currentStep === 1\n const isFinalStep = currentStep === 3\n const isValid = isFinalStep || (!isBusy && !!(emailOrMobile && firstName && lastName))\n\n return (\n <>\n
    \n \n
    \n\n {currentStep === 1 && (\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 {currentStep === 2 && (\n <>\n \n \n \n )}\n\n {currentStep === 3 && (\n \n )}\n\n {errorMessage && (\n \n )}\n\n \n {shouldDisplayBackButton && (\n \n \n Back\n \n \n )}\n\n \n \n {isBusy ? : isFinalStep ? 'Log in now' : 'Next'}\n \n \n \n\n \n \n )\n}\n\n// =======\n// Helpers\n// =======\n\nconst generateDays = () => [...Array(31).keys()].map(num => (++num).toString())\n\nconst generateMonths = () => [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sept',\n 'Oct',\n 'Nov',\n 'Dec',\n]\n\nfunction generateValidYears() {\n const max = new Date().getFullYear() - 17\n const min = max - 100\n const years = []\n for (let i = max; i >= min; i--) years.push(i)\n return years.map(year => year.toString())\n}\n\nfunction createQuery(query: CreateQuery): Parameters[0] {\n return {\n dobDay: Number(query.dobDay),\n dobMonth: generateMonths().indexOf(query.dobMonth) + 1,\n dobYear: Number(query.dobYear),\n emailOrMobile: query.emailOrMobile,\n firstName: query.firstName,\n lastName: query.lastName,\n }\n}\n\nfunction getDeliveryMethod(\n deliveryMethods: DeliveryMethod[],\n selectedDeliveryMethod: number\n): DeliveryMethod {\n return deliveryMethods.find(method => selectedDeliveryMethod === method.id) as DeliveryMethod\n}\n\n// ======\n// Styles\n// ======\n\nconst AccountNumberFieldsetStyled = styled('fieldset')({\n 'input[type=\"tel\"], input[type=\"password\"], input[type=\"text\"]': {\n fontSize: '1.4rem',\n },\n\n '& > div': {\n marginBottom: '0.5rem',\n },\n})\n\nconst DateOfBirthStyled = styled('div')({\n '& > div': {\n display: 'flex',\n\n '& > div': {\n width: 'calc(100% / 3)',\n },\n },\n\n select: {\n fontSize: '1.4rem',\n },\n})\n\n// =====\n// Types\n// =====\n\ninterface AccountNumberRecoveryProps {\n handleSignUp(): void\n handleReturnToLogin(): void\n}\n\ntype InputChange = React.ChangeEventHandler\ntype OnSelect = (setState: ReactStateFn) => React.ChangeEventHandler\ntype OnInput = (setState: ReactStateFn) => React.ChangeEventHandler\n\ntype DobValues = 'dobDay' | 'dobMonth' | 'dobYear'\ntype CreateQuery = Omit[0], DobValues> & {\n [K in keyof Pick[0], DobValues>]: string\n}\n\ntype ReactStateFn = React.Dispatch>\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { callCenterPhoneNumber } from '@mobi/utils'\nimport { hexColors } from '@mobi/settings'\nimport { isReactNativeApp, AppVersion } from '@mobi/web-native-comms/web'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport {\n trackLoginForgotAccountNumber,\n trackLoginForgotPassword,\n} from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { LoginFieldOptionsStyled } from '../../Login.styles'\nimport type { useLoginState } from '../../hooks/useLoginState'\nimport { trackSignUpClick } from '@core/Areas/Account/SignUp/analytics'\nimport { BiometricsToggle } from '@mobi/account/Areas/Verification/Biometrics/Components/BiometricsToggle'\nimport { useBiometricsStatus } from '@mobi/account/Areas/Verification/Biometrics/Hooks/useBiometricsStatus'\nimport { spacing } from '@mobi/component-library/Theme/Common'\n\nexport const LoginMain = ({ state, handlers }: ReturnType) => {\n const [isPasswordVisible, setIsPasswordVisible] = React.useState(false)\n const { isBiometricsStatusReady, isBiometricsEnabled } = useBiometricsStatus()\n const [isBiometricsToggleOn, setIsBiometricsToggleOn] = React.useState(false)\n\n const isValid = !!state.accountNumber && !!state.password\n const shouldShowKeepMeLoggedIn = isReactNativeApp\n const shouldDisableSubmit =\n state.isBusy ||\n !!state.errorMessage ||\n !isValid ||\n (isReactNativeApp && !isBiometricsStatusReady)\n const reactNativeAppVersion = +(AppVersion?.split('.', 1)[0] ?? 0)\n\n React.useEffect(() => {\n if (isBiometricsStatusReady) {\n setIsBiometricsToggleOn(isBiometricsEnabled)\n }\n }, [isBiometricsStatusReady, isBiometricsEnabled])\n\n const handleRecoverAccountNumber = () => {\n handlers.setWorkflow('Account Number Recovery')\n trackLoginForgotAccountNumber()\n }\n const handleRecoverPassword = () => {\n handlers.setWorkflow('Password Reset')\n trackLoginForgotPassword(state.accountNumber)\n }\n\n const handleSubmit: React.FormEventHandler = e => {\n e.preventDefault()\n if (!shouldDisableSubmit) handlers.login()\n }\n\n const handleEnterKey: React.KeyboardEventHandler = e => {\n if (!shouldDisableSubmit && (e.key === 'Enter' || e.keyCode === 13)) handlers.login()\n }\n\n return (\n
    \n
    \n \n\n \n \n\n \n Forgot account number\n \n \n
    \n\n
    \n setIsPasswordVisible(isVisible => !isVisible)}\n data-tid-login-password\n />\n\n \n {shouldShowKeepMeLoggedIn ? (\n \n ) : (\n
    \n )}\n\n \n \n
    \n\n {isReactNativeApp && reactNativeAppVersion >= 239 && (\n \n {\n setIsBiometricsToggleOn(!isBiometricsToggleOn)\n }}\n toggleTitle='Enable/Disable'\n />\n \n )}\n\n {state.errorMessage && (\n \n )}\n\n \n {\n handlers.login({\n userHasToggledBiometrics: isBiometricsToggleOn != isBiometricsEnabled,\n })\n }}\n disabled={shouldDisableSubmit}\n >\n {state.isBusy ? : 'Log In'}\n \n\n
    OR
    \n\n {\n trackSignUpClick('login-modal')\n handlers.signUp()\n }}\n data-tid-submit-signup\n >\n Join Now\n \n\n \n For assistance, please call 1300 36 36 88\n \n
    \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst LoginMainFooterStyled = styled('div')({\n marginBottom: '1.5rem',\n\n 'div[role=\"separator\"]': {\n display: 'flex',\n alignItems: 'center',\n margin: '2rem auto',\n maxWidth: '70%',\n fontSize: '1.3rem',\n color: hexColors.white,\n\n '&::before, &::after': {\n content: '\"\"',\n flex: 1,\n height: 1,\n margin: '0 0.5rem',\n background: hexColors.white,\n opacity: 0.5,\n },\n },\n\n 'a[href^=\"tel:\"]': {\n display: 'block',\n margin: '2.5rem 0',\n fontSize: '1.2rem',\n textAlign: 'center',\n textDecoration: 'none',\n color: hexColors.white,\n\n svg: {\n marginRight: '0.5rem',\n },\n },\n})\n\nconst BiometricsToggleWrapper = styled.div({\n '> div': {\n color: 'white',\n justifyContent: 'flex-end',\n margin: '3.9rem 0 1.4rem',\n gap: spacing.md,\n },\n})\n","import React from 'react'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { LoginFieldOptionsStyled } from '@core/Areas/Login/Login.styles'\n\nexport const Step1AccountNumberInput: React.FC = ({\n accountNumber,\n onAccountNumberChange,\n handleRecoverAccountNumber,\n}) => {\n return (\n <>\n
    \n \n\n \n \n \n \n
    \n \n )\n}\n\n// Types\nimport type { usePasswordReset } from '../hooks/usePasswordReset'\n\ntype Step1AccountNumberInputProps = Pick<\n ReturnType['handlers'],\n 'onAccountNumberChange'\n> &\n Pick['state'], 'accountNumber'> & {\n handleRecoverAccountNumber(): void\n }\n","import React from 'react'\nimport { getDeliveryMethodName, DeliveryMethods } from '../..'\nimport type { usePasswordReset } from '../hooks/usePasswordReset'\n\nexport const Step2SendVerification: React.FC = ({\n deliveryMethods,\n selectedDeliveryMethod,\n onDeliveryMethodChange,\n}) => {\n const isSingle = deliveryMethods.length === 1\n const title = isSingle\n ? `A verification code will be sent to your ${\n getDeliveryMethodName(deliveryMethods[0].type) === 'Email'\n ? 'email account'\n : 'phone via SMS'\n }`\n : 'Where should we send a verification code to?'\n\n return (\n <>\n \n\n \n \n )\n}\n\n// Types\n\ntype Step2SendVerificationProps = Pick<\n ReturnType['handlers'],\n 'onDeliveryMethodChange'\n> &\n Pick['state'], 'deliveryMethods' | 'selectedDeliveryMethod'>\n","import React from 'react'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { DeliveryMethodSent } from '../..'\nimport type { usePasswordReset } from '../hooks/usePasswordReset'\n\nexport const Step3VerifyCode: React.FC = ({\n validationCode,\n onValidationCodeChange,\n deliveryMethods,\n selectedDeliveryMethod,\n}) => {\n return (\n <>\n \n\n
    \n \n
    \n \n )\n}\n\n// =====\n// Types\n// =====\n\ntype Step3VerifyCodeProps = Pick<\n ReturnType['handlers'],\n 'onValidationCodeChange'\n> &\n Pick<\n ReturnType['state'],\n 'validationCode' | 'deliveryMethods' | 'selectedDeliveryMethod'\n >\n","import type { DeliveryMethodTypes } from './types'\n\nexport function getDeliveryMethodName(type: number): DeliveryMethodTypes {\n return type === 1 || type === 3 ? 'Email' : 'SMS'\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { DeliveryMethod } from './types'\nimport { getDeliveryMethodName } from './helpers'\n\nexport const DeliveryMethodSent: React.FC<{\n deliveryMethods: DeliveryMethod[]\n selectedDeliveryMethod?: DeliveryMethod['id']\n isValidationCode?: boolean\n}> = ({ deliveryMethods, selectedDeliveryMethod, isValidationCode = false }) => {\n const method = deliveryMethods.find(method => method.id === selectedDeliveryMethod)\n\n if (!method) return null\n\n const sendType = isValidationCode ? 'A validation code' : 'Your account number'\n const methodName = getDeliveryMethodName(method.id)\n\n return (\n \n {sendType} has been sent to\n your {methodName === 'Email' ? 'email account' : 'phone by SMS'}\n \n {method.redactedValue}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst DeliveryMethodSentNoticeStyled = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n color: hexColors.white,\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n\n strong: {\n fontSize: '2rem',\n fontWeight: 'normal',\n },\n\n svg: {\n margin: '0.5rem 0',\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { getDeliveryMethodName } from './helpers'\nimport type { DeliveryMethod, DeliveryMethodTypes } from './types'\n\nexport const DeliveryMethods: React.FC = ({\n deliveryMethods,\n onDeliveryMethodChange,\n selectedDeliveryMethod,\n}) => {\n const isSingle = deliveryMethods.length === 1\n return (\n \n {deliveryMethods.map(({ id, type, redactedValue }) => {\n const method: DeliveryMethodTypes = getDeliveryMethodName(type)\n const isChecked = selectedDeliveryMethod === id\n\n return (\n
  • \n \n\n \n
  • \n )\n })}\n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst DeliveryMethodsStyled = styled('ul')({\n listStyle: 'none',\n padding: 0,\n marginBottom: '2rem',\n\n li: {\n marginBottom: '0.5rem',\n },\n\n input: {\n display: 'none',\n },\n\n label: {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n padding: '1rem',\n background: hexColors.white,\n borderRadius: '0.5rem',\n opacity: 0.8,\n\n div: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n\n 'div:nth-of-type(2)': {\n marginLeft: '1rem',\n },\n\n 'div:last-of-type': {\n marginLeft: 'auto',\n\n svg: {\n opacity: 1,\n color: hexColors.citrus,\n },\n },\n\n 'span, strong, svg': {\n color: hexColors.black,\n },\n\n svg: {\n opacity: 0.5,\n },\n\n span: {\n fontSize: '1.4rem',\n margin: '0.5rem 0',\n },\n\n strong: {\n fontSize: '2rem',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n\n '&:active': {\n opacity: 1,\n },\n },\n\n 'input[type=\"radio\"]:checked + label': {\n opacity: 1,\n transform: 'scale(1.05)',\n margin: '1rem 0.5rem',\n },\n})\n\n// =====\n// Types\n// =====\n\ninterface DeliveryMethodsProps {\n deliveryMethods: DeliveryMethod[]\n onDeliveryMethodChange: React.ChangeEventHandler\n selectedDeliveryMethod?: number\n}\n","import { post } from '@classic/Foundation/Services/ApiService'\nimport type { DeliveryMethod } from '../..'\n\nconst enum LocalConstants {\n ApiRoot = '/$_/accountrecovery/RecoverPassword',\n GenericError = 'Sorry, something went wrong. Please try again.',\n}\n\n/** Used to get the available delivery methods to send validation code */\nexport const postDeliveryMethods = (body: {\n accountNumber: string\n}): Promise =>\n post({\n url: `${LocalConstants.ApiRoot}/deliveryMethods`,\n body,\n })\n .then(data => {\n if (data.deliveryMethods.length === 0) {\n return \"Sorry, we don't have a registered email or mobile number for this account. Please call to reset your password.\"\n }\n return data\n })\n .catch(err =>\n err.response?.status === 403\n ? 'Sorry password recovery for this account is currently disabled'\n : err.response?.status === 404\n ? 'Sorry the account number cannot be found'\n : LocalConstants.GenericError\n )\n\n/** Used to trigger sending of validation code if delivery method chosen */\nexport const postGenerateValidationCode = (\n body: PostGenerateValidationCodeBody\n): Promise =>\n post({\n url: `${LocalConstants.ApiRoot}/generateVerificationCode`,\n body,\n })\n .then(res => {\n if (!!res.expires && !!res.key) {\n return { expires: res.expires, key: res.key }\n }\n return LocalConstants.GenericError\n })\n .catch(() => {\n return LocalConstants.GenericError\n })\n\n/** Used to validate code sent to delivery method */\nexport const postValidateCode = async (body: PostValidateCodeBody): Promise => {\n try {\n await post({ url: `${LocalConstants.ApiRoot}/ValidateCode`, body })\n return { isSuccessful: true }\n } catch (err: unknown) {\n if (isErrorResponse(err)) {\n if (err.response.status !== 403) return LocalConstants.GenericError\n const errorRes = await err.response.json?.()\n if (errorRes.codeIncorrect) return 'Sorry the code you have provided is incorrect'\n if (errorRes.codeExpired) return 'Sorry this code has expired'\n }\n return LocalConstants.GenericError\n }\n}\n\n/** Used to change the password */\nexport const postChangePassword = async (body: PostChangePasswordBody): Promise => {\n try {\n const res = await post({\n url: `${LocalConstants.ApiRoot}/ChangePassword`,\n body,\n })\n if (isPasswordChangeSuccessResponse(res)) return { isSuccessful: true }\n if (res.errorCode && res.errorCode === 257) return 'Verification code provided has expired'\n return LocalConstants.GenericError\n } catch (err: unknown) {\n if (isErrorResponse(err)) {\n if (err.response.status === 400) {\n const errorRes = await err.response.json?.()\n if (errorRes.errorMessage) return errorRes.errorMessage\n }\n }\n return LocalConstants.GenericError\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction isErrorResponse(err: unknown): err is ErrorResponse {\n return !!(err && typeof err === 'object' && 'response' in err)\n}\n\nfunction isPasswordChangeSuccessResponse(\n res: PostChangePasswordResponse\n): res is PostChangePasswordResponseSuccess {\n return 'id' in res\n}\n\n// =====\n// Types\n// =====\n\ntype ApiReturn = string | { isSuccessful: true }\n\n// Step 1\ninterface PostDeliveryMethodsResponse {\n accountNumber: string\n deliveryMethods: DeliveryMethod[]\n}\n\n// Step 2\ninterface PostGenerateValidationCodeBody {\n accountNumber: string\n deliveryMethod: DeliveryMethod\n}\ninterface PostGenerateValidationCodeResponse {\n accountNumber: string\n deliveryMethod: DeliveryMethod\n expires: string\n key: string\n}\ntype PostGenerateValidationCodeReturn =\n | {\n expires: string\n key: string\n }\n | string\n\n// Step 3\ninterface PostValidateCodeBody {\n accountNumber: string\n code: string\n expiries: string[]\n keys: string[]\n providedCodes: string[]\n}\ntype ErrorResponse = { response: Response }\n\n// Step 4\ninterface PostChangePasswordBody {\n accountNumber: string\n key: string\n plaintextPassword: string\n expires: string\n code: string\n}\ntype PostChangePasswordResponse = PostChangePasswordResponseFail | PostChangePasswordResponseSuccess\ninterface PostChangePasswordResponseFail {\n errorMessage: string | null\n errorCode: number | null\n accountNumber: string\n key: string\n code: string\n expires: string\n}\ninterface PostChangePasswordResponseSuccess {\n id: string\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport {\n ComplexPasswordObserve,\n CreatePassword,\n Reset,\n state$ as passwordState$,\n} from '@core/Areas/Password'\nimport { PasswordThemes } from '@core/Areas/Password/themes'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { trackLoginResetPasswordSuccess } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { NoticeBox, NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport type { usePasswordReset } from '../hooks/usePasswordReset'\nimport { getDeliveryMethodName } from '../../Shared/DeliveryMethods'\nimport { postChangePassword } from '../helpers/api'\n\n/** Step 4 is the final step, user should not be allowed to go back */\nexport const Step4SetNewPassword: React.FC = ({\n handleReturnToLogin,\n validationCode,\n accountNumber,\n selectedDeliveryMethod,\n currentValidationCodeRef,\n}) => {\n const plainPasswordRef = React.useRef(null)\n const [errorMessage, setErrorMessage] = React.useState()\n const [isPasswordChangeSuccessful, setIsPasswordChangeSuccessful] = React.useState(false)\n const [isValid, setIsValid] = React.useState(false)\n const [isBusy, setIsBusy] = React.useState(false)\n\n React.useEffect(() => {\n if (!isPasswordChangeSuccessful) return\n trackLoginResetPasswordSuccess(\n accountNumber,\n getDeliveryMethodName(selectedDeliveryMethod as number)\n )\n }, [isPasswordChangeSuccessful, accountNumber, selectedDeliveryMethod])\n\n React.useEffect(() => {\n const passwordSubscription = passwordState$.skip(1).subscribe(state => {\n plainPasswordRef.current = state.new\n setIsValid(state.isValidationSuccess)\n setErrorMessage(undefined)\n })\n\n return () => {\n passwordSubscription.dispose()\n Reset()\n }\n }, [])\n\n if (isPasswordChangeSuccessful) {\n return (\n <>\n \n\n \n Log in Now\n \n \n )\n }\n\n const handleChangePasswordClick = async () => {\n CreatePassword()\n setIsBusy(true)\n const { key = '', expires = '' } = currentValidationCodeRef.current || {}\n const res = await postChangePassword({\n accountNumber,\n key,\n expires,\n plaintextPassword: plainPasswordRef.current as string,\n code: validationCode,\n })\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n setIsPasswordChangeSuccessful(true)\n }\n\n return (\n <>\n {errorMessage && (\n \n )}\n\n \n \n \n\n \n {isBusy ? : 'Submit New Password'}\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrappedComponentStyled = styled('div')({\n ul: {\n marginTop: 0,\n },\n\n 'ul li': {\n fontSize: '1.2rem',\n },\n\n // Shared InputField component needs to be made more flexible, use important for now\n 'input[type=\"password\"], input[type=\"text\"]': {\n fontSize: '1.4rem !important',\n },\n})\n\n// =====\n// Types\n// =====\n\ntype Step4SetNewPasswordProps = {\n handleReturnToLogin(): void\n currentValidationCodeRef: React.MutableRefObject<\n | {\n expires: string\n key: string\n }\n | undefined\n >\n} & Pick<\n ReturnType['state'],\n 'accountNumber' | 'validationCode' | 'selectedDeliveryMethod'\n>\n","import React from 'react'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Pagination } from '@core/Components/Pagination'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\nimport { NoticeBoxSingle, NoticeBoxTypes } from '@core/Components/NoticeBox'\nimport { RecoverFooter } from '@core/Areas/Login/Components'\nimport {\n Step1AccountNumberInput,\n Step2SendVerification,\n Step3VerifyCode,\n Step4SetNewPassword,\n} from './Components'\nimport { usePasswordReset } from './hooks/usePasswordReset'\nimport type { useLoginState } from '@core/Areas/Login/hooks/useLoginState'\n\nexport const PasswordReset: React.FC = ({\n accountNumber: initialAccountNumber,\n setWorkflowState,\n handleSignUp,\n}) => {\n const { state, handlers } = usePasswordReset({\n initialAccountNumber,\n setWorkflowState,\n })\n\n const isValid =\n (state.currentStep === 1 && !!state.accountNumber) ||\n (state.currentStep === 2 && !!state.selectedDeliveryMethod) ||\n (state.currentStep === 3 && !!state.validationCode)\n const shouldDisableNext = state.isBusy || !isValid\n\n const handleRecoverAccountNumber = () => setWorkflowState('Account Number Recovery')\n const handleReturnToLogin = () => setWorkflowState('Login')\n\n return (\n <>\n
    \n \n
    \n\n {state.currentStep === 1 && (\n \n )}\n\n {state.currentStep === 2 && (\n \n )}\n\n {state.currentStep === 3 && (\n \n )}\n\n {state.currentStep === 4 ? (\n \n ) : (\n <>\n {state.errorMessage && (\n \n )}\n\n \n \n \n Back\n \n \n\n \n \n {state.isBusy ? : 'Next'}\n \n \n \n\n \n \n )}\n \n )\n}\n\n// =====\n// Types\n// =====\n\ninterface PasswordResetProps {\n accountNumber: string\n setWorkflowState: ReturnType['handlers']['setWorkflow']\n handleSignUp(): void\n}\n","import React from 'react'\nimport { postDeliveryMethods, postGenerateValidationCode, postValidateCode } from '../helpers/api'\nimport type { useLoginState } from '../../../hooks/useLoginState'\nimport type { DeliveryMethod } from '../../Shared/DeliveryMethods/types'\n\nexport const usePasswordReset = ({\n initialAccountNumber,\n setWorkflowState,\n}: UserPasswordResetArgs) => {\n const currentValidationCodeRef = React.useRef<{ expires: string; key: string }>()\n\n const [currentStep, setCurrentStep] = React.useState(1)\n\n const [accountNumber, setAccountNumber] = React.useState(initialAccountNumber)\n const [selectedDeliveryMethod, setSelectedDeliveryMethod] = React.useState()\n const [deliveryMethods, setDeliveryMethods] = React.useState([])\n const [validationCode, setValidationCode] = React.useState('')\n\n const [errorMessage, setErrorMessage] = React.useState()\n const [isBusy, setIsBusy] = React.useState(false)\n\n const onAccountNumberChange: React.ChangeEventHandler = e => {\n setAccountNumber(e.target.value)\n if (errorMessage) setErrorMessage(undefined)\n }\n\n const onValidationCodeChange: React.ChangeEventHandler = e => {\n setValidationCode(e.target.value)\n if (errorMessage) setErrorMessage(undefined)\n }\n\n const onDeliveryMethodChange: React.ChangeEventHandler = e => {\n setSelectedDeliveryMethod(Number(e.target.value))\n if (errorMessage) setErrorMessage(undefined)\n }\n\n const handleNextClick = async () => {\n if (errorMessage) setErrorMessage(undefined)\n\n if (currentStep === 1 && !!accountNumber) {\n setIsBusy(true)\n const res = await postDeliveryMethods({ accountNumber })\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n\n setDeliveryMethods(res.deliveryMethods)\n if (res.deliveryMethods.length === 1) setSelectedDeliveryMethod(res.deliveryMethods[0].id)\n return setCurrentStep(2)\n }\n\n if (currentStep === 2 && !!selectedDeliveryMethod) {\n if (validationCode) setValidationCode('')\n const deliveryMethod = deliveryMethods.find(method => method.id === selectedDeliveryMethod)\n if (!deliveryMethod) return setCurrentStep(1)\n\n setIsBusy(true)\n const res = await postGenerateValidationCode({ accountNumber, deliveryMethod })\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n\n currentValidationCodeRef.current = { expires: res.expires, key: res.key }\n return setCurrentStep(3)\n }\n\n if (currentStep === 3 && !!validationCode && !!currentValidationCodeRef.current) {\n setIsBusy(true)\n const { key, expires } = currentValidationCodeRef.current\n const res = await postValidateCode({\n accountNumber,\n keys: [key],\n expiries: [expires],\n code: validationCode,\n providedCodes: [validationCode],\n })\n setIsBusy(false)\n if (typeof res === 'string') return setErrorMessage(res)\n return setCurrentStep(4)\n }\n }\n\n const handleBackClick = () => {\n if (currentStep === 1) setWorkflowState('Login')\n else setCurrentStep(curr => (curr - 1) as Steps)\n setErrorMessage(undefined)\n }\n\n return {\n state: {\n accountNumber,\n currentStep,\n currentValidationCodeRef,\n deliveryMethods,\n errorMessage,\n isBusy,\n selectedDeliveryMethod,\n validationCode,\n },\n handlers: {\n onAccountNumberChange,\n onDeliveryMethodChange,\n onValidationCodeChange,\n nextClick: handleNextClick,\n backClick: handleBackClick,\n },\n }\n}\n\n// =====\n// Types\n// =====\ninterface UserPasswordResetArgs {\n initialAccountNumber: string\n setWorkflowState: ReturnType['handlers']['setWorkflow']\n}\n\ntype Steps = 1 | 2 | 3 | 4\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { callCenterPhoneNumber } from '@mobi/utils'\nimport { hexColors } from '@mobi/settings'\n\nexport const RecoverFooter: React.FC = ({ isSignUpVisible, handleSignUp }) => {\n return (\n \n \n \n \n For assistance, please call\n \n 1300 36 36 88\n \n \n \n\n {isSignUpVisible && (\n \n \n \n )}\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst RecoverFooterStyled = styled('div')({\n margin: '5rem 0 2rem',\n\n 'a, button': {\n display: 'block',\n textAlign: 'center',\n fontSize: '1.2rem',\n color: hexColors.white,\n textDecoration: 'none',\n width: '100%',\n border: 0,\n background: 0,\n padding: 0,\n margin: 0,\n\n span: {\n lineHeight: 1,\n display: 'block',\n },\n\n '& span:nth-of-type(2)': {\n marginTop: '0.5rem',\n fontSize: '1.6rem',\n },\n\n svg: {\n verticalAlign: 'middle',\n },\n },\n})\n\n// =====\n// Types\n// =====\ninterface RecoverFooterProps {\n isSignUpVisible: boolean\n handleSignUp(): void\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { attemptLogin } from './helpers'\nimport { initializeWithCountIfNotInitialized } from '@mobi/account/Areas/Deposit/Utils'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { state$ as navigationState$ } from '@core/State/Navigation/driver'\nimport { setIsLoginShown } from './Store'\nimport { getIsLoginShown } from './Store/selectors'\nimport { LoginContainerStyled } from './Login.styles'\nimport { navigateToChangeTempPassword } from '@core/Areas/ChangePassword/ChangeTemporaryPassword'\nimport { trackLoginSuccess } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useLoginState } from './hooks'\nimport { triggerBiometricsPrompt } from '@core/Areas/Login/helpers/'\nimport { LoginMain, PasswordReset, AccountNumberRecovery } from './Components'\n\nexport const Login: React.FC = () => {\n const dispatch = useDispatch()\n const isLoginShown = useSelector(getIsLoginShown)\n\n React.useEffect(() => {\n const subscription = navigationState$\n .map(navState => navState.toJS().currentUrl)\n .skip(1)\n .distinctUntilChanged()\n .subscribe(() => dispatch(setIsLoginShown({ shouldShow: false })))\n\n return () => subscription?.dispose()\n }, [dispatch])\n\n return isLoginShown ? : null\n}\n\nconst LoginOverlay = React.memo(() => {\n const loginContainerRef = useBodyScrollLock()\n const { state, handlers } = useLoginState()\n const { performLoginSuccessActions } = handlers\n const [isAttemptingLogin, setIsAttemptingLogin] = React.useState(false)\n\n const handleOutdatedBiometricsCredentials = () => {\n handlers.setErrorMessage(\n 'Your PIN/Biometrics is invalid. Please login using your account number and password.'\n )\n }\n\n React.useEffect(() => {\n const disposeBiometricsPrompt = triggerBiometricsPrompt({\n onSuccess: (accountNumber: number, password: string) => {\n setIsAttemptingLogin(true)\n attemptLogin({\n accountNumber,\n password,\n rememberAccount: true,\n keepLoggedIn: true,\n loginViaBioAuth: true,\n }).then(res => {\n if (res.isSuccessful) {\n performLoginSuccessActions()\n initializeWithCountIfNotInitialized(accountNumber, 2)\n trackLoginSuccess(accountNumber.toString(), true, true, true)\n } else {\n setIsAttemptingLogin(false)\n if (res.mustChangePassword) {\n navigateToChangeTempPassword({ accountNumber: accountNumber.toString(), password })\n } else {\n handleOutdatedBiometricsCredentials()\n }\n }\n })\n },\n })\n\n return () => {\n disposeBiometricsPrompt()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []) // run once on mount but don't rerender with performLoginSuccessActions\n\n return (\n \n

    \n {state.workflow}\n \n \n \n

    \n\n
    \n {state.workflow === 'Login' && }\n\n {state.workflow === 'Password Reset' && (\n \n )}\n\n {state.workflow === 'Account Number Recovery' && (\n handlers.setWorkflow('Login')}\n />\n )}\n
    \n
    \n )\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { SpinnerInlineStyled } from '@mobi/component-library/Common/Spinner/Spinner.styles'\n\nexport const SettingItem: React.FC<{\n label: string\n desciption?: string\n isLoading?: boolean\n rightComponent?: React.ReactNode\n bottomComponent?: React.ReactNode\n onClick?: React.MouseEventHandler\n}> = ({ label, desciption = '', isLoading = false, rightComponent, bottomComponent, onClick }) => {\n const settingNameKebabCase = label.toLowerCase().replace(/ /g, '-')\n\n return (\n \n
    \n

    \n {label} {isLoading && }\n

    \n {desciption}\n\n
    {bottomComponent}
    \n
    \n\n
    {rightComponent}
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n borderBottom: '0.1rem solid ' + hexColors.veryLightGrey,\n padding: '1.5rem 0',\n margin: '0 1rem',\n fontSize: '1.2rem',\n color: hexColors.dimGrey,\n\n '&:last-of-type': { borderBottom: 0 },\n\n '> div:first-of-type': {\n flex: 1,\n\n '> h3': {\n display: 'flex',\n alignItems: 'center',\n minHeight: '2.4rem',\n padding: 0,\n margin: 0,\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: 1.2,\n textAlign: 'left',\n textTransform: 'capitalize',\n background: 'none',\n color: hexColors.nero,\n\n span: { marginLeft: '0.5rem' },\n },\n\n // Bottom Component\n '> div': {\n marginTop: '0.5rem',\n },\n },\n\n // Right Component\n '> div:last-of-type': {\n paddingLeft: '0.5rem',\n\n ':empty': { display: 'none' },\n },\n})\n","import React from 'react'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { updateUserSettingsOnDataLayer } from '@core/Services/Analytics/helpers'\nimport { usePrevious } from '@core/Utils/hooks'\nimport { store } from '@core/Store'\nimport { SettingItem } from '../SettingItem'\n\nexport const SettingItemWithCheckbox: React.FC<{\n isEnabled: boolean\n label: string\n onToggle: () => void\n desciption?: string\n isLoading?: boolean\n shouldDisable?: boolean\n}> = ({\n isEnabled,\n label,\n onToggle,\n desciption = '',\n shouldDisable = false,\n isLoading = false,\n}) => {\n const prevIsEnabled = usePrevious(isEnabled)\n const settingNameKebabCase = label.toLowerCase().replace(/ /g, '-')\n\n React.useEffect(() => {\n if (\n [typeof prevIsEnabled, typeof isEnabled].every(val => val === 'boolean') &&\n prevIsEnabled !== isEnabled\n ) {\n trackSettingChange(settingNameKebabCase, isEnabled)\n }\n }, [isEnabled, settingNameKebabCase, prevIsEnabled])\n\n return (\n {\n e.preventDefault()\n if (shouldDisable) return\n onToggle()\n }}\n label={label}\n isLoading={isLoading}\n desciption={desciption}\n rightComponent={\n \n }\n data-testid={`setting-item-${settingNameKebabCase}`}\n />\n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction trackSettingChange(setting: string, isOn: boolean) {\n trackEvent('profile-settings-change', { setting, isOn })\n const appState = store.getState()\n updateUserSettingsOnDataLayer(appState)\n}\n","import React from 'react'\nimport { useMutation } from 'react-query'\nimport { isReactNativeAndroid } from '@mobi/web-native-comms/web'\nimport { get } from '@classic/Foundation/Services/ApiService'\nimport { useLogon } from '@core/Utils/hooks'\nimport { SettingItemWithCheckbox } from '../Common/SettingItemWithCheckbox'\nimport { checkNotificationStatusAsync, ShowNotificationAuthPopup } from './PayoutNotificationPopup'\n\n// DEV testing, use this status response:\n// const pushAuthStatus = {\n// fcmRegistrationToken: 'FAKE_TOKEN_1',\n// status: 'Authorized',\n// }\n\nexport const PayoutNotification: React.FC = () => {\n const { accountNumber } = useLogon()\n const [isEnabled, setIsEnabled] = React.useState(null)\n\n React.useEffect(() => {\n checkAccountToken(accountNumber)\n .then(isEnabled => {\n if (typeof isEnabled !== 'boolean') return\n setIsEnabled(isEnabled)\n })\n .catch()\n }, [accountNumber])\n\n const { mutate, isLoading } = useMutation(\n ({ accountNumber, isEnabled }) => onToggleCreditAlerts({ accountNumber, isEnabled }),\n { onSuccess: () => setIsEnabled(curr => !curr) }\n )\n\n if (isEnabled === null) return null\n\n return (\n mutate({ accountNumber, isEnabled })}\n shouldDisable={isLoading}\n isLoading={isLoading}\n />\n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nexport async function checkAccountToken(accountNumber: number | null) {\n if (!accountNumber) return\n\n const pushAuthStatus = await checkNotificationStatusAsync()\n if (!pushAuthStatus) return\n\n const response = await get<{ enabled: boolean }>({\n url: `/api/credit-alerts/registrationStatus?accountNumber=${accountNumber}&fcmToken=${pushAuthStatus.fcmRegistrationToken}`,\n opts: { credentials: 'include' },\n })\n\n return response.enabled\n}\n\nasync function onToggleCreditAlerts({\n accountNumber,\n isEnabled,\n}: {\n accountNumber: number | null\n isEnabled: boolean\n}) {\n const pushAuthStatus = await checkNotificationStatusAsync()\n\n if (pushAuthStatus.status !== 'Authorized' && !isEnabled) {\n ShowNotificationAuthPopup({\n reason:\n 'Notifications must be enabled on TABtouch to receive payout alerts. Enable notifications then try again.',\n notificationAuthStatus: pushAuthStatus.status,\n })\n return\n }\n\n // populate JSON payload,\n // http://gitlab.rwwa.com.au/rwwa-aws/tabtouch-credit-alerts/-/blob/master/TabTouch.CreditAlerts.Api/README.md\n const body = JSON.stringify({\n accountNumber: accountNumber,\n fcmToken: pushAuthStatus.fcmRegistrationToken,\n enable: !isEnabled,\n deepLink: `${window.location.origin}/#account/activity/results`,\n isAndroid: isReactNativeAndroid,\n })\n\n await fetch('/api/credit-alerts/register', {\n method: 'post',\n credentials: 'include',\n body,\n })\n}\n\n// =====\n// Types\n// =====\n\ntype OnToggleParams = Parameters[0]\n","import { updateDataLayer } from '@classic/Foundation/Analytics/Analytics'\nimport {\n getEnhancedBetslipSetting,\n isHapticFeedbackSettingEnabled,\n} from '@core/Areas/Settings/Store/selectors'\nimport type { RootState } from '@core/Store'\nimport { checkAccountToken } from '@core/Areas/Settings/Components/PayoutNotification/PayoutNotification'\nimport { getRememberAccountNumber } from '@core/Areas/Login/helpers/api'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\n\nexport async function updateUserSettingsOnDataLayer(appState: RootState) {\n const isEnhancedBetslipEnabled = getEnhancedBetslipSetting(appState)\n const isHapticsEnabled = isHapticFeedbackSettingEnabled(appState)\n\n updateDataLayer({\n user: { isHapticsEnabled, isEnhancedBetslipEnabled },\n })\n\n if (isReactNativeApp) {\n const samplingRate = PRODUCTION ? 0.01 : 1\n if (Math.random() < samplingRate) {\n const isPayoutNotificationsEnabled = await getPayoutNotificationEnabled()\n if (typeof isPayoutNotificationsEnabled === 'boolean') {\n updateDataLayer({\n user: { isPayoutNotificationsEnabled },\n })\n }\n }\n }\n}\n\nexport async function getPayoutNotificationEnabled() {\n try {\n const accountNumber = await getRememberAccountNumber()\n if (typeof accountNumber === 'undefined') return null\n const isEnabled = await checkAccountToken(accountNumber)\n if (typeof isEnabled !== 'boolean') return null\n return isEnabled\n } catch {\n return null\n }\n}\n","import React from 'react'\nimport { store } from '@core/Store'\nimport { updateUserSettingsOnDataLayer } from '../helpers'\n\n/** After redux persist has updated store, init data layer with values */\nexport const useInitAnalyticsDataLayer = () => {\n React.useEffect(() => {\n updateAnalyticsDataLayer()\n }, [])\n}\n\n// =============\n// Local Helpers\n// =============\n\nasync function updateAnalyticsDataLayer() {\n const appState = store.getState()\n updateUserSettingsOnDataLayer(appState)\n}\n","import { setSkyVideoPlayerStatus } from '@core/Areas/SkyVideoPlayer/Store'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { useEffect } from 'react'\n\nexport const useAutoFullscreenOnNativeLandscape = () => {\n const dispatch = useAppDispatch()\n const playerStatus = useAppSelector(state => state.skyVideoPlayer.playerStatus)\n\n useEffect(() => {\n if (!isReactNativeApp) return\n\n const setFullscreen = (isFullscreen: boolean) =>\n dispatch(\n setSkyVideoPlayerStatus({\n playerStatus: isFullscreen ? 'fullscreen' : 'docked',\n })\n )\n\n const portrait = window.matchMedia('(orientation: portrait)')\n\n const handleOrientationChange = (e: MediaQueryListEvent) => {\n if (playerStatus !== 'docked') return\n\n // Landscape\n if (!e.matches) {\n setFullscreen(true)\n } else {\n // Portrait\n setFullscreen(false)\n }\n }\n portrait.addEventListener('change', handleOrientationChange)\n\n return () => {\n portrait.removeEventListener('change', handleOrientationChange)\n }\n }, [dispatch, playerStatus])\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, measurements, spacing, layering } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { useLogon } from '@core/Utils/hooks'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport { showLogin } from '@core/Areas/Login/helpers'\nimport { store } from '@core/Store'\nimport { useAppSelector } from '@core/Store/hooks'\nimport {\n selectIsDockedSkyVideoPlayerOpen,\n selectIsSkyVideoPlayerOpen,\n selectVideoPlayerChannel,\n} from '@core/Areas/SkyVideoPlayer/Store/selectors'\nimport {\n setCloseSkyVideoPlayer,\n setSkyDockedPlayerHeight,\n setSkyVideoPlayerStatus,\n} from '@core/Areas/SkyVideoPlayer/Store'\nimport { VideoPlayer } from '@core/Areas/SkyVideoPlayer/Components/VideoPlayer/VideoPlayer'\nimport { DOCKED_EXPAND_ANIMATION_MS } from './constants'\nimport { useAutoFullscreenOnNativeLandscape } from './Hooks/useAutoFullscreenOnNativeLandscape'\n\nconst enum LocalConstants {\n LoginPromptClass = 'js-sky-docked__login',\n}\n\nexport const DockedPlayer: React.FC<{ isOnSkyRacePage?: boolean }> = ({ isOnSkyRacePage }) => {\n useAutoFullscreenOnNativeLandscape()\n const isOnSkyRacePageRef = React.useRef(isOnSkyRacePage)\n const isDockedPlayerOpen = useAppSelector(selectIsDockedSkyVideoPlayerOpen)\n const currentChannel = useAppSelector(selectVideoPlayerChannel)\n\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: DOCKED_EXPAND_ANIMATION_MS,\n })\n\n const { isLoggedIn } = useLogon()\n\n // Control sky video show/hide animation\n React.useEffect(() => {\n toggleExpanded(isDockedPlayerOpen)\n }, [isDockedPlayerOpen, toggleExpanded])\n\n React.useEffect(() => {\n if (isLoggedIn === null) return\n if (isOnSkyRacePageRef.current) {\n const channel = 'Sky2' === currentChannel ? currentChannel : 'Sky1'\n store.dispatch(\n setSkyVideoPlayerStatus({\n playerStatus: 'docked',\n selectedChannel: channel,\n })\n )\n }\n return () => {\n if (!isLoggedIn) {\n store.dispatch(setCloseSkyVideoPlayer({ shouldTrack: false }))\n } else if (isLoggedIn && selectIsSkyVideoPlayerOpen(store.getState())) {\n store.dispatch(setSkyVideoPlayerStatus({ playerStatus: 'floating' }))\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoggedIn])\n\n // Update docked player height in store, used in pinned elements\n React.useEffect(() => {\n if (!contentRef.current || !isExpanded) {\n store.dispatch(setSkyDockedPlayerHeight(null))\n return\n }\n\n const el = contentRef.current\n const setHeight = () =>\n store.dispatch(setSkyDockedPlayerHeight(el.getBoundingClientRect().height))\n setHeight()\n // Wrap w/ setTimeout to prevent uncaught error \"ResizeObserver loop completed with undelivered notifications\"\n const observer = new ResizeObserver(() => setTimeout(setHeight, 0))\n observer.observe(el)\n return () => observer.disconnect()\n }, [isExpanded, contentRef])\n\n if (!isExpanded && !shouldRender) return null\n\n return (\n \n
    \n <>\n {isLoggedIn ? (\n \n ) : (\n
    \n
    \n

    Please log in

    \n Watch live racing for free with your account.\n \n
    \n
    \n )}\n \n
    \n
    \n )\n}\n\nconst WrapperStyled = styled.div({\n position: 'sticky',\n top: -1,\n zIndex: layering.pagePopoverElements + 1,\n maxWidth: measurements.mobi.maxWidth,\n margin: '0 auto',\n background: colors.black,\n\n overflow: 'hidden',\n transition: `height ${DOCKED_EXPAND_ANIMATION_MS}ms ease`,\n willChange: 'height',\n height: 0,\n\n '> div': {\n margin: '0 auto',\n minWidth: '25rem',\n\n '@supports (aspect-ratio: 16 / 9)': {\n maxHeight: '35vh',\n aspectRatio: '16 / 9',\n },\n\n '@supports not (aspect-ratio: 16 / 9)': {\n // padding % is based on parent width, hence maxWidth on parent here\n // video player aspect ratio fallback uses padding ratio technique\n maxWidth: '60vh',\n },\n },\n\n [`.${LocalConstants.LoginPromptClass}`]: {\n position: 'relative',\n overflow: 'hidden',\n\n height: 0,\n paddingTop: 'min(56.25%, 100vh)', // 16:9\n\n '@supports (aspect-ratio: 16 / 9)': {\n height: 'auto',\n aspectRatio: '16 / 9',\n paddingTop: 0,\n },\n\n '> div': {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n backgroundColor: colors.lavender[900],\n\n h4: {\n fontFamily: font.family.primary,\n fontSize: font.size.xl2.fontSize,\n letterSpacing: font.size.xl2.letterSpacing,\n lineHeight: font.size.xl2.lineHeight,\n fontWeight: font.weight.semibold,\n color: colors.white,\n margin: 0,\n marginBottom: spacing.md,\n },\n\n '> span': {\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.neutral[300],\n marginBottom: spacing.big,\n },\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport * as iconPaths from '@mobi/component-library/Common/Icon/iconPaths'\nimport { Icon } from '@mobi/component-library/Common/Icon'\n\nexport const SecondaryHeader: React.FC<{\n title: string\n isExpanded?: boolean\n icon?: keyof typeof iconPaths\n}> = ({ isExpanded = false, title, icon }) => {\n return (\n \n {title}\n \n {icon && }\n \n \n \n )\n}\n\n// Styles\n\nconst HeaderStyled = styled.h3({\n display: 'flex',\n alignItems: 'center',\n minHeight: '4rem',\n marginTop: '0.5rem',\n marginBottom: 0,\n paddingLeft: '1rem',\n fontWeight: 'bold',\n textTransform: 'none',\n lineHeight: 1,\n color: hexColors.white,\n backgroundColor: hexColors.nightRider,\n\n 'span:first-of-type': {\n flex: 1,\n },\n\n 'span:last-of-type': {\n display: 'flex',\n alignItems: 'center',\n\n 'svg:last-of-type': {\n marginLeft: '1rem',\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { MarketDataTransferObject, RacePageDTO } from '@mobi/api-types'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { SecondaryHeader } from '../Common/SecondaryHeader'\nimport { FixedOddsMarketDisplayNames, BettingInformationOverrides } from '../../constants'\nimport { getCurrentBetType, getToteSwapOptions } from '../../Store/selectors'\n\nexport const BettingInfo: React.FC<{\n raceData?: RacePageDTO\n}> = ({ raceData }) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const currentBetType = useAppSelector(getCurrentBetType)\n const isStartingPriceAvailable = useAppSelector(getToteSwapOptions).includes('SP')\n\n if (!raceData || currentBetType !== BetType.WinPlace) return null\n\n const fixedOddsInfo = raceData.MeetingInformation.SelectedRace.FixedOddsInfo\n const fixedOddsMarkets = raceData.FixedOddsMarkets || []\n\n if (!(fixedOddsMarkets.length > 0) && !fixedOddsInfo && !isStartingPriceAvailable) return null\n\n return (\n
    \n setIsExpanded(val => !val)}\n headerComponent={\n \n }\n >\n
    \n {!!fixedOddsInfo?.MarketSequence && (\n \n )}\n\n {isStartingPriceAvailable && (\n \n )}\n\n {fixedOddsMarkets.map(({ MarketName, MarketCode, BettingConditions, BettingRules }) => (\n \n ))}\n
    \n \n
    \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst Info: React.FC<\n Pick\n> = ({ MarketName, BettingConditions, BettingRules }) => (\n \n

    \n {MarketName}\n

    \n
    \n
    \n
    Betting Conditions
    \n
    {BettingConditions}
    \n
    Betting Rules
    \n
    {BettingRules}
    \n
    \n
    \n
    \n)\n\n// ======\n// Styles\n// ======\n\nconst CardStyled = styled.div({\n backgroundColor: hexColors.white,\n boxShadow: '0 -1px 0 0 #eee, 0 0 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.24)',\n padding: '0.5rem',\n\n h4: {\n margin: '1rem 0',\n fontSize: '1.2rem',\n textAlign: 'left',\n\n span: {\n padding: '0.5rem',\n backgroundColor: hexColors.nightRider,\n color: '#fff',\n },\n },\n\n '& > div': {\n marginBottom: 0,\n marginTop: '0.5rem',\n fontSize: '1.2rem',\n },\n\n dt: { fontWeight: 'bold' },\n\n dd: {\n marginLeft: 0,\n marginBottom: '1rem',\n lineHeight: 1.5,\n },\n})\n","import React from 'react'\nimport * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport { RacePageDataTransferObject } from '@mobi/api-types'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { useObservableImmutable } from '@core/Utils/hooks'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport {\n mysteryRaceBettingPageWrapperState$,\n RaceBettingPageMysterySelection,\n ClearRaceBettingPageMysterySelection,\n} from './MysteryRaceBettingPageWrapperDriver'\nimport { MysteryContainerStyled } from './Mystery.styles'\nimport { MysteryQuickPicks } from './Components/MysteryQuickPick'\nimport { betFromRaceBettingPageQuickPick } from './utils'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport {\n ExpandablePanelTitleStyled,\n IconStyled,\n ExpandablePanelHeaderStyled,\n} from '@core/Components/ExpandablePanel/ExpandablePanel.styles'\nimport { createRaceObjectFromResponse } from '@core/Data/Racing'\n\nexport const MysteryQuickPicksRaceBettingPageWrapper: React.FC<{\n meetingInformation: RacePageDataTransferObject['MeetingInformation']\n}> = ({ meetingInformation }) => {\n const [isPanelExpanded, setPanelExpanded] = React.useState(true)\n const dispatch = useAppDispatch()\n\n const { selectedKey } = useObservableImmutable(mysteryRaceBettingPageWrapperState$, [\n 'selectedKey',\n ])\n\n React.useEffect(() => {\n if (selectedKey) {\n amplify.publish('clear-all-selections-command')\n dispatch(setSelectedProposition(null))\n }\n }, [selectedKey, dispatch])\n\n React.useEffect(() => {\n amplify.subscribe('selection-made-command', ClearRaceBettingPageMysterySelection)\n return () => {\n amplify.unsubscribe('selection-made-command', ClearRaceBettingPageMysterySelection)\n }\n }, [])\n\n const selectionCallback = (key: string) => {\n RaceBettingPageMysterySelection(key)\n }\n\n const HeaderComponent = customHeader(isPanelExpanded)\n\n return (\n <>\n \n setPanelExpanded(!isPanelExpanded)}\n expanded={isPanelExpanded}\n dataTidValue='mystery-bet'\n headerComponent={HeaderComponent}\n >\n \n \n \n\n \n betFromRaceBettingPageQuickPick(\n selectedKey,\n createRaceObjectFromResponse(meetingInformation)\n )\n }\n dataTId='mystery-buttons'\n />\n \n )\n}\n\nconst customHeader = (isExpanded: boolean) => {\n return (\n \n \n \n Mystery Bet\n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nconst RADIUS = 40\nconst STARTX = 10\nconst STARTY = 50\n\nconst defaultPath = 'M0,0'\n\nexport const RatingTacho = ({ rating }: { rating: number }) => {\n if (!rating) {\n return null\n }\n\n return (\n \n \n \n \n \n \n {rating}\n \n \n \n )\n}\n\nexport const blueArcPath = (rating: number) => {\n if (rating <= 0) {\n return defaultPath\n }\n if (rating <= 100) {\n return arcPath(rating)\n }\n if (rating <= 150) {\n return arcPath(100)\n }\n return defaultPath\n}\n\nexport const orangeArcPath = (rating: number) => {\n if (rating <= 100) {\n return defaultPath\n }\n if (rating <= 150) {\n return arcPath(50)\n }\n return arcPath(100)\n}\n\nconst arcPath = (clampedRating: number) => {\n const θ = Math.PI * 1e-2 * clampedRating\n const endX = RADIUS * (1.0 - Math.cos(θ))\n const endY = -RADIUS * Math.sin(θ)\n return `M${STARTX},${STARTY}a${RADIUS},${RADIUS} 0 0 1 ${endX},${endY}`\n}\n","import styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\n\nexport const MarketPropositionStyled = styled('li')({\n display: 'flex',\n padding: '1rem 0',\n borderBottom: `1px solid ${hexColors.whiteSmoke}`,\n\n '&:last-of-type': {\n borderBottom: 'none',\n },\n})\n\nexport const MarketPropositionIdSectionStyled = styled('div')({\n width: '2.5rem',\n paddingRight: '0.8rem',\n\n '& span': {\n display: 'block',\n marginBottom: '0.2rem',\n textAlign: 'center',\n fontSize: '1.2rem',\n fontWeight: 'bold',\n lineHeight: '1.6rem',\n },\n})\n\nexport const MarketPropositionInfoSectionStyled = styled('div')({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n})\n\nexport const MarketPropositionInfoStyled = styled('span')({\n fontSize: '1.1rem',\n lineHeight: '1.5rem',\n\n '& strong': {\n display: 'inline-block',\n minWidth: '1.5rem',\n },\n})\n\nexport const MarketPropositionInfoSubSectionStyled = styled('div')({\n display: 'flex',\n\n '& div': {\n display: 'flex',\n flexDirection: 'column',\n paddingRight: '1rem',\n },\n})\n\nexport const MarketPropositionHeaderStyled = styled('span')<{ isMatchedStarter: boolean }>(\n {\n marginBottom: '0.2rem',\n fontSize: '1.4rem',\n fontWeight: 'bold',\n lineHeight: '1.6rem',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n },\n ({ isMatchedStarter }) =>\n isMatchedStarter && {\n textTransform: 'uppercase',\n }\n)\n\nexport const MarketPropositionActionSectionStyled = styled('div')({\n display: 'flex',\n})\n\nexport const MarketPropositionSratchedStyled = styled('span')({\n display: 'flex',\n alignItems: 'center',\n color: '#fe0000', // SASS Only Color\n fontWeight: 'bold',\n fontSize: '1.2rem',\n lineHeight: '4rem',\n textTransform: 'uppercase',\n textAlign: 'center',\n})\n","import React from 'react'\nimport type {\n MarketCodesType,\n PropDataTransferObject,\n StarterDataTransferObject,\n} from '@mobi/api-types'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\nimport { SilkImage } from '@core/Components/SilkImage/SilkImage'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { getSelectedProposition } from '@core/Areas/RaceCard/Store/selectors'\nimport { RatingTacho } from '../RatingTacho/RatingTacho'\nimport {\n MarketPropositionStyled,\n MarketPropositionIdSectionStyled,\n MarketPropositionInfoSectionStyled,\n MarketPropositionHeaderStyled,\n MarketPropositionInfoSubSectionStyled,\n MarketPropositionInfoStyled,\n MarketPropositionActionSectionStyled,\n MarketPropositionSratchedStyled,\n} from './MarketProposition.styles'\n\nexport const MarketProposition: React.FC<{\n proposition: PropDataTransferObject\n marketCode: MarketCodesType\n meetingCode?: RaceCodes\n matchedStarter?: StarterDataTransferObject\n}> = ({ proposition, matchedStarter, marketCode, meetingCode }) => {\n const dispatch = useAppDispatch()\n const selectedProposition = useAppSelector(getSelectedProposition)\n\n const dataTid = `data-tid-${marketCode.toLowerCase()}-proposition`\n const dataTidProposition = `data-tid-proposition-sequence`\n\n const silkImage = matchedStarter?.SilkImages.largest\n const isDogsSilk = meetingCode ? meetingCode.toLowerCase() === 'dogs' : false\n const isSelected = !!(\n selectedProposition &&\n selectedProposition[0] === marketCode &&\n selectedProposition[1] === proposition.PropositionSequence\n )\n\n return (\n \n {matchedStarter?.Number && (\n \n {matchedStarter.Number}\n {silkImage && (\n \n )}\n \n )}\n\n \n \n {proposition.Description}\n \n\n \n
    \n {matchedStarter?.Barrier && (\n \n Br: {matchedStarter.Barrier}\n \n )}\n\n {matchedStarter?.JockeyWeight && (\n \n W: {matchedStarter.JockeyWeight}\n \n )}\n
    \n\n {!!matchedStarter?.Rating && }\n
    \n \n\n \n {proposition.IsScratched ? (\n Scratched\n ) : (\n \n dispatch(setSelectedProposition([marketCode, proposition.PropositionSequence]))\n }\n />\n )}\n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport {\n FixedOddsMarketCodes,\n MarketDataTransferObject,\n RacePageDataTransferObject,\n} from '@mobi/api-types'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { ExpandablePanelThemes } from '@core/Components/ExpandablePanel/themes'\nimport { RaceCodes } from '@core/Areas/Racing/Types/MeetingInformation'\nimport {\n getFobPriceChangeTopic,\n iotSubscribeTopics,\n iotUnsubscribeTopics,\n} from '@core/State/PushData'\nimport { FixedOddsMarketDisplayNames } from '@core/Areas/RaceCard/constants'\nimport { MarketProposition } from '../MarketProposition'\n\nexport const Market: React.FC<{\n market: MarketDataTransferObject\n raceData: RacePageDataTransferObject\n}> = ({ market, raceData }) => {\n const [isPanelExpanded, setPanelExpandedState] = React.useState(true)\n\n React.useEffect(() => {\n const topic = getFobPriceChangeTopic(market.MarketSequence.toString())\n iotSubscribeTopics([topic])\n return () => {\n iotUnsubscribeTopics([topic])\n }\n }, [market.MarketSequence])\n\n const marketDisplayName =\n FixedOddsMarketDisplayNames[market.MarketCode as keyof typeof FixedOddsMarketDisplayNames] ||\n market.MarketName\n\n const isMatchedWithStarters =\n market.MarketCode === FixedOddsMarketCodes.HeadToHead ||\n market.MarketCode === FixedOddsMarketCodes.RunnerVsField\n\n const meetingCode = isMatchedWithStarters && raceData.MeetingInformation.MeetingCode\n const selectedRaceStarters = isMatchedWithStarters\n ? raceData.RaceStarters.find(\n race => race.RaceKey.Key === raceData.MeetingInformation.SelectedRace.Key\n )\n : undefined\n\n if (\n (market.MarketCode === 'FAV' && market.Propositions.some(p => !p.Number)) ||\n (!(market.MarketCode === 'FAV') &&\n (market.Propositions.length !== 2 ||\n market.Propositions.some(p => p.IsScratched) ||\n market.Propositions.some(p => !p.Price)))\n ) {\n return null\n }\n\n return (\n \n setPanelExpandedState(curState => !curState)}\n expanded={isPanelExpanded}\n dataTidValue={marketDisplayName}\n >\n \n {market.Propositions.map(proposition => (\n starter.Number === proposition.Number\n )}\n marketCode={market.MarketCode}\n meetingCode={meetingCode as RaceCodes}\n />\n ))}\n \n \n \n )\n}\n\n// Styles\n\nconst MarketContainerStyled = styled('div')({\n marginBottom: '0.5rem',\n boxShadow: `0 0.1rem 0.1rem rgba(0, 0, 0, 0.1)`,\n})\n\nconst MarketListStyled = styled('ul')({\n padding: '0 0.8rem',\n margin: 0,\n background: 'white',\n})\n","import {\n FixedOddsMarketCodes,\n MarketDataTransferObject,\n RacePageDataTransferObject,\n} from '@mobi/api-types'\nimport { store } from '@core/Store'\nimport { createBetSelection } from './createBetSelection'\nimport { RaceCardState, setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\n\nexport const betWithSelection = (\n type: 'quickbet' | 'betslip',\n markets: MarketDataTransferObject[],\n selection: RaceCardState['selectedProposition'],\n race: RacePageDataTransferObject\n): void => {\n if (!selection) {\n return\n }\n\n const [selectedMarket, selectedProposition] = selection\n const market = markets.find(({ MarketCode }) => MarketCode === selectedMarket)\n\n if (!market) {\n clearFobMarketSelection()\n return\n }\n\n const proposition = market.Propositions.find(\n ({ PropositionSequence }) => PropositionSequence === selectedProposition\n )\n\n if (!proposition) {\n clearFobMarketSelection()\n return\n }\n\n const betSelection = createBetSelection({ market, proposition, raceData: race })\n\n if (type === 'quickbet') {\n handleBetSelection({\n betFlow: {\n location: 'Quickbet',\n options: {\n quickbetProps: {\n shouldShowSuperPicks: market.MarketCode === FixedOddsMarketCodes.Concession,\n },\n },\n },\n selection: betSelection,\n })\n\n return\n }\n\n if (type === 'betslip') {\n handleBetSelection({ betFlow: { location: 'Betslip' }, selection: betSelection })\n clearFobMarketSelection()\n }\n}\n\n// Local helpers\n\nconst clearFobMarketSelection = () => {\n store.dispatch(setSelectedProposition(null))\n}\n","import { RacePageDataTransferObject } from '@mobi/api-types'\nimport { store } from '@core/Store'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\nimport { createStartingPriceBetSelection } from './createBetSelection'\n\nexport const betWithStartingPrice = (\n type: 'quickbet' | 'betslip',\n starterNumber: number,\n race: RacePageDataTransferObject\n): void => {\n const selection = createStartingPriceBetSelection(starterNumber, race)\n\n if (type === 'quickbet') {\n handleBetSelection({\n betFlow: {\n location: 'Quickbet',\n options: { quickbetProps: { shouldShowSuperPicks: false } },\n },\n selection,\n })\n return\n }\n\n if (type === 'betslip') {\n handleBetSelection({ betFlow: { location: 'Betslip' }, selection })\n store.dispatch(setSelectedProposition(null))\n return\n }\n}\n","import React from 'react'\nimport {\n FixedOddsMarketCodes,\n type MarketDataTransferObject,\n type RacePageDataTransferObject,\n} from '@mobi/api-types'\nimport { FixedOddsMarketsInMoreBettingOptions } from '@core/Areas/RaceCard/constants'\nimport { BettingDrawer } from '@core/Components/BettingDrawer'\nimport { Market } from './Components/Market'\nimport { betWithSelection, betWithStartingPrice } from './Utils'\nimport { useFixedOddsMarkets } from './Hooks'\n\nexport const FixedOddsMarkets: React.FC<{ raceData: RacePageDataTransferObject }> = ({\n raceData,\n}) => {\n const { selectedProposition, isInsuranceAvailable, isStartingPriceAvailable } =\n useFixedOddsMarkets(raceData)\n\n const fixedOddsMarkets = filterMarketsForMoreBettingOptions(raceData.FixedOddsMarkets)\n\n if (!(fixedOddsMarkets.length > 0) && !isInsuranceAvailable && !isStartingPriceAvailable)\n return null\n\n const handleAddToBetslipClick = () => {\n if (!selectedProposition) return\n return selectedProposition[0] === FixedOddsMarketCodes.StartingPrice\n ? betWithStartingPrice('betslip', selectedProposition[1], raceData)\n : betWithSelection('betslip', raceData.FixedOddsMarkets, selectedProposition, raceData)\n }\n\n const handleQuickbetClick = () => {\n if (!selectedProposition) return\n return selectedProposition[0] === FixedOddsMarketCodes.StartingPrice\n ? betWithStartingPrice('quickbet', selectedProposition[1], raceData)\n : betWithSelection('quickbet', raceData.FixedOddsMarkets, selectedProposition, raceData)\n }\n\n return (\n <>\n {fixedOddsMarkets.map(market => (\n \n ))}\n\n \n \n )\n}\n\n// Local Helpers\n\nfunction filterMarketsForMoreBettingOptions(markets: MarketDataTransferObject[]) {\n return markets\n .filter(market => FixedOddsMarketsInMoreBettingOptions.includes(market.MarketCode))\n .sort(sortMarkets)\n}\n\nfunction sortMarkets(a: MarketDataTransferObject, b: MarketDataTransferObject) {\n return FixedOddsMarketsInMoreBettingOptions.indexOf(a.MarketCode) ===\n FixedOddsMarketsInMoreBettingOptions.indexOf(b.MarketCode)\n ? 0\n : FixedOddsMarketsInMoreBettingOptions.indexOf(a.MarketCode) >\n FixedOddsMarketsInMoreBettingOptions.indexOf(b.MarketCode)\n ? 1\n : -1\n}\n","import React from 'react'\nimport * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport { RacePageDataTransferObject } from '@mobi/api-types'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { getSelectedProposition } from '@core/Areas/RaceCard/Store/selectors'\nimport { ClearRaceBettingPageMysterySelection } from '@core/Areas/Racing/Components/Mystery/MysteryRaceBettingPageWrapperDriver'\nimport {\n setActiveToteSwap,\n setSelectedProposition,\n setToteSwapOptions,\n} from '@core/Areas/RaceCard/Store'\n\nexport const useFixedOddsMarkets = (raceData: RacePageDataTransferObject) => {\n const dispatch = useAppDispatch()\n const selectedProposition = useAppSelector(getSelectedProposition)\n\n // Clear Win/Place selections on FixedOddsMarkets selection\n React.useEffect(() => {\n if (selectedProposition) {\n amplify.publish('clear-all-selections-command')\n ClearRaceBettingPageMysterySelection()\n }\n }, [selectedProposition])\n\n // Clear FixedOddsMarkets selection on Win/Place selections\n React.useEffect(() => {\n const clearFobMarketSelection = () => dispatch(setSelectedProposition(null))\n amplify.subscribe('selection-made-command', clearFobMarketSelection)\n return () => {\n amplify.unsubscribe('selection-made-command', clearFobMarketSelection)\n }\n }, [dispatch])\n\n // Capture additional fixed odds markets for display elsewhere\n const isInsuranceAvailable = raceData.FixedOddsMarkets.some(market => market.MarketCode === 'CON')\n const isStartingPriceAvailable =\n raceData.MeetingInformation.SelectedRace.IsSpAvailable &&\n !raceData.MeetingInformation.SelectedRace.FixedOddsInfo.IsClosed\n\n React.useEffect(() => {\n const toteSwapOptions: Parameters[0] = []\n if (isInsuranceAvailable) toteSwapOptions.push('CON')\n if (isStartingPriceAvailable) toteSwapOptions.push('SP')\n dispatch(setToteSwapOptions(toteSwapOptions))\n }, [dispatch, isInsuranceAvailable, isStartingPriceAvailable])\n\n // Activate SP by default\n React.useEffect(() => {\n if (!isStartingPriceAvailable) return\n const isFixedOddsAvailable =\n !!raceData.MeetingInformation.SelectedRace.FixedOddsInfo &&\n !raceData.MeetingInformation.SelectedRace.FixedOddsInfo.IsSuspended\n const isToteDisabled = raceData.RaceStarters.find(\n race => race.RaceKey.Key === raceData.MeetingInformation.SelectedRace.Key\n )?.Starters.every(starter => !starter.IsToteEnabled)\n\n if (!isFixedOddsAvailable && isToteDisabled) dispatch(setActiveToteSwap('SP'))\n }, [isStartingPriceAvailable, raceData, dispatch])\n\n // Clear selection on race change\n React.useEffect(() => {\n dispatch(setSelectedProposition(null))\n }, [dispatch, raceData.MeetingInformation.SelectedRace.RaceNumber])\n\n return {\n selectedProposition,\n isInsuranceAvailable,\n isStartingPriceAvailable,\n }\n}\n","import React from 'react'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setActiveToteSwap } from '@core/Areas/RaceCard/Store'\n\nexport const useResetActiveToteSwap = () => {\n const dispatch = useAppDispatch()\n\n React.useEffect(() => {\n return () => {\n dispatch(setActiveToteSwap(null))\n }\n }, [dispatch])\n}\n","import React from 'react'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { MysteryQuickPicksRaceBettingPageWrapper } from '@core/Areas/Racing/Components/Mystery/MysteryRaceBettingPageWrapper'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { SecondaryHeader } from '../Common/SecondaryHeader'\nimport { getCurrentBetType } from '../../Store/selectors'\nimport { MORE_BETTING_OPTIONS_ID } from '../../constants'\nimport { FixedOddsMarkets, useResetActiveToteSwap } from './FixedOddsMarkets'\n\nexport const MoreBettingOptions: React.FC<{\n raceData?: RacePageDTO\n}> = ({ raceData }) => {\n const [isExpanded, setIsExpanded] = React.useState(true)\n const currentBetType = useAppSelector(getCurrentBetType)\n\n useResetActiveToteSwap()\n\n if (\n !raceData ||\n !isRacePageDto(raceData) ||\n currentBetType !== BetType.WinPlace ||\n raceData.MeetingInformation.SelectedRace.RaceStatus === 'Closed'\n ) {\n return null\n }\n\n return (\n
    \n }\n expanded={isExpanded}\n headerClicked={() => setIsExpanded(val => !val)}\n >\n \n\n \n \n
    \n )\n}\n","import React from 'react'\nimport { PoolDataTransferObject } from '@mobi/api-types'\n\nexport const JurisdictionDescription: React.FC<{ pools: PoolDataTransferObject[] }> = ({\n pools,\n}) => {\n return (\n
    \n
    \n \n
    \n\n
    \n

    {getJurisdictionDescription(pools)}

    \n

    \n Please refer to Help for the{' '}\n \n International Betting Rules\n \n

    \n
    \n
    \n )\n}\n\nfunction getJurisdictionDescription(pools: PoolDataTransferObject[]) {\n let description = pools.reduce((accum: string, pool: PoolDataTransferObject) => {\n return (\n accum +\n (pool.PoolingIcon &&\n pool.PoolingIcon === 'INT' &&\n accum.indexOf(pool.JurisdictionDescription) === -1\n ? (accum.length > 0 ? ', ' : '') + pool.JurisdictionDescription\n : '')\n )\n }, '')\n if (description !== undefined && description.length > 0) {\n description = `${description} Betting Rules Apply`\n }\n return description\n}\n","import React from 'react'\nimport { PoolDataTransferObject } from '@mobi/api-types'\n\nexport const PoolTotalsItem: React.FC<{ pool: PoolDataTransferObject }> = ({ pool }) => {\n return (\n
  • \n \n {pool.Name}\n\n {pool.RaceNumbers && pool.RaceNumbers.length > 0 && (\n {`(${pool.RaceNumbers.join(', ')})`}\n )}\n \n\n \n {pool.PoolingIcon && pool.PoolingIcon.length > 0 && (\n \n {pool.PoolingIcon}\n \n )}\n \n\n \n {pool.HasJackpot && (\n \n {pool.JackpotTotal}\n \n \n \n \n )}\n\n {pool.Total}\n \n
  • \n )\n}\n","import React from 'react'\nimport { PoolDataTransferObject, RacePageDTO } from '@mobi/api-types'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { SecondaryHeader } from '../Common/SecondaryHeader'\nimport { getCurrentBetType } from '../../Store/selectors'\nimport { JurisdictionDescription } from './Components/JurisdictionDescription'\nimport { PoolTotalsItem } from './Components/PoolTotalsItem'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\n\nexport const PoolTotals: React.FC<{\n raceData?: RacePageDTO\n}> = ({ raceData }) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const currentBetType = useAppSelector(getCurrentBetType)\n\n if (!raceData || currentBetType === BetType.AllUp) return null\n\n return (\n
    \n }\n title=''\n headerClicked={() => setIsExpanded(val => !val)}\n >\n
    \n
      \n {raceData.AvailablePools.map(pool => {\n return (\n \n )\n })}\n
    \n\n {shouldDisplayJurisdictionDescription(raceData.AvailablePools) && (\n \n )}\n
    \n \n
    \n )\n}\n\n// Local Helpers\n\nfunction shouldDisplayJurisdictionDescription(availablePools: PoolDataTransferObject[]) {\n // IsPoolInternational\n return availablePools.some(pool => pool.PoolingIcon && pool.PoolingIcon === 'INT')\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { isRacePageDto, RacePageDTO } from '@mobi/api-types'\nimport { hexColors } from '@mobi/settings'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { ExpandablePanel } from '@core/Components/ExpandablePanel'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { SecondaryHeader } from '../Common/SecondaryHeader'\nimport { getCurrentBetType } from '../../Store/selectors'\n\nexport const SpecialsInfo: React.FC<{\n raceData?: RacePageDTO\n}> = ({ raceData }) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const currentBetType = useAppSelector(getCurrentBetType)\n const isEntitled = useInducementService()\n\n if (\n !raceData ||\n !isEntitled ||\n !isRacePageDto(raceData) ||\n currentBetType !== BetType.WinPlace ||\n raceData.MeetingInformation.SelectedRace.RaceStatus === 'Closed' ||\n !raceData.SpecialOffersInfo ||\n !raceData.SpecialOffersInfo.length\n )\n return null\n\n return (\n
    \n }\n headerClicked={() => setIsExpanded(val => !val)}\n >\n
    \n \n
    \n {raceData.SpecialOffersInfo.map(({ Title, Description }) => (\n \n
    \n {Title}\n
    \n
    \n {Description}\n
    \n
    \n ))}\n
    \n
    \n
    \n \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst CardStyled = styled.div({\n backgroundColor: hexColors.white,\n boxShadow: '0 -1px 0 0 #eee, 0 0 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.24)',\n padding: '0.5rem',\n fontSize: '1.2rem',\n\n dt: { fontWeight: 'bold' },\n\n dd: {\n marginLeft: 0,\n marginBottom: '1rem',\n lineHeight: 1.5,\n },\n})\n","import * as ko from 'knockout'\nimport jQuery from 'jquery'\n\nko.bindingHandlers['slideIn'] = {\n init: function (element, valueAccessor) {\n const value = ko.utils.unwrapObservable(valueAccessor())\n if (!value) {\n element.style.display = 'none'\n }\n },\n update: function (element, valueAccessor, allBindings) {\n const duration = allBindings.get('slideDuration') || 400 // 400ms is default duration from jQuery\n const newVisibility = ko.utils.unwrapObservable(valueAccessor()),\n isCurrentlyVisible = !(element.style.display === 'none')\n if (newVisibility !== isCurrentlyVisible) {\n if (newVisibility) jQuery(element).slideDown(duration)\n else jQuery(element).slideUp(duration)\n }\n },\n}\n","import * as ko from 'knockout'\n\nko.bindingHandlers['class'] = {\n update: function (element, valueAccessor) {\n if (element['__ko__previousClassValue__' as keyof typeof element]) {\n ko.utils.toggleDomNodeCssClass(\n element,\n element['__ko__previousClassValue__' as keyof typeof element],\n false\n )\n }\n const value = ko.utils.unwrapObservable(valueAccessor())\n ko.utils.toggleDomNodeCssClass(element, value, true)\n // @ts-expect-error Legacy - typing issue\n element['__ko__previousClassValue__'] = value\n },\n}\n","import * as ko from 'knockout'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { IBaseBetType } from './IBaseBetType'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class BaseBetType implements IBaseBetType {\n public doubleProvDivAllowed: ko.PureComputed\n public quaddieProvDivAllowed: ko.PureComputed\n public raceInfo: ObservableRacePage\n public raceStarters: {\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }\n public bettingContext: BettingInformation\n public selections: ko.ObservableArray\n public useGiddyUp: IUseGiddyUp\n\n constructor(\n raceInfo: ObservableRacePage,\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>,\n selections: ko.ObservableArray,\n bettingContext: BettingInformation,\n useGiddyUp: IUseGiddyUp\n ) {\n Guard.notNull(raceInfo)\n\n this.raceInfo = raceInfo\n this.raceStarters = raceStarters()\n this.bettingContext = bettingContext\n this.selections = selections\n this.useGiddyUp = useGiddyUp\n\n this.doubleProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.raceInfo.hasDoubleProvDivs()\n )\n })\n\n this.quaddieProvDivAllowed = ko.pureComputed(() => {\n return (\n this.bettingContext.selectedBetType().betType() === BetType.WinPlace &&\n this.raceInfo.hasQuaddieProvDivs()\n )\n })\n }\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { BaseBetType } from '../BaseBetType/BaseBetType'\n\nexport class WinPlaceViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { WinPlaceViewModel } from './WinPlaceViewModel'\nimport template from './winplace.tpl.html'\n\nif (!ko.components.isRegistered('win-place-bettype')) {\n ko.components.register('win-place-bettype', {\n viewModel: WinPlaceViewModel,\n template,\n })\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { BaseBetType } from '../BaseBetType/BaseBetType'\n\nexport class FirstFourViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { FirstFourViewModel } from './FirstFourViewModel'\nimport template from './first4.tpl.html'\n\nif (!ko.components.isRegistered('first-four-bettype')) {\n ko.components.register('first-four-bettype', {\n viewModel: FirstFourViewModel,\n template,\n })\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { BaseBetType } from '../BaseBetType/BaseBetType'\n\nexport class TrifectaViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { Container, type interfaces } from 'inversify'\n\ntype ViewModelResolver = (container: interfaces.Container) => TViewModel\n\n/* use this if viewmodel takes no 'params=\"..\"' input from knockout */\nexport function registerComponent(config: {\n componentName: string\n template: unknown\n resolver: () => TViewModel\n}): void {\n if (!ko.components.isRegistered(config.componentName)) {\n ko.components.register(config.componentName, {\n viewModel: {\n createViewModel: config.resolver,\n },\n template: config.template,\n })\n }\n}\n\n/* knockout binding will be injected as \"$params\" to view model */\nexport function registerComponentWithParams(config: {\n componentName: string\n template: unknown\n container: interfaces.Container\n resolver: ViewModelResolver\n}): void {\n if (!ko.components.isRegistered(config.componentName)) {\n ko.components.register(config.componentName, {\n viewModel: {\n createViewModel: (params: unknown) =>\n resolveWithParams(params, config.container, config.resolver),\n },\n template: config.template,\n })\n }\n}\n\nfunction resolveWithParams(\n params: TParams,\n container: interfaces.Container,\n resolver: ViewModelResolver\n): TViewModel {\n const privateContainer = new Container()\n privateContainer.parent = container\n privateContainer.bind('$params').toConstantValue(params)\n return resolver(privateContainer)\n}\n","import * as ko from 'knockout'\nimport { TrifectaViewModel } from './TrifectaViewModel'\nimport template from './trifecta.tpl.html'\n\nif (!ko.components.isRegistered('trifecta-bettype')) {\n ko.components.register('trifecta-bettype', {\n viewModel: TrifectaViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport template from './race.starter.tpl.html'\nimport { IRaceStarterViewModel } from './IRaceStarterViewModel'\nimport container from '@classic/Betting-v2/IOC/inversify.config'\n\nif (!ko.components.isRegistered('race-starter')) {\n ko.components.register('race-starter', {\n viewModel: {\n createViewModel: (\n params: Parameters[0]\n ): IRaceStarterViewModel => {\n const viewModel = container.get('IRaceStarterViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n}\n","import * as ko from 'knockout'\nimport { IDogStarterViewModel } from './IDogStarterViewModel'\nimport template from './dog.starter.tpl.html'\nimport container from '@classic/Betting-v2/IOC/inversify.config'\n\nif (!ko.components.isRegistered('dog-starter')) {\n ko.components.register('dog-starter', {\n viewModel: {\n createViewModel: (\n params: Parameters[0]\n ): IDogStarterViewModel => {\n const viewModel = container.get('IDogStarterViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n}\n","import * as ko from 'knockout'\nimport container from '@classic/Betting-v2/IOC/inversify.config'\nimport { ITrotStarterViewModel } from './ITrotStarterViewModel'\nimport template from './trot.starter.tpl.html'\n\nif (!ko.components.isRegistered('trot-starter')) {\n ko.components.register('trot-starter', {\n viewModel: {\n createViewModel: (\n params: Parameters[0]\n ): ITrotStarterViewModel => {\n const viewModel = container.get('ITrotStarterViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n}\n","import container from '../../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { registerComponentWithParams } from '@classic/AppUtils/Framework/Components/koComponentRegistration'\nimport template from './starter.image.tpl.html'\nimport { StarterImageViewModel } from './StarterImageViewModel'\n\nregisterComponentWithParams({\n componentName: 'starter-image',\n template,\n container: container,\n resolver: (container: interfaces.Container) =>\n container.get('StarterImageViewModel'),\n})\n","import container from '../../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { registerComponentWithParams } from '@classic/AppUtils/Framework/Components/koComponentRegistration'\nimport template from './resulted.image.tpl.html'\nimport { ResultedImageViewModel } from './ResultedImageViewModel'\nregisterComponentWithParams({\n componentName: 'resulted-image',\n template,\n container: container,\n resolver: (container: interfaces.Container) =>\n container.get('ResultedImageViewModel'),\n})\n","import styled from '@emotion/styled'\n\nexport const WinPlaceButtonsContainerStyled = styled.div({\n float: 'right',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n fontSize: '1.2rem',\n\n '& > span': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '5rem',\n height: '5rem',\n marginLeft: '0.3rem',\n textAlign: 'center',\n },\n\n '& > button': {\n marginLeft: '0.3rem',\n },\n})\n\nexport const WinPlaceSpacerSpanStyled = styled.span({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '5rem',\n height: '5rem',\n})\n\nexport const WinPlaceScratchedStyled = styled(WinPlaceSpacerSpanStyled)({\n color: '#fe0000',\n fontWeight: 'bold',\n})\n\nconst ToteSwapOptionBaseStyled = styled.span<{\n isVisible?: boolean\n}>({\n display: 'block',\n position: 'absolute',\n top: 0,\n right: 0,\n width: '5rem',\n height: '5rem',\n transition: 'transform cubic-bezier(0.76, 0, 0.24, 1) 300ms',\n})\n\nexport const WinPlaceToteStyled = styled(ToteSwapOptionBaseStyled)(\n { transform: 'translateX(0) scale(0)' },\n ({ isVisible }) =>\n isVisible !== undefined && {\n transform: isVisible ? 'translateX(0)' : 'translateX(150%) scale(0.8)',\n }\n)\n\nexport const WinPlaceToteSwapOptionsStyled = styled(ToteSwapOptionBaseStyled)<{\n isVisible?: boolean\n}>(\n { transform: 'translateX(150%) scale(0)' },\n ({ isVisible }) =>\n isVisible !== undefined && {\n transform: isVisible ? 'translateX(0)' : 'translateX(150%) scale(0.8)',\n }\n)\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { PropDataTransferObject, RacePageDataTransferObject } from '@mobi/api-types'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport {\n getCurrentRacePageQueryKey,\n getSelectedProposition,\n} from '@core/Areas/RaceCard/Store/selectors'\nimport {\n WinPlaceScratchedStyled as SCR,\n WinPlaceSpacerSpanStyled as SUS,\n} from '../WinPlaceButtons.styles'\n\nexport const InsuranceButton = ({\n starterNumber,\n isFixedOddsScratched,\n isFixedOddsSuspended,\n}: {\n starterNumber: number\n isFixedOddsScratched: boolean\n isFixedOddsSuspended: boolean\n}) => {\n const racePageQueryKey = useAppSelector(getCurrentRacePageQueryKey)\n const { data } = useQuery({\n queryKey: racePageQueryKey || [],\n enabled: !!racePageQueryKey,\n staleTime: Infinity,\n })\n\n const market = data?.FixedOddsMarkets?.find(market => market.MarketCode === 'CON')\n if (!market) return null\n\n const matchedStarter = market.Propositions.find(({ Number }) => Number === starterNumber)\n if (!matchedStarter) return null\n\n if (isFixedOddsScratched || matchedStarter.IsScratched)\n return SCR\n if (isFixedOddsSuspended) return \n\n return \n}\n\n// ===============\n// Local Component\n// ===============\n\nconst InsuranceButtonComponent: React.FC<{\n matchedStarter: PropDataTransferObject\n}> = ({ matchedStarter }) => {\n const dispatch = useAppDispatch()\n const isSelected =\n useAppSelector(getSelectedProposition)?.[1] === matchedStarter.PropositionSequence\n\n const price = matchedStarter.PriceToDisplay\n\n return (\n {\n dispatch(setSelectedProposition(['CON', matchedStarter.PropositionSequence]))\n }}\n priceWin={price}\n pricePlace=''\n starterNumber={matchedStarter.Number as number}\n />\n )\n}\n","import React from 'react'\nimport { useQuery } from 'react-query'\nimport { RacePageDataTransferObject } from '@mobi/api-types'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport {\n getCurrentRacePageQueryKey,\n getSelectedProposition,\n} from '@core/Areas/RaceCard/Store/selectors'\nimport { WinPlaceScratchedStyled as SCR } from '../WinPlaceButtons.styles'\n\nexport const StartingPriceButton: React.FC<{\n starterNumber: number\n isFixedOddsScratched: boolean\n}> = ({ starterNumber, isFixedOddsScratched }) => {\n const racePageQueryKey = useAppSelector(getCurrentRacePageQueryKey)\n const { data } = useQuery({\n queryKey: racePageQueryKey || [],\n enabled: !!racePageQueryKey,\n staleTime: Infinity,\n })\n\n if (!data || !data.RaceStarters || !Array.isArray(data.RaceStarters)) return null\n\n const selectedRaceKey = data.MeetingInformation.SelectedRace.Key\n const matchedRace = data.RaceStarters.find(race => race.RaceKey.Key === selectedRaceKey)\n const matchedStarter = matchedRace?.Starters.find(starter => starter.Number === starterNumber)\n\n if (!matchedStarter) return null\n if (isFixedOddsScratched) return SCR\n\n return \n}\n\n// ===============\n// Local Component\n// ===============\n\nconst StartingButtonComponent: React.FC<{\n matchedStarter: RacePageDataTransferObject['RaceStarters'][0]['Starters'][0]\n}> = ({ matchedStarter }) => {\n const dispatch = useAppDispatch()\n const isSelected = useAppSelector(getSelectedProposition)?.[1] === matchedStarter.Number\n\n const onClick = () => {\n dispatch(setSelectedProposition(['SP', matchedStarter.Number]))\n }\n\n return (\n \n )\n}\n","import { RemoveSingleBet } from '@core/Areas/Betslip/signals'\nimport { useIsNewBetSlipFeatureActive } from '@core/Areas/BetSlipNew/hooks'\nimport { QuickbetSelection } from '@core/Areas/Quickbet/signals'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks/useRacePageData/useRacePageData'\nimport { getEnhancedBetslipSetting } from '@core/Areas/Settings/Store/selectors'\nimport { handleBetSelection } from '@core/Utils/betting/handleBetSelection'\nimport { MeetingInformationDataTransferObject, StarterDataTransferObject } from '@mobi/api-types'\nimport * as amplify from '@classic/AppUtils/Framework/Messaging/amplifyjs'\nimport { isFobMatchedSelection, isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { removeItemFromBetSlipById } from '@mobi/betslip/Store/Bets'\nimport { FobMatchedSelection, RaceDetails, ToteSelection } from '@mobi/betslip/types'\nimport { dayjs } from '@mobi/utils/date'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { store } from '@core/Store'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { state$ } from '@core/Areas/Betslip/driver'\nimport { useSmartBetSlip } from '@core/Areas/Racing/Components/SmartBetSlip/hooks/useSmartBetSlip'\nimport { setSelectedProposition } from '@core/Areas/RaceCard/Store'\nimport { getSelectedProposition } from '@core/Areas/RaceCard/Store/selectors'\nimport type { Selection } from '@mobi/betslip/types'\nimport { getRaceStarter } from '../helpers/helpers'\nimport { makeToteSelection } from '@core/Areas/Racing/Components/BettableTips/helpers'\n\nexport const useSmartBetslipRunner = ({\n fixtureId,\n fixtureDate,\n acceptorNumber,\n raceNumber,\n}: {\n fixtureId: string\n fixtureDate: string | Date\n raceNumber: number | string\n acceptorNumber: number\n}) => {\n const isSmartBetslipSettingActive = useSelector(getEnhancedBetslipSetting)\n const isNewBetSlipFeatureActive = useIsNewBetSlipFeatureActive()\n const fobWinPlaceSelectionButtonRef = React.useRef(null)\n const toteWinPlaceSelectionButtonRef = React.useRef(null)\n const dispatch = useDispatch()\n const { race } = useRacePageData({\n meetingDate: fixtureDate,\n meetingId: fixtureId,\n raceNumber,\n })\n const selectedProposition = useSelector(getSelectedProposition)\n const thisToteId = React.useMemo(\n () => `${dayjs(fixtureDate).format('YYYY-MM-DD')}#${fixtureId}#${raceNumber}#${acceptorNumber}`,\n [fixtureDate, fixtureId, raceNumber, acceptorNumber]\n )\n const raceStarter = getRaceStarter(acceptorNumber, race)\n const [runnerPropSeq, setRunnerPropSeq] = React.useState(null)\n const [runnerToteId, setRunnerToteId] = React.useState(null)\n const smartBetslipState = useSmartBetSlip(isNewBetSlipFeatureActive, { includeTote: true })\n\n const handleSmartBetslipFobSelection = React.useCallback(\n (shouldToteDeselectionOverride: boolean) => {\n if (!race || !raceStarter) {\n // throw here?\n return\n }\n // clear any tote solections\n amplify.publish('clear-all-selections-command')\n dispatch(setSelectedProposition(null))\n if (shouldToteDeselectionOverride || selectedProposition) {\n // if the knockout code has selection, or SP is selected, then we dont want to deselect a fob since the ui\n // does not have any indication it is selected. instead we just delesect the tote and then do nothing\n // when tote is moved fully to redux we can check it all here without an external argument\n return\n }\n\n if (runnerPropSeq) {\n // remove it\n if (isNewBetSlipFeatureActive) {\n const betSlipItems = selectBetSlipItems(store.getState())\n const item = betSlipItems.find(\n x =>\n isFobMatchedSelection(x.selection) &&\n Number(x.selection.propositionSeq) === runnerPropSeq\n )\n if (item) {\n dispatch(removeItemFromBetSlipById({ id: item.id }))\n }\n } else {\n state$.take(1).subscribe(state => {\n const item = state.items.find(\n x =>\n isFobMatchedSelection(x.selection) &&\n Number(x.selection.propositionSeq) === runnerPropSeq\n )\n if (item) {\n RemoveSingleBet({ id: item.id })\n }\n })\n }\n } else {\n handleFobAddToBetSlip({\n fixtureDate,\n fixtureId,\n raceStarter,\n acceptorNumber,\n meeting: race.MeetingInformation,\n animationElement: fobWinPlaceSelectionButtonRef.current,\n isNewBetSlipFeatureActive,\n shouldAutoAdd: smartBetslipState.shouldAutoAddToBetslip,\n })\n }\n },\n [\n raceStarter,\n runnerPropSeq,\n isNewBetSlipFeatureActive,\n acceptorNumber,\n race,\n fixtureDate,\n fixtureId,\n dispatch,\n selectedProposition,\n smartBetslipState.shouldAutoAddToBetslip,\n ]\n )\n\n const handleSmartBetslipToteSelection = React.useCallback(\n (shouldFobDeselectionOverride: boolean) => {\n if (!race || !raceStarter) {\n // throw here?\n return\n }\n // clear any tote solections\n amplify.publish('clear-all-selections-command')\n dispatch(setSelectedProposition(null))\n if (shouldFobDeselectionOverride || selectedProposition) {\n // if the knockout code has selection, or SP is selected, then we dont want to deselect this tote since the ui\n // does not have any indication it is selected. instead we just deselect the fob and then do nothing\n // when betslip is moved fully to redux we can check it all here without an external argument\n return\n }\n\n if (runnerToteId) {\n // remove it\n if (isNewBetSlipFeatureActive) {\n const betSlipItems = selectBetSlipItems(store.getState())\n const item = betSlipItems.find(x =>\n isSameToteSelection(x.selection, fixtureId, fixtureDate, raceNumber, acceptorNumber)\n )\n if (item) {\n dispatch(removeItemFromBetSlipById({ id: item.id }))\n }\n } else {\n state$.take(1).subscribe(state => {\n const item = state.items.find(x =>\n isSameToteSelection(x.selection, fixtureId, fixtureDate, raceNumber, acceptorNumber)\n )\n if (item) {\n RemoveSingleBet({ id: item.id })\n }\n })\n }\n } else {\n handleToteAddToBetSlip({\n fixtureDate,\n fixtureId,\n raceStarter,\n acceptorNumber,\n meeting: race.MeetingInformation,\n animationElement: toteWinPlaceSelectionButtonRef.current,\n isNewBetSlipFeatureActive,\n shouldAutoAdd: smartBetslipState.shouldAutoAddToBetslip,\n })\n }\n },\n [\n raceStarter,\n runnerToteId,\n isNewBetSlipFeatureActive,\n acceptorNumber,\n race,\n fixtureId,\n dispatch,\n fixtureDate,\n raceNumber,\n selectedProposition,\n smartBetslipState.shouldAutoAddToBetslip,\n ]\n )\n\n React.useEffect(() => {\n if (!isSmartBetslipSettingActive || !smartBetslipState) return\n\n const hasRunnerFob = smartBetslipState.betslipFobPropSeqs.includes(\n raceStarter?.FixedOddsInfo?.PropositionSequence as number\n )\n setRunnerPropSeq(\n hasRunnerFob && raceStarter?.FixedOddsInfo\n ? raceStarter.FixedOddsInfo.PropositionSequence\n : null\n )\n }, [isSmartBetslipSettingActive, raceStarter, smartBetslipState])\n\n React.useEffect(() => {\n if (!isSmartBetslipSettingActive || !smartBetslipState) return\n\n const hasRunner = smartBetslipState.betslipToteIds.includes(thisToteId)\n setRunnerToteId(hasRunner ? thisToteId : null)\n }, [isSmartBetslipSettingActive, smartBetslipState, thisToteId])\n\n const isRunnerInBetSlipFob = !!runnerPropSeq\n const isRunnerInBetSlipTote = !!runnerToteId\n return {\n /** true when smart betslip feature and setting active */\n shouldUseSmartBetslip: smartBetslipState.isSmartBetslipFeatureActive,\n isRunnerInBetSlipFob: isRunnerInBetSlipFob,\n isRunnerInBetSlipTote: isRunnerInBetSlipTote,\n /** true when the ui win selection button should be highlighted */\n shouldHighlightRunnerFobSelection: isRunnerInBetSlipFob && !selectedProposition,\n shouldHighlightRunnerToteSelection: isRunnerInBetSlipTote && !selectedProposition,\n /** this func will add the runner to betslip when u click the win place selection button */\n handleSmartBetslipFobSelection,\n handleSmartBetslipToteSelection,\n /** Ref to element for clicky animation */\n fobWinPlaceSelectionButtonRef,\n /** Ref to element for clicky animation */\n toteWinPlaceSelectionButtonRef,\n }\n}\n\nfunction handleFobAddToBetSlip(args: {\n fixtureId: string\n fixtureDate: string | Date\n acceptorNumber: number\n isNewBetSlipFeatureActive: boolean\n raceStarter: StarterDataTransferObject\n meeting: MeetingInformationDataTransferObject\n animationElement: HTMLButtonElement | null\n shouldAutoAdd: boolean\n}) {\n if (!args.raceStarter.FixedOddsInfo) {\n return\n }\n const selectedRace = args.meeting.SelectedRace\n const shouldAllowPlaceInvestment =\n selectedRace.IsFixedOddsRace && selectedRace.FixedOddsInfo.IsPlaceAvailable\n const selection: FobMatchedSelection = {\n type: 'fob-matched',\n fixtureId: args.fixtureId,\n fixtureDate: dayjs(args.fixtureDate).format('YYYY-MM-DD'),\n raceNumber: selectedRace.RaceNumber,\n acceptorNumber: args.acceptorNumber,\n propositionSeq: args.raceStarter.FixedOddsInfo.PropositionSequence.toString(),\n winPrice: Number(args.raceStarter.FixedOddsInfo.DisplayWinDividend),\n winPriceLastSeen: null,\n placePrice:\n args.raceStarter.FixedOddsInfo.DisplayPlaceDividend !== '-'\n ? Number(args.raceStarter.FixedOddsInfo.DisplayPlaceDividend)\n : null,\n placePriceLastSeen: null,\n priceSource: 'selection',\n }\n\n const raceDetails: RaceDetails = {\n races: [\n {\n key: selectedRace.Key,\n raceNumber: selectedRace.RaceNumber,\n meetingName: args.meeting.MeetingName,\n meetingCode: args.meeting.MeetingCode,\n meetingId: args.meeting.MeetingId,\n meetingDate: dayjs(args.fixtureDate).format('YYYY-MM-DD'),\n distance: selectedRace.Distance,\n raceTime: selectedRace.RaceTime,\n acceptorKeys: [],\n type: selectedRace.RaceType,\n isFixedOddsRace: selectedRace.IsFixedOddsRace,\n },\n ],\n acceptors: [\n {\n key: `${selectedRace.Key}-${args.raceStarter.Number}`,\n name: args.raceStarter.Name,\n number: args.raceStarter.Number,\n type: args.raceStarter.Type,\n meetingName: args.meeting.MeetingName,\n isScratched: args.raceStarter.IsScratched,\n scratchType: args.raceStarter.ScratchType,\n\n imageUrl: args.raceStarter.SilkImages.large.url,\n imageUrlWithSizes: args.raceStarter.SilkImages,\n fixedOdds: {\n win: '',\n place: '',\n isSuspended: false,\n },\n toteOdds: { win: '', place: '' },\n },\n ],\n }\n\n const quickBetSelection: QuickbetSelection = {\n bettingType: 'fixed-odds-racing',\n selection,\n selectionDetails: raceDetails,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n\n handleBetSelection({\n betFlow: !args.shouldAutoAdd\n ? {\n location: 'Quickbet',\n options: {},\n }\n : args.isNewBetSlipFeatureActive\n ? {\n location: 'BetSlipNew',\n options: { clickedElement: args.animationElement as HTMLButtonElement },\n }\n : { location: 'Betslip' },\n selection: quickBetSelection,\n })\n}\n\nfunction handleToteAddToBetSlip(args: {\n fixtureId: string\n fixtureDate: string | Date\n acceptorNumber: number\n isNewBetSlipFeatureActive: boolean\n raceStarter: StarterDataTransferObject\n meeting: MeetingInformationDataTransferObject\n animationElement: HTMLButtonElement | null\n shouldAutoAdd: boolean\n}) {\n if (!args.raceStarter.IsToteEnabled) {\n return\n }\n const selectedRace = args.meeting.SelectedRace\n const shouldAllowPlaceInvestment = selectedRace.HasPlacePool\n const selection: ToteSelection = makeToteSelection(args.meeting, args.acceptorNumber)\n\n const raceDetails: RaceDetails = {\n races: [\n {\n key: selectedRace.Key,\n raceNumber: selectedRace.RaceNumber,\n meetingName: args.meeting.MeetingName,\n meetingCode: args.meeting.MeetingCode,\n meetingId: args.meeting.MeetingId,\n meetingDate: dayjs(args.fixtureDate).format('YYYY-MM-DD'),\n distance: selectedRace.Distance,\n raceTime: selectedRace.RaceTime,\n acceptorKeys: [],\n type: selectedRace.RaceType,\n isFixedOddsRace: selectedRace.IsFixedOddsRace,\n },\n ],\n acceptors: [\n {\n key: `${selectedRace.Key}-${args.raceStarter.Number}`,\n name: args.raceStarter.Name,\n number: args.raceStarter.Number,\n type: args.raceStarter.Type,\n meetingName: args.meeting.MeetingName,\n isScratched: args.raceStarter.IsScratched,\n scratchType: args.raceStarter.ScratchType,\n\n imageUrl: args.raceStarter.SilkImages.large.url,\n imageUrlWithSizes: args.raceStarter.SilkImages,\n fixedOdds: {\n win: '',\n place: '',\n isSuspended: false,\n },\n toteOdds: { win: '', place: '' },\n },\n ],\n }\n\n const quickBetSelection: QuickbetSelection = {\n bettingType: 'tote-racing',\n selection,\n selectionDetails: raceDetails,\n isEachWayAvailable: false,\n shouldAllowPlaceInvestment,\n }\n\n handleBetSelection({\n betFlow: !args.shouldAutoAdd\n ? {\n location: 'Quickbet',\n options: {},\n }\n : args.isNewBetSlipFeatureActive\n ? {\n location: 'BetSlipNew',\n options: { clickedElement: args.animationElement as HTMLButtonElement },\n }\n : { location: 'Betslip' },\n selection: quickBetSelection,\n })\n}\n\nfunction isSameToteSelection(\n selection: Selection | null,\n fixtureId: string,\n fixtureDate: string | Date,\n raceNumber: number | string,\n acceptorNumber: number\n) {\n if (!isToteSelection(selection)) {\n return false\n }\n for (const acceptor of selection.selectionString.split('.')) {\n if (\n selection.fixtureDate === dayjs(fixtureDate).format('YYYY-MM-DD') &&\n selection.fixtureId === fixtureId &&\n selection.raceNumber === raceNumber &&\n Number(acceptor) === acceptorNumber\n ) {\n return true\n }\n }\n return false\n}\n","import { isRacePageDto, RacePageDTO } from '@mobi/api-types'\n\nexport function getRaceStarter(acceptorNumber: number, race?: RacePageDTO) {\n if (!race || !isRacePageDto(race)) {\n return null\n }\n const raceKey = race?.MeetingInformation.SelectedRace.Key\n const raceStarters = race.RaceStarters.find(x => x.RaceKey.Key === raceKey)\n if (!raceStarters) {\n return null\n }\n const starter = raceStarters.Starters.find(x => x.Number === acceptorNumber)\n return starter\n}\n","import React from 'react'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport { InsuranceButton } from './Components/InsuranceButton'\nimport { StartingPriceButton } from './Components/StartingPriceButton'\nimport {\n WinPlaceButtonsContainerStyled,\n WinPlaceScratchedStyled,\n WinPlaceToteStyled,\n WinPlaceToteSwapOptionsStyled,\n} from './WinPlaceButtons.styles'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { getActiveToteSwap, getToteSwapOptions } from '../../Store/selectors'\nimport { useSmartBetslipRunner } from './hooks/useSmartBetslipRunner'\n\nexport const WinPlaceButtons: React.FC<{\n raceStatus: string\n starterNumber: number\n makeFobSelection(): void\n shouldDisplayFixed: boolean\n shouldDisplayFixedScratched: boolean\n shouldDisplayFixedSuspended: boolean\n isFixedSuspended: boolean\n isFixedFavourite: boolean\n isFixedSelected: boolean\n raceNumber: number | string\n meetingDate: Date\n meetingId: string\n hasKnockoutSelection: boolean\n fixedPriceWin: string\n fixedPricePlace: string\n makeToteSelection(): void\n shouldDisplayTote: boolean\n isToteFavourite: boolean\n isToteScratched: boolean\n isToteSelected: boolean\n toteScratchType: string\n totePriceWin: string\n totePricePlace: string\n}> = ({\n raceStatus,\n starterNumber,\n makeFobSelection,\n shouldDisplayFixed,\n raceNumber,\n meetingDate,\n meetingId,\n shouldDisplayFixedScratched,\n shouldDisplayFixedSuspended,\n isFixedSuspended,\n isFixedFavourite,\n hasKnockoutSelection,\n isFixedSelected,\n fixedPriceWin,\n fixedPricePlace,\n makeToteSelection,\n shouldDisplayTote,\n isToteFavourite,\n isToteScratched,\n isToteSelected,\n toteScratchType,\n totePriceWin,\n totePricePlace,\n}) => {\n const toteSwapOptions = useAppSelector(getToteSwapOptions)\n const activeToteSwap = useAppSelector(getActiveToteSwap)\n const {\n fobWinPlaceSelectionButtonRef,\n toteWinPlaceSelectionButtonRef,\n shouldHighlightRunnerFobSelection,\n handleSmartBetslipFobSelection,\n isRunnerInBetSlipFob,\n isRunnerInBetSlipTote,\n shouldHighlightRunnerToteSelection,\n shouldUseSmartBetslip,\n handleSmartBetslipToteSelection,\n } = useSmartBetslipRunner({\n acceptorNumber: starterNumber,\n fixtureDate: meetingDate,\n fixtureId: meetingId,\n raceNumber,\n })\n\n const isFixedButtonSelected =\n isFixedSelected ||\n (shouldHighlightRunnerFobSelection && !isFixedSuspended && !hasKnockoutSelection)\n\n const isToteButtonSelected =\n isToteSelected || (shouldHighlightRunnerToteSelection && !hasKnockoutSelection)\n\n const isInsuranceAvailable = toteSwapOptions.includes('CON')\n const isStartingPriceAvailable = toteSwapOptions.includes('SP')\n const isRaceClosed = raceStatus === 'Closed'\n\n return (\n \n {isRaceClosed ? (\n // ===========\n // Race Closed\n // ===========\n <>\n {shouldDisplayFixed && (\n \n \n {fixedPriceWin}\n
    \n {fixedPricePlace && {fixedPricePlace}}\n
    \n
    \n )}\n\n {shouldDisplayFixedSuspended && (\n \n )}\n\n {shouldDisplayFixedScratched && (\n \n SCR\n \n )}\n\n {shouldDisplayTote && (\n \n \n {totePriceWin}\n
    \n {totePricePlace && {totePricePlace + 99}}\n
    \n
    \n )}\n\n {isToteScratched && (\n \n {toteScratchType === 'Late' && (\n <>\n LATE\n
    \n \n )}\n SCR\n
    \n )}\n \n ) : (\n // =========\n // Race Open\n // =========\n <>\n handleSmartBetslipFobSelection(isRunnerInBetSlipFob && hasKnockoutSelection)\n : makeFobSelection\n }\n priceWin={fixedPriceWin}\n pricePlace={fixedPricePlace}\n starterNumber={starterNumber}\n favouritePosition='left'\n />\n\n {shouldDisplayFixedSuspended && (\n \n )}\n\n {shouldDisplayFixedScratched && (\n \n SCR\n \n )}\n\n \n <>\n {!shouldDisplayTote && !isToteScratched && (\n \n )}\n \n <>\n \n handleSmartBetslipToteSelection(\n isRunnerInBetSlipTote && hasKnockoutSelection\n )\n : makeToteSelection\n }\n priceWin={totePriceWin}\n pricePlace={totePricePlace}\n starterNumber={starterNumber}\n />\n\n {isToteScratched && (\n \n {toteScratchType === 'Late' && (\n <>\n LATE\n
    \n \n )}\n SCR\n
    \n )}\n \n
    \n\n {isInsuranceAvailable && (\n \n \n \n )}\n\n {isStartingPriceAvailable && (\n \n \n \n )}\n \n
    \n \n )}\n
    \n )\n}\n","import styled from '@emotion/styled'\n\nexport const SameRaceMultiButtonsContainerStyled = styled('div')({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n fontSize: '1.2rem',\n marginLeft: '25px',\n gap: '0.5rem',\n\n '& > span': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '5rem',\n marginLeft: '0.3rem',\n textAlign: 'center',\n },\n\n '& > button': {\n marginLeft: '0.3rem',\n },\n})\n\nexport const SameRaceMultiScratchedStyled = styled.span({\n display: 'flex',\n alignItems: 'center',\n color: '#fe0000',\n fontWeight: 'bold',\n height: 'auto',\n width: 'auto',\n justifyContent: 'center',\n marginBottom: '-0.5rem',\n})\n","import React from 'react'\nimport { WinPlaceSelection } from '@core/Components/PriceChangeDisplay'\nimport {\n SameRaceMultiButtonsContainerStyled,\n SameRaceMultiScratchedStyled as SameRaceMultiErrorStyled,\n} from './SameRaceMultiButtons.styles'\n\ninterface SameRaceMultiProp {\n prices: number[]\n shouldDisplayFixedScratched: boolean\n shouldDisplayFixedSuspended: boolean\n makeFobLegSelection(leg: number): void\n srmSelectedLegs: boolean[]\n}\n\nconst buttonTitles = ['WIN', 'TOP 2', 'TOP 3', 'TOP 4']\n\nexport const SameRaceMultiButtons = ({\n prices,\n shouldDisplayFixedScratched,\n shouldDisplayFixedSuspended,\n makeFobLegSelection,\n srmSelectedLegs,\n}: SameRaceMultiProp): JSX.Element => {\n if (shouldDisplayFixedSuspended) {\n return SUSPENDED\n }\n\n if (shouldDisplayFixedScratched) {\n return SCRATCHED\n }\n\n return (\n \n {buttonTitles\n .filter((_title, index) => !!prices[index])\n .map((title, index) => (\n makeFobLegSelection(index)}\n arrowLocation='IN'\n buttonStyleOverride={{ height: '4rem', flex: '1' }}\n centerContent\n isVisible\n isDisabled={false}\n isFavourite={false}\n pricePlace=''\n starterNumber={0}\n favouritePosition={undefined}\n />\n ))}\n \n )\n}\n","import { ISelection } from './ISelection'\nimport * as ko from 'knockout'\nimport { ButtonSelectionType } from './ButtonSelectionType'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\n\nexport class ButtonsSelection implements ISelection {\n constructor(selection: ButtonSelectionType, raceNumber: ObservableRaceKey, legCount = 1) {\n this.value = ko.observable(selection)\n this.raceNumber = raceNumber\n\n this.values = ko.observableArray()\n for (let leg = 0; leg < legCount; leg++) {\n this.values.push(ko.observable(ButtonSelectionType.None))\n }\n }\n\n // in theory, usage of the singular 'value' could be replaced with the 'values' collection\n public value: ko.Observable\n public values: ko.ObservableArray>\n\n public raceNumber: ObservableRaceKey\n\n public dispose() {\n //Do nothing\n }\n\n public hasFob = () =>\n [ButtonSelectionType.Fob, ButtonSelectionType.ToteAndFob].includes(this.value())\n\n public hasTote = () =>\n [ButtonSelectionType.Tote, ButtonSelectionType.ToteAndFob].includes(this.value())\n\n public hasAny = () => ButtonSelectionType.None !== this.value()\n}\n","import * as ko from 'knockout'\nimport { WinPlaceButtons } from '@core/Areas/RaceCard/Components/WinPlaceButtons'\nimport ObservableRaceStarter from '@classic/Betting-v2/Model/Observables/ObservableRaceStarter'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { SameRaceMultiButtons } from '@core/Areas/Racing/Components/SameRaceMulti/SameRaceMultiButtons/SameRaceMultiButtons'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport type { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport EventAggregator from '@classic/AppUtils/Framework/Messaging/EventAggregator'\nimport type { IAppWindow } from '@classic/AppUtils/Framework/WindowManagement/IAppWindow'\nimport { ButtonSelectionType } from '../Core/UIElements/ButtonSelectionType'\nimport type { ISelection } from '../Core/UIElements/ISelection'\nimport LegSelectionContext from '../Core/Processors/LegSelectionContext'\nimport type { ISelectionMadeCommand } from '../Core/Processors/ISelectionMadeContext'\nimport { ButtonsSelection } from '../Core/UIElements/ButtonsSelection'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\n\n// injected by dog/race/trot.starter.tpl.html\nexport interface ISelectionViewModel {\n starter: ObservableRaceStarter\n context: {\n bettingContext: BettingInformation\n raceNumber: ObservableRaceKey\n numberOfStartersInRace: ko.Computed\n }\n eventAggregator: IEventAggregator\n appWindow: IAppWindow\n}\n\nexport class SelectionViewModel extends Disposable {\n constructor(params: ISelectionViewModel) {\n super(params.eventAggregator || new EventAggregator())\n\n Guard.notNull(params.starter)\n Guard.notNull(params.context.bettingContext)\n Guard.notNull(params.context.raceNumber)\n Guard.notNull(params.context.numberOfStartersInRace)\n\n this.starter = params.starter\n this.bettingContext = params.context.bettingContext\n this.raceNumber = params.context.raceNumber\n this.meetingDate = params.context.bettingContext.meetingDate\n this.meetingId = params.context.bettingContext.meetingId\n this.numberOfStartersInRace = params.context.numberOfStartersInRace\n\n if (params.context.bettingContext.selectedBetType().betType() === BetType.WinPlace) {\n this.setupWinAndPlace()\n } else if (\n params.context.bettingContext.selectedBetType().betType() === BetType.SameRaceMulti\n ) {\n this.setupSameRaceMulti(params)\n }\n }\n\n private setupWinAndPlace() {\n this.ReactElement = WinPlaceButtons\n\n this.makeFobSelection = this.makeFobSelection.bind(this)\n this.makeToteSelection = this.makeToteSelection.bind(this)\n\n this.starterNumber = this.starter.number()\n this.isFixedSuspended = this.starter.fixedOddsStarterInfo.isSuspended\n this.isFixedFavourite = this.starter.fixedOddsStarterInfo.isFavourite\n this.fixedPriceWin = this.starter.fixedOddsStarterInfo.displayWinDividend\n this.fixedPricePlace = ko.pureComputed(() => {\n return (\n (this.starter.fixedOddsStarterInfo.hasPlacePool() &&\n this.starter.fixedOddsStarterInfo.displayPlaceDividend()) ||\n ''\n )\n })\n this.isToteFavourite = this.starter.isFavourite\n this.isToteScratched = this.starter.isScratched\n this.toteScratchType = this.starter.scratchType\n this.totePriceWin = this.starter.displayWinDividend\n this.totePricePlace = ko.pureComputed(() => {\n return (this.starter.hasPlacePool() && this.starter.displayPlaceDividend()) || ''\n })\n\n if (this.starter.selection === null || typeof this.starter.selection === 'undefined') {\n this.starter.selection = ko.observable(\n new ButtonsSelection(ButtonSelectionType.None, this.raceNumber) as ISelection\n )\n }\n\n if (this.starter.selection() === null || typeof this.starter.selection() === 'undefined') {\n this.starter.selection(new ButtonsSelection(ButtonSelectionType.None, this.raceNumber))\n }\n\n this.fobSelected = ko.pureComputed(() => {\n if (typeof this.starter.selection !== 'function') {\n return false\n } else {\n const starterSelection = this.starter.selection() as ButtonsSelection\n return starterSelection.hasFob()\n }\n })\n\n this.toteSelected = ko.pureComputed(() => {\n if (typeof this.starter.selection !== 'function') {\n return false\n } else {\n const starterSelection = this.starter.selection() as ButtonsSelection\n return starterSelection.hasTote()\n }\n })\n\n this.displayFixedOdds = ko.pureComputed(\n () =>\n this.starter.hasFixedOdds() &&\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n this.starter.fixedOddsStarterInfo.hasWinDividend()\n )\n\n this.displayScratchedFixedOdds = ko.pureComputed(\n () => this.starter.hasFixedOdds() && this.starter.fixedOddsStarterInfo.isScratched()\n )\n\n this.displaySuspendedFixedOdds = ko.pureComputed(\n () =>\n this.starter.hasFixedOdds() &&\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n !this.starter.fixedOddsStarterInfo.hasWinDividend()\n )\n\n this.hasKnockoutSelection = ko.pureComputed(() =>\n this.bettingContext.selectedBetType().validator.isValid(this.bettingContext)\n )\n\n this.displayTote = ko.pureComputed(\n () => this.starter.isToteEnabled() && !this.starter.isScratched()\n )\n\n if (this.starter.number() == this.numberOfStartersInRace()) {\n this.evtAggregator.publish('last-starter-initialised')\n }\n\n this.registerDisposals(() => {\n this.fixedPricePlace?.dispose()\n this.totePricePlace?.dispose()\n this.fobSelected?.dispose()\n this.toteSelected?.dispose()\n this.displayFixedOdds?.dispose()\n this.displayTote?.dispose()\n this.displayScratchedFixedOdds?.dispose()\n this.displaySuspendedFixedOdds?.dispose()\n })\n }\n\n private setupSameRaceMulti(params: ISelectionViewModel) {\n this.ReactElement = SameRaceMultiButtons\n\n this.makeFobLegSelection = this.makeFobLegSelection.bind(this)\n\n this.starterNumber = this.starter.number()\n\n // ko dto objects are always assigned, so no need to guard against missing prices (e.g. cater for scratched/suspended acceptors)\n this.prices = ko.observableArray()\n this.prices.push(this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.win)\n this.prices.push(this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.top2)\n const srmTopLimit = this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.srmTopLimit()\n if (srmTopLimit != undefined && srmTopLimit >= 3) {\n this.prices.push(this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.top3)\n }\n if (srmTopLimit != undefined && srmTopLimit >= 4) {\n this.prices.push(this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.top4)\n }\n // a single ButtonsSelection contains reference to all of an acceptor's individual leg selections\n const buttonsSelection = new ButtonsSelection(\n ButtonSelectionType.None, // SRM doesn't need to distinguish tote vs fixed, i.e. they are just buttons\n this.raceNumber,\n params.context.bettingContext.selectedBetType().legs() // leg count, not the actual legs\n )\n this.starter.selection = ko.observable(buttonsSelection)\n\n // as per MOBI-859, SRM scratching is deliberately based on W&P scratching\n this.displayScratchedFixedOdds = ko.pureComputed(() =>\n this.starter.fixedOddsStarterInfo.isScratched()\n )\n\n this.srmSelectedLegs = ko.pureComputed(() => {\n const starterSelection = this.starter.selection() as ButtonsSelection\n return starterSelection.values().map(leg => leg() !== ButtonSelectionType.None)\n })\n\n // as per MOBI-859, SRM suspended is determined by ..\n // 1. W&P suspended - if W&P is NOT suspended, then SRM without win price is used for suspended\n // - this scenario is specifically possible because betmakers W&P prices are pushed and SRM prices are polled.\n // 2. SRM missing price - two scenarios (both catered for by sameRaceMultiPrices.isSuspended)\n // - acceptor has NO SRM prices object returned\n // - acceptor has SRM prices that are null\n this.displaySuspendedFixedOdds = ko.pureComputed(\n () =>\n // scratching takes precedence\n !this.starter.fixedOddsStarterInfo.isScratched() &&\n (this.starter.fixedOddsStarterInfo.isSuspended() ||\n // from a customer perspective missing SRM prices (aka undefined) is treated as suspended, i.e. non-selectable\n this.starter.fixedOddsStarterInfo.sameRaceMultiPrices.isSuspended() != false)\n )\n\n // event used elsewhere to know the starters are ready for use, e.g. ready for rendering (refer StartersPageViewModel.ts)\n if (this.starter.number() == this.numberOfStartersInRace()) {\n this.evtAggregator.publish('last-starter-initialised')\n }\n\n this.registerDisposals(() => {\n this.displayScratchedFixedOdds?.dispose()\n this.displaySuspendedFixedOdds?.dispose()\n })\n }\n\n public makeToteSelection() {\n this.selectionMade(ButtonSelectionType.Tote)\n }\n\n public makeFobSelection() {\n if (!this.starter.fixedOddsStarterInfo.isSuspended()) {\n this.selectionMade(ButtonSelectionType.Fob)\n }\n }\n\n public makeFobLegSelection(legNumber: number) {\n // it shouldn't happen that a scratched/suspended acceptor is selected since the button/checkbox won't be present/enabled\n // - but with an abundance of caution ignore selection if it's scratched or suspended\n // - also consistent with the W&P implementation.. which likewise also shouldn't happen\n if (this.displayScratchedFixedOdds?.() || this.displaySuspendedFixedOdds?.()) {\n return\n }\n\n this.makeLegSelection(ButtonSelectionType.Fob, legNumber)\n }\n\n private selectionMade(type: ButtonSelectionType) {\n const starterSelection = this.starter.selection() as ButtonsSelection\n\n if (starterSelection.value() === type) {\n starterSelection.value(ButtonSelectionType.None)\n } else {\n starterSelection.value(type)\n }\n\n this.publishSelection(0, type)\n }\n\n private makeLegSelection(type: ButtonSelectionType, legNumber: number) {\n const starterSelection = this.starter.selection() as ButtonsSelection\n\n // toggle selection.. supports fob and tote\n starterSelection\n .values()\n [\n legNumber\n ](starterSelection.values()[legNumber]() == ButtonSelectionType.None ? type : ButtonSelectionType.None)\n\n this.publishSelection(legNumber, type)\n }\n\n private publishSelection(legNumber = 0, buttonSelectionType: ButtonSelectionType) {\n // trigger event, e.g. for Processor subscriber to invoke SameRaceMultiSelectionProcessor to create SelectedRaceStarters selections required for quick bet\n // - the selection value/type is passed so consumers can determine 'fixed vs tote' when the ButtonSelection.value == ButtonSelectionType.None, i.e. button is deselected\n this.evtAggregator.publish('selection-made-command', {\n raceNumber: this.raceNumber.raceNumber(),\n starter: this.starter,\n context: new LegSelectionContext(legNumber, buttonSelectionType),\n } as ISelectionMadeCommand)\n }\n\n // non-react data, e.g. tote novelties\n public starter: ObservableRaceStarter\n public bettingContext: BettingInformation\n public raceNumber: ObservableRaceKey\n public meetingDate: Date\n public meetingId: string\n public numberOfStartersInRace: ko.Computed\n\n // react shared data\n public ReactElement?: React.ElementType\n public displayScratchedFixedOdds?: ko.PureComputed\n public displaySuspendedFixedOdds?: ko.PureComputed\n public hasKnockoutSelection?: ko.PureComputed\n\n // react WinPlace data\n public displayFixedOdds?: ko.PureComputed\n public displayTote?: ko.PureComputed\n public fobSelected?: ko.PureComputed\n public toteSelected?: ko.PureComputed\n public starterNumber?: number\n public isFixedSuspended?: ko.Observable\n public isFixedFavourite?: ko.Observable\n public fixedPriceWin?: ko.Observable\n public fixedPricePlace?: ko.PureComputed\n public isToteFavourite?: ko.Observable\n public isToteScratched?: ko.Observable\n public toteScratchType?: ko.Observable\n public totePriceWin?: ko.Observable\n public totePricePlace?: ko.PureComputed\n\n // react SameRaceMulti data\n public prices!: ko.ObservableArray>\n public srmSelectedLegs!: ko.PureComputed\n //#endregion\n}\n\nexport const isStarterScratched = (starter: IObservableStarter, isFixed: boolean) =>\n starter.isScratchedToteAndFob() ||\n (!isFixed && starter.isScratched()) ||\n (isFixed && starter.isFixedScratchedOrSuspended())\n","import * as ko from 'knockout'\nimport { SelectionViewModel } from './SelectionViewModel'\nimport template from './selection.tpl.html'\n\nif (!ko.components.isRegistered('starter-selection')) {\n ko.components.register('starter-selection', {\n viewModel: SelectionViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport Guard from '../../../../AppUtils/Framework/Guard'\n\nexport default class CheckedValue {\n constructor(value: number, checked: ko.Observable, label: string) {\n Guard.greaterThanZero(value)\n Guard.notNull(label)\n\n this.checked = checked\n this.value = ko.observable(value)\n this.label = ko.observable(label)\n this.visible = ko.observable(true)\n }\n\n public value: ko.Observable\n public checked: ko.Observable\n public label: ko.Observable\n public visible: ko.Observable\n}\n","import { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport BetTypeInformation from '@classic/Betting-v2/Model/Betting/BetTypeInformation'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport Guard from '@classic/AppUtils/Framework/Guard'\n\nexport default {\n labelFor(\n betType: ko.Observable,\n bettingContext: BettingInformation,\n count: number\n ): string {\n Guard.notNull(bettingContext)\n Guard.greaterThanZero(count)\n\n //Double & Quaddie\n if (\n betType().betType() === BetType.Double ||\n betType().betType() === BetType.Quaddie ||\n betType().betType() === BetType.AllUp\n )\n return \"\"\n\n // Quinella\n if (count === 1 && betType().betType() === BetType.Quinella && bettingContext.isLegIn())\n return ''\n\n if (count === 2 && betType().betType() === BetType.Quinella && bettingContext.isLegIn())\n return \"\"\n\n if (count === 1 && betType().betType() === BetType.Quinella)\n return \"\"\n\n // Allways\n if (count === 1 && bettingContext.isBoxed())\n return \"\"\n\n // Roving Banker\n if (count === 1 && bettingContext.rovingBanker()) return 'RB'\n\n // With\n if (count === 2 && bettingContext.rovingBanker()) return 'With'\n\n // Standard Columns\n if (count === 1) return '1st'\n\n if (count === 2) return '2nd'\n\n if (count === 3) return '3rd'\n\n if (count === 4) return '4th'\n\n return ''\n },\n}\n","import { ISelectionContext } from './ISelectionContext'\nexport default class CheckBoxSelectionContext implements ISelectionContext {\n constructor(public selectedColumn: number) {}\n}\n","import { ISelection } from './ISelection'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport CheckedValue from './CheckedValue'\nimport NumberToPosition from './NumberToPosition'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { IEventAggregator } from '../../../../AppUtils/Framework/Messaging/IEventAggregator'\nimport EventAggregator from '../../../../AppUtils/Framework/Messaging/EventAggregator'\nimport CheckBoxSelectionContext from '../Processors/CheckBoxSelectionContext'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport * as ko from 'knockout'\nimport { range } from '@mobi/utils'\n\nexport { CheckedValue }\n\nexport class CheckBoxSelection implements ISelection {\n static readonly MAX_COUNT = 4\n\n public values: ko.Computed\n public count: ko.PureComputed\n\n private _checked: ko.Observable[]\n private _lastChecked: boolean[]\n private _eventAggregator: IEventAggregator\n private _subscriptions: ko.Subscription[]\n private _modifierStateWatcher: ko.Computed\n private _lastModifierState: { isBoxed: boolean; isLegIn: boolean; rovingBanker: boolean }\n\n constructor(\n public starter: IObservableStarter,\n public raceNumber: ObservableRaceKey,\n public bettingContext: BettingInformation,\n eventAggregator = new EventAggregator()\n ) {\n Guard.notNull(bettingContext)\n this._checked = range(CheckBoxSelection.MAX_COUNT).map(() => ko.observable(false))\n this._lastChecked = this._checked.map(v => v())\n this._lastModifierState = this.betModifierState()\n\n this._eventAggregator = eventAggregator\n\n this.values = ko.pureComputed(() => {\n const checkBoxCount = this.checkBoxCount(bettingContext)\n return range(checkBoxCount).map(\n index =>\n new CheckedValue(\n index + 1,\n this._checked[index],\n NumberToPosition.labelFor(\n this.bettingContext.selectedBetType,\n this.bettingContext,\n index + 1\n )\n )\n )\n })\n\n this.count = ko.pureComputed(() => this.checkBoxCount(bettingContext))\n\n this._subscriptions = this._checked.map((checked, k) =>\n checked.subscribe(state => {\n if (this._lastChecked[k] !== state) {\n this._lastChecked[k] = state\n this.checkBoxChanged(k + 1, state)\n }\n })\n )\n\n // clear all selections by side-effect if bet modifiers are toggled,\n // unless regular -> allways transition\n this._modifierStateWatcher = ko.computed(() => {\n const newState = this.betModifierState()\n\n if (\n this._lastModifierState.isBoxed !== newState.isBoxed ||\n this._lastModifierState.isLegIn !== newState.isLegIn ||\n this._lastModifierState.rovingBanker !== newState.rovingBanker\n ) {\n if (\n !this._lastModifierState.isBoxed &&\n !this._lastModifierState.isLegIn &&\n !this._lastModifierState.rovingBanker &&\n newState.isBoxed\n ) {\n this.transferAllwaysSelection()\n } else {\n this.clearAll()\n }\n }\n\n this._lastModifierState = newState\n })\n }\n\n public dispose() {\n this._subscriptions.forEach(s => s.dispose())\n this._modifierStateWatcher.dispose()\n }\n\n public setValue(value: number, checked: boolean) {\n const index = value - 1\n this._lastChecked[index] = checked\n this._checked[index](checked)\n }\n\n public setValues(values: number[], checked = true) {\n values\n .filter(v => v > 0 && v <= CheckBoxSelection.MAX_COUNT)\n .forEach(v => this.setValue(v, checked))\n }\n\n public clearAt(number: number) {\n this.setValue(number, false)\n }\n\n public enableAt(number: number) {\n this.setValue(number, true)\n }\n\n public clearAll() {\n range(1, CheckBoxSelection.MAX_COUNT + 1).forEach(number => this.clearAt(number))\n }\n\n private checkBoxChanged(index: number, checked: boolean) {\n if (index > 0 && index <= this.count()) {\n // Can not select roving banker if at capacity undo our change\n if (this.rovingBankerSelectedAndMaxReached(index, checked)) {\n this.clearAt(1)\n return // about nothing to see here\n }\n\n // Need remove the with box\n if (this.rovingBankerSelectedAndNotAtMax(checked, index)) {\n this.clearAt(2)\n }\n\n // Move a roving banker to a with and clear the roving banker bit. - Always a safe move.\n if (this.withSelected(checked, index)) {\n this.clearAt(1)\n }\n\n this._eventAggregator.publish('selection-made-command', {\n raceNumber: this.raceNumber.raceNumber(),\n starter: this.starter,\n context: new CheckBoxSelectionContext(index),\n })\n }\n }\n\n private checkBoxCount(bettingContext: BettingInformation) {\n if (bettingContext.isBoxed()) {\n return 1\n }\n if (bettingContext.rovingBanker()) {\n return 2\n }\n if (bettingContext.isLegIn()) {\n return 2\n }\n return bettingContext.selectedBetType().checkBoxCount()\n }\n\n private betModifierState() {\n return {\n isBoxed: this.bettingContext.isBoxed(),\n isLegIn: this.bettingContext.isLegIn(),\n rovingBanker: this.bettingContext.rovingBanker(),\n }\n }\n\n private withSelected(checked: boolean, index: number) {\n return (\n checked &&\n index === 2 &&\n (this.bettingContext.rovingBanker() || this.bettingContext.isLegIn())\n )\n }\n\n private rovingBankerSelectedAndNotAtMax(checked: boolean, index: number) {\n return (\n checked &&\n index === 1 &&\n (this.bettingContext.rovingBanker() || this.bettingContext.isLegIn())\n )\n }\n\n private rovingBankerSelectedAndMaxReached(index: number, checked: boolean) {\n return (\n this.bettingContext.rovingBanker() &&\n this.bettingContext.rovingBankersSelected() >=\n this.bettingContext.selectedBetType().checkBoxCount() - 1 &&\n index == 1 &&\n checked\n )\n }\n\n private transferAllwaysSelection() {\n const regularCount = this.bettingContext.selectedBetType().checkBoxCount()\n const anySelected = range(regularCount).some(i => this._checked[i]())\n this.clearAll()\n if (anySelected) {\n this.enableAt(1)\n }\n }\n\n public enableSiblingIfSelected(row: number, column: number) {\n if (this.selectedAt(row - 1)) {\n this.enableAt(column)\n }\n }\n\n public disableSiblingIfSelected(row: number, column: number) {\n if (this.selectedAt(row - 1)) {\n this.clearAt(column)\n }\n }\n\n public copyToSibling(row: number, column: number) {\n if (this.selectedAt(row - 1)) {\n this.enableAt(column)\n } else {\n this.clearAt(column)\n }\n }\n\n public anySelectedAtIndicies(indices: number[]): boolean {\n for (const index of indices) {\n if (this.selectedAt(index)) return true\n }\n return false\n }\n\n public selectedAt(index: number): boolean {\n if (index < this.count()) {\n return this.values()[index].checked()\n }\n return false\n }\n\n public anySelected(): boolean {\n return range(CheckBoxSelection.MAX_COUNT).some(i => this.selectedAt(i))\n }\n\n public onlyFirstSelected(): boolean {\n const [head, ...rest] = range(CheckBoxSelection.MAX_COUNT).map(i => this.selectedAt(i))\n return head && rest.every(r => !r)\n }\n}\n","import * as ko from 'knockout'\nimport { CheckBoxSelection, CheckedValue } from '../../Core/UIElements/CheckboxSelection'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport EventAggregator from '../../../../AppUtils/Framework/Messaging/EventAggregator'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport { IDisposable } from '../../../../AppUtils/Framework/Disposable/IDisposable'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { ISelection } from '../../Core/UIElements/ISelection'\n\nexport class CheckboxSelectionViewModel implements IDisposable {\n constructor(params: {\n starter: IObservableStarter\n context: {\n raceNumber: ObservableRaceKey\n bettingContext: BettingInformation\n numberOfStartersInRace: ko.PureComputed\n }\n }) {\n Guard.notNull(params.starter)\n Guard.notNull(params.context.raceNumber)\n Guard.notNull(params.context.bettingContext)\n Guard.notNull(params.context.numberOfStartersInRace)\n\n this.starter = params.starter\n this.bettingContext = params.context.bettingContext\n this.raceNumber = params.context.raceNumber\n this.numberOfStartersInRace = params.context.numberOfStartersInRace\n\n this.evtAggregator = new EventAggregator()\n\n const starterSelection = this.starter.selection\n\n if (starterSelection === null || typeof this.starter.selection === 'undefined')\n this.starter.selection = ko.observable(\n new CheckBoxSelection(this.starter, this.raceNumber, this.bettingContext)\n ) as unknown as ko.Observable\n\n if (\n starterSelection &&\n (starterSelection() === null || typeof starterSelection() === 'undefined')\n )\n starterSelection(\n new CheckBoxSelection(\n this.starter,\n this.raceNumber,\n this.bettingContext\n ) as unknown as ISelection\n )\n\n this.maxAtIndexZeroClass = ko.pureComputed(() => {\n if (this.bettingContext.rovingBanker()) {\n return this.bettingContext.rovingBankersSelected() >=\n this.bettingContext.selectedBetType().checkBoxCount() - 1\n ? 'disabled'\n : ''\n }\n if (this.bettingContext.isLegIn()) {\n return this.bettingContext.rovingBankersSelected() >=\n this.bettingContext.selectedBetType().checkBoxCount() - 1\n ? 'disabled'\n : ''\n }\n return ''\n })\n\n this.rovingClass = ko.pureComputed(() => {\n if (this.bettingContext.rovingBanker()) return 'roving'\n return ''\n })\n\n this.boxedClass = ko.pureComputed(() => {\n if (this.bettingContext.isBoxed()) return 'boxed'\n return ''\n })\n\n this.radioClass = ko.pureComputed(() => {\n if (this.bettingContext.isLegIn()) return 'checked-radio'\n return ''\n })\n\n if (this.starter.number() == this.numberOfStartersInRace()) {\n this.evtAggregator.publish('last-starter-initialised')\n }\n }\n\n public dispose() {\n this.rovingClass.dispose()\n this.radioClass.dispose()\n this.boxedClass.dispose()\n this.maxAtIndexZeroClass.dispose()\n }\n\n public getIdFor(data: CheckedValue): string {\n return `toggle-${this.raceNumber.raceNumber()}-${this.starter.number()}-${data.value()}`\n }\n\n public getIndexClassFor(data: CheckedValue): string {\n if (data.value() === 1) return `index${data.value()}`\n return ''\n }\n\n public getLabelFor(data: CheckedValue): string {\n return `toggle-${this.raceNumber.raceNumber()}-${this.starter.number()}-${data.value()}`\n }\n\n public starter: IObservableStarter\n public bettingContext: BettingInformation\n public raceNumber: ObservableRaceKey\n public numberOfStartersInRace: ko.PureComputed\n public rovingClass: ko.PureComputed\n public boxedClass: ko.PureComputed\n public radioClass: ko.PureComputed\n public maxAtIndexZeroClass: ko.PureComputed\n public evtAggregator: EventAggregator\n}\n","import * as ko from 'knockout'\nimport { CheckboxSelectionViewModel } from './CheckboxSelectionViewModel'\nimport template from './checkbox.selection.tpl.html'\n\nif (!ko.components.isRegistered('checkbox-selection')) {\n ko.components.register('checkbox-selection', {\n viewModel: CheckboxSelectionViewModel,\n template,\n })\n}\n","import { dayjs } from '@mobi/utils/date'\nimport Guard from '@classic/AppUtils/Framework/Guard'\n\nexport class ScratchedViewModel {\n public scratchType: ko.Observable\n public scratchedTime: ko.Observable\n\n constructor(params: {\n scratchType: ko.Observable\n scratchedTime: ko.Observable\n }) {\n Guard.notNull(params.scratchType)\n Guard.notNull(params.scratchedTime)\n Guard.stringNotNullOrEmpty(params.scratchType())\n\n this.scratchType = params.scratchType\n this.scratchedTime = params.scratchedTime\n }\n\n public isLate() {\n return this.scratchType() === 'Late'\n }\n\n public scratchedTimeDisplay() {\n return this.scratchedTime() ? dayjs.tz(this.scratchedTime()).local().format('DD/MM, h:mma') : ''\n }\n}\n","import * as ko from 'knockout'\nimport { ScratchedViewModel } from './ScratchedViewModel'\nimport template from './scratched.tpl.html'\n\nif (!ko.components.isRegistered('display-scratched')) {\n ko.components.register('display-scratched', {\n viewModel: ScratchedViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport Guard from '@classic/AppUtils/Framework/Guard'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { toMoney } from '@mobi/utils/money'\n\nexport class ScratchedDeductionsViewModel {\n public shouldDisplayDeductions: ko.PureComputed\n public hasDeductions: ko.PureComputed\n\n private winDeduction: ko.Observable\n private placeDeduction: ko.Observable\n\n constructor(params: {\n winDeduction: ko.Observable\n placeDeduction: ko.Observable\n bettingContext?: BettingInformation\n }) {\n Guard.notNull(params.winDeduction)\n Guard.notNull(params.placeDeduction)\n\n this.winDeduction = params.winDeduction\n this.placeDeduction = params.placeDeduction\n\n this.shouldDisplayDeductions = ko.pureComputed(() =>\n params.bettingContext ? params.bettingContext.selectedBetType().isWinPlace() : true\n )\n\n this.hasDeductions = ko.pureComputed(() =>\n Boolean(this.winDeduction() || this.placeDeduction())\n )\n }\n\n public winDeductionDisplay() {\n return this.winDeduction() !== null ? toMoney(this.winDeduction() || 0) : ''\n }\n\n public placeDeductionDisplay() {\n return this.placeDeduction() !== null ? toMoney(this.placeDeduction() || 0) : ''\n }\n}\n","import * as ko from 'knockout'\nimport { ScratchedDeductionsViewModel as viewModel } from './ScratchedDeductionsViewModel'\nimport template from './scratched-deductions.tpl.html'\n\nif (!ko.components.isRegistered('display-scratched-deductions')) {\n ko.components.register('display-scratched-deductions', { viewModel, template })\n}\n","import * as ko from 'knockout'\nimport { RovingBankerViewModel } from './RovingBankerViewModel'\nimport template from './rovingbanker.tpl.html'\n\nif (!ko.components.isRegistered('roving-banker')) {\n ko.components.register('roving-banker', {\n viewModel: RovingBankerViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { IObservablePage } from '../../../Model/Observables/IObservablePage'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class TrifectaTopPanelViewModel {\n constructor(params: {\n raceInfo: IObservablePage\n context: {\n raceNumber: ObservableRaceKey\n bettingContext: BettingInformation\n starters: ko.ObservableArray\n }\n useGiddyUp: IUseGiddyUp\n }) {\n this.raceInfo = params.raceInfo\n this.raceNumber = params.context.raceNumber\n this.bettingContext = params.context.bettingContext\n this.starters = params.context.starters\n this.useGiddyUp = params.useGiddyUp\n }\n\n public hasGiddyUp() {\n return this.useGiddyUp?.showGiddyUpInTopPanel(this.raceNumber.raceNumber())\n }\n\n public openGiddyUp() {\n this.useGiddyUp?.openGiddyUp()\n }\n\n public raceInfo: IObservablePage\n public raceNumber: ObservableRaceKey\n public bettingContext: BettingInformation\n public starters: ko.ObservableArray\n public useGiddyUp?: IUseGiddyUp\n}\n","import * as ko from 'knockout'\nimport { TrifectaTopPanelViewModel } from './TrifectaTopPanelViewModel'\nimport template from './trifecta.top.panel.tpl.html'\n\nif (!ko.components.isRegistered('trifecta-top-panel')) {\n ko.components.register('trifecta-top-panel', {\n viewModel: TrifectaTopPanelViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport { BoxedViewModel } from './BoxedViewModel'\nimport template from './boxed.tpl.html'\n\nif (!ko.components.isRegistered('all-ways')) {\n ko.components.register('all-ways', {\n viewModel: BoxedViewModel,\n template,\n })\n}\n","import { BettingInformation } from '../../Model/BettingInformation'\nimport { BetType } from '../../Model/Betting/BetType'\nimport Guard from '../../../AppUtils/Framework/Guard'\n\nexport class MySelectionsViewModel {\n constructor(params: { bettingContext: BettingInformation }) {\n Guard.notNull(params)\n Guard.notNull(params.bettingContext)\n\n this.bettingContext = params.bettingContext\n this.betTypeName = BetType[this.bettingContext.selectedBetType().betType()]\n }\n\n public bettingContext: BettingInformation\n public betTypeName: string\n}\n","import * as ko from 'knockout'\nimport { MySelectionsViewModel } from './MySelectionsViewModel'\nimport template from './myselections.tpl.html'\n\nif (!ko.components.isRegistered('my-selections')) {\n ko.components.register('my-selections', {\n viewModel: MySelectionsViewModel,\n template,\n })\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport * as buttons from '../../Core/UIElements/ButtonsSelection'\nimport { ButtonSelectionType } from '../../Core/UIElements/ButtonSelectionType'\nimport { FobSelectionResult } from '../../Core/SelectionResults/FobSelectionResult'\nimport { ISelectionResultProcessor } from '../../Core/SelectionResults/ISelectionResultProcessor'\nimport WinPlaceSelectionResultProcessor from '../../Core/SelectionResults/WinPlaceSelectionResultProcessor'\nimport ObservableMeetingInformation from '@classic/Betting-v2/Model/Observables/ObservableMeetingInformation'\n\nexport class WinPlaceSelectionsViewModel {\n public raceNumber: number\n public bettingContext: BettingInformation\n public isFixed: boolean\n public selectionsString!: string\n public winPrice: string\n public placePrice: string\n public winPlaceSelectionResultProcessor: ISelectionResultProcessor\n public hasFixedPlacePool: boolean\n\n constructor(params: { bettingContext: BettingInformation }) {\n this.bettingContext = params.bettingContext\n this.raceNumber = this.bettingContext.raceNumber\n this.isFixed = this.bettingContext.isFixed()\n this.winPrice = ''\n this.placePrice = ''\n this.winPlaceSelectionResultProcessor = new WinPlaceSelectionResultProcessor()\n this.hasFixedPlacePool =\n (\n this.bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.isFixedOddsRace() &&\n (\n this.bettingContext.meetingInformation as ObservableMeetingInformation\n ).selectedRace.fixedOddsInfo.isPlaceAvailable()\n this.initialise()\n }\n\n private initialise(): void {\n const selectionResult = this.winPlaceSelectionResultProcessor.getSelectionsResult(\n this.bettingContext,\n this.raceNumber\n )\n\n const strings = selectionResult.selectionStrings\n this.selectionsString = strings[0] ?? ''\n const starters = this.bettingContext.selections.getStartersForRace(this.raceNumber)()\n\n if (this.appendStarterName()) {\n this.selectionsString += ` - ${starters?.[0].name()}`\n }\n\n const fobSelected = starters\n .map(starter => (starter.selection() as buttons.ButtonsSelection).value())\n .some(buttonSelectionType => buttonSelectionType === ButtonSelectionType.Fob)\n\n if (fobSelected) {\n const fob = selectionResult as FobSelectionResult\n this.winPrice = fob.winPrice\n this.placePrice = fob.placePrice\n }\n }\n\n private appendStarterName(): boolean {\n return (\n this.bettingContext.selections.getTotalNumberOfStartersForRace(\n this.bettingContext.raceNumber\n ) === 1\n )\n }\n}\n","import * as ko from 'knockout'\nimport { WinPlaceSelectionsViewModel } from './WinPlaceSelectionsViewModel'\nimport template from './winplace-selections.tpl.html'\n\nif (!ko.components.isRegistered('winplace-selections')) {\n ko.components.register('winplace-selections', {\n viewModel: WinPlaceSelectionsViewModel,\n template,\n })\n}\n","export class ToteWinPlaceSelectionsViewModel {\n public title: string\n public raceName: string\n public selectionsString: string\n\n constructor(params: { raceNumber: number; selectionsString: string }) {\n this.title = 'Win & Place - TOTE'\n this.raceName = 'Race ' + params.raceNumber\n this.selectionsString = params.selectionsString.split('.').join('.\\u200B') //\\u200B is a zero-width space so the string will break over multiple lines\n }\n}\n","import * as ko from 'knockout'\nimport { ToteWinPlaceSelectionsViewModel } from './ToteWinPlaceSelectionsViewModel'\nimport template from './tote-winplace-selections.tpl.html'\n\nif (!ko.components.isRegistered('tote-winplace-selections')) {\n ko.components.register('tote-winplace-selections', {\n viewModel: ToteWinPlaceSelectionsViewModel,\n template,\n })\n}\n","import { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport type { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport {\n RovingBankerProjection,\n Projection,\n RegularProjection,\n AllwaysProjection,\n LegInProjection,\n} from '../MultiSelectionProjections'\n\nexport class NoveltySelectionsViewModel {\n public bettingContext: BettingInformation\n public betTypeName: string\n public selectionStringRaws!: Projection[]\n\n constructor(params: { bettingContext: BettingInformation }) {\n this.bettingContext = params.bettingContext\n this.betTypeName = this.bettingContext.selectedBetType().name()\n\n this.initialise()\n }\n\n private initialise(): void {\n const selections = this.bettingContext\n .selectedBetType()\n .selectionStringProcessor.getSelectionsResult(\n this.bettingContext,\n this.bettingContext.raceNumber\n )\n const selectionStrings = selections.selectionStrings\n let index = 1\n this.selectionStringRaws = []\n\n for (const element of selectionStrings) {\n let selectionRaw: Projection\n\n if (this.bettingContext.rovingBanker()) {\n selectionRaw = new RovingBankerProjection(index, element)\n } else if (this.bettingContext.isAllwaysBet()) {\n selectionRaw = new AllwaysProjection(index, element)\n } else if (this.bettingContext.isLegIn()) {\n selectionRaw = new LegInProjection(index, element)\n } else if (this.bettingContext.selectedBetType().betType() === BetType.Quinella) {\n selectionRaw = new Projection('Race ' + this.bettingContext.raceNumber, element)\n } else {\n selectionRaw = new RegularProjection(index, element)\n }\n this.selectionStringRaws.push(selectionRaw)\n index++\n }\n\n //remove rows if either title or data is empty\n this.selectionStringRaws = this.selectionStringRaws\n .filter(raw => raw.data != undefined && raw.data.length > 0)\n .filter(raw => raw.title != undefined && raw.title.length > 0)\n\n //if only one starter selected for a leg than add starter name to selection string\n const selectedStarters = this.bettingContext.selections.getStartersForRace(\n this.bettingContext.raceNumber\n )\n for (const selectionStringRaw of this.selectionStringRaws) {\n const selectionNumber = Number(selectionStringRaw.data)\n if (Number.isInteger(selectionNumber)) {\n selectionStringRaw.data =\n selectionStringRaw.data +\n ' - ' +\n (\n selectedStarters().find(s => s.number() === selectionNumber) as IObservableStarter\n ).name()\n }\n\n selectionStringRaw.data = selectionStringRaw.data.split('.').join('.\\u200B') //\\u200B is a zero-width space so the string will break over multiple lines\n }\n }\n}\n","import * as ko from 'knockout'\nimport { NoveltySelectionsViewModel } from './NoveltySelectionsViewModel'\nimport template from './novelty-selections.tpl.html'\n\nif (!ko.components.isRegistered('novelty-selections')) {\n ko.components.register('novelty-selections', {\n viewModel: NoveltySelectionsViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { IObservablePage } from '../../../Model/Observables/IObservablePage'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class FirstFourTopPanelViewModel {\n constructor(params: {\n raceInfo: IObservablePage\n context: {\n raceNumber: ObservableRaceKey\n bettingContext: BettingInformation\n starters: ko.ObservableArray\n }\n useGiddyUp: IUseGiddyUp\n }) {\n this.raceInfo = params.raceInfo\n this.raceNumber = params.context.raceNumber\n this.bettingContext = params.context.bettingContext\n this.starters = params.context.starters\n this.useGiddyUp = params.useGiddyUp\n }\n\n public hasGiddyUp() {\n return this.useGiddyUp?.showGiddyUpInTopPanel(this.raceNumber.raceNumber())\n }\n\n public openGiddyUp() {\n this.useGiddyUp?.openGiddyUp()\n }\n\n public raceInfo: IObservablePage\n public raceNumber: ObservableRaceKey\n public bettingContext: BettingInformation\n public starters: ko.ObservableArray\n public useGiddyUp?: IUseGiddyUp\n}\n","import * as ko from 'knockout'\nimport { FirstFourTopPanelViewModel } from './FirstFourTopPanelViewModel'\nimport template from './first4.top.panel.tpl.html'\n\nif (!ko.components.isRegistered('first4-top-panel')) {\n ko.components.register('first4-top-panel', {\n viewModel: FirstFourTopPanelViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { IObservablePage } from '../../../Model/Observables/IObservablePage'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class ExactaTopPanelViewModel {\n constructor(params: {\n raceInfo: IObservablePage\n context: {\n raceNumber: ObservableRaceKey\n bettingContext: BettingInformation\n starters: ko.ObservableArray\n }\n useGiddyUp: IUseGiddyUp\n }) {\n this.raceInfo = params.raceInfo\n this.raceNumber = params.context.raceNumber\n this.bettingContext = params.context.bettingContext\n this.starters = params.context.starters\n this.useGiddyUp = params.useGiddyUp\n }\n\n public hasGiddyUp() {\n if (!this.useGiddyUp) return false\n return this.useGiddyUp.showGiddyUpInTopPanel(this.raceNumber.raceNumber())\n }\n\n public openGiddyUp() {\n this.useGiddyUp.openGiddyUp()\n }\n\n public raceInfo: IObservablePage\n public raceNumber: ObservableRaceKey\n public bettingContext: BettingInformation\n public starters: ko.ObservableArray\n public useGiddyUp: IUseGiddyUp\n}\n","import * as ko from 'knockout'\nimport { ExactaTopPanelViewModel } from './ExactaTopPanelViewModel'\nimport template from './exacta.top.panel.tpl.html'\n\nif (!ko.components.isRegistered('exacta-top-panel')) {\n ko.components.register('exacta-top-panel', {\n viewModel: ExactaTopPanelViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { IObservablePage } from '../../../Model/Observables/IObservablePage'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class QuinellaTopPanelViewModel {\n constructor(params: {\n raceInfo: IObservablePage\n context: {\n raceNumber: ObservableRaceKey\n bettingContext: BettingInformation\n starters: ko.ObservableArray\n }\n useGiddyUp: IUseGiddyUp\n }) {\n this.raceInfo = params.raceInfo\n this.raceNumber = params.context.raceNumber\n this.bettingContext = params.context.bettingContext\n this.starters = params.context.starters\n this.useGiddyUp = params.useGiddyUp\n }\n\n public hasGiddyUp() {\n return this.useGiddyUp?.showGiddyUpInTopPanel(this.raceNumber.raceNumber())\n }\n\n public openGiddyUp() {\n this.useGiddyUp?.openGiddyUp()\n }\n\n public raceInfo: IObservablePage\n public raceNumber: ObservableRaceKey\n public bettingContext: BettingInformation\n public starters: ko.ObservableArray\n public useGiddyUp?: IUseGiddyUp\n}\n","import * as ko from 'knockout'\nimport { QuinellaTopPanelViewModel } from './QuinellaTopPanelViewModel'\nimport template from './quinella.top.panel.tpl.html'\n\nif (!ko.components.isRegistered('quinella-top-panel')) {\n ko.components.register('quinella-top-panel', {\n viewModel: QuinellaTopPanelViewModel,\n template,\n })\n}\n","import ko from 'knockout'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { BaseBetType } from '../BaseBetType/BaseBetType'\n\nexport class ExactaViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { ExactaViewModel } from './ExactaViewModel'\nimport template from './exacta.tpl.html'\n\nif (!ko.components.isRegistered('exacta-bettype')) {\n ko.components.register('exacta-bettype', {\n viewModel: ExactaViewModel,\n template,\n })\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\nimport { BaseBetType } from '../BaseBetType/BaseBetType'\n\nexport class QuinellaViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { QuinellaViewModel } from './QuinellaViewModel'\nimport template from './quinella.tpl.html'\n\nif (!ko.components.isRegistered('quinella-bettype')) {\n ko.components.register('quinella-bettype', {\n viewModel: QuinellaViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport { LegInViewModel } from './LegInViewModel'\nimport template from './legin.tpl.html'\n\nif (!ko.components.isRegistered('leg-in')) {\n ko.components.register('leg-in', {\n viewModel: LegInViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport EventAggregator from '@classic/AppUtils/Framework/Messaging/EventAggregator'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\n\nexport class VerticalArrowViewModel extends Disposable {\n constructor(params: { down: ko.Observable }) {\n super(new EventAggregator())\n this.arrowCss = ko.pureComputed(() => {\n if (params.down()) {\n return 'tticon-arrowup'\n } else {\n return 'tticon-arrowdown'\n }\n })\n this.registerDisposals(() => this.arrowCss.dispose())\n }\n\n public arrowCss: ko.PureComputed\n}\n","import * as ko from 'knockout'\nimport { VerticalArrowViewModel } from './VerticalArrowViewModel'\nimport template from './verticalArrow.tpl.html'\n\nif (!ko.components.isRegistered('vertical-arrow')) {\n ko.components.register('vertical-arrow', {\n viewModel: VerticalArrowViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\nimport jQuery from 'jquery'\nimport EventAggregator from '@classic/AppUtils/Framework/Messaging/EventAggregator'\nimport { IEventAggregator } from '@classic/AppUtils/Framework/Messaging/IEventAggregator'\n\nexport class ExpandPanelViewModel {\n constructor(\n params: {\n data: object\n panelName: string\n shouldScrollTo: boolean\n initialPanelState: ko.Observable\n containerClass: string\n panelClass: string\n },\n panelElement: HTMLElement,\n templateNodes: HTMLElement[]\n ) {\n this.panelElement = panelElement\n this.panelName = params.panelName\n this.shouldScrollTo = params.shouldScrollTo\n const initialState = params.initialPanelState != undefined ? params.initialPanelState() : false\n this.isExpanded = ko.observable(initialState)\n this.context = params.data\n\n this.headerContent = (templateNodes.find(x => x.nodeName == 'HEADER') as HTMLElement).childNodes\n this.panelContent = (\n templateNodes.find(x => x.nodeName == 'EXPAND-PANEL-CONTENT') as HTMLElement\n ).childNodes\n\n this.eventAggregator = this.getEventAggregator()\n\n this.panelContainerCssClasses = ko.pureComputed(() => {\n const open = this.isExpanded() ? ' open' : ''\n const container = params.containerClass || 'black-flat-container '\n return container + open\n })\n\n this.panelCssClasses = ko.pureComputed(() => {\n const container = params.panelClass || 'black-flat '\n return container\n })\n }\n\n private publishPanelStateChanged(): void {\n if (this.panelName != undefined && this.panelName.length > 0) {\n this.eventAggregator.publish(this.panelName + '-panel-state-changed', this.isExpanded())\n }\n }\n\n protected getEventAggregator(): IEventAggregator {\n return new EventAggregator()\n }\n\n public context: unknown\n public panelElement: HTMLElement\n public headerContent: NodeList\n public panelContent: NodeList\n\n public isExpanded: ko.Observable\n public panelContainerCssClasses: ko.Computed\n public panelCssClasses: ko.Computed\n\n private eventAggregator: IEventAggregator\n private panelName: string\n public shouldScrollTo: boolean\n\n public toggle(): void {\n this.isExpanded(!this.isExpanded())\n\n if (this.shouldScrollTo) {\n if (this.panelElement) {\n const loc = jQuery(this.panelElement).length ? jQuery(this.panelElement).position().top : 0\n jQuery('html:not(:animated),body:not(:animated)').animate({ scrollTop: loc }, 500)\n }\n }\n\n this.publishPanelStateChanged()\n }\n}\n","import * as ko from 'knockout'\nimport { ExpandPanelViewModel } from './ExpandPanelViewModel'\nimport template from './expandPanel.tpl.html'\n\nif (!ko.components.isRegistered('expand-panel')) {\n ko.components.register('expand-panel', {\n viewModel: {\n createViewModel: function (\n params: ConstructorParameters[0],\n info: {\n element: ConstructorParameters[1]\n templateNodes: ConstructorParameters[2]\n }\n ) {\n return new ExpandPanelViewModel(params, info.element, info.templateNodes)\n },\n },\n template,\n })\n}\n","import ko from 'knockout'\nimport ObservableRace from '@classic/Betting-v2/Model/Observables/ObservableRace'\nimport { IObservableFinisher } from '@classic/Betting-v2/Model/Observables/IObservableFinisher'\nimport { Disposable } from '@classic/AppUtils/Framework/Disposable/Disposable'\nimport EventAggregator from '@classic/AppUtils/Framework/Messaging/EventAggregator'\n\nexport class ResultsColumnHeaderViewModel extends Disposable {\n constructor(params: {\n race: ObservableRace\n raceFinishers: ko.ObservableArray\n }) {\n super(new EventAggregator())\n\n this.race = params.race\n\n this.shouldShowSp = ko.pureComputed(\n () => !!params.raceFinishers?.().some(finisher => finisher.spWinPrice() > 0)\n )\n }\n\n public race: ObservableRace\n public shouldShowSp: ko.PureComputed\n}\n","import * as ko from 'knockout'\nimport { ResultsColumnHeaderViewModel } from './ResultsColumnHeaderViewModel'\nimport template from './results.column.header.tpl.html'\n\nif (!ko.components.isRegistered('results-column-header')) {\n ko.components.register('results-column-header', {\n viewModel: ResultsColumnHeaderViewModel,\n template,\n })\n}\n","import ObservableRaceKeyPoolInfo from '../../../Model/Observables/ObservableRaceKeyPoolInfo'\nimport Guard from '../../../../AppUtils/Framework/Guard'\nimport { PoolInfo } from '../../../Model/Observables/ObservableRaceKeyPoolInfo'\n\nexport class AllUpPoolSelectionViewModel {\n constructor(params: { info: ObservableRaceKeyPoolInfo }) {\n Guard.notNull(params.info)\n this.info = params.info\n }\n\n public isSelected(arg: PoolInfo): boolean {\n return this.info.selectedPool().type() === arg.type()\n }\n\n public updateSelectedPool(newSelectedPool: PoolInfo) {\n if (newSelectedPool !== undefined) {\n this.info.selectedPool(newSelectedPool)\n }\n }\n\n public info: ObservableRaceKeyPoolInfo\n}\n","import * as ko from 'knockout'\nimport { AllUpPoolSelectionViewModel } from './AllUpPoolSelectionViewModel'\nimport template from './allup.pool.selection.tpl.html'\n\nif (!ko.components.isRegistered('allup-pool-selection2')) {\n ko.components.register('allup-pool-selection2', {\n viewModel: AllUpPoolSelectionViewModel,\n template,\n })\n}\n","export default class TachoViewModel {\n private readonly radius = 40\n private readonly startX = 10\n private readonly startY = 50\n private readonly defaultPath = 'M0,0'\n\n public readonly rating: ko.Observable\n\n constructor({ rating }: { rating: ko.Observable }) {\n this.rating = rating\n }\n\n blueArcPath() {\n if (this.rating() <= 0) {\n return this.defaultPath\n }\n if (this.rating() <= 100) {\n return this.arcPath(this.rating())\n }\n if (this.rating() <= 150) {\n return this.arcPath(100)\n }\n return this.defaultPath\n }\n\n orangeArcPath() {\n if (this.rating() <= 100) {\n return this.defaultPath\n }\n if (this.rating() <= 150) {\n return this.arcPath(50)\n }\n return this.arcPath(100)\n }\n\n private arcPath(clampedRating: number) {\n const θ = Math.PI * 1e-2 * clampedRating\n const endX = this.radius * (1.0 - Math.cos(θ))\n const endY = -this.radius * Math.sin(θ)\n return `M${this.startX},${this.startY}a${this.radius},${this.radius} 0 0 1 ${endX},${endY}`\n }\n}\n","import * as ko from 'knockout'\nimport TachoViewModel from './TachoViewModel'\nimport template from './tacho.tpl.html'\n\nif (!ko.components.isRegistered('tacho-meter')) {\n ko.components.register('tacho-meter', {\n viewModel: {\n createViewModel: (params: { rating: ko.Observable }) => new TachoViewModel(params),\n },\n template,\n })\n}\n","import { BettingInformation } from '../../../Model/BettingInformation'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { BaseBetType } from '../../BetTypes/BaseBetType/BaseBetType'\nimport { IUseGiddyUp } from '../../Pages/Starters/IUseGiddyUp'\n\nexport class BettingClosedViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import * as ko from 'knockout'\nimport { BettingClosedViewModel } from './BettingClosedViewModel'\nimport template from './betting.closed.tpl.html'\n\nif (!ko.components.isRegistered('betting-closed')) {\n ko.components.register('betting-closed', {\n viewModel: BettingClosedViewModel,\n template,\n })\n}\n","import * as ko from 'knockout'\n\nko.bindingHandlers['sticky'] = {\n init(element: HTMLElement, valueAccessor) {\n const value = ko.utils.unwrapObservable(valueAccessor())\n element.setAttribute('data-isactive', value)\n\n const onScroll = () => {\n const isActive = element.getAttribute('data-isactive')\n if (isActive === 'true') {\n const scrollY = window.scrollY,\n elemHeight = element.offsetHeight\n\n const bodyRect = document.body.getBoundingClientRect(),\n elemRect = element.getBoundingClientRect(),\n elemPosY = elemRect.top - bodyRect.top\n\n if (scrollY > elemPosY && scrollY < elemHeight + elemPosY) {\n element.classList.add('fixed')\n } else {\n element.classList.remove('fixed')\n }\n }\n }\n\n window.addEventListener('scroll', onScroll)\n\n ko.utils.domNodeDisposal.addDisposeCallback(element, () => {\n window.removeEventListener('scroll', onScroll)\n })\n },\n update(element, valueAccessor) {\n const value = ko.utils.unwrapObservable(valueAccessor())\n element.setAttribute('data-isactive', value)\n\n if (!value) {\n element.classList.remove('fixed')\n }\n },\n}\n","import { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\nimport { IObservableStarter } from '@classic/Betting-v2/Model/Observables/IObservableStarter'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { BaseBetType } from '@classic/Betting-v2/Components/BetTypes/BaseBetType/BaseBetType'\nimport { IUseGiddyUp } from '@classic/Betting-v2/Components/Pages/Starters/IUseGiddyUp'\n\nexport class SameRaceMultiViewModel extends BaseBetType {\n constructor(params: {\n raceInfo: ObservableRacePage\n raceStarters: ko.Observable<{\n Key: ObservableRaceKey\n Value: ko.ObservableArray\n }>\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n useGiddyUp: IUseGiddyUp\n }) {\n super(\n params.raceInfo,\n params.raceStarters,\n params.selections,\n params.context.bettingContext,\n params.useGiddyUp\n )\n }\n}\n","import container from '../../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { registerComponentWithParams } from '@classic/AppUtils/Framework/Components/koComponentRegistration'\nimport { ProvDivsViewModel } from './ProvDivsViewModel'\nimport template from './prov-divs.tpl.html'\n\nexport function register(): void {\n registerComponentWithParams({\n componentName: 'prov-divs',\n template,\n container,\n resolver: (container: interfaces.Container) =>\n container.get('ProvDivsViewModel'),\n })\n}\n","import * as ko from 'knockout'\nimport { IRaceDisplayStateManagerViewModel } from './IRaceDisplayStateManagerViewModel'\nimport { IBettingStateManagerViewModel } from './IBettingStateManagerViewModel'\nimport container from '../../../IOC/inversify.config'\nimport bettingStateTemplate from './bettingstate.tpl.html'\nimport raceDisplayStateTemplate from './race.display.state.tpl.html'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\n\nexport function register(): void {\n if (!ko.components.isRegistered('betting-state')) {\n ko.components.register('betting-state', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableRacePage\n }): IBettingStateManagerViewModel => {\n const viewModel = container.get(\n 'IBettingStateManagerViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template: bettingStateTemplate,\n })\n }\n\n if (!ko.components.isRegistered('race-display-state')) {\n ko.components.register('race-display-state', {\n viewModel: {\n createViewModel: (params: {\n meetingId: string\n raceNumber: number\n meetingDate: Date\n raceStatus: string\n }): IRaceDisplayStateManagerViewModel => {\n const viewModel = container.get(\n 'IRaceDisplayStateManagerViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template: raceDisplayStateTemplate,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IStartersPageViewModel } from './IStartersPageViewModel'\nimport container from '../../../IOC/inversify.config'\nimport template from './starters.tpl.html'\nimport '../../../../AppUtils/Framework/CustomBindings/StickyBinding'\nimport ObservableRacePage from '@classic/Betting-v2/Model/Observables/ObservableRacePage'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\n\nexport function register(): void {\n if (!ko.components.isRegistered('starters-page')) {\n ko.components.register('starters-page', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableRacePage\n bettingInformation: BettingInformation\n }): IStartersPageViewModel => {\n const viewModel = container.get('IStartersPageViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IResultsPageViewModel } from './IResultsPageViewModel'\nimport container from '../../../IOC/inversify.config'\nimport ObservableResultsPage from '../../../Model/Observables/ObservableResultsPage'\nimport template from './results.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('race-results')) {\n ko.components.register('race-results', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableResultsPage\n }): IResultsPageViewModel => {\n const viewModel = container.get('IResultsPageViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IMultiLegSelectionsViewModel } from './IMultiLegSelectionsViewModel'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport container from '../../../IOC/inversify.config'\nimport template from './multileg-selections.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('multileg-selections')) {\n ko.components.register('multileg-selections', {\n viewModel: {\n createViewModel: (params: {\n bettingContext: BettingInformation\n }): IMultiLegSelectionsViewModel => {\n const viewModel = container.get(\n 'IMultiLegSelectionsViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IFinishersListViewModel } from './IFinishersListViewModel'\nimport template from './finishers.list.tpl.html'\nimport ObservableResultsPage from '@classic/Betting-v2/Model/Observables/ObservableResultsPage'\nimport { IObservableFinisher } from '@classic/Betting-v2/Model/Observables/IObservableFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('finishers-list')) {\n ko.components.register('finishers-list', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableResultsPage\n raceFinishers: ko.ObservableArray\n }): IFinishersListViewModel => {\n const viewModel = container.get('IFinishersListViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IDogFinisherViewModel } from './IDogFinisherViewModel'\nimport template from './dog.finisher.tpl.html'\nimport ObservableDogFinisher from '@classic/Betting-v2/Model/Observables/ObservableDogFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('dog-finisher')) {\n ko.components.register('dog-finisher', {\n viewModel: {\n createViewModel: (params: {\n finisher: ObservableDogFinisher\n showField: boolean\n }): IDogFinisherViewModel => {\n const viewModel = container.get('IDogFinisherViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IRaceFinisherViewModel } from './IRaceFinisherViewModel'\nimport template from './race.finisher.tpl.html'\nimport ObservableRaceFinisher from '@classic/Betting-v2/Model/Observables/ObservableRaceFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('race-finisher')) {\n ko.components.register('race-finisher', {\n viewModel: {\n createViewModel: (params: {\n finisher: ObservableRaceFinisher\n showField: boolean\n }): IRaceFinisherViewModel => {\n const viewModel = container.get('IRaceFinisherViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { ITrotFinisherViewModel } from './ITrotFinisherViewModel'\nimport template from './trot.finisher.tpl.html'\nimport ObservableTrotFinisher from '@classic/Betting-v2/Model/Observables/ObservableTrotFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('trot-finisher')) {\n ko.components.register('trot-finisher', {\n viewModel: {\n createViewModel: (params: {\n finisher: ObservableTrotFinisher\n showField: boolean\n }): ITrotFinisherViewModel => {\n const viewModel = container.get('ITrotFinisherViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IFinisherPlaceViewModel } from './IFinisherPlaceViewModel'\nimport template from './finisher.place.tpl.html'\nimport { IObservableFinisher } from '@classic/Betting-v2/Model/Observables/IObservableFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('finisher-place')) {\n ko.components.register('finisher-place', {\n viewModel: {\n createViewModel: (params: { finisher: IObservableFinisher }): IFinisherPlaceViewModel => {\n const viewModel = container.get('IFinisherPlaceViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IFinisherPricesViewModel } from './IFinisherPricesViewModel'\nimport { IFieldFinisherPricesViewModel } from './IFieldFinisherPricesViewModel'\nimport finisherPriceTemplate from './finisher.prices.tpl.html'\nimport fieldFinisherPriceTemplate from './field.finisher.prices.tpl.html'\nimport { ObservableFinisher } from '@classic/Betting-v2/Model/Observables/ObservableFinisher'\n\nexport function register(): void {\n if (!ko.components.isRegistered('finisher-prices')) {\n ko.components.register('finisher-prices', {\n viewModel: {\n createViewModel: (params: { finisher: ObservableFinisher }): IFinisherPricesViewModel => {\n const viewModel = container.get('IFinisherPricesViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: finisherPriceTemplate,\n })\n }\n\n if (!ko.components.isRegistered('field-finisher-prices')) {\n ko.components.register('field-finisher-prices', {\n viewModel: {\n createViewModel: (params: {\n finisher: ObservableFinisher\n }): IFieldFinisherPricesViewModel => {\n const viewModel = container.get(\n 'IFieldFinisherPricesViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template: fieldFinisherPriceTemplate,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IFieldViewModel } from './IFieldViewModel'\nimport container from '../../../IOC/inversify.config'\nimport { IMultiFieldViewModel } from './IMultiFieldViewModel'\nimport fieldTemplate from './field.tpl.html'\nimport multiFieldTemplate from './multi.field.tpl.html'\nimport ObservableRaceKey from '@classic/Betting-v2/Model/Observables/ObservableRaceKey'\nimport { BettingInformation } from '@classic/Betting-v2/Model/BettingInformation'\n\ninterface Params {\n raceKey: ObservableRaceKey\n bettingContext: BettingInformation\n}\n\nexport function register(): void {\n if (!ko.components.isRegistered('single-field')) {\n ko.components.register('single-field', {\n viewModel: {\n createViewModel: (params: Params): IFieldViewModel => {\n const viewModel = container.get('IFieldViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: fieldTemplate,\n })\n }\n\n if (!ko.components.isRegistered('multi-field')) {\n ko.components.register('multi-field', {\n viewModel: {\n createViewModel: (params: Params): IMultiFieldViewModel => {\n const viewModel = container.get('IMultiFieldViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: multiFieldTemplate,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IStandardTopPanel } from './IStandardTopPanel'\nimport ObservableRaceKey from '../../../Model/Observables/ObservableRaceKey'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport template from './standard.top.panel.tpl.html'\nimport { IObservablePage } from '../../../Model/Observables/IObservablePage'\n\nexport function register(): void {\n if (!ko.components.isRegistered('standard-top-panel')) {\n ko.components.register('standard-top-panel', {\n viewModel: {\n createViewModel: (params: {\n raceInfo: IObservablePage\n bettingContext: BettingInformation\n raceNumber: ObservableRaceKey\n }): IStandardTopPanel => {\n const viewModel = container.get('IStandardTopPanel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { ISubstitutesViewModel } from './ISubstitutesViewModel'\nimport template from './substitutes.tpl.html'\nimport ObservableSubstitutePool from '@classic/Betting-v2/Model/Observables/ObservableSubstitutePool'\n\nexport function register(): void {\n if (!ko.components.isRegistered('substitutes-panel')) {\n ko.components.register('substitutes-panel', {\n viewModel: {\n createViewModel: (params: {\n availableSubstitutePools: ko.ObservableArray\n }): ISubstitutesViewModel => {\n const viewModel = container.get('ISubstitutesViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IScratchingsViewModel } from './IScratchingsViewModel'\nimport template from './scratchings.tpl.html'\nimport ObservableScratching from '@classic/Betting-v2/Model/Observables/ObservableScratching'\n\ninterface Params {\n availableScratchings: ko.ObservableArray\n}\n\nexport function register(): void {\n if (!ko.components.isRegistered('scratchings-panel')) {\n ko.components.register('scratchings-panel', {\n viewModel: {\n createViewModel: (params: Params): IScratchingsViewModel => {\n const viewModel = container.get('IScratchingsViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IMessageBoxViewModel } from './IMessageBoxViewModel'\nimport template from './messagebox.tpl.html'\n\ninterface Params {\n iconClass: string\n title: string\n description: string\n link: {\n text: string\n url: string\n }\n}\n\nexport function register(): void {\n if (!ko.components.isRegistered('message-box')) {\n ko.components.register('message-box', {\n viewModel: {\n createViewModel: (params: Params): IMessageBoxViewModel => {\n const viewModel = container.get('IMessageBoxViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { IResultsViewModel } from './IResultsViewModel'\nimport { IResultsFieldViewModel } from './IResultsFieldViewModel'\nimport resultsViewTemplate from './results.view.tpl.html'\nimport fieldViewTemplate from './results.field.view.tpl.html'\nimport ObservableResultsPage from '@classic/Betting-v2/Model/Observables/ObservableResultsPage'\n\nexport function register(): void {\n if (!ko.components.isRegistered('results-view')) {\n ko.components.register('results-view', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableResultsPage\n }): IResultsViewModel => {\n const viewModel = container.get('IResultsViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: resultsViewTemplate,\n })\n }\n if (!ko.components.isRegistered('results-field-view')) {\n ko.components.register('results-field-view', {\n viewModel: {\n createViewModel: (params: {\n raceInformation: ObservableResultsPage\n }): IResultsFieldViewModel => {\n const viewModel = container.get('IResultsFieldViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: fieldViewTemplate,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IAllUpViewModel } from './IAllUpViewModel'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport container from '../../../IOC/inversify.config'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport template from './allup.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('allup-bettype')) {\n ko.components.register('allup-bettype', {\n viewModel: {\n createViewModel: (params: {\n data: ObservableRacePage\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n }): IAllUpViewModel => {\n const viewModel = container.get('IAllUpViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IMultiLegViewModel } from './IMultiLegViewModel'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport container from '../../../IOC/inversify.config'\nimport ObservableRacePage from '../../../Model/Observables/ObservableRacePage'\nimport { IObservableStarter } from '../../../Model/Observables/IObservableStarter'\nimport template from './multi.leg.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('multi-leg-bettype')) {\n ko.components.register('multi-leg-bettype', {\n viewModel: {\n createViewModel: (params: {\n data: ObservableRacePage\n selections: ko.ObservableArray\n context: { bettingContext: BettingInformation }\n }): IMultiLegViewModel => {\n const viewModel = container.get('IMultiLegViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { INoveltyDividendsViewModel } from './INoveltyDividendsViewModel'\nimport template from './novelty.dividends.tpl.html'\nimport NoveltyDividend from '@classic/Betting-v2/Model/NoveltyDividend'\n\ninterface Params {\n noveltyDividends: ko.ObservableArray\n}\n\nexport function register(): void {\n if (!ko.components.isRegistered('novelty-dividends')) {\n ko.components.register('novelty-dividends', {\n viewModel: {\n createViewModel: (params: Params): INoveltyDividendsViewModel => {\n const viewModel = container.get('INoveltyDividendsViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport { IRaceReplayViewModel } from './IRaceReplayViewModel'\nimport container from '../../../IOC/inversify.config'\nimport ObservableRaceReplay from '../../../Model/Observables/ObservableRaceReplay'\nimport raceReplayTemplate from './race-replay.tpl.html'\nimport raceReplayVideoTemplate from './race-replay-video.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('race-replay')) {\n ko.components.register('race-replay', {\n viewModel: {\n createViewModel: (params: {\n id: string\n raceReplayData: ObservableRaceReplay\n source: string\n }): IRaceReplayViewModel => {\n const viewModel = container.get('IRaceReplayViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template: raceReplayTemplate,\n })\n }\n\n if (!ko.components.isRegistered('race-replay-video')) {\n ko.components.register('race-replay-video', {\n template: raceReplayVideoTemplate,\n })\n }\n}\n","import container from '../../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { registerComponentWithParams } from '@classic/AppUtils/Framework/Components/koComponentRegistration'\nimport { StartersListViewModel } from './StartersListViewModel'\nimport template from './starters.list.tpl.html'\nexport function register(): void {\n registerComponentWithParams({\n componentName: 'starters-list',\n template,\n container: container,\n resolver: (container: interfaces.Container) =>\n container.get('StartersListViewModel'),\n })\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport { ObservableStarter } from '../../../Model/Observables/ObservableStarter'\nimport { BettingInformation } from '../../../Model/BettingInformation'\nimport { IMultiSelectionPriceViewModel } from './IMultiSelectionPriceViewModel'\nimport template from './multselection.pricing.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('multiselection-pricing')) {\n ko.components.register('multiselection-pricing', {\n viewModel: {\n createViewModel: (params: {\n starter: ObservableStarter\n bettingInformation: BettingInformation\n }): IMultiSelectionPriceViewModel => {\n const viewModel = container.get(\n 'IMultiSelectionPriceViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import template from './race.sub.header.tpl.html'\nimport * as registration from '../../../../AppUtils/Framework/Components/koComponentRegistration'\nimport container from '../../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { RaceSubHeaderViewModel } from './RaceSubHeaderViewModel'\n\nexport function register(): void {\n registration.registerComponentWithParams({\n componentName: 'race-sub-header',\n template,\n container,\n resolver: (k: interfaces.Container) => k.get('RaceSubHeaderViewModel'),\n })\n}\n","import * as ko from 'knockout'\nimport { IFixedWinPlaceSelectionsViewModel } from './IFixedWinPlaceSelectionsViewModel'\nimport container from '../../../../IOC/inversify.config'\nimport template from './fixed-winplace-selections.tpl.html'\n\nexport function register(): void {\n if (!ko.components.isRegistered('fixed-winplace-selections')) {\n ko.components.register('fixed-winplace-selections', {\n viewModel: {\n createViewModel: (params: {\n selectionsString: string\n winPrice: string\n placePrice: string\n hasFixedPlacePool: boolean\n }): IFixedWinPlaceSelectionsViewModel => {\n const viewModel = container.get(\n 'IFixedWinPlaceSelectionsViewModel'\n )\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport container from '../../../IOC/inversify.config'\nimport template from './info-toolbar-wrapper.tpl.html'\nimport '../../../../AppUtils/Framework/CustomBindings/StickyBinding'\nimport { IInfoToolbarViewModel, IInfoToolbarViewModelParams } from './IInfoToolbarViewModel'\n\nexport function register(): void {\n if (!ko.components.isRegistered('info-toolbar')) {\n ko.components.register('info-toolbar', {\n viewModel: {\n createViewModel: (params: IInfoToolbarViewModelParams): IInfoToolbarViewModel => {\n const viewModel = container.get('IInfoToolbarViewModel')\n viewModel.init(params)\n return viewModel\n },\n },\n template,\n })\n }\n}\n","import * as ko from 'knockout'\nimport template from './sameracemulti.tpl.html'\nimport { SameRaceMultiViewModel } from './SameRaceMultiViewModel'\n\nexport function register(): void {\n if (!ko.components.isRegistered('same-race-multi-bettype')) {\n ko.components.register('same-race-multi-bettype', {\n viewModel: SameRaceMultiViewModel,\n template,\n })\n }\n}\n","import container from '../../IOC/inversify.config'\nimport { registerComponent } from '../../../AppUtils/Framework/Components/koComponentRegistration'\nimport { PyosMessageViewModel } from './PyosMessageViewModel'\nimport template from './pyos-message.tpl.html'\n\nregisterComponent({\n componentName: 'pyos-message',\n template,\n resolver: () => container.get('PyosMessageViewModel'),\n})\n","import container from '../../IOC/inversify.config'\nimport type { interfaces } from 'inversify'\nimport { registerComponentWithParams } from '@classic/AppUtils/Framework/Components/koComponentRegistration'\nimport { PyosSelectViewModel } from './PyosSelectViewModel'\nimport template from './superpick.tpl.html'\n\nregisterComponentWithParams({\n componentName: 'superpick',\n template,\n container: container,\n resolver: (container: interfaces.Container) =>\n container.get('PyosSelectViewModel'),\n})\n","import React from 'react'\nimport Rx from 'rx'\nimport dayjs from 'dayjs'\nimport * as ko from 'knockout'\nimport { Query } from 'react-query'\n\nimport '@classic/include-betting-v2'\nimport '@classic/Specials/IOC/inversify.config'\nimport '@classic/Specials/Components/PyosMessage/register'\nimport '@classic/Specials/Components/PyosSelect/register'\nimport '@classic/AppUtils/Framework/CustomBindings/SlideBinding'\n\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { navigateHome } from '@classic/AppUtils/Framework/Intent/navigation'\nimport * as msgBus from '@classic/Foundation/Services/MessageBusService'\nimport * as DateTimeProvider from '@classic/Foundation/DateTimeProvider'\nimport { queryClient } from '@core/Data/ReactQuery/queryClient'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { toISODate } from '@mobi/utils'\nimport { setRacePageReactQueryKey } from '../Store'\n\nexport const useLegacyRaceCardIntegration = ({\n meetingId,\n meetingDate,\n raceNumber,\n}: {\n meetingId: string\n meetingDate: string\n raceNumber: string\n}) => {\n const dispatch = useAppDispatch()\n const koElementRef = React.useRef(null)\n const componentModelRef = React.useRef>(null)\n\n const raceToRaceNavigation$Ref = React.useRef(\n new Rx.Subject<{\n meetingId: string\n meetingDate: Date\n }>()\n )\n\n // Invalidate query cache\n React.useEffect(() => {\n const rqInvalidationSubscription = raceToRaceNavigation$Ref.current\n .debounce(5000)\n .subscribe(({ meetingId, meetingDate }) => {\n queryClient.removeQueries({\n predicate: inactiveRacePageQueryPredicate(meetingId, meetingDate),\n })\n })\n\n return () => {\n rqInvalidationSubscription.dispose()\n invalidateReactQueryAll()\n }\n }, [])\n\n // Clean knockout bindings on unmount\n React.useEffect(() => {\n if (!koElementRef.current) return undefined\n const el = koElementRef.current\n return () => {\n ko.cleanNode(el)\n }\n }, [])\n\n // Update knockout data bindings\n React.useEffect(() => {\n if (!koElementRef.current) return undefined\n const el = koElementRef.current\n\n const incomingData: RouteParametersAssertion = {\n meetingId,\n raceNumber,\n meetingDate: meetingDate\n ? meetingDate\n : dayjs(DateTimeProvider.todayAsAwst()).format('YYYY-MM-DD'),\n }\n const newModel = validateParams(incomingData)\n if (!newModel) return navigateHome()\n\n const isKoComponentBinded = !!ko.dataFor(el)\n\n if (isKoComponentBinded && isOnlyRaceNumberChange(componentModelRef.current, newModel)) {\n componentModelRef.current = newModel\n raceToRaceNavigation$Ref.current.onNext({\n meetingId: newModel.meetingId,\n meetingDate: newModel.meetingDate,\n })\n msgBus.publish('race-route-updated-command', { raceNumber: newModel.raceNumber })\n return\n }\n\n if (isKoComponentBinded) ko.cleanNode(el)\n componentModelRef.current = newModel\n ko.applyBindings({ model: componentModelRef.current }, el)\n }, [meetingDate, meetingId, raceNumber])\n\n // Capture current race key for react query component deep within KO\n React.useEffect(() => {\n if (meetingDate && meetingId && raceNumber) {\n const key = queryKeys.racePageComplete(meetingId, meetingDate, +raceNumber)\n dispatch(setRacePageReactQueryKey(key))\n }\n return () => {\n dispatch(setRacePageReactQueryKey(null))\n }\n }, [meetingDate, meetingId, raceNumber, dispatch])\n\n return {\n koElementRef,\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\n/** Remove data from cache because the race page ReactQuery queries are configured with\n Infinite stateTime to mimic the lifetime of KO view model observables */\nfunction invalidateReactQueryAll() {\n ;[\n [queryKeys.racePageFormBase],\n [queryKeys.racePageCompleteBase],\n [queryKeys.racePageStartersForRaces],\n ].forEach(queryKey => queryClient.removeQueries({ queryKey }))\n}\n\nfunction inactiveRacePageQueryPredicate(meetingId: string, meetingDate: Date) {\n return (query: Query) => {\n const queryKey = query.queryKey\n return (\n Array.isArray(queryKey) &&\n queryKey.length === 4 &&\n typeof queryKey[0] === 'string' &&\n queryKey[0].startsWith('race-page-') &&\n queryKey[1] === meetingId.toLowerCase() &&\n queryKey[2] === toISODate(meetingDate) &&\n !query.isActive()\n )\n }\n}\n\nfunction validateParams(params: RouteParametersAssertion): ModelAssertion | null {\n if (\n !params.meetingId ||\n !/^[A-Za-z]{2,3}$/.test(params.meetingId) ||\n !params.meetingDate ||\n !/^\\d\\d\\d\\d-\\d\\d-\\d\\d$/.test(params.meetingDate) ||\n !params.raceNumber ||\n !/^[0-9]{1,2}$/.test(params.raceNumber)\n )\n return null\n\n return {\n meetingId: params.meetingId,\n meetingDate: DateTimeProvider.parseIso8601Date(params.meetingDate),\n raceNumber: parseInt(params.raceNumber),\n }\n}\n\nconst isOnlyRaceNumberChange = (\n oldModel: ModelAssertion | null,\n newModel: ModelAssertion\n): boolean =>\n !!oldModel &&\n oldModel.meetingId.toLowerCase() === newModel.meetingId.toLowerCase() &&\n oldModel.meetingDate.toISOString() === newModel.meetingDate.toISOString() &&\n oldModel.raceNumber !== newModel.raceNumber\n\n// =====\n// Types\n// =====\n\ntype ShapeOf = Record\ntype AssertKeysEqual, Y extends ShapeOf> = X\n\ninterface RouteParameters {\n meetingId: string\n meetingDate: string\n raceNumber: string\n}\ntype RouteParametersAssertion = AssertKeysEqual\n\ninterface Model {\n meetingId: string\n meetingDate: Date\n raceNumber: number\n}\ntype ModelAssertion = AssertKeysEqual\n","import React from 'react'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { BetInfo } from '@core/Areas/AccountActivity/Components/Ticket/Components/BetInfo'\nimport { Investment } from '@core/Areas/AccountActivity/Components/Ticket/Components/Investment'\nimport {\n getTicketLayoutType,\n getTicketStatus,\n} from '@core/Areas/AccountActivity/Components/Ticket/helpers'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\n\nexport const RaceCardTicket: React.FC<{ ticket: Ticket; isPending: boolean }> = ({\n ticket,\n isPending,\n}) => {\n const status = getTicketStatus(ticket, isPending ? 'pending' : 'results')\n const ticketTypeLayout = getTicketLayoutType(ticket)\n\n return (\n \n \n\n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Link } from 'react-router-dom'\nimport { radius, colors, spacing, font } from '@mobi/component-library/Theme/Common'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\nimport { RaceCardTicket } from '../RaceCardTicket'\n\nconst enum LocalConstants {\n animationTiming = 400,\n}\n\nexport const RaceTicketsAccordion: React.FC<{\n data: { tickets: Ticket[]; totalTicketsCount: number }\n isLoading: boolean\n isPending: boolean\n}> = ({ data, isLoading, isPending }) => {\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: LocalConstants.animationTiming,\n })\n\n const handleToggleClick = () => {\n if (!isExpanded) {\n trackKey(isPending ? 'race_card_pending_bets_open' : 'race_card_resulted_bets_open')\n }\n toggleExpanded()\n }\n\n const viewAllLink = `${AppRoutes.AccountActivity[1]}/${isPending ? 'pending' : 'results'}`\n\n return (\n \n \n {data.totalTicketsCount}\n {isPending ? 'Pending' : 'Resulted'} bets on this race\n \n \n\n {(isExpanded || shouldRender) && (\n
    \n
    \n {data.tickets.map(ticket => (\n \n ))}\n\n \n trackKey(\n isPending ? 'race_card_pending_bets_view_all' : 'race_card_resulted_bets_view_all'\n )\n }\n style={{ color: colors.neutral[900] }}\n >\n {viewAllBetsLinkText(data.tickets.length, data.totalTicketsCount, isPending)}\n \n \n
    \n
    \n )}\n
    \n )\n}\n\nfunction viewAllBetsLinkText(ticketCount: number, totalTicketCount: number, isPending: boolean) {\n const type = isPending ? 'pending' : 'resulted'\n if (totalTicketCount - ticketCount > 1) {\n return `View (${totalTicketCount - ticketCount}) other ${type} bets for this race`\n } else if (totalTicketCount - ticketCount === 1) {\n return `View (1) other ${type} bet for this race`\n } else {\n return `View all ${type} bets`\n }\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n position: 'relative',\n padding: 0,\n background: colors.white,\n fontFamily: font.family.primary,\n\n '&[data-js-pending=\"true\"]': {\n paddingBottom: 0,\n },\n\n '& > button': {\n position: 'relative',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n minHeight: '4rem',\n padding: '0 1.6rem',\n border: 0,\n\n fontWeight: font.weight.medium,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n\n color: colors.studio[600],\n backgroundColor: colors.lavender[50],\n\n // Number badge\n strong: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '2.2rem',\n height: '2.2rem',\n marginRight: '0.8rem',\n borderRadius: '50%',\n\n fontSize: font.size.sm.fontSize,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.bold,\n\n color: colors.white,\n background: colors.studio[600],\n },\n\n svg: {\n marginLeft: 'auto',\n },\n },\n\n '& > div': {\n position: 'relative',\n overflow: 'hidden',\n height: 0,\n transition: 'height ' + LocalConstants.animationTiming + 'ms ease',\n willChange: 'height',\n borderBottom: '0.1rem solid ' + colors.neutral[300],\n\n '& > div': {\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n padding: `${spacing.sm} ${spacing.md}`,\n background: colors.white,\n\n '& > a': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: spacing.smx1 + ' ' + spacing.sm,\n border: 0,\n borderRadius: radius.lg,\n\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n letterSpacing: font.size.lg.letterSpacing,\n textDecoration: 'none',\n\n color: colors.neutral[900],\n background: colors.surface[50],\n\n svg: { marginLeft: '0.5rem' },\n },\n },\n },\n})\n","import { useQuery } from 'react-query'\nimport { useFeature } from '@core/Utils/hooks'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { fetchRacePendingTicketsCount } from '@core/Data/Account/PendingTicketsCount/api'\nimport { racingPendingTicketsPollingQuery } from '@core/Data/Account/PendingTicketsCount/queries'\n\nconst racePendingTicketsCacheQueryKey = `${queryKeys.pendingTicketsCount}:cached`\n\nexport const useCachedRacingPendingTicketsCount = ({ enabled }: { enabled: boolean }) => {\n const isAppHeaderPendingBetsFeatureActive = useFeature('PENDING_BETS_BUTTON_IN_APP_HEADER')\n\n const { data: pendingTicketsCount } = useQuery(\n isAppHeaderPendingBetsFeatureActive\n ? { ...racingPendingTicketsPollingQuery, enabled }\n : {\n queryKey: racePendingTicketsCacheQueryKey,\n queryFn: fetchRacePendingTicketsCount,\n enabled,\n staleTime: 1_000 * 60 * 30,\n }\n )\n\n return pendingTicketsCount?.pendingTicketsCount ?? 0\n}\n\nexport const clearCachedRacingPendingTicketsCount = () => {\n const queryKey = racePendingTicketsCacheQueryKey\n queryClient.removeQueries({ queryKey, exact: true })\n}\n","const racesWithBetsPlacedInThisSession = new Set()\n\nexport function hasBetForRaceKey(raceKey: string) {\n return racesWithBetsPlacedInThisSession.has(raceKey)\n}\n\nexport function addBetForRaceKey(raceKey: string) {\n racesWithBetsPlacedInThisSession.add(raceKey)\n}\n","import React from 'react'\nimport Rx from 'rx'\nimport { useQuery } from 'react-query'\nimport { useFeature, useLogon } from '@core/Utils/hooks'\nimport { ConfirmBetslipBetsSucceeded, ConfirmBetSucceeded } from '@core/Areas/Quickbet/signals'\nimport { ConfirmAllBetsSuccessful } from '@core/Areas/Betslip/signals'\nimport { TicketDisplayContext } from '@core/Areas/AccountActivity/context'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\nimport { RaceTicketsAccordion } from './Components/RaceTicketsAccordion'\nimport { getPendingTicketsForRaceFromApi } from './api'\nimport { clearCachedRacingPendingTicketsCount, useCachedRacingPendingTicketsCount } from './hooks'\nimport { addBetForRaceKey, hasBetForRaceKey } from './utils'\n\nconst enum LocalConstants {\n pendingTTL = 1000 * 60 * 30,\n}\n\nexport const AccountTicketsForRace = ({\n isPending,\n date,\n id,\n raceNumber,\n raceKey,\n hasFixedResulted,\n}: Props) => {\n const { isLoggedIn } = useLogon()\n const isRaceTicketsFeatureActive = useFeature('PENDING_BETS_FOR_RACE')\n const shouldEnableRaceTickets = !!(isLoggedIn && isRaceTicketsFeatureActive)\n const pendingBetsCount = useCachedRacingPendingTicketsCount({\n enabled: isPending && shouldEnableRaceTickets,\n })\n\n // MOBI-3069: disabled bets on the resulted page for perf reasons\n const shouldQueryForTickets =\n shouldEnableRaceTickets && isPending && (pendingBetsCount > 0 || hasBetForRaceKey(raceKey))\n\n const queryKey = isPending\n ? queryKeys.racePendingTickets(raceKey)\n : queryKeys.raceResultedTickets(id, date, raceNumber, hasFixedResulted)\n\n const { isLoading, isError, data, refetch } = useQuery(\n queryKey,\n () => getPendingTicketsForRaceFromApi(raceKey),\n {\n staleTime: isPending ? LocalConstants.pendingTTL : Infinity,\n refetchOnWindowFocus: false,\n enabled: shouldQueryForTickets,\n retry: 1,\n }\n )\n\n React.useEffect(() => {\n if (!shouldEnableRaceTickets || !isPending) return\n // Subscription to refresh pending tickets on bet placement\n const subscription = Rx.Observable.merge(\n ConfirmBetSucceeded.signal$,\n ConfirmAllBetsSuccessful.signal$,\n ConfirmBetslipBetsSucceeded.signal$\n )\n .debounce(500)\n .subscribe(a => {\n refetch()\n if (a.name === 'ConfirmBetSucceeded') {\n // for a single bet from quickbet, we know that it is for the current\n // race, so we don't need to refresh the pending count, we can just\n // whitelist the current race to query the list of pending\n addBetForRaceKey(raceKey)\n } else {\n clearCachedRacingPendingTicketsCount()\n }\n })\n return () => subscription.dispose()\n }, [refetch, shouldEnableRaceTickets, isPending, raceKey])\n\n if (!shouldEnableRaceTickets || isError || !data || !data.tickets?.length) return null\n\n return (\n \n \n \n )\n}\n\n// =====\n// Types\n// =====\n\ntype Props = {\n isPending: boolean\n /** meetingDate / fixtureDate */\n date: string\n /** meetingId / fixtureId */\n id: string\n raceNumber: string\n raceKey: string\n hasFixedResulted: boolean\n}\n","import { get } from '@classic/Foundation/Services/ApiService'\nimport type { Ticket } from '@core/Areas/AccountActivity/types'\n\nconst enum LocalConstants {\n apiBase = '/$_/accountActivity/tickets',\n}\n\nexport const getPendingTicketsForRaceFromApi = (raceKey: string) =>\n get({ url: `${LocalConstants.apiBase}/pending/race-card?raceSeq=${raceKey}` })\n\nexport const getResultedTicketsForRaceFromApi = ({ id, date, raceNum, raceKey }: ResultedArgs) => {\n const query = `fixtureDate=${date}&fixtureId=${id}&raceNumber=${raceNum}&raceSeq=${raceKey}`\n return get({\n url: LocalConstants.apiBase + '/results/race-card?' + query,\n })\n}\n\n// Types\n\ntype ResultedArgs = {\n id: string\n date: string\n raceNum: string\n raceKey: string\n}\n\ntype Response = {\n tickets: Ticket[]\n totalTicketsCount: number\n}\n","import { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { RacePageDataTransferObject } from '@mobi/api-types'\n\nexport function getAvailableBetTypesFromData(data: RacePageDataTransferObject) {\n return data.AvailableBetTypes.flatMap(betType => {\n if (betType.IsAbandoned) return []\n\n switch (betType.Type) {\n case 'WinPlace':\n return createBetType('Win & Place', BetType.WinPlace, data)\n\n case 'Trifecta':\n return createBetType('Trifecta', BetType.Trifecta, data)\n\n case 'Mystery':\n return createBetType('Mystery', BetType.Mystery, data)\n\n case 'AllUp':\n return createBetType('All Up', BetType.AllUp, data)\n\n case 'Quaddie':\n return createBetType('Quaddie', BetType.Quaddie, data)\n\n case 'Double':\n return createBetType('Double', BetType.Double, data)\n\n case 'First4':\n return createBetType('First 4', BetType.First4, data)\n\n case 'SameRaceMulti':\n return createBetType('Same Race Multi', BetType.SameRaceMulti, data)\n\n case 'Exacta':\n return createBetType('Exacta', BetType.Exacta, data)\n\n case 'Quinella':\n return createBetType('Quinella', BetType.Quinella, data)\n\n default:\n return []\n }\n })\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction createBetType(name: string, betType: BetType, data: RacePageDataTransferObject) {\n return [\n {\n name,\n betType,\n hasJackpot: data.AvailablePools.some(\n pool =>\n isPoolForBetType(pool, betType) &&\n isPoolForRaceNumber(pool, data.MeetingInformation.SelectedRace.RaceNumber) &&\n pool.HasJackpot\n ),\n },\n ]\n}\n\nfunction isPoolForBetType(\n pool: RacePageDataTransferObject['AvailablePools'][0],\n betType: BetType\n): boolean {\n const lowerCasePoolName = pool.Name.toLowerCase()\n switch (betType) {\n case BetType.WinPlace:\n return lowerCasePoolName === 'win' || lowerCasePoolName === 'place'\n\n case BetType.Quinella:\n return lowerCasePoolName === 'quinella'\n\n case BetType.Exacta:\n return lowerCasePoolName === 'exacta'\n\n case BetType.Trifecta:\n return lowerCasePoolName === 'trifecta'\n\n case BetType.First4:\n return lowerCasePoolName === 'first 4'\n\n case BetType.Double:\n return lowerCasePoolName === 'double'\n\n case BetType.Quaddie:\n return lowerCasePoolName === 'quaddie'\n }\n\n return false // mystery, all-up, etc.\n}\n\nfunction isPoolForRaceNumber(\n pool: RacePageDataTransferObject['AvailablePools'][0],\n raceNumber: number\n): boolean {\n const hasRaceNumbers = Array.isArray(pool.RaceNumbers) && pool.RaceNumbers.length > 0\n return hasRaceNumbers ? pool.RaceNumbers[0] === raceNumber : true\n}\n","import { keys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\n\nexport const trackBetTypeChange = (data: object): void =>\n trackEvent(keys.productSelectionChanged, { data })\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { RacePageDataTransferObject } from '@mobi/api-types/src/racePage/types'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { BetType } from '@classic/Betting-v2/Model/Betting/BetType'\nimport { useEventAggregator } from '@core/Utils/hooks/useEventAggregator'\nimport { MORE_BETTING_OPTIONS_ID } from '@core/Areas/RaceCard/constants'\nimport { CHANGE_BET_TYPE_EVENT } from '@core/Areas/RaceCard/constants'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { getCurrentBetType } from '../../Store/selectors'\nimport { getAvailableBetTypesFromData } from './helpers/getAvailableBetTypesFromData'\nimport { trackBetTypeChange } from './helpers/analytics'\n\nconst enum LocalConstants {\n BetTypeActiveClassname = 'js-bet-type-selector-btn--active',\n SkyRaceCardClassname = 'js-bet-type-selector--sky-race',\n ActiveIndicatorWidthPx = 1000,\n}\n\nexport const BetTypeSelector: React.FC<{\n raceData: RacePageDataTransferObject\n}> = ({ raceData }) => {\n const scrollContainerRef = React.useRef(null)\n const activeIndicatorRef = React.useRef(null)\n const timerRef = React.useRef()\n\n const selectedBetType = useAppSelector(getCurrentBetType)\n\n const eventAggregator = useEventAggregator()\n const availableBetTypes = getAvailableBetTypesFromData(raceData)\n\n const createBetTypeClickHandler =\n ({ betType, name }: BetTypeObject) =>\n () => {\n if (betType === selectedBetType) return\n eventAggregator.publish(CHANGE_BET_TYPE_EVENT, { betType })\n trackBetTypeChange({ betType, productName: name })\n }\n\n const onMoreOptionsClick = () => {\n trackBetTypeChange({ betType: BetType.WinPlace, productName: 'More Betting Options' })\n if (timerRef.current) clearTimeout(timerRef.current)\n if (selectedBetType === BetType.WinPlace) {\n const moreBettingOptionsEl = document.getElementById(MORE_BETTING_OPTIONS_ID)\n moreBettingOptionsEl?.scrollIntoView({ behavior: 'smooth' })\n } else {\n const domObserver = new MutationObserver((_, observer) => {\n const moreBettingOptionsEl = document.getElementById(MORE_BETTING_OPTIONS_ID)\n if (!moreBettingOptionsEl) return\n timerRef.current = window.setTimeout(() => {\n moreBettingOptionsEl.scrollIntoView({ behavior: 'smooth' })\n }, 1_000)\n observer.disconnect()\n })\n domObserver.observe(document.body, { childList: true, subtree: true })\n eventAggregator.publish(CHANGE_BET_TYPE_EVENT, { betType: BetType.WinPlace })\n }\n }\n\n React.useEffect(() => {\n if (!activeIndicatorRef.current) return\n activeIndicatorRef.current.style.transition = 'transform 0.2s'\n }, [])\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n const isOnSkyRacePage = window.location.hash === AppRoutes.RaceCardSky.replace('/', '#')\n\n return (\n \n
      \n {availableBetTypes.map(betType => (\n \n ))}\n\n \n\n \n
    \n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst BetTypeSelectorButton: React.FC<\n Omit & {\n isSelected: boolean\n handleClick: () => void\n activeIndicatorRef: React.RefObject\n scrollContainerRef: React.RefObject\n }\n> = ({ isSelected, name, handleClick, hasJackpot, activeIndicatorRef, scrollContainerRef }) => {\n const buttonContainerRef = React.useRef(null)\n const buttonRef = React.useRef(null)\n\n const repositionActiveIndicator = React.useCallback(() => {\n if (!buttonRef.current || !activeIndicatorRef.current) return\n const percentageDiff = buttonRef.current.offsetWidth / LocalConstants.ActiveIndicatorWidthPx\n activeIndicatorRef.current.style.transform = `translateX(${buttonRef.current.offsetLeft}px) scaleX(${percentageDiff})`\n }, [activeIndicatorRef])\n\n React.useEffect(() => {\n if (!isSelected || !buttonContainerRef.current || !scrollContainerRef.current) {\n return\n }\n repositionActiveIndicator()\n scrollContainerRef.current.scrollLeft =\n buttonContainerRef.current.offsetLeft - buttonContainerRef.current.offsetWidth\n }, [isSelected, repositionActiveIndicator, scrollContainerRef])\n\n React.useEffect(() => {\n if (!window.ResizeObserver || !isSelected) return\n const observer = new ResizeObserver(repositionActiveIndicator)\n observer.observe(document.body)\n return () => observer.disconnect()\n }, [isSelected, repositionActiveIndicator])\n\n return (\n \n \n \n {hasJackpot && (\n \n \n \n )}\n {name}\n \n\n {/* Duplicate of above used to prevent font weight jump on active transition */}\n \n {hasJackpot && (\n \n \n \n )}\n {name}\n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n overflow: 'hidden',\n\n '> ul': {\n position: 'relative',\n display: 'flex',\n alignItems: 'stretch',\n boxSizing: 'border-box',\n borderSpacing: 0,\n overflowX: 'auto',\n overscrollBehavior: 'contain',\n width: '100%',\n minHeight: '4.8rem',\n padding: 0,\n margin: 0,\n listStyle: 'none',\n background: colors.white,\n borderBottom: `0.05rem solid ${colors.neutral[200]}`,\n\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n WebkitTapHighlightColor: 'transparent',\n\n scrollbarWidth: 'thin',\n scrollbarColor: colors.neutral[300] + ' ' + colors.surface[50],\n\n '@media (pointer: coarse)': {\n scrollbarWidth: 'none',\n '::-webkit-scrollbar': { display: 'none' },\n },\n },\n\n // Active Indicator\n '> ul > span': {\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: LocalConstants.ActiveIndicatorWidthPx + 'px',\n height: '0.2rem',\n backgroundColor: colors.studio[500],\n\n transform: 'scaleX(0)',\n transformOrigin: 'left',\n },\n})\n\nconst ListItemStyled = styled.li({\n paddingLeft: spacing.smx1,\n paddingRight: spacing.smx1,\n\n '&:first-of-type': { marginLeft: spacing.smx1 },\n '&:last-of-type': { marginRight: spacing.smx1 },\n\n [`.${LocalConstants.SkyRaceCardClassname} &:first-of-type`]: {\n marginLeft: 0,\n },\n\n '> button': {\n flexShrink: 0,\n position: 'relative',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.smx2,\n minHeight: '4.8rem',\n padding: 0,\n whiteSpace: 'nowrap',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n border: 0,\n backgroundColor: 'transparent',\n\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n\n '> span:first-of-type': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n display: 'flex',\n alignItems: 'center',\n\n transition: 'color 0.3s',\n },\n\n [`&.${LocalConstants.BetTypeActiveClassname} > span:first-of-type`]: {\n color: colors.black,\n fontWeight: font.weight.medium,\n },\n\n '> span > span': {\n fontSize: 0,\n lineHeight: 1,\n paddingRight: spacing.smx2,\n },\n\n // Used to prevent font weight jump on active state\n '> span:last-of-type': {\n visibility: 'hidden',\n fontWeight: font.weight.medium,\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype BetTypeObject = ReturnType[0]\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { isRacePageDto } from '@mobi/api-types'\nimport { BettingInfo } from '@core/Areas/RaceCard/Components/BettingInfo'\nimport { MoreBettingOptions } from '@core/Areas/RaceCard/Components/MoreBettingOptions'\nimport { PoolTotals } from '@core/Areas/RaceCard/Components/PoolTotals'\nimport { SpecialsInfo } from '@core/Areas/RaceCard/Components/SpecialsInfo'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport { useLegacyRaceCardIntegration } from '@core/Areas/RaceCard/Hooks/useLegacyRaceCardIntegration'\nimport { AccountTicketsForRace } from './Components/AccountTicketsForRace'\nimport { BetTypeSelector } from './Components/BetTypeSelector'\nimport { SkeletonLoader } from './Components/SkeletonLoader'\n\nexport const RaceCardMatched: React.FC<{\n /** Expect format YYYY-MM-DD */\n meetingDate: string\n meetingId: string\n raceNumber: string\n shouldForceLoading?: boolean\n}> = ({ meetingDate, meetingId, raceNumber, shouldForceLoading = false }) => {\n const { race, isLoading, isFetching } = useRacePageData({ meetingDate, meetingId, raceNumber })\n const { koElementRef } = useLegacyRaceCardIntegration({ meetingId, meetingDate, raceNumber })\n\n const raceData = isLoading ? undefined : race\n\n const raceStatus = raceData?.MeetingInformation.SelectedRace.RaceStatus\n const isPending = raceStatus === 'Open' || raceStatus === 'Closed' || raceStatus === 'Interim'\n const hasFixedResulted = !!raceData?.MeetingInformation.SelectedRace.FixedOddsInfo?.IsResulted\n\n return (\n \n {raceStatus === 'Open' && raceData && isRacePageDto(raceData) && (\n \n )}\n\n {(isPending || raceStatus === 'Released') && (\n \n )}\n\n {(shouldForceLoading || isLoading || isFetching) && (\n \n \n \n )}\n\n
    \n {/* @ts-expect-error KNOCKOUT element */}\n \n
    \n\n \n \n \n \n
    \n )\n}\n\nconst WrapperStyled = styled.div({\n position: 'relative',\n minHeight: '100vh',\n overflow: 'hidden',\n})\n\nconst SkeletonLoaderContainerStyled = styled.div({\n background: 'white',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99,\n})\n","import React from 'react'\nimport * as QueryString from 'query-string'\nimport { useLocation, useParams } from 'react-router-dom'\nimport { useDisableAppHeaderSticky } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderSticky'\nimport { DockedPlayer as DockedSkyVideoPlayer } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer'\nimport { isThoroughbredRacePageInWA } from '@core/Areas/Racing/helpers/liveVideoFeedHelpers'\nimport { RaceNavigation } from '@core/Areas/Racing/Components/Navigation/RaceNavigation'\nimport { MainContainerStyled } from '@core/Components/Containers/MainContainer.styles'\nimport { RaceCardMatched } from './RaceCardMatched'\nimport { useDisableAndroidBackGesture } from './Hooks/useDisableAndroidBackGesture'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\nimport { useRacePageData } from '../Racing/Hooks'\nimport { RaceSwipeContainer } from './Components/RaceSwipeContainer/RaceSwipeContainer'\nimport { setSelectedRace } from '../Racing/helpers'\nimport { Direction } from './Components/RaceSwipeContainer/types'\nimport { SmartBetSlipMultiToastLegacy } from '../Racing/Components/SmartBetSlip/SmartBetSlipMultiToastLegacy'\n\nexport const RaceCard = React.memo(() => {\n useDisableAndroidBackGesture()\n useDisableAppHeaderSticky()\n\n const { meetingId, raceNumber } = useParams<{ meetingId: string; raceNumber: string }>()\n const { date: meetingDate } = QueryString.parse(useLocation().search) as { date: string }\n\n const { race } = useRacePageData({ meetingDate, meetingId, raceNumber })\n\n React.useEffect(() => {\n const delay = setTimeout(() => {\n trackOptimoveEvent({ eventName: 'visited_race_page' })\n }, 500)\n return () => clearTimeout(delay)\n }, [])\n\n const shouldDisplayRacingWA = isThoroughbredRacePageInWA(race)\n\n const races = race?.MeetingInformation.Races ?? []\n\n const currentRace = races?.find(race => race.RaceNumber.toString() === raceNumber)\n const lastRaceNumber = races.length > 0 ? races[races.length - 1].RaceNumber : null\n const firstRaceNumber = races.length > 0 ? races[0].RaceNumber : null\n\n const prevRace = currentRace && races.find(race => race.RaceNumber === currentRace.RaceNumber - 1)\n const nextRace = currentRace && races.find(race => race.RaceNumber === currentRace.RaceNumber + 1)\n\n return (\n \n \n\n \n\n {\n const raceToSwipeTo = direction === 'BACKWARD' ? prevRace : nextRace\n if (raceToSwipeTo) {\n setSelectedRace(+raceToSwipeTo.RaceNumber)\n }\n }}\n isLastRace={!currentRace || lastRaceNumber === currentRace.RaceNumber}\n isFirstRace={!currentRace || firstRaceNumber === currentRace.RaceNumber}\n >\n \n \n \n \n )\n})\n","import React from 'react'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const SkeletonLoader = () => {\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { colors, layering, spacing } from '@mobi/component-library/Theme/Common'\nimport { SkyTvSvg } from '@mobi/component-library/Common/Svg'\nimport { Text } from '@core/Components/Text'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { useFeature } from '@core/Utils/hooks/useFeature'\nimport { useRacePageData } from '@core/Areas/Racing/Hooks/useRacePageData'\nimport { isThoroughbredRacePageInWA } from '@core/Areas/Racing/helpers/liveVideoFeedHelpers'\nimport { getVisionChannelForDisplay } from '@core/Areas/SkyVideoPlayer/helpers'\nimport { RaceNotificationButton } from '@core/Areas/Racing/Components/RaceNotificationButton'\nimport { RaceInfoWrapperWithTextExpand } from '@core/Areas/Racing/Components/Shared/RaceInfoWrapperWithTextExpand'\nimport { PayoutInformation } from '@core/Areas/Racing/Components/Navigation/Components/PayoutInformation'\nimport { WeatherIcon } from '@core/Areas/Racing/Components/WeatherIcon'\nimport { SkeletonLoader } from './Components/SkeletonLoader'\nimport { getIsSelectedRaceScrolledOutOfView } from '../../Store/selectors'\nimport type { NextSkyRace } from '../../types'\nimport {\n SkyVideoButton,\n SkyVideoButtonRace,\n} from '@core/Areas/Racing/Components/Navigation/Components/RaceInfoHeader/Components/SkyVideoButton'\nimport { isResultsPageDto, ResultsPageDataTransferObject } from '@mobi/api-types'\nimport { meetingIdToContestType } from '@core/Areas/Racing/helpers'\n\nexport const RaceInfoSlim: React.FC<{\n meetingDate: string\n meetingId: string\n raceNumber: number\n skyTvChannelId: NextSkyRace['SkyTvChannelId']\n shouldForceLoading?: boolean\n}> = ({ meetingDate, meetingId, raceNumber, skyTvChannelId, shouldForceLoading = false }) => {\n const { race, isLoading } = useRacePageData({ meetingDate, meetingId, raceNumber })\n const isCurrentRaceScrolledOutOfView = useAppSelector(getIsSelectedRaceScrolledOutOfView)\n\n const isRacingWAFeatureActive = useFeature('RACING_WA_VISION_CHANNEL')\n\n const hasRaceReplayImprovements = useFeature('RACE_REPLAY_IMPROVEMENTS')\n\n const hasRaceReplayVideo = race && isResultsPageDto(race) && race.RaceReplay.HasVideo\n\n if (isLoading || shouldForceLoading) return \n\n if (!race) return null\n\n const shouldDisplayRacingWA = isRacingWAFeatureActive && isThoroughbredRacePageInWA(race)\n\n const isTrackConditionKnown = race.MeetingInformation.TrackCondition.toLowerCase() !== 'unknown'\n const currentRace = race.MeetingInformation.SelectedRace\n\n const isRaceOpen =\n race.Tag === 'Starters' && race.MeetingInformation.SelectedRace.RaceStatus === 'Open'\n const raceStartTime = new Date(currentRace.RaceTime)\n\n const raceCode = meetingIdToContestType(meetingId) ?? 'races'\n\n const selectedRace = race as ResultsPageDataTransferObject\n\n const raceProp: SkyVideoButtonRace = {\n ...(hasRaceReplayVideo && {\n raceReplay: {\n raceNumber: selectedRace.MeetingInformation.SelectedRace.RaceNumber,\n trackName: selectedRace.MeetingInformation.MeetingName,\n raceReplayKey: selectedRace.RaceReplay.VideoKey,\n raceCode,\n meetingDate: selectedRace.MeetingInformation.MeetingDate,\n },\n }),\n advertisedStartTime: selectedRace.MeetingInformation.SelectedRace.RaceTime,\n raceStatus: selectedRace.MeetingInformation.SelectedRace.RaceStatusText,\n skyTvChannelId: skyTvChannelId,\n }\n\n return (\n <>\n \n \n {currentRace.Distance !== 0 && `${currentRace.Distance}m · `}\n {currentRace.RaceType}\n \n }\n >\n <>\n {isTrackConditionKnown && (\n \n {toTitleCase(race.MeetingInformation.TrackCondition)}\n \n )}\n\n \n\n {skyTvChannelId && (\n
    \n {hasRaceReplayImprovements ? (\n \n ) : (\n \n )}\n
    \n )}\n {isRaceOpen && (\n \n )}\n \n \n
    \n\n \n\n
    \n \n )\n}\n\nconst WrapperStyled = styled.div({\n padding: `${spacing.smx1} 0`,\n position: 'relative',\n zIndex: layering.stickyPageElements - 1,\n\n '> *': { flexShrink: 0 },\n\n '& ~ hr:first-of-type': {\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n border: 0,\n height: '0.05rem',\n borderBottom: '0.05rem solid ' + colors.neutral[200],\n },\n})\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon as LegacyIcon } from '@mobi/component-library/Common/Icon'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { trackEvent, trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport { getIsSkyRaceListViewOpen, getSkyRaceFilters } from '../../Store/selectors'\nimport { toggleFilter, toggleIsSkyRaceListViewOpen, type FilterOptions } from '../../Store'\nimport type { NextSkyRace } from '../../types'\n\nconst enum LocalConstants {\n FilterActiveClass = 'js-sky-race-filter--active',\n}\n\nexport const RaceFilter: React.FC<{\n races: NextSkyRace[]\n}> = ({ races }) => {\n const dispatch = useDispatch()\n\n const filters = useSelector(getSkyRaceFilters)\n const isRaceListViewOpen = useSelector(getIsSkyRaceListViewOpen)\n\n const filterBarElRef = React.useRef(null)\n\n const makeOnFilterToggle = (filterName: keyof FilterOptions) => () => {\n dispatch(toggleFilter(filterName))\n trackFilterUpdate(filterName, filters)\n }\n\n const handleRaceListViewClick = () => {\n dispatch(toggleIsSkyRaceListViewOpen())\n if (!isRaceListViewOpen) trackKey(analyticsKeys.skyRaceCardListViewOpen)\n }\n\n return (\n \n
    \n
    \n \n \n \n\n \n \n \n\n \n \n \n
    \n\n
    \n \n Aus/NZ\n \n\n \n Int'l\n \n
    \n
    \n\n \n \n \n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction trackFilterUpdate(filterName: keyof FilterOptions, currentFilters: FilterOptions) {\n const copiedCurrentFilters = Object.assign({}, currentFilters)\n copiedCurrentFilters[filterName] = !copiedCurrentFilters[filterName]\n\n if (filterName === 'international' || filterName === 'local') {\n const { local, international } = copiedCurrentFilters\n if (!local && !international) return\n trackEvent(analyticsKeys.skyRaceCardFilterRegionUpdate, { international, local } as TrackRegion)\n } else {\n const { dogs, races, trots } = copiedCurrentFilters\n if (!dogs && !races && !trots) return\n trackEvent(analyticsKeys.skyRaceCardFilterCodeUpdate, { dogs, races, trots } as TrackCodes)\n }\n}\n\nconst setActiveClass = (isActive: boolean) => (isActive ? LocalConstants.FilterActiveClass : '')\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n height: '4.4rem',\n padding: '0 ' + spacing.md,\n paddingTop: spacing.smx1,\n\n // Filter toggles\n '> div': {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n\n div: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: spacing.smx2,\n },\n\n '> div:first-of-type > button': {\n height: '3.2rem',\n width: '3.2rem',\n },\n\n '> div > button': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '3.2rem',\n padding: spacing.smx1,\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n\n border: 0,\n borderRadius: '1.75rem',\n transition: 'background-color 0.2s, color 0.2s',\n backgroundColor: colors.neutral[200],\n color: colors.neutral[700],\n\n [`&.${LocalConstants.FilterActiveClass}`]: {\n backgroundColor: colors.studio[600],\n color: colors.white,\n },\n\n '> svg': { flexShrink: 0 },\n },\n },\n\n // List view buton\n '> button': {\n maxWidth: '3.6rem',\n marginLeft: spacing.smx1,\n\n ':active, :focus': {\n backgroundColor: colors.neutral[100],\n borderColor: colors.neutral[100],\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype TrackCodes = Pick\ntype TrackRegion = Pick\n","import React from 'react'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const SkeletonLoader = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { getBlackbookDetails } from '@core/Areas/Blackbook/helpers/api'\nimport { useQuery } from 'react-query'\nimport { NextSkyRace } from './useNextSkyRaces'\nimport { queryKeys } from '@core/Data/ReactQuery/constants'\n\nexport const useIsBlackbookInRace = (skyRace: NextSkyRace) => {\n const { data: blackbookRunningSet } = useQuery({\n queryKey: queryKeys.blackbookDetails,\n queryFn: getBlackbookDetails,\n retry: false,\n refetchOnWindowFocus: false,\n select: data => transformToRunningSet(data),\n staleTime: 1_000 * 60 * 30, // 30 mins,\n\n // temp. disabled due to perf concerns, see MVPS-625\n enabled: false,\n })\n\n if (!blackbookRunningSet) return false\n\n const raceDetails = `${skyRace.MeetingDate}-${skyRace.MeetingID}-${skyRace.RaceNumber}`\n\n return blackbookRunningSet.has(raceDetails)\n}\n\nfunction transformToRunningSet(data: Awaited>) {\n if (!data.Entries) {\n return new Set()\n }\n\n const filteredEntriesSet = new Set(\n data.Entries.filter(entry => entry.RacingTodayDetails).map(\n entry =>\n `${entry.RacingTodayDetails?.FixtureDate}-${entry.RacingTodayDetails?.FixtureId}-${entry.RacingTodayDetails?.ContestNumber}`\n )\n )\n\n return filteredEntriesSet\n}\n","import type { IconType } from '@mobi/component-library/Common/Icon'\nimport type { NextSkyRace } from '../types'\n\nexport function getLatestRace(races: NextSkyRace[]): NextSkyRace {\n return races.find(race => race.RaceStatus === 'Open') || races[0]\n}\n\nexport const mapCodeToIcon: Record = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport function sortRaceStatusOpenToTheRight(races: NextSkyRace[]): NextSkyRace[] {\n return races.sort((a, b) => {\n if (a.RaceStatus === 'Open') return 1\n if (b.RaceStatus === 'Open') return -1\n return 0\n })\n}\n\nexport function createUniqueSkyRaceId({ MeetingID, MeetingDate, RaceNumber }: NextSkyRace): string {\n return `${MeetingID}:${MeetingDate}:${RaceNumber}`\n}\n","import React, { useMemo } from 'react'\nimport styled from '@emotion/styled'\nimport { RaceStatus } from '@mobi/api-types'\nimport { toTitleCase } from '@mobi/utils/string'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge/StatusBadge'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { Icon, IconType } from '@mobi/component-library/Common/Icon'\nimport { triggerHapticFeedback } from '@core/Utils/hapticFeedback/hapticFeedback'\nimport type { NextSkyRace } from '@core/Areas/RaceCardSky/types'\nimport { RaceNotificationButton } from '@core/Areas/Racing/Components/RaceNotificationButton'\nimport { getSimpleRaceStatusText } from '@core/Areas/Racing/helpers'\nimport { useIsBlackbookInRace } from '../../Hooks/useIsBlackbookInRace'\nimport { mapCodeToIcon } from '../../helpers'\n\nconst enum LocalConstants {\n ListViewDisplayClass = 'js-sky-race-list-view__button',\n}\n\nexport const SharedRaceSelection: React.FC<{\n skyRace: NextSkyRace\n onClick: () => void\n isSelected?: boolean\n isListViewDisplay?: boolean\n}> = ({ skyRace, onClick, isSelected, isListViewDisplay }) => {\n const raceStatusText = useMemo(\n () => getSimpleRaceStatusText(skyRace.RaceStatus),\n [skyRace.RaceStatus]\n )\n\n const codeIconSize = isListViewDisplay ? '2.4rem' : '1.8rem'\n const wrapperClassName = isListViewDisplay ? LocalConstants.ListViewDisplayClass : ''\n const raceNumberText = `R${skyRace.RaceNumber}`\n\n const handleButtonClick = () => {\n if (!isSelected) triggerHapticFeedback('impact-light')\n onClick()\n }\n\n const isInBlackbook = useIsBlackbookInRace(skyRace)\n\n return (\n \n )\n}\n\nconst IconStatusBadge: React.FC<{ iconType: IconType }> = ({ iconType }) => (\n \n \n \n)\n// Styles\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: spacing.smx1,\n flex: 1,\n\n fontFamily: font.family.primary,\n fontWeight: font.weight.regular,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n color: colors.black,\n cursor: 'pointer',\n\n strong: { fontWeight: font.weight.semibold },\n\n [`&.${LocalConstants.ListViewDisplayClass}`]: {\n justifyContent: 'flex-start',\n gap: spacing.sm,\n\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n\n '> div:last-of-type': { marginLeft: 'auto' },\n },\n\n '> div': { display: 'flex', alignItems: 'center', gap: spacing.smx2 },\n})\n","import React from 'react'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { useNextSkyRaces } from '../../Hooks'\n\nexport const ShowMoreSkyRacesButton = () => {\n const { isLoading, isMoreToFetch, fetchMoreRaces } = useNextSkyRaces({\n enabled: false,\n })\n\n if (!isMoreToFetch) return null\n\n return (\n \n {isLoading ? 'Loading...' : 'Show More'}\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2'\nimport { store } from '@core/Store'\nimport { colors, shadow, radius, spacing, layering } from '@mobi/component-library/Theme/Common'\nimport { DOCKED_EXPAND_ANIMATION_MS } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer/constants'\nimport { useHeaderPinnedState } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer/Hooks/useHeaderPinnedState'\nimport { SharedRaceSelection } from '../Common/SharedRaceSelection'\nimport { setIsSelectedRaceScrolledOutOfView } from '../../Store'\nimport type { NextSkyRace } from '../../types'\nimport { useNextToJumpReset } from './Hooks/useNextToJumpReset'\nimport { ShowMoreSkyRacesButton } from '../Common/ShowMoreSkyRacesButton'\nimport { createUniqueSkyRaceId } from '../../helpers'\n\nconst enum LocalConstants {\n RaceSelectedClass = 'js-sky-race-button--selected',\n ResetButtonRightClass = 'js-sky-race-reset--right',\n PinnedClassName = 'js-sky-race-select--pinned',\n}\n\nexport const RaceScrollView: React.FC<{\n races: NextSkyRace[]\n currentRace: NextSkyRace\n setCurrentRace: React.Dispatch>\n}> = ({ races, currentRace, setCurrentRace }) => {\n const { isHeaderPinned, wrapperElRef, top } = useHeaderPinnedState()\n const {\n horizontalScrollerRef,\n nextToJumpPosition,\n nextToJumpRaceId,\n onResetButtonClick,\n setNextToJumpEl,\n shouldRenderResetButtons,\n } = useNextToJumpReset({ races, currentRace, setCurrentRace })\n\n return (\n \n
      \n {races.map(skyRace => {\n const isSelected =\n currentRace.AdvertisedStartTime === skyRace.AdvertisedStartTime &&\n currentRace.MeetingID === skyRace.MeetingID\n\n const raceId = createUniqueSkyRaceId(skyRace)\n\n return (\n \n setCurrentRace(skyRace)}\n isSelected={isSelected}\n />\n \n )\n })}\n\n {nextToJumpPosition !== 'visible' && shouldRenderResetButtons && (\n \n \n \n )}\n
    • \n \n
    • \n
    \n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst RaceSelectionButton: React.FC<{\n isSelected: boolean\n children: React.ReactNode\n isNextToJump: boolean\n scrollerRef: React.RefObject\n setNextToJumpEl: React.Dispatch<\n React.SetStateAction | undefined>\n >\n}> = ({ isSelected, children, isNextToJump, scrollerRef, setNextToJumpEl }) => {\n const buttonRef = React.useRef(null)\n\n React.useEffect(() => {\n if (isNextToJump) setNextToJumpEl(buttonRef)\n }, [isNextToJump, setNextToJumpEl])\n\n React.useEffect(() => {\n if (!isSelected || !buttonRef.current) return\n const observer = new IntersectionObserver(handleIntersectionObserver, { threshold: 0.2 })\n observer.observe(buttonRef.current)\n return () => observer.disconnect()\n }, [isSelected])\n\n const scrollButtonIntoView = React.useCallback(() => {\n if (!scrollerRef.current || !buttonRef.current) return\n const buttonCenter = buttonRef.current.offsetLeft + buttonRef.current.offsetWidth / 2\n const containerCenter = scrollerRef.current.offsetWidth / 2\n scrollerRef.current.scrollLeft = buttonCenter - containerCenter\n }, [scrollerRef])\n\n React.useEffect(() => {\n if (isSelected) setTimeout(scrollButtonIntoView, 500)\n }, [isSelected, scrollButtonIntoView])\n\n return (\n
  • \n {children}\n
  • \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction handleIntersectionObserver([entry]: IntersectionObserverEntry[]) {\n if (entry.isIntersecting) {\n store.dispatch(setIsSelectedRaceScrolledOutOfView(false))\n return\n }\n return store.dispatch(setIsSelectedRaceScrolledOutOfView(true))\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.nav({\n position: 'sticky',\n zIndex: layering.stickyPageElements,\n top: '-1px',\n transition: `top ${DOCKED_EXPAND_ANIMATION_MS}ms ease`,\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: '100%',\n boxShadow: shadow.md,\n opacity: 0,\n pointerEvents: 'none',\n transition: 'opacity 0.4s ease',\n },\n\n '*': { flexShrink: 0 },\n\n [`&.${LocalConstants.PinnedClassName}`]: {\n background: colors.surface[50],\n\n '&::after': { opacity: 1 },\n },\n\n '> ul': {\n listStyle: 'none',\n display: 'flex',\n alignItems: 'center',\n overflowX: 'scroll',\n gap: spacing.smx1,\n padding: '0 ' + spacing.md,\n margin: 0,\n\n scrollbarWidth: 'thin',\n scrollBehavior: 'smooth',\n scrollbarColor: colors.neutral[300] + ' ' + colors.surface[50],\n\n '@media (pointer: coarse)': {\n scrollbarWidth: 'none',\n '::-webkit-scrollbar': { display: 'none' },\n },\n\n // Reset button\n '> button': {\n boxSizing: 'border-box',\n position: 'absolute',\n top: '0.4rem',\n bottom: '0.4rem',\n left: 0,\n width: '4.4rem',\n borderRadius: `0 ${radius.lgx2} ${radius.lgx2} 0`,\n boxShadow: shadow.md,\n\n ':active, :focus': {\n backgroundColor: colors.neutral[100],\n borderColor: colors.neutral[100],\n },\n\n [`&.${LocalConstants.ResetButtonRightClass}`]: {\n left: 'unset',\n right: 0,\n transform: 'rotateY(180deg)',\n },\n },\n\n li: {\n display: 'flex',\n alignItems: 'center',\n minWidth: 'fit-content',\n minHeight: '5.2rem',\n\n button: {\n boxSizing: 'border-box',\n height: '3.6rem',\n padding: '0 ' + spacing.smx1,\n borderRadius: radius.lgx1,\n\n ':active, :focus': {\n backgroundColor: colors.neutral[100],\n borderColor: colors.neutral[100],\n },\n },\n\n [`&.${LocalConstants.RaceSelectedClass} > button`]: {\n borderWidth: '0.2rem',\n borderColor: colors.studio[500],\n backgroundColor: colors.lavender[50],\n },\n },\n },\n})\n","import React from 'react'\nimport throttle from 'lodash.throttle'\nimport { createUniqueSkyRaceId, getLatestRace } from '@core/Areas/RaceCardSky/helpers'\nimport type { NextSkyRace } from '@core/Areas/RaceCardSky/types'\nimport { trackKey } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { keys as analyticsKeys } from '@classic/Foundation/Analytics/AnalyticsDataLayer'\n\nexport const useNextToJumpReset = ({\n races,\n currentRace,\n setCurrentRace,\n}: {\n races: NextSkyRace[]\n currentRace: NextSkyRace\n setCurrentRace: React.Dispatch>\n}) => {\n const horizontalScrollerRef = React.useRef(null)\n\n const [isScrolling, setIsScrolling] = React.useState(false)\n const [nextToJumpEl, setNextToJumpEl] = React.useState>()\n const [nextToJumpPosition, setNextToJumpPosition] = React.useState('visible')\n\n const currectRaceId = createUniqueSkyRaceId(currentRace)\n const currentRaceIndex = races.findIndex(race => createUniqueSkyRaceId(race) === currectRaceId)\n\n const nextToJumpRace = races.find(race => race.RaceStatus === 'Open')\n const nextToJumpIndex = races.findIndex(race => race === nextToJumpRace)\n const nextToJumpRaceId = nextToJumpRace && createUniqueSkyRaceId(nextToJumpRace)\n\n const shouldRenderResetButtons =\n nextToJumpIndex !== -1 && (isScrolling || Math.abs(currentRaceIndex - nextToJumpIndex) >= 5)\n\n const onResetButtonClick = React.useCallback(() => {\n nextToJumpEl?.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n })\n setCurrentRace(getLatestRace(races))\n trackKey(analyticsKeys.resetSkyScrollView)\n }, [races, setCurrentRace, nextToJumpEl])\n\n // ==========================================\n // Display reset button while scrolling races\n // ==========================================\n React.useEffect(() => {\n if (!horizontalScrollerRef.current) return\n const el = horizontalScrollerRef.current\n let timerId: number\n\n const handleScroll = throttle(() => {\n setIsScrolling(true)\n window.clearTimeout(timerId)\n timerId = window.setTimeout(() => setIsScrolling(false), 3_000)\n }, 1_000)\n\n el.addEventListener('scroll', handleScroll)\n return () => {\n if (timerId) clearTimeout(timerId)\n el.removeEventListener('scroll', handleScroll)\n }\n }, [])\n\n // ===================================================\n // Update reset btn position based on next to jump btn\n // ===================================================\n React.useEffect(() => {\n const containerEl = horizontalScrollerRef.current\n if (!containerEl || !nextToJumpEl?.current || !nextToJumpRaceId) return\n const observer = new IntersectionObserver(\n ([entry]) => {\n setNextToJumpPosition(() => {\n if (entry.isIntersecting) return 'visible'\n const containerBoundingRect = containerEl.getBoundingClientRect()\n return entry.boundingClientRect.left < containerBoundingRect.left ? 'left' : 'right'\n })\n },\n { threshold: 0.2 }\n )\n observer.observe(nextToJumpEl.current)\n return () => observer.disconnect()\n }, [nextToJumpEl, nextToJumpRaceId])\n\n return {\n horizontalScrollerRef,\n nextToJumpPosition,\n nextToJumpRaceId,\n onResetButtonClick,\n setNextToJumpEl,\n shouldRenderResetButtons,\n }\n}\n\n// =====\n// Types\n// =====\n\ntype ResetButtonPosition = 'visible' | 'left' | 'right'\n","import React from 'react'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { LoadingPlaceholder } from '@mobi/component-library/Common/LoadingPlaceholder'\nimport { radius } from '@mobi/component-library/Theme/Common'\n\nexport const SkeletonLoader = () => {\n return (\n
    \n \n \n \n \n \n \n \n
    \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const NoRacesMessage = () => {\n return (\n \n
    \n \n
    \n
    \n No races available\n
    \n Please change your filters\n
    \n
    \n )\n}\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: '4.5rem',\n\n '> div:first-of-type': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16.4rem',\n height: '16.4rem',\n borderRadius: '50%',\n background: colors.neutral[100],\n },\n\n '> div:last-of-type': {\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n letterSpacing: font.size.lg.letterSpacing,\n textAlign: 'center',\n color: colors.neutral[900],\n paddingTop: spacing.big,\n },\n\n '> div:last-of-type strong': {\n fontWeight: font.weight.bold,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport {\n colors,\n measurements,\n radius,\n spacing,\n layering,\n} from '@mobi/component-library/Theme/Common'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { useRenderTimeoutControl } from '@mobi/utils/hooks/useRenderTimeoutControl'\nimport { store } from '@core/Store'\nimport type { NextSkyRace } from '@core/Areas/RaceCardSky/types'\nimport { SharedRaceSelection } from '../Common/SharedRaceSelection'\nimport { NoRacesMessage } from '../NoRacesMessage'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { toggleIsSkyRaceListViewOpen } from '../../Store'\nimport { getIsSkyRaceListViewOpen } from '../../Store/selectors'\nimport { RaceFilter } from '../RaceFilter'\nimport { ShowMoreSkyRacesButton } from '../Common/ShowMoreSkyRacesButton'\n\nconst enum LocalConstants {\n UnmountClassName = 'js-sky-list-view--unmount',\n FilterClass = 'js-sky-list-view__filter',\n RaceListClass = 'js-sky-list-view__list',\n BackdropClass = 'js-sky-list-view__bg',\n}\n\n/** Race list view w/ render control */\nexport const RaceListView: React.FC<{\n races: NextSkyRace[]\n setCurrentRace: React.Dispatch>\n}> = ({ races, setCurrentRace }) => {\n const isRaceListViewOpen = useAppSelector(getIsSkyRaceListViewOpen)\n const shouldRenderListView = useRenderTimeoutControl({\n shouldRender: isRaceListViewOpen,\n timeoutMs: 300,\n })\n\n // Reset state on unmount (change of path etc)\n React.useEffect(() => {\n return () => {\n store.dispatch(toggleIsSkyRaceListViewOpen(false))\n }\n }, [])\n\n if (!shouldRenderListView) return null\n\n return (\n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst RaceListViewRender: React.FC<{\n races: NextSkyRace[]\n setCurrentRace: React.Dispatch>\n isUnmounting: boolean\n}> = ({ races, setCurrentRace, isUnmounting }) => {\n const dispatch = useAppDispatch()\n\n const raceListViewRef = useBodyScrollLock()\n\n const makeOnRaceClickHandler = (skyRace: NextSkyRace) => () => {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n dispatch(toggleIsSkyRaceListViewOpen(false))\n setCurrentRace(skyRace)\n }\n\n return (\n \n
    \n \n
    \n\n
    \n
      \n {races.map(skyRace => (\n
    • \n \n
    • \n ))}\n
    • \n \n
    • \n
    \n\n {races.length < 1 && }\n
    \n\n
    \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.nav({\n position: 'fixed',\n zIndex: layering.overlayHigh,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden',\n minWidth: measurements.mobi.minWidth,\n maxWidth: measurements.mobi.maxWidth,\n margin: '0 auto',\n\n [`.${LocalConstants.FilterClass}`]: {\n position: 'relative',\n zIndex: 1,\n animation: 'ease filterIn 0.3s forwards',\n },\n\n [`.${LocalConstants.RaceListClass}`]: {\n boxSizing: 'border-box',\n position: 'absolute',\n top: '4.8rem',\n bottom: measurements.mobi.bottomTabsHeight,\n left: 0,\n right: 0,\n zIndex: 1,\n margin: spacing.smx1 + ' ' + spacing.md,\n padding: 0,\n overflowY: 'auto',\n borderRadius: radius.lgx1,\n animation: 'ease listIn 0.3s forwards',\n\n '> ul': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n gap: '0.1rem',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n\n 'li > button': {\n display: 'flex',\n width: '100%',\n border: 0,\n boxShadow: 'none',\n background: colors.white,\n },\n\n 'li:first-of-type > button': { borderBottomLeftRadius: 0, borderBottomRightRadius: 0 },\n 'li:last-of-type > button': { borderTopLeftRadius: 0, borderTopRightRadius: 0 },\n 'li:not(:last-of-type, :first-of-type) > button': { borderRadius: 0 },\n },\n },\n\n [`.${LocalConstants.BackdropClass}`]: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 0,\n opacity: 1,\n background: colors.surface[50],\n animation: 'ease fadeIn 0.3s forwards',\n },\n\n [`&.${LocalConstants.UnmountClassName}`]: {\n [`.${LocalConstants.RaceListClass}`]: { animation: 'ease fadeOut 0.2s forwards' },\n [`.${LocalConstants.BackdropClass}`]: { animation: 'ease fadeOut 0.2s forwards' },\n [`.${LocalConstants.FilterClass}`]: { animation: 'ease fadeOut 0.2s forwards' },\n },\n\n '@keyframes fadeIn': { from: { opacity: 0 }, to: { opacity: 1 } },\n '@keyframes fadeOut': { from: { opacity: 1 }, to: { opacity: 0 } },\n\n '@keyframes filterIn': {\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0)' },\n },\n\n '@keyframes listIn': {\n '0%': { transform: 'translateY(5rem)', opacity: 0 },\n '30%': { opacity: 1 },\n '100%': { transform: 'translateY(0)' },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { dayjs } from '@mobi/utils/date'\nimport { Flex } from '@mobi/component-library/Common/Flex'\nimport { colors, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport { useFeature } from '@core/Utils/hooks'\nimport { useAppSelector } from '@core/Store/hooks'\nimport { trackEvent } from '@classic/Foundation/Analytics/GoogleTagManagerService'\nimport { useDisableAppHeaderSticky } from '@core/Areas/AppHeader/hooks/useDisableAppHeaderSticky'\nimport { DockedPlayer as DockedSkyVideoPlayer } from '@core/Areas/SkyVideoPlayer/Components/DockedPlayer'\nimport { MainContainer } from '@core/Components/Containers'\nimport { NoticeBox } from '@core/Components/NoticeBox'\nimport { RaceCardMatched, RaceCardSkeletonLoader } from '@core/Areas/RaceCard'\nimport { RaceInfoSlim, RaceInfoSkeletonLoader } from './Components/RaceInfoSlim'\nimport { RaceFilter, RaceFilterSkeletonLoader } from './Components/RaceFilter'\nimport { RaceScrollView, RaceScrollViewSkeletonLoader } from './Components/RaceScrollView'\nimport { NoRacesMessage } from './Components/NoRacesMessage'\nimport { RaceListView } from './Components/RaceListView'\nimport { getResetTimestamp, getSkyRaceFilters } from './Store/selectors'\nimport type { FilterOptions } from './Store'\nimport type { NextSkyRace } from './types'\nimport { getLatestRace } from './helpers'\nimport { useSwipeable, useNextSkyRaces } from './Hooks'\nimport { sortRaceStatusOpenToTheRight } from '@core/Areas/RaceCardSky/helpers'\n\nconst enum LocalConstants {\n SwipeBackIndicatorsClass = 'js-sky-race__swipe--back',\n SwipeForwardIndicatorsClass = 'js-sky-race__swipe--forward',\n IsSwipingClass = 'js-sky-race__swipe--active',\n}\n\nexport const RaceCardSky: React.FC = () => {\n useDisableAppHeaderSticky()\n const { isLoading, isError, nextRaces, refetch, resetLimit } = useNextSkyRaces()\n const raceFilters = useAppSelector(getSkyRaceFilters)\n\n React.useEffect(() => {\n return resetLimit\n }, [])\n\n if (isError) {\n return (\n \n \n \n )\n }\n\n if (isLoading)\n return (\n \n
    \n \n \n \n \n \n \n
    \n
    \n )\n\n const filteredSkyRaces = nextRaces.filter(filterRaces(raceFilters))\n const filteredAndSortedRaces = sortRaceStatusOpenToTheRight(filteredSkyRaces)\n\n return \n}\n\n// =======================\n// Local Component w/ Data\n// =======================\n\nconst RaceCardSkyWithData: React.FC<{ data: NextSkyRace[] }> = ({ data }) => {\n const isSwipeActive = useFeature('SWIPE_TO_CHANGE_RACE')\n\n const swipeableElRef = React.useRef(null)\n\n const [currentRace, setCurrentRace] = React.useState(() => getLatestRace(data))\n\n const resetTimestamp = useAppSelector(getResetTimestamp)\n const resetTimestampPrevRef = React.useRef(resetTimestamp)\n\n // Set latest if data is missing current race\n React.useEffect(() => {\n if (!data.length || data.some(isCurrentRaceAvailableInData(currentRace))) return\n setCurrentRace(getLatestRace(data))\n }, [currentRace, data])\n\n // Set latest if reset timestamp changes\n React.useEffect(() => {\n if (resetTimestamp === resetTimestampPrevRef.current) return\n setCurrentRace(getLatestRace(data))\n }, [data, resetTimestamp])\n\n // Swipe derived vars\n const currentRaceIdx = data.findIndex(r => r === currentRace)\n const isForwardDisabled = data.length === currentRaceIdx + 1\n const isBackDisabled = currentRaceIdx === 0\n\n const onSwipeBack = React.useCallback(() => {\n const prevRace = data.find((_, idx) => idx === currentRaceIdx - 1)\n if (!prevRace) return\n setCurrentRace(prevRace)\n trackEvent('race-card-swiped', { direction: 'BACKWARD' })\n }, [currentRaceIdx, data])\n\n const onSwipeForward = React.useCallback(() => {\n const nextRace = data.find((_, idx) => idx === currentRaceIdx + 1)\n if (!nextRace) return\n setCurrentRace(nextRace)\n trackEvent('race-card-swiped', { direction: 'FORWARD' })\n }, [currentRaceIdx, data])\n\n const { isSwiping, isChangingRace } = useSwipeable({\n onSwipeBack,\n onSwipeForward,\n swipeableElRef,\n isBackDisabled,\n isForwardDisabled,\n isSwipeActive,\n })\n\n const swipeClassNames = []\n if (!isBackDisabled) swipeClassNames.push(LocalConstants.SwipeBackIndicatorsClass)\n if (!isForwardDisabled) swipeClassNames.push(LocalConstants.SwipeForwardIndicatorsClass)\n if (isSwiping) swipeClassNames.push(LocalConstants.IsSwipingClass)\n\n return (\n \n \n\n \n \n \n\n {!currentRace || data.length === 0 ? (\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// Local Helpers\n// =============\n\nfunction isLocalRace(isoCountryCode: string) {\n return ['AU', 'NZ'].includes(isoCountryCode)\n}\n\nconst isCurrentRaceAvailableInData = (currentRace: NextSkyRace) => (race: NextSkyRace) =>\n race.AdvertisedStartTime === currentRace.AdvertisedStartTime &&\n race.MeetingID === currentRace.MeetingID\n\nconst filterRaces = (filters: FilterOptions) => (race: NextSkyRace) => {\n if (!filters[race.RaceType.toLowerCase() as 'races' | 'trots' | 'dogs']) return false\n if (!filters['international'] && !isLocalRace(race.IsoCountryCode)) return false\n if (!filters['local'] && isLocalRace(race.IsoCountryCode)) return false\n return true\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n padding: 0,\n paddingBottom: spacing.md,\n\n '> section': {\n overflow: 'hidden',\n position: 'relative',\n\n // Swipe Wrapper\n '> div': {\n overflow: 'hidden',\n\n // Swipe container\n '> div': {\n overflow: 'hidden',\n padding: '0 ' + spacing.md,\n\n // Main race card\n '> div ': {\n position: 'relative',\n minHeight: '70vh',\n padding: 0,\n paddingBottom: spacing.md,\n borderRadius: radius.lgx1,\n border: '0.1rem solid ' + colors.neutral[200],\n boxShadow: shadow.xs,\n backgroundColor: colors.white,\n },\n },\n },\n\n // Swipe Indicators\n '&::before, &::after': {\n content: \"''\",\n boxSizing: 'border-box',\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: '100%',\n pointerEvents: 'none',\n transition: 'transform 0.4s ease 1s, opacity 0s',\n borderRadius: radius.lgx1,\n border: '0.1rem solid ' + colors.neutral[200],\n boxShadow: shadow.xs,\n backgroundColor: colors.white,\n opacity: 0,\n },\n\n [`&.${LocalConstants.SwipeBackIndicatorsClass}::before`]: {\n right: '100%',\n opacity: 1,\n transform: `translateX(calc((${spacing.md} / 2)))`,\n },\n [`&.${LocalConstants.SwipeForwardIndicatorsClass}::after`]: {\n left: '100%',\n opacity: 1,\n transform: `translateX(calc((${spacing.md} / 2) * -1))`,\n },\n\n // Swipe is active, hide indicators\n [`&.${LocalConstants.IsSwipingClass}::before`]: {\n transform: `translateX(calc(${spacing.md} * 2 * -1))`,\n opacity: 0,\n transitionDelay: '0s',\n },\n [`&.${LocalConstants.IsSwipingClass}::after`]: {\n transform: `translateX(calc(${spacing.md} * 2))`,\n opacity: 0,\n transitionDelay: '0s',\n },\n },\n})\n","import React from 'react'\nimport anime from 'animejs'\nimport { isSwipeDisabled } from '@core/Areas/RaceCard/Components/RaceSwipeContainer/helpers'\n\nconst enum LocalConstants {\n // Minimum horizontal pixels to move before registering swipe\n XThreshold = 50,\n}\n\nexport const useSwipeable = ({\n onSwipeBack,\n onSwipeForward,\n isBackDisabled,\n isForwardDisabled,\n swipeableElRef,\n isSwipeActive,\n}: UseSwipeableArgs) => {\n const capturedArgsRef = React.useRef({\n onSwipeBack,\n onSwipeForward,\n isForwardDisabled,\n isBackDisabled,\n })\n capturedArgsRef.current = { onSwipeBack, onSwipeForward, isForwardDisabled, isBackDisabled }\n\n const [isSwiping, setIsSwiping] = React.useState(false)\n const [isChangingRace, setIsChangingRace] = React.useState(false)\n\n React.useEffect(() => {\n const container = swipeableElRef.current\n if (!isSwipeActive || !container) return\n\n let startX = 0\n let startY = 0\n let moveX = 0\n let moveY = 0\n\n let isScrolling: boolean | null = null\n let isAnimating = false\n let shouldDisableSwipe = false\n let hasThresholdExceeded: boolean | null = null\n\n let elWidth: DOMRect['width'] = container.getBoundingClientRect().width\n\n // ===========\n // TOUCH START\n // ===========\n const handleTouchStart = (e: TouchEvent) => {\n startX = 0\n startY = 0\n moveX = 0\n moveY = 0\n hasThresholdExceeded = null\n isScrolling = null\n shouldDisableSwipe = isSwipeDisabled(e)\n\n if (shouldDisableSwipe || isAnimating) return\n\n startX = e.touches[0].clientX\n startY = e.touches[0].clientY\n\n elWidth = container.getBoundingClientRect().width\n }\n\n // ==========\n // TOUCH MOVE\n // ==========\n const handleTouchMove = (e: TouchEvent) => {\n moveX = e.touches[0].clientX - startX\n moveY = e.touches[0].clientY - startY\n\n isScrolling ??= !!(Math.abs(moveX) < Math.abs(moveY))\n hasThresholdExceeded ??= Math.abs(moveX) < LocalConstants.XThreshold\n\n if (!hasThresholdExceeded || isScrolling || Math.abs(moveX) > elWidth * 0.5) return\n\n e.preventDefault()\n hasThresholdExceeded = true\n\n setIsSwiping(true)\n\n anime.set(container, { translateX: `${moveX}px` })\n }\n\n // =========\n // TOUCH END\n // =========\n const handleTouchEnd = () => {\n if (isScrolling) return\n\n isAnimating = true\n const resetIsAnimating = () => (isAnimating = false)\n\n const cancel = () => {\n anime({ targets: container, translateX: '0px', duration: 400, complete: resetIsAnimating })\n setIsSwiping(false)\n }\n\n const hasMovedEnoughToTriggerSwipe = Math.abs(moveX) > LocalConstants.XThreshold * 2.5\n if (!hasMovedEnoughToTriggerSwipe) {\n cancel()\n return\n }\n\n const finishXSign = Math.sign(Math.abs(moveX) / moveX) || 0\n if (\n finishXSign === 0 ||\n (finishXSign === 1 && capturedArgsRef.current.isBackDisabled) ||\n (finishXSign === -1 && capturedArgsRef.current.isForwardDisabled)\n ) {\n cancel()\n return\n }\n\n setIsChangingRace(true)\n\n anime({\n targets: container,\n keyframes: [\n { translateX: `${elWidth * finishXSign}px`, duration: 300, easing: 'easeOutExpo' },\n { opacity: 0, translateX: `${elWidth * -finishXSign}px`, duration: 0 },\n { opacity: 1, duration: 0 },\n { translateX: '0px', duration: 200 },\n ],\n duration: 500,\n easing: 'linear',\n complete: () => {\n window.scrollTo({ top: 0 })\n resetIsAnimating()\n\n if (finishXSign === -1) {\n capturedArgsRef.current.onSwipeForward()\n } else {\n capturedArgsRef.current.onSwipeBack()\n }\n\n setIsSwiping(false)\n setIsChangingRace(false)\n },\n })\n }\n\n container.addEventListener('touchstart', handleTouchStart)\n container.addEventListener('touchmove', handleTouchMove)\n container.addEventListener('touchend', handleTouchEnd)\n return () => {\n container.removeEventListener('touchstart', handleTouchStart)\n container.removeEventListener('touchmove', handleTouchMove)\n container.removeEventListener('touchend', handleTouchEnd)\n }\n }, [isSwipeActive, swipeableElRef])\n\n return { isSwiping, isChangingRace }\n}\n\n// =====\n// Types\n// =====\n\ntype UseSwipeableArgs = {\n onSwipeForward: () => void\n onSwipeBack: () => void\n isForwardDisabled: boolean\n isBackDisabled: boolean\n swipeableElRef: React.RefObject\n isSwipeActive: boolean\n}\n\ntype CapturedArgs = Pick<\n UseSwipeableArgs,\n 'onSwipeBack' | 'onSwipeForward' | 'isBackDisabled' | 'isForwardDisabled'\n>\n","import React from 'react'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\n\nconst GoodThingsSliceLazy = React.lazy(() => import('@rwwa/racing-form/WebClient/dist/goodThings'))\n\nconst Loading = () => null\n\nexport const GoodThingsSlice: React.FC = () => (\n \n \n\n }>\n \n \n \n)\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { getEnhancedBetslipSetting } from '@core/Areas/Settings/Store/selectors'\nimport { setEnhancedBetslipSetting } from '@core/Areas/Settings/Store'\nimport { SettingItemWithCheckbox } from '../Common/SettingItemWithCheckbox'\n\nexport const EnhancedBetslipSetting = () => {\n const dispatch = useDispatch()\n const isSettingEnabled = useSelector(getEnhancedBetslipSetting)\n\n return (\n {\n dispatch(setEnhancedBetslipSetting(!isSettingEnabled))\n }}\n />\n )\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { isHapticFeedbackSettingEnabled } from '@core/Areas/Settings/Store/selectors'\nimport { setHapticFeedbackSetting } from '@core/Areas/Settings/Store'\nimport { SettingItemWithCheckbox } from '../Common/SettingItemWithCheckbox'\n\nexport const isHapticsSupported = isReactNativeApp || Boolean(window.navigator.vibrate)\n\nexport const HapticFeedbackSetting: React.FC = () => {\n const dispatch = useDispatch()\n const isHapticFeedbackEnabled = useSelector(isHapticFeedbackSettingEnabled)\n\n return (\n {\n dispatch(setHapticFeedbackSetting(!isHapticFeedbackEnabled))\n }}\n />\n )\n}\n","import type { AppState } from '..'\n\nexport const selectPresetDenominations = (state: AppState) => {\n return state.betslip.config.presetKeypadAmounts\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { colors, font, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Input } from '@mobi/component-library/Common/V2/Inputs'\nimport { setUserPresetDenomination } from '@mobi/betslip/Store/Config'\nimport { selectPresetDenominations } from '@mobi/betslip/Store/Config/selectors'\nimport { addToast, ToastContent } from '@mobi/component-library/Feedback/Toast'\n\nconst enum LocalConstants {\n ActiveInputClass = 'js-preset-input--active',\n}\n\nexport const EditPresetTrayContent: React.FC<{ hideTray: () => void }> = ({ hideTray }) => {\n const dispatch = useDispatch()\n const presetDenominations = useSelector(selectPresetDenominations)\n\n const initialInputState = presetDenominations.map((value, index) => ({\n index,\n value: value.user || value.default,\n }))\n\n const [inputTypeValues, setInputTypeValues] = React.useState(initialInputState)\n const [activeInput, setActiveInput] = React.useState(null)\n\n const submitBetValues = () => {\n dispatch(setUserPresetDenomination(inputTypeValues))\n hideTray()\n addToast({\n id: 'Betslip keyboard updated',\n content: ,\n isDismissable: true,\n isFullWidth: true,\n })\n }\n\n const handleInputChange = (idx: number, value: number) => {\n setInputTypeValues(prevValues => {\n const updatedValues = [...prevValues]\n updatedValues[idx].value = value\n return updatedValues\n })\n }\n\n const isSaveActive = inputTypeValues?.every(\n (input, index) =>\n input.value === null || input.value === 0 || presetDenominations[index].user === input.value\n )\n\n return (\n \n
    \n

    Save up to 3 custom amounts for one tap selection when placing a bet

    \n
    \n {inputTypeValues?.map((config, idx) => (\n setActiveInput(config.index + 1)}\n onMouseLeave={() => {\n if (config.value === 0) handleInputChange(idx, presetDenominations?.[idx]?.default)\n setActiveInput(null)\n }}\n onChange={e => {\n const value = parseFloat(e.target.value)\n handleInputChange(\n idx,\n isNaN(value) ? 0 : Math.max(0, Math.min(10000, Math.round(value * 100) / 100))\n )\n }}\n />\n ))}\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n
    \n \n\n {inputTypeValues?.map((input, idx) => (\n \n + ${input.value === 0 ? presetDenominations[idx].default : input.value}\n \n ))}\n
    \n
    \n\n \n
    \n )\n}\n\nconst WrapperStyled = styled.div({\n marginBottom: spacing.md,\n\n '> div:first-child': {\n display: 'flex',\n flexDirection: 'column',\n fontFamily: font.family.primary,\n gap: spacing.smx2,\n marginBottom: spacing.smx1,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n\n 'div, label': {\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n },\n\n '> p': {\n color: colors.neutral[800],\n fontSize: font.size.md.fontSize,\n fontWeight: font.weight.medium,\n textAlign: 'left',\n marginTop: 0,\n },\n\n '> div:first-of-type': {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n columnGap: spacing.smx2,\n },\n },\n})\n\nconst KeyPadStyled = styled.div({\n display: 'grid',\n gridTemplateColumns: 'repeat(4, 1fr)',\n gridTemplateRows: 'repeat(4, auto)',\n gap: spacing.smx2,\n padding: spacing.smx2,\n borderRadius: radius.lg,\n backgroundColor: colors.studio[50],\n\n '> div:first-of-type': {\n gridColumnStart: '4',\n gridColumnEnd: '5',\n gridRowStart: '1',\n gridRowEnd: '5',\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx2,\n },\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '4.5rem',\n fontFamily: font.family.primary,\n fontSize: font.size.xl.fontSize,\n letterSpacing: font.size.xl.letterSpacing,\n lineHeight: font.size.xl.lineHeight,\n fontWeight: font.weight.medium,\n borderRadius: radius.md,\n border: '0.1rem solid ' + colors.studio[50],\n backgroundColor: colors.white,\n color: colors.lavender[900],\n boxShadow: shadow.sm,\n userSelect: 'none',\n pointerEvents: 'none',\n\n [`&.${LocalConstants.ActiveInputClass}`]: {\n backgroundColor: colors.studio[500],\n color: colors.white,\n },\n\n ':disabled': {\n color: colors.neutral[500],\n },\n },\n})\n","import React from 'react'\nimport { SettingItem } from '../Common/SettingItem'\nimport { Tray } from '@mobi/component-library/Overlays/Tray'\nimport { EditPresetTrayContent } from './Components/EditPresetTrayContent'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\n\nexport const KeypadDenominationsSetting: React.FC = () => {\n const [isTrayOpen, setIsTrayOpen] = React.useState(false)\n\n return (\n setIsTrayOpen(true)} color='tertiary_grey'>\n Edit\n \n }\n bottomComponent={\n setIsTrayOpen(false)}\n >\n setIsTrayOpen(false)} />\n \n }\n />\n )\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { SettingItemWithCheckbox } from '../Common/SettingItemWithCheckbox'\nimport { getNewSportsSetting } from '../../Store/selectors'\nimport { setNewSportsSetting } from '../../Store'\n\nexport const NewSportsSetting = () => {\n const dispatch = useDispatch()\n const isSettingEnabled = useSelector(getNewSportsSetting)\n\n return (\n {\n dispatch(setNewSportsSetting(!isSettingEnabled))\n }}\n />\n )\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { SettingItemWithCheckbox } from '../Common/SettingItemWithCheckbox'\nimport { getNewBetSlipSetting } from '../../Store/selectors'\nimport { setNewBetSlipSetting } from '../../Store'\n\nexport const NewBetSlipSetting = () => {\n const dispatch = useDispatch()\n const isSettingEnabled = useSelector(getNewBetSlipSetting)\n\n return (\n {\n dispatch(setNewBetSlipSetting(!isSettingEnabled))\n }}\n />\n )\n}\n","import React from 'react'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { useFeature } from '@core/Utils/hooks'\nimport { Message } from '@core/Components/Messages'\nimport {\n HapticFeedbackSetting,\n isHapticsSupported,\n EnhancedBetslipSetting,\n PayoutNotification,\n NewSportsSetting,\n NewBetSlipSetting,\n KeypadDenominationsSetting,\n} from './Components'\n\nexport const Settings: React.FC = () => {\n const isEnhancedBetslipFeatureToggleActive = useFeature('ENHANCED_BETSLIP')\n const isHapticFeedbackFeatureActive = useFeature('HAPTIC_FEEDBACK')\n const isNewSportsFeatureActive = useFeature('FIXED_ODDS_SPORTS')\n const isNewBetSlipFeatureActive = useFeature('NEW_BET_SLIP_DESIGN')\n\n const shouldRenderHapticsSetting = isHapticFeedbackFeatureActive && isHapticsSupported\n\n return (\n \n \n\n \n {isNewSportsFeatureActive && }\n\n {isNewBetSlipFeatureActive && }\n\n {isEnhancedBetslipFeatureToggleActive && }\n\n {shouldRenderHapticsSetting && }\n\n {isReactNativeApp && }\n\n {isNewBetSlipFeatureActive && }\n \n \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst SettingsContainer: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n if (!React.Children.toArray(children).some(child => !!child))\n return (\n \n Coming soon!\n
    \n This feature will come in a future release.\n
    \n )\n\n return <>{children}\n}\n","import React from 'react'\nimport { matchPath } from 'react-router'\nimport { useLocation } from 'react-router-dom'\nimport type { Contract } from '@mobi/web-native-comms'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { isRaceRoute } from '@core/State/Navigation/helpers/isRaceRoute'\n\nexport const useActiveTab = () => {\n const { pathname } = useLocation()\n\n const activeTab = getActiveTabName(pathname)\n\n React.useEffect(() => {\n if (!isReactNativeApp) return\n sendToNative('SET_ACTIVE_TAB', { activeTab })\n }, [activeTab])\n\n return activeTab\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getActiveTabName(pathname: string): Contract['SET_ACTIVE_TAB']['activeTab'] {\n const homePageMatch = matchPath(pathname, AppRoutes.Home)\n if (homePageMatch?.isExact && homePageMatch.path === '/') {\n return 'Home'\n }\n\n if (\n matchPath(pathname, AppRoutes.SportsRoot)?.path ||\n Boolean(matchPath(pathname, AppRoutes.Sports))\n ) {\n return 'Sports'\n }\n\n if (isRaceRoute(pathname)) {\n return 'Races'\n }\n\n if (pathname === AppRoutes.RaceCardSky) {\n return 'SkyRacing'\n }\n\n return undefined\n}\n","import React from 'react'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { useActiveTab } from '../../Hooks/useActiveTab'\nimport { WebOnlyNav } from './Components/WebOnlyNav/WebOnlyNav'\n\nexport const TabNavigation = () => {\n const activeTab = useActiveTab()\n\n // See Native App for React Native Bottom Tab Navigation\n if (isReactNativeApp) return null\n\n return \n}\n","import React from 'react'\nimport { PopupContainerCenteredStyled, PopupCenteredStyled } from './Popup.styles'\nimport { observeImmutable } from '../HOCs/observe'\nimport { state$, HidePopup, PopupState } from './driver'\n\nfunction PopupComponent({\n content,\n contentProps,\n}: {\n content: React.ElementType\n contentProps: Record\n}) {\n const Content = content\n const closeHandler = () => {\n HidePopup()\n }\n const stopClickBubblingUp = (event: React.MouseEvent) => {\n event.stopPropagation()\n }\n return (\n \n \n \n \n \n )\n}\n\n/** @deprecated */\nexport const Popup: React.ComponentClass = observeImmutable(state$, ({ record }) => {\n const { show, content, contentProps } = record.toJS() as PopupState\n if (!show || !content) {\n return null\n }\n return } />\n})\n","import React, { useMemo, type ReactNode } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { HostProvider, type HostApi } from '@mobi/account/Common/HostContext'\nimport { state$ as featureState$ } from '@core/State/LaunchDarklyFeatures/driver'\nimport { trackOptimoveEvent } from '@core/Services/Optimove/optimove'\nimport { DepositFlow } from '@mobi/account/Areas/Deposit/typings/types'\nimport { ClearInsufficientFundsForBet } from '@core/Areas/Quickbet/signals'\n\ntype Params = {\n history: ReturnType\n}\n\nconst createHostApi = ({ history }: Params): HostApi => ({\n features: {\n hasFeature: (featureName: string) => {\n return featureState$\n .take(1)\n .map(state => {\n const featureValue = state.features.get(featureName)\n return typeof featureValue === 'boolean' && !!featureValue\n })\n .toPromise(Promise)\n },\n },\n events: {\n onDepositSuccess: (flow: DepositFlow, amount?: number) => {\n if (!amount) return\n if (flow === 'quick-deposit') {\n ClearInsufficientFundsForBet()\n }\n trackOptimoveEvent({\n eventName: 'money_deposited',\n data: {\n amount,\n },\n })\n },\n findTab: () => {\n if (isReactNativeApp) {\n sendToNative('REQUEST_NATIVE_NAVIGATION', { location: 'TAB Locator' })\n } else {\n history.push('/tablocator')\n }\n },\n },\n channel: 'mobile',\n})\n\ntype Props = {\n children: MaybeArray\n}\n\nexport const HostContextMobile = ({ children }: Props): JSX.Element => {\n const history = useHistory()\n\n // TODO: Remove this when CreditCardForm is more resilient\n // This is a memo to ensure the `analytics` object (see above) remains the same\n // as that is checked when adding a card with Braintree. Not having this can\n // cause Braintree's hosted fields to crash when anything in the parent\n // has changed.\n const api = useMemo(\n () =>\n createHostApi({\n history,\n }),\n [history]\n )\n\n return {children}\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius, shadow } from '@mobi/component-library/Theme/Common'\n\nconst enum LocalConstants {\n MediumSizeClass = 'js-toggle--md',\n}\n\nexport const Toggle: React.FC<{\n id: string\n isOn: boolean\n onToggle: () => void\n size?: 'sm' | 'md'\n disabled?: boolean\n}> = ({ id, isOn, onToggle, size = 'sm', disabled = false }) => (\n \n !disabled && onToggle()}\n disabled={disabled}\n aria-checked={isOn}\n role='switch'\n id={id}\n />\n\n \n)\n\n// ======\n// Styles\n// ======\n\nconst ToggleFieldStyled = styled.div({\n position: 'relative',\n display: 'inline-flex',\n '--parentWidth': '3.6rem',\n '--parentHeight': '2rem',\n width: 'var(--parentWidth)',\n height: 'var(--parentHeight)',\n\n [`&.${LocalConstants.MediumSizeClass}`]: {\n '--parentWidth': '4.4rem',\n '--parentHeight': '2.4rem',\n\n '> label': { borderRadius: 'calc(var(--parentHeight) / 2)' },\n },\n\n '> input[type=checkbox]': {\n height: 0,\n width: 0,\n visibility: 'hidden',\n appearance: 'none',\n position: 'absolute',\n },\n\n '> label': {\n display: 'flex',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n padding: '0.2rem',\n WebkitTapHighlightColor: 'transparent',\n borderRadius: 'var(--parentHeight)',\n backgroundColor: colors.studio[50],\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n\n '::before': {\n content: '\"\"',\n height: 'calc(var(--parentWidth) / 2 - 0.2rem)',\n width: 'calc(var(--parentWidth) / 2 - 0.2rem)',\n borderRadius: radius.full,\n background: colors.white,\n boxShadow: shadow.sm,\n transition: 'transform 0.2s ease',\n },\n },\n\n '> input:checked + label': {\n backgroundColor: colors.studio[600],\n '::before': { transform: 'translateX(100%)' },\n },\n\n '> input:not(:checked):disabled + label': {\n backgroundColor: colors.surface[200],\n },\n\n '> input:checked:disabled + label': {\n backgroundColor: colors.studio[50],\n },\n\n '> input:disabled + label::before': {\n backgroundColor: colors.surface[200],\n },\n})\n","import React from 'react'\n\ntype IsShareActiveContext = boolean\n\nexport const ShareBetContext = React.createContext(false)\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { removeItemFromBetSlipById } from '@mobi/betslip/Store/Bets'\n\nexport const MultiLegClosed: React.FC<{ id: string }> = ({ id }) => {\n const dispatch = useDispatch()\n\n return (\n <>\n dispatch(removeItemFromBetSlipById({ id }))}\n color='tertiary_grey'\n size='sm'\n isIconOnlyButton\n >\n \n \n \n )\n}\n","import React, { useContext } from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from '@emotion/styled'\nimport { Checkbox } from '@mobi/component-library/Common/V2/Inputs/Checkbox'\nimport { ShareBetContext } from '@mobi/betslip/Components/Common/ShareMyBet/context'\nimport { toggleIsItemInMulti } from '@mobi/betslip/Store/Bets'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { isFatalErrorType, isFatalMultiBetLegError } from '@mobi/betslip/helpers/state'\nimport { MultiLegClosed } from './Components/MultiLegClosed'\n\nexport const MultiLegCheckbox: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n const dispatch = useDispatch()\n\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n const receipt = useAppSelector(state => state.betslip.bets.multiReceipt)\n\n const isShareDisplay = useContext(ShareBetContext)\n\n const hasFatalError = isFatalErrorType(item.betErrorType)\n\n React.useEffect(() => {\n // Remove from active multi selection if fatal error (ie. betting closed)\n if (hasFatalError && item.isInMulti) dispatch(toggleIsItemInMulti({ id: item.id }))\n }, [hasFatalError, item.id, item.isInMulti, dispatch])\n\n if (hasFatalError) return \n\n if (workflowStatus !== 'ready' || isShareDisplay) return null\n\n const isDisabled = isBusy || receipt != null || isFatalMultiBetLegError(item)\n\n return (\n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n 'label [role=\"checkbox\"]': { margin: 0 },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, shadow } from '@mobi/component-library/Theme/Common'\n\nconst enum LocalConstants {\n ActiveLabelClass = 'js-toggle-label--active',\n}\n\nexport const ToggleWithLabels: React.FC<{\n id: string\n leftValue: string\n rightValue: string\n isLeftValueActive: boolean\n onToggle: () => void\n disabled?: boolean\n}> = ({ id, isLeftValueActive, leftValue, rightValue, onToggle, disabled = false }) => {\n const elementId = `toggle-label-${id}`\n\n return (\n \n !disabled && onToggle()}\n disabled={disabled}\n aria-checked={isLeftValueActive}\n role='switch'\n id={elementId}\n />\n\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst ToggleFieldStyled = styled.div({\n position: 'relative',\n display: 'inline-flex',\n '--parentHeight': '2.4rem',\n height: 'var(--parentHeight)',\n fontFamily: font.family.primary,\n\n '> input[type=checkbox]': {\n height: 0,\n width: 0,\n visibility: 'hidden',\n appearance: 'none',\n position: 'absolute',\n },\n\n '> label': {\n position: 'relative',\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n alignItems: 'center',\n padding: '0.2rem',\n\n userSelect: 'none',\n touchAction: 'manipulation',\n WebkitTapHighlightColor: 'transparent',\n borderRadius: 'calc(var(--parentHeight) / 2)',\n backgroundColor: colors.neutral[200],\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n\n '> span': {\n position: 'relative',\n zIndex: 2,\n padding: `0 0.6rem`,\n textAlign: 'center',\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.neutral[700],\n transition: 'color 0.2s ease',\n\n [`&.${LocalConstants.ActiveLabelClass}`]: {\n color: colors.neutral[900],\n },\n },\n\n '::before': {\n content: '\"\"',\n position: 'absolute',\n left: '0.2rem',\n top: '0.2rem',\n zIndex: 1,\n width: 'calc(50% - 0.2rem)',\n height: 'calc(var(--parentHeight) - 0.4rem)',\n borderRadius: 'calc(var(--parentHeight) / 1.5)',\n background: colors.white,\n boxShadow: shadow.sm,\n transform: 'translateX(100%)',\n transition: 'transform 0.2s ease',\n },\n },\n\n '> input:checked + label': {\n '::before': { transform: 'translateX(0%)' },\n },\n\n '> input:not(:checked):disabled + label': {\n backgroundColor: colors.surface[200],\n },\n\n '> input:disabled + label': {\n [`> span.${LocalConstants.ActiveLabelClass}`]: {\n color: colors.neutral[700],\n },\n\n '::before': {\n backgroundColor: colors.surface[200],\n },\n },\n})\n","import React from 'react'\nimport { ToggleWithLabels } from '@mobi/component-library/Selection&Input/ToggleWithLabels'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { useDispatch } from 'react-redux'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { toggleMultiItemBetLegType } from '@mobi/betslip/Store/Bets'\n\nexport const MultiLegTypeToggle: React.FC> = ({\n multiLegBetType,\n id,\n}) => {\n const dispatch = useDispatch()\n\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n\n if (workflowStatus != 'ready' || isBusy) return null\n\n return (\n dispatch(toggleMultiItemBetLegType({ id }))}\n leftValue='Win'\n rightValue='Place'\n isLeftValueActive={multiLegBetType === 'W'}\n />\n )\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { dayjs } from '@mobi/utils/date'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { BetCard, LinkInfo } from '@mobi/betslip/Components/Common/BetCard'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge/StatusBadge'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport type {\n BetSlipItem,\n FobDetails,\n FobSelection,\n BettingType,\n FobPropositionSelection,\n} from '@mobi/betslip/types'\nimport { ShareBetContext } from '@mobi/betslip/Components/Common/ShareMyBet/context'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport { MultiLegCheckbox } from '@mobi/betslip/Components/Multi/Components/MultiLegCheckbox'\nimport { MultiLegTypeToggle } from '@mobi/betslip/Components/Multi/Components/MultiLegTypeToggle'\nimport type { BetInfoDisplayType } from '../../types'\n\nexport const FobBetInfo: React.FC<{\n item: BetSlipItem\n isMultiItem?: boolean\n displayMode?: BetInfoDisplayType\n}> = ({ item, isMultiItem, displayMode }) => {\n const isShareDisplay = React.useContext(ShareBetContext)\n\n const workflowStatus = useSelector(selectWorkflowStatus)\n\n const {\n competitionName,\n eventName,\n handicapName,\n marketName,\n propositionName,\n sportIconCode,\n tournamentName,\n eventStartTime,\n urlPath,\n } = item.selectionDetails as SelectionDetails\n const selection = item.selection as FobSelection\n\n const selectionName = `${propositionName} ${handicapName ? ` ${handicapName}` : ''}`\n const price = isMultiItem\n ? item.multiLegBetType === 'W'\n ? selection.winPrice\n : selection.placePrice\n : item.isEachWayAvailable\n ? selection.winPrice\n : undefined\n\n const marketNamePrefix = !item.shouldAllowPlaceInvestment\n ? marketName\n : getMarketTitle(\n isMultiItem ? item.multiLegBetType : getBetTypeOverrideFromInvestment(item.investment)\n )\n\n const shouldDisplayCountdown =\n !isMultiItem || (isMultiItem && dayjs(eventStartTime).isSameOrBefore(dayjs().add(5, 'minutes')))\n\n const linkInfo: LinkInfo | undefined =\n !isMultiItem && workflowStatus === 'ready' && urlPath ? { pathname: urlPath } : undefined\n\n const isFixedDisplay = isMultiItem ? '' : getShouldFixedDisplay(selection, item.bettingType)\n\n return (\n <>\n {(displayMode === 'full' || displayMode === 'event') && (\n \n {isShareDisplay ? (\n \n {dayjs(eventStartTime).format('D MMM | H:mm')}\n \n ) : (\n <>\n {shouldDisplayCountdown && (\n \n )}\n \n )}\n\n {isMultiItem && !item.isEachWayAvailable && (\n \n )}\n \n }\n iconComponent={}\n />\n )}\n\n {(displayMode === 'full' || displayMode === 'selection') && (\n }\n linkInfo={linkInfo}\n />\n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getMarketTitle(betTypeOverride?: BetSlipItem['multiLegBetType']) {\n if (betTypeOverride === 'W') {\n return 'Win'\n }\n if (betTypeOverride === 'P') {\n return 'Place'\n }\n return 'Win & Place '\n}\n\nfunction getShouldFixedDisplay(selection: FobPropositionSelection, bettingType: BettingType) {\n if (bettingType === 'fixed-odds-racing' && !selection.marketCode) {\n return ' - Fixed'\n }\n return ''\n}\n\nfunction getBetTypeOverrideFromInvestment(\n investment: BetSlipItem['investment']\n): BetSlipItem['multiLegBetType'] {\n if (investment.win.value && !investment.place.value) return 'W'\n if (!investment.win.value && investment.place.value) return 'P'\n return undefined\n}\n\n// =====\n// Types\n// =====\n\ntype SelectionDetails = Pick<\n FobDetails,\n | 'eventName'\n | 'competitionName'\n | 'sportIconCode'\n | 'tournamentName'\n | 'propositionName'\n | 'marketName'\n | 'handicapName'\n | 'eventStartTime'\n | 'urlPath'\n>\n","import { isAllUpSelection } from '@mobi/betslip/helpers/typeGuards'\nimport type {\n Acceptor,\n AcceptorBase,\n AllUpSelection,\n Race,\n ToteSelection,\n} from '@mobi/betslip/types'\n\nexport function addAcceptorNameToSingleSelection(\n selectionForRace: string,\n acceptorsForRace: AcceptorBase[]\n): string {\n if (/^\\d+$/.test(selectionForRace)) {\n const acceptor = getAcceptorName(selectionForRace, acceptorsForRace)\n if (acceptor) return `${selectionForRace} - ${acceptor}`\n }\n return selectionForRace\n}\n\nexport function getAcceptorTextForSingleSelection(acceptor: AcceptorBase): string | null {\n if (!acceptor) return null\n return acceptor.number + ' - ' + acceptor.name\n}\n\n/** Create selection map for tote novelty bet types within single race */\nexport function createNoveltyMultipleSelectionMap(\n { selectionString, isAllways, isLegIn, isRovingBanker }: ToteSelection,\n acceptorsForRace: Acceptor[]\n) {\n const acceptors = selectionString.split('/').map(selection => {\n const regexForNumbersSeparatedByDots = /^\\d{1,2}.[\\d{1,2}.?]*\\d$/\n\n if (regexForNumbersSeparatedByDots.test(selection)) {\n return selection.split('.').map(selectionNumber => {\n const acceptor = acceptorsForRace.find(\n acceptor => acceptor.number.toString() === selectionNumber\n )\n return acceptor\n })\n }\n\n const acceptor = acceptorsForRace.find(acceptor => acceptor.number.toString() === selection)\n return [acceptor]\n })\n\n const noveltyPlacedMap = new Map()\n\n if (isAllways) {\n noveltyPlacedMap.set('Allways', acceptors[0])\n return noveltyPlacedMap\n }\n\n if (isRovingBanker) {\n noveltyPlacedMap.set('RB', acceptors[0])\n noveltyPlacedMap.set('With', acceptors[1])\n return noveltyPlacedMap\n }\n\n if (isLegIn) {\n noveltyPlacedMap.set('Leg-In', acceptors[0])\n noveltyPlacedMap.set('With', acceptors[1])\n return noveltyPlacedMap\n }\n\n noveltyPlacedMap.set('1st', acceptors[0])\n noveltyPlacedMap.set('2nd', acceptors[1])\n noveltyPlacedMap.set('3rd', acceptors[2])\n noveltyPlacedMap.set('4th', acceptors[3])\n return noveltyPlacedMap\n}\n\nexport function createMultipleRaceMultipleSelectionMap(\n selection: AllUpSelection | ToteSelection,\n races: Race[],\n allAcceptors: Acceptor[]\n) {\n const multipleSelectionMap = new Map()\n const isAllUp = isAllUpSelection(selection)\n const validSelectionCount = isAllUp\n ? selection.details.length\n : selection.selectionString.split('/').length\n\n if (validSelectionCount !== races.length) return multipleSelectionMap\n\n races.forEach(race => {\n const currentPoolType = isAllUp\n ? selection.details.find(detail => detail.raceNum === race.raceNumber)?.poolType\n : ''\n\n multipleSelectionMap.set(\n `R${race.raceNumber}${currentPoolType ? ' ' + poolTypeName[currentPoolType] || '' : ''}`,\n allAcceptors.filter(acceptor => acceptor.key.includes(race.key))\n )\n })\n\n return multipleSelectionMap\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getAcceptorName(acceptorNumber: string, acceptorsForRace: AcceptorBase[]): string {\n const acceptor = acceptorsForRace.find(x => `${x.number}` === acceptorNumber)\n return acceptor ? acceptor.name : ''\n}\n\nconst poolTypeName: Record = {\n W: 'Win',\n P: 'Place',\n EW: 'Eachway',\n Q: 'Quinella',\n}\n","import React from 'react'\nimport { dayjs } from '@mobi/utils/date'\nimport styled from '@emotion/styled'\nimport { Currency } from '@mobi/utils/money'\nimport { FixedOddsMarketCodes } from '@mobi/api-types'\nimport { Icon as IconLegacy, type IconType } from '@mobi/component-library/Common/Icon'\nimport { BetCard, LinkInfo } from '@mobi/betslip/Components/Common/BetCard'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge/StatusBadge'\nimport type {\n Race,\n Acceptor,\n RaceDetails,\n BetSlipItem,\n BettingType,\n Selection,\n FobPropositionSelection,\n ToteSelection,\n RacingBetType,\n} from '@mobi/betslip/types'\nimport {\n isFobPropositionSelection,\n isNoveltyBetType,\n isToteSelection,\n isFobMatchedSelection,\n isSameRaceMultiSelection,\n isStartingPriceMatchedSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { calculateBoosts } from '@mobi/betslip/helpers/calculator/misc'\nimport { SelectionInfoMultiple } from '@mobi/betslip/Components/Common/BetCard/Components/SelectionInfoMultiple'\nimport { RacingTitle } from '@mobi/betslip/Components/Common/BetCard/Components/EventDetails/Components/RacingTitle'\nimport {\n addAcceptorNameToSingleSelection,\n getAcceptorTextForSingleSelection,\n createNoveltyMultipleSelectionMap,\n createMultipleRaceMultipleSelectionMap,\n} from './helpers'\nimport { SilkImage } from '@mobi/betslip/Components/Common/SilkImage/SilkImage'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { ShareBetContext } from '@mobi/betslip/Components/Common/ShareMyBet/context'\nimport { MultiLegTypeToggle } from '@mobi/betslip/Components/Multi/Components/MultiLegTypeToggle'\nimport { MultiLegCheckbox } from '@mobi/betslip/Components/Multi/Components/MultiLegCheckbox'\nimport { isFatalErrorType } from '@mobi/betslip/helpers/state'\nimport type { BetInfoDisplayType } from '../../types'\n\nconst FixedOddsMarketDisplayNames = {\n [FixedOddsMarketCodes.HeadToHead]: 'Head to Head',\n [FixedOddsMarketCodes.RunnerVsField]: 'Runner vs Field',\n [FixedOddsMarketCodes.StartingPrice]: 'SP - Fixed',\n} as const\n\nconst mapCodeToIcon: Record = {\n Races: 'races',\n Trots: 'trot',\n Dogs: 'dog',\n}\n\nexport const RaceBetInfo: React.FC<{\n item: BetSlipItem\n isMultiItem?: boolean\n displayMode?: BetInfoDisplayType\n}> = ({ item, isMultiItem, displayMode }) => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n\n const isShareDisplay = React.useContext(ShareBetContext)\n\n const { selection } = item\n const bettingType = item.bettingType === null ? 'tote-racing' : item.bettingType\n const { races = [], acceptors = [] } = (item.selectionDetails || {}) as RaceDetails\n\n const hasFatalError = isFatalErrorType(item.betErrorType)\n\n const { meetingName, raceTime, meetingCode } = races[0] as Race\n const raceStartTime = raceTime\n const racingIconCode = meetingCode\n\n const iconType = mapCodeToIcon[racingIconCode || 'Trots']\n\n const shouldDisplayCountdown =\n !hasFatalError &&\n raceStartTime &&\n (!isMultiItem ||\n (isMultiItem && dayjs(raceStartTime).isSameOrBefore(dayjs().add(5, 'minutes'))))\n const isTote = isToteSelection(selection)\n const isMultipleRaceSelection = isTote && isMultiRaceBetType(selection.betType)\n\n const shouldShowPriceInSelectionInfo =\n workflowStatus == 'proposed' || workflowStatus == 'bets-placed'\n\n const urlPath = item.selectionDetails.urlPath\n const linkInfo: LinkInfo | undefined =\n !isMultiItem && workflowStatus === 'ready' && urlPath ? { pathname: urlPath } : undefined\n\n return (\n <>\n {(displayMode === 'full' || displayMode === 'event') && (\n <>\n \n }\n subHeading={getFixedOddsMarketName(selection)}\n statusComponent={\n <>\n {isShareDisplay ? (\n \n {dayjs(raceStartTime).format('D MMM | H:mm')}\n \n ) : (\n <>\n {shouldDisplayCountdown && raceStartTime && (\n \n )}\n \n )}\n\n {isMultiItem && !hasFatalError && item.shouldAllowPlaceInvestment && (\n \n )}\n \n }\n iconComponent={}\n />\n \n )}\n\n {(() => {\n if (!selection || displayMode === 'event') return null\n\n const fixedOrToteDisplay = isMultiItem ? '' : getFixedOrToteDisplay(selection, bettingType)\n\n const betTypeOverride = isMultiItem\n ? item.multiLegBetType\n : getBetTypeOverrideFromInvestment(item.investment)\n const selectionType = `${getMarketTitle(selection, betTypeOverride)} ${fixedOrToteDisplay}`\n\n if (isTote) {\n if (isSingleRaceNoveltyBetType(selection.betType)) {\n const noveltyPlacedMap = createNoveltyMultipleSelectionMap(selection, acceptors)\n return \n }\n\n if (isMultipleRaceSelection) {\n const multipleRaceSelectionMap = createMultipleRaceMultipleSelectionMap(\n selection,\n races,\n acceptors\n )\n return \n }\n\n return (\n \n }\n heading={addAcceptorNameToSingleSelection(selection.selectionString, acceptors)}\n subHeading={selectionType}\n linkInfo={linkInfo}\n />\n )\n }\n\n if (isSameRaceMultiSelection(selection)) {\n const sorted = selection.acceptors\n .map(a => ({\n ...a,\n legName: a.legNumber === 0 ? 'WIN' : `TOP ${a.legNumber + 1}`,\n }))\n .sort(sameRaceMultiSortCallback)\n const result = sorted.map((selectionAcceptor, index) => {\n const number = selectionAcceptor.acceptorNumber.toString()\n return (\n \n
    \n {}{' '}\n {addAcceptorNameToSingleSelection(number, acceptors)}\n
    \n
    {selectionAcceptor.legName}
    \n
    \n )\n })\n return <>{result}\n }\n\n if (isFobMatchedSelection(selection)) {\n const [winBoost, placeBoost] = calculateBoosts(item.selectedSuperPickOffer ?? null)\n const winPrice = isMultiItem\n ? item.multiLegBetType === 'W'\n ? selection.winPrice\n : selection.placePrice\n : item.investment.win.value\n ? new Currency(selection.winPrice).add(winBoost).value\n : undefined\n\n return (\n \n }\n heading={addAcceptorNameToSingleSelection(\n selection.acceptorNumber.toString(),\n acceptors\n )}\n subHeading={selectionType}\n priceWin={\n ((shouldShowPriceInSelectionInfo || (isMultiItem && !hasFatalError)) && winPrice) ||\n null\n }\n pricePlace={\n (shouldShowPriceInSelectionInfo &&\n !!item.investment.place.value &&\n new Currency(selection.placePrice || 0).add(placeBoost).value) ||\n null\n }\n rightAlignedComponent={isMultiItem ? : null}\n linkInfo={linkInfo}\n />\n )\n }\n\n if (isStartingPriceMatchedSelection(selection)) {\n const acceptor = selection.selectedAcceptor\n if (acceptor) {\n return (\n }\n heading={getAcceptorTextForSingleSelection(acceptor) || ''}\n subHeading={selectionType}\n linkInfo={linkInfo}\n />\n )\n }\n }\n\n if (isFobPropositionSelection(selection)) {\n const acceptor = selection.selectedAcceptors && selection.selectedAcceptors[0]\n if (acceptor) {\n const winPrice = isMultiItem\n ? item.multiLegBetType === 'W'\n ? selection.winPrice\n : selection.placePrice\n : item.investment.win.value\n ? selection.winPrice\n : undefined\n\n return (\n }\n heading={getAcceptorTextForSingleSelection(acceptor) || ''}\n subHeading={selectionType}\n priceWin={((shouldShowPriceInSelectionInfo || isMultiItem) && winPrice) || null}\n pricePlace={\n (shouldShowPriceInSelectionInfo &&\n !!item.investment.place.value &&\n selection.placePrice) ||\n null\n }\n rightAlignedComponent={isMultiItem && }\n linkInfo={linkInfo}\n />\n )\n } else {\n return (\n \n )\n }\n }\n\n return null\n })()}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getFixedOddsMarketName(selection: Selection | null, isMultiDisplay = false) {\n const isFobProposition = isFobPropositionSelection(selection)\n // Only display market name to add clarity where starter can appear in multiple markets\n const shouldDisplay =\n isFobProposition &&\n ((isMultiDisplay && selection.marketCode === FixedOddsMarketCodes.Concession) ||\n selection.marketCode === FixedOddsMarketCodes.RunnerVsField ||\n selection.marketCode === FixedOddsMarketCodes.HeadToHead)\n\n const marketName =\n shouldDisplay &&\n (FixedOddsMarketDisplayNames[\n selection.marketCode as keyof typeof FixedOddsMarketDisplayNames\n ] ||\n selection.marketName)\n\n return shouldDisplay ? `${isMultiDisplay ? ' - ' : ''}${marketName}` : ''\n}\n\nfunction getMarketTitle(selection: Selection, betTypeOverride?: BetSlipItem['multiLegBetType']) {\n if ((selection as ToteSelection).betType) return (selection as ToteSelection).betType\n if ((selection as FobPropositionSelection).marketCode) {\n return (selection as FobPropositionSelection).marketName\n }\n if (betTypeOverride === 'W') {\n return 'Win'\n }\n if (betTypeOverride === 'P') {\n return 'Place'\n }\n return 'Win & Place'\n}\n\nfunction getBetTypeOverrideFromInvestment(\n investment: BetSlipItem['investment']\n): BetSlipItem['multiLegBetType'] {\n if (investment.win.value && !investment.place.value) return 'W'\n if (!investment.win.value && investment.place.value) return 'P'\n return undefined\n}\n\nfunction getFixedOrToteDisplay(selection: Selection, bettingType: BettingType) {\n if (isNoveltyBetType((selection as ToteSelection).betType)) {\n return ''\n }\n if (bettingType === 'fixed-odds-racing' && !(selection as FobPropositionSelection).marketCode) {\n return ' - Fixed'\n }\n if (bettingType === 'tote-racing') {\n return ' - Tote'\n }\n return ''\n}\n\nfunction sameRaceMultiSortCallback(\n a: { legNumber: number; acceptorNumber: number },\n b: { legNumber: number; acceptorNumber: number }\n) {\n const diff = a.legNumber - b.legNumber\n if (diff != 0) return diff\n return a.acceptorNumber - b.acceptorNumber\n}\n\nfunction extractSelectedAcceptor(\n selectionNumber: string,\n acceptors: Acceptor[]\n): Acceptor | undefined {\n return acceptors.find(a => `${a.number}` === selectionNumber)\n}\n\nfunction isSingleRaceNoveltyBetType(value: RacingBetType): boolean {\n const noveltyTypes: RacingBetType[] = ['Exacta', 'Quinella', 'Trifecta', 'First 4']\n return noveltyTypes.includes(value)\n}\n\nfunction isMultiRaceBetType(value: RacingBetType): boolean {\n return value === 'Double' || value === 'Quaddie' || value === 'All Up'\n}\n\n// ======\n// Styles\n// ======\n\nconst SingleSameRaceMultiSelectionStyled = styled.div({\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'space-between',\n fontSize: '1.6rem',\n fontWeight: 'bold',\n lineHeight: 'normal',\n padding: '1rem 0 0',\n wordBreak: 'break-all',\n wordWrap: 'normal',\n})\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { useSelector } from 'react-redux'\nimport type { BetSlipItem, FobSportsSelection, SportsDetails } from '@mobi/betslip/types'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport { CountdownBadge } from '@mobi/component-library/Feedback/CountdownBadge'\nimport { StatusBadge } from '@mobi/component-library/Common/StatusBadge/StatusBadge'\nimport { BetCard, type LinkInfo } from '@mobi/betslip/Components/Common/BetCard'\nimport { ShareBetContext } from '@mobi/betslip/Components/Common/ShareMyBet/context'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport { MultiLegCheckbox } from '@mobi/betslip/Components/Multi/Components/MultiLegCheckbox'\nimport type { BetInfoDisplayType } from '../../types'\n\nexport const SportBetInfo: React.FC<{\n item: BetSlipItem\n isMultiItem?: boolean\n displayMode?: BetInfoDisplayType\n}> = ({ item, isMultiItem, displayMode }) => {\n const isShareDisplay = React.useContext(ShareBetContext)\n\n const workflowStatus = useSelector(selectWorkflowStatus)\n\n const { tournamentName, eventName, marketName, advertisedStartTime, marketId, urlPath } =\n item.selectionDetails as SportsDetails\n\n const { propositionName, winPrice } = item.selection as FobSportsSelection\n\n const linkInfo: LinkInfo | undefined =\n !isMultiItem && workflowStatus === 'ready' && urlPath\n ? {\n pathname: urlPath,\n state: marketId ? { market: marketId.toString() } : undefined,\n }\n : undefined\n\n return (\n <>\n {(displayMode === 'full' || displayMode === 'event') && (\n \n {dayjs(advertisedStartTime).format('D MMM | H:mm')}\n \n ) : (\n \n )\n }\n iconComponent={}\n linkInfoSecondary={linkInfo}\n />\n )}\n\n {(displayMode === 'full' || displayMode === 'selection') && (\n \n }\n linkInfo={linkInfo}\n rightAlignedComponent={isMultiItem && }\n />\n )}\n \n )\n}\n","import React from 'react'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport {\n isFobDetails,\n isFobSportsDetails,\n isRaceDetails,\n isFobSportsSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { FobBetInfo, RaceBetInfo, SportBetInfo } from './Components'\nimport type { BetInfoDisplayType } from './types'\n\nexport const BetInfo: React.FC<{\n item: BetSlipItem\n isMultiItem?: boolean\n /** Used primarily for multi grouping @default 'full' */\n displayMode?: BetInfoDisplayType\n}> = ({ item, isMultiItem, displayMode = 'full' }) => {\n if (isFobDetails(item.selectionDetails)) {\n return \n }\n\n if (isRaceDetails(item.selectionDetails)) {\n return \n }\n\n if (isFobSportsDetails(item.selectionDetails) && isFobSportsSelection(item.selection)) {\n return \n }\n\n return null\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nexport const InlineAlert: React.FC<{\n text: string\n type: AlertType\n hasIcon?: boolean\n isCenterAlign?: boolean\n}> = ({ text, type, hasIcon = true, isCenterAlign = false }) => {\n return (\n \n {hasIcon && } {text}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst alertTypeConfig: Record = {\n success: { bgColor: colors.success[600], icon: 'DuocolorCheckCircle' },\n warning: { bgColor: colors.warning[700], icon: 'DuocolorAlertTriangle' },\n error: { bgColor: colors.error[600], icon: 'DuocolorAlertTriangle' },\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx2,\n minHeight: '4rem',\n padding: `${spacing.smx1} ${spacing.sm}`,\n color: colors.white,\n fontWeight: font.weight.semibold,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n})\n\n// =====\n// Types\n// =====\n\ntype AlertType = 'success' | 'error' | 'warning'\ntype IconName = React.ComponentProps['name']\n","import React from 'react'\nimport type { BetSlipWorkflowState } from './Store/Workflow'\nimport type { globalToastEmitter } from '@mobi/component-library/Feedback/Toast/helpers/events'\n\nexport interface BetSlipGlobalContext {\n registeredInvestmentInputsRef: React.MutableRefObject<\n NonNullable[]\n >\n toastEmitter: typeof globalToastEmitter\n}\n\nexport const BetSlipContext = React.createContext(undefined)\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nexport const InlineError: React.FC<{\n text: string\n}> = ({ text }) => {\n return (\n \n {text}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.smx2,\n color: colors.white,\n fontWeight: font.weight.regular,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { toMoney } from '@mobi/utils/money'\nimport { colors, font, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport type { InvestmentType } from '@mobi/betslip/types'\nimport { setActiveInvestment } from '@mobi/betslip/Store/Workflow'\nimport {\n selectIsBettingDisabled,\n selectKeypadActiveValue,\n} from '@mobi/betslip/Store/Workflow/selectors'\nimport { useRegisterInvestmentInput } from './hooks/useRegisterInvestmentInput'\nimport { useCaptureValueOnActiveInput } from './hooks/useCaptureValueOnActiveInput'\nimport { InlineError } from '@mobi/betslip/Components/Common/InlineError'\nimport { MIN_INVESTMENT_VALUE } from '@mobi/betslip/helpers/constants'\nimport { Price } from '../Price'\n\nconst enum LocalConstants {\n StackedDisplayClass = 'js-investment--stacked',\n InputActiveClass = 'js-investment__input--active',\n InputHasValueClass = 'js-investment__input--has-value',\n InputEditableClass = 'js-investment__input--editable',\n InputErrorClass = 'js-investment__input--error',\n InputDisabledClass = 'js-investment__input--disabled',\n}\n\nexport const Investment: React.FC<{\n itemId: string\n investmentType: InvestmentType\n isActive: boolean\n value: number\n isEditable: boolean\n isDisabled?: boolean\n label?: string\n shouldHideLabel?: boolean\n display?: 'inline' | 'stacked'\n price?: number\n isBoostedPrice?: boolean\n}> = ({\n itemId,\n investmentType,\n isActive,\n value,\n isEditable,\n label,\n shouldHideLabel,\n isDisabled = false,\n display = 'inline',\n price,\n isBoostedPrice,\n}) => {\n const dispatch = useDispatch()\n const investmentElementRef = React.useRef(null)\n\n const activeValue = useSelector(selectKeypadActiveValue)\n const isBettingDisabled = useSelector(selectIsBettingDisabled)\n\n useRegisterInvestmentInput({ itemId, investmentType })\n useCaptureValueOnActiveInput({ isActive, value })\n\n React.useEffect(() => {\n if (isActive) investmentElementRef.current?.scrollIntoView({ block: 'center' })\n }, [isActive])\n\n const handleInvestmentClick = () => {\n if (!isActive && isEditable) dispatch(setActiveInvestment({ investmentType, itemId }))\n }\n\n const valueToRender = isActive ? (activeValue ?? value) : value\n const hasValue = valueToRender && Number(valueToRender) > 0\n\n const isDecimalActive = isActive && !!activeValue?.includes('.')\n\n const wrapperClassNames = []\n if (display === 'stacked' && isEditable)\n wrapperClassNames.push(LocalConstants.StackedDisplayClass)\n\n const activeValueNumber = Number(activeValue)\n const isInvalidInvestmentError =\n isActive && activeValueNumber !== 0 && activeValueNumber < MIN_INVESTMENT_VALUE\n\n const inputClassNames = getInputClassNames({\n isActive,\n hasValue: hasValue || isDecimalActive,\n isEditable,\n isError: isInvalidInvestmentError,\n isDisabled: isBettingDisabled || isDisabled,\n })\n\n if (!isEditable && !hasValue) return null\n\n return (\n \n \n {shouldHideLabel ? null : label || investmentType}\n\n {price && }\n \n\n \n {!isActive ? toMoney(value, { decimalPlaces: 2 }) : null}\n\n {isActive &&\n (!hasValue && !isDecimalActive ? (\n toMoney(0, { decimalPlaces: 2 })\n ) : (\n <>\n {`$${valueToRender || 0}`}\n \n \n ))}\n \n\n {isInvalidInvestmentError && (\n
    \n \n
    \n )}\n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst getInputClassNames = ({\n isActive,\n hasValue,\n isEditable,\n isError,\n isDisabled,\n}: {\n isActive: boolean\n hasValue: boolean\n isEditable: boolean\n isDisabled: boolean\n isError: boolean\n}): string[] => {\n const classNames: string[] = []\n\n if (hasValue) classNames.push(LocalConstants.InputHasValueClass)\n if (isEditable) {\n classNames.push(LocalConstants.InputEditableClass)\n } else {\n return classNames\n }\n if (isActive) classNames.push(LocalConstants.InputActiveClass)\n if (isError) classNames.push(LocalConstants.InputErrorClass)\n if (isDisabled) classNames.push(LocalConstants.InputDisabledClass)\n\n return classNames\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: spacing.smx2,\n scrollMargin: spacing.sm,\n minHeight: '2.4rem',\n\n // Label and Price Change Wrapper\n '> span:first-of-type': {\n display: 'inline-flex',\n gap: spacing.smx1,\n\n // Label\n '> span:first-of-type': {\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.black,\n\n ':empty': { display: 'none' },\n },\n\n '> span:nth-of-type(2)': {\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.neutral[900],\n },\n },\n\n // Input Box\n '> span:last-of-type': {\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n width: '100%',\n maxWidth: '12rem',\n minWidth: '12rem',\n\n textAlign: 'end',\n color: colors.neutral[700],\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n\n [`&.${LocalConstants.InputEditableClass}`]: {\n padding: spacing.sm + ' ' + spacing.md,\n border: '1px solid ' + colors.neutral[300],\n borderRadius: radius.md,\n backgroundColor: colors.white,\n boxShadow: shadow.xs,\n touchAction: 'manipulation',\n },\n\n [`&.${LocalConstants.InputActiveClass}`]: {\n outline: `${colors.lavender[50]} solid 0.4rem`,\n borderColor: colors.lavender[200],\n fontWeight: font.weight.medium,\n },\n\n [`&.${LocalConstants.InputHasValueClass}`]: {\n fontWeight: font.weight.medium,\n color: colors.black,\n },\n\n [`&.${LocalConstants.InputErrorClass}`]: {\n outline: `${colors.error[50]} solid 0.4rem`,\n background: colors.error[50],\n borderColor: colors.error[600],\n },\n\n [`&.${LocalConstants.InputDisabledClass}`]: {\n background: colors.surface[100],\n color: colors.neutral[400],\n fontWeight: font.weight.regular,\n border: `1px solid ${colors.neutral[300]}`,\n boxShadow: shadow.xs,\n pointerEvents: 'none',\n cursor: 'not-allowed',\n },\n\n '> span': {\n display: 'inline-block',\n width: '2px',\n height: font.size.md.lineHeight,\n background: colors.lavender[200],\n opacity: 0,\n animation: 'blinking 1s infinite',\n\n '@keyframes blinking': {\n '0%': { opacity: 0 },\n '50%': { opacity: 1 },\n '100%': { opacity: 0 },\n },\n },\n },\n\n '> div': {\n flexBasis: '100%',\n },\n\n [`&.${LocalConstants.StackedDisplayClass}`]: {\n flex: 1,\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'start',\n justifyContent: 'start',\n\n '> span:last-of-type': {\n maxWidth: 'unset',\n\n [`&.${LocalConstants.InputEditableClass}`]: {\n justifyContent: 'flex-start',\n },\n },\n },\n})\n","import React, { useContext } from 'react'\nimport { BetSlipContext } from '@mobi/betslip/context'\nimport type { InvestmentType } from '@mobi/betslip/types'\n\n/** Used for keypad investment input cycling */\nexport const useRegisterInvestmentInput = ({ itemId, investmentType }: Params) => {\n const registeredInvestmentInputsRef = useContext(BetSlipContext)?.registeredInvestmentInputsRef\n\n React.useEffect(() => {\n if (!registeredInvestmentInputsRef?.current) return\n registeredInvestmentInputsRef.current.push({ itemId, investmentType })\n\n return () => {\n registeredInvestmentInputsRef.current = registeredInvestmentInputsRef.current.filter(\n input => !(input.itemId === itemId && input.investmentType === investmentType)\n )\n }\n }, [registeredInvestmentInputsRef, itemId, investmentType])\n}\n\n// =====\n// Types\n// =====\n\ntype Params = { itemId: string; investmentType: InvestmentType }\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Currency } from '@mobi/utils/money'\nimport { setKeypadActiveValue } from '@mobi/betslip/Store/Workflow'\n\nexport const useCaptureValueOnActiveInput = ({ isActive, value }: Params) => {\n const dispatch = useDispatch()\n const hasCapturedValuedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!isActive || hasCapturedValuedRef.current) return\n hasCapturedValuedRef.current = true\n\n const stringValue = new Currency(value).toString()\n dispatch(\n setKeypadActiveValue({\n keypadInput: { value: stringValue, type: 'numeric' },\n isInitValue: true,\n })\n )\n }, [value, dispatch, isActive])\n\n React.useEffect(() => {\n if (!isActive) hasCapturedValuedRef.current = false\n }, [isActive])\n}\n\n// =====\n// Types\n// =====\n\ntype Params = {\n isActive: boolean\n value: number\n}\n","import styled from '@emotion/styled'\nimport { spacing } from '@mobi/component-library/Theme/Common'\n\nexport const InvestmentsWrapperStyled = styled.div<{ isStacked?: boolean }>(\n {\n display: 'flex',\n gap: spacing.smx1,\n },\n ({ isStacked }) => ({\n flexDirection: isStacked ? 'row' : 'column',\n flexWrap: isStacked ? 'wrap' : 'initial',\n })\n)\n","import { Currency } from '@mobi/utils/money'\nimport type { BetSlipItem, BetSpecialOffer, FobSelection } from '../types'\nimport { roundDownDecimal } from './calculator/misc'\n\nexport function calculateProjectedReward(\n specialOffer: BetSpecialOffer,\n stake: BetSlipItem['investment'],\n priceDetails: Pick\n): number {\n if (\n isSuperPickEligible(specialOffer, { win: stake.win.value, place: stake.place.value }) &&\n specialOffer.elements\n ) {\n const nonBoostElement = specialOffer.elements?.find(element => !element.isBoost)\n const win = stake.win.value || 0\n const place = stake.place.value || 0\n\n if (nonBoostElement) {\n const winReward = calculateLegReward(\n nonBoostElement,\n win,\n priceDetails.winPrice,\n specialOffer.legTypeCode,\n 'W'\n )\n const placeReward = calculateLegReward(\n nonBoostElement,\n place,\n priceDetails.placePrice || 0,\n specialOffer.legTypeCode,\n 'P'\n )\n let totalReward = new Currency(winReward).add(placeReward).value\n\n if (nonBoostElement.maxReward && nonBoostElement.maxReward > 0) {\n totalReward = Math.min(nonBoostElement.maxReward, totalReward)\n }\n\n return roundDownDecimal(totalReward)\n }\n }\n\n return 0\n}\n\nexport function isSuperBoost(offer: BetSpecialOffer) {\n const superBoostTitles: string[] = ['boost plus+', 'boostplus+']\n return superBoostTitles.some(title => title.toLowerCase() === offer.title?.trim().toLowerCase())\n}\n\nexport function calculateProjectedBoostReward(\n specialOffer: BetSpecialOffer,\n stake: { win: number; place: number | null }\n): number {\n const win = stake.win || 0\n const place = stake.place || 0\n const legTypeCode = specialOffer.legTypeCode\n\n if (isSuperPickEligible(specialOffer, stake) && specialOffer.elements) {\n const boostElement = specialOffer.elements?.find(element => element.isBoost)\n if (boostElement) {\n const winReward = calculateLegBoostReward(boostElement, win, legTypeCode, 'W')\n const placeReward = calculateLegBoostReward(boostElement, place, legTypeCode, 'P')\n let totalReward = new Currency(winReward).add(placeReward).value\n\n if (boostElement.maxReward && boostElement.maxReward > 0) {\n totalReward = Math.min(boostElement.maxReward, totalReward)\n }\n\n return roundDownDecimal(totalReward)\n }\n }\n\n return 0\n}\n\n// =============\n// Local Helpers\n// =============\n\nexport function isSuperPickEligible(\n specialOffer: BetSpecialOffer,\n stake: { win: number; place: number | null }\n): boolean {\n const win = stake.win || 0\n const place = stake.win || 0\n if (specialOffer.isExclusiveLegType) {\n return (\n (specialOffer.legTypeCode === 'W' && place === 0) ||\n (specialOffer.legTypeCode === 'P' && win === 0) ||\n (specialOffer.legTypeCode === 'WP' && (win === 0 || place === 0))\n )\n } else {\n return (\n (specialOffer.legTypeCode === 'W' && (!!win || place === 0)) ||\n (specialOffer.legTypeCode === 'P' && (win === 0 || !!place)) ||\n specialOffer.legTypeCode === 'WP'\n )\n }\n}\n\nfunction calculateLegReward(\n specialOfferElement: NonNullable[0],\n individualStake: number,\n dollarReturn: number,\n offerLegTypeCode: BetSpecialOffer['legTypeCode'],\n calculationLegTypeCode: BetSpecialOffer['legTypeCode']\n): number {\n if (legTypeIsEligible(offerLegTypeCode, calculationLegTypeCode)) {\n const stake = validateStake(specialOfferElement, individualStake)\n\n const profit = new Currency(dollarReturn).add(-1.0)\n const actualProfitMultiplier = new Currency(profit).multiply(\n specialOfferElement.profitMultiplier || 0\n )\n const combinedMultiplier = new Currency(actualProfitMultiplier).add(\n specialOfferElement.stakeMultiplier || 0\n ).value\n\n return new Currency(stake).multiply(combinedMultiplier).value\n }\n\n return 0\n}\n\nfunction calculateLegBoostReward(\n specialOfferElement: NonNullable[0],\n individualStake: number,\n offerLegTypeCode: BetSpecialOffer['legTypeCode'],\n calculationLegTypeCode: BetSpecialOffer['legTypeCode']\n): number {\n if (legTypeIsEligible(offerLegTypeCode, calculationLegTypeCode)) {\n const stake = validateStake(specialOfferElement, individualStake)\n\n const priceIncreased = specialOfferElement.priceIncrease\n ? calculationLegTypeCode === 'P'\n ? specialOfferElement.priceIncrease.place || 0\n : specialOfferElement.priceIncrease.win || 0\n : 0\n\n return new Currency(stake).multiply(priceIncreased).value\n }\n\n return 0\n}\n\nfunction legTypeIsEligible(\n offerlegTypeCode: BetSpecialOffer['legTypeCode'],\n legTypeCode: BetSpecialOffer['legTypeCode']\n): boolean {\n return offerlegTypeCode === 'WP' || offerlegTypeCode === legTypeCode\n}\n\nfunction validateStake(\n specialOfferElement: NonNullable[0],\n individualStake: number\n): number {\n let stake = individualStake\n const maxStake = specialOfferElement.maxStake || 0\n\n if (maxStake > 0) {\n stake = Math.min(maxStake, stake)\n }\n return stake\n}\n","import { Currency, roundEstimateDown } from '@mobi/utils/money'\nimport type {\n BetSlipItem,\n BetSpecialOffer,\n BettingType,\n FobSelection,\n RacingBetType,\n} from '@mobi/betslip/types'\nimport { isStartingPriceSelection, isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { calculateProjectedBoostReward } from '@mobi/betslip/helpers/superPicks'\n\nexport function calculateEstReturnSingleItem(betslipItem: BetSlipItem) {\n const {\n bettingType,\n isEachWay,\n selection,\n investment: { win, place, bonusBet },\n selectedSuperPickOffer,\n } = betslipItem\n\n if (isStartingPriceSelection(selection)) return 0\n\n const { winPrice, placePrice } = selection as FobSelection\n return calculateProjectedReturn(\n bettingType,\n winPrice,\n placePrice || 0,\n win.value,\n place.value || 0,\n isEachWay,\n bonusBet?.value,\n selectedSuperPickOffer\n )\n}\n\nexport function calculateEstReturnForSingles(items: BetSlipItem[]) {\n const singleItems = items.filter(\n item => item.bettingType === 'fixed-odds-racing' || item.bettingType === 'fixed-odds-sports'\n )\n if (singleItems.length === 0) {\n return null\n }\n return singleItems.reduce(\n (total: number, nextItem: BetSlipItem) => total + calculateEstReturnSingleItem(nextItem),\n 0\n )\n}\n\nexport function calculateEstReturnForSinglesReceipt(items: BetSlipItem[]) {\n if (items.length === 0) {\n return null\n }\n return items.reduce(\n (total: Currency, nextItem: BetSlipItem) =>\n total.add(calculateEstReturnSingleItemReceipt(nextItem)),\n new Currency(0)\n ).value\n}\n\nexport function calculateBetCostSingleItem(betslipItem: BetSlipItem): number {\n const {\n bettingType,\n isEachWay,\n investment: { win, place },\n } = betslipItem\n if (isToteSelection(betslipItem.selection)) {\n return calculateBetCost(\n bettingType,\n win.value,\n place.value,\n isEachWay,\n betslipItem.selection.betType,\n betslipItem.selection.numberOfCombinations\n )\n }\n return calculateBetCost(bettingType, win.value, place.value, isEachWay)\n}\n\nexport function calculateBetCostSingleItemFromReceipt(betslipItem: BetSlipItem): number {\n const { receipt } = betslipItem\n if (!!receipt && 'winInvestment' in receipt && 'placeInvestment' in receipt) {\n return receipt.winInvestment || 0 + receipt.placeInvestment || 0\n }\n\n if (!!receipt && 'betCost' in receipt) {\n return receipt.betCost\n }\n\n return 0\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction calculateBetCost(\n bettingType: BettingType | null,\n winInvestment: number,\n placeInvestment: number,\n isEachWay: boolean,\n betType?: RacingBetType,\n numberOfCombinations = 1\n): number {\n switch (bettingType) {\n case 'fixed-odds-sports': {\n return winInvestment\n }\n case 'fixed-odds-racing': {\n return isEachWay\n ? new Currency(winInvestment).multiply(2).value\n : new Currency(winInvestment).add(placeInvestment).value\n }\n case 'tote-racing': {\n switch (betType) {\n case 'Win & Place': {\n const totalInvestment = new Currency(winInvestment).add(placeInvestment)\n return new Currency(totalInvestment).multiply(numberOfCombinations).value\n }\n case 'Exacta':\n case 'Quinella':\n case 'Trifecta':\n case 'First 4':\n case 'Double':\n case 'Quaddie': {\n return winInvestment\n }\n case 'All Up': {\n return new Currency(winInvestment).multiply(numberOfCombinations).value\n }\n default: {\n return 0\n }\n }\n }\n case 'mystery-quick-pick':\n case 'tote-sports-tipping': {\n return new Currency(winInvestment).multiply(numberOfCombinations).value\n }\n case 'favourite-numbers': {\n return new Currency(0.5).multiply(numberOfCombinations).value\n }\n default:\n return 0\n }\n}\n\nfunction calculateProjectedReturn(\n bettingType: BettingType | null,\n winPrice: number | undefined = 0,\n placePrice: number | undefined = 0,\n winInvestment: number,\n placeInvestment: number,\n isEachWay: boolean,\n bonusBetValue?: number,\n specialOffer?: BetSpecialOffer | null\n): number {\n if (isEachWay) {\n const winEstimate = roundEstimateDown((winPrice ?? 0) * winInvestment, 2)\n const placeEstimate = roundEstimateDown((placePrice ?? 0) * winInvestment, 2)\n const projectedReturn = winEstimate + placeEstimate\n\n return projectedReturn\n }\n\n switch (bettingType) {\n case 'fixed-odds-racing': {\n let boostReward = 0\n if (specialOffer) {\n boostReward = calculateProjectedBoostReward(specialOffer, {\n win: winInvestment,\n place: placeInvestment,\n })\n }\n\n const winEstimate = roundEstimateDown(new Currency(winInvestment).multiply(winPrice).value, 2)\n\n const placeEstimate = roundEstimateDown(\n new Currency(placeInvestment).multiply(placePrice).value,\n 2\n )\n const projectedReturn = winEstimate + placeEstimate + boostReward - (bonusBetValue ?? 0)\n\n return roundEstimateDown(projectedReturn, 2)\n }\n\n case 'fixed-odds-sports': {\n const winEstimate = roundEstimateDown(winInvestment * (winPrice ?? 0), 2)\n const projectedReturn = winEstimate - (bonusBetValue ?? 0)\n\n return roundEstimateDown(projectedReturn, 2)\n }\n\n default: {\n return 0\n }\n }\n}\n\nfunction calculateEstReturnSingleItemReceipt(betsSlipItem: BetSlipItem) {\n const { receipt } = betsSlipItem\n\n if (!receipt || !('projectedWinPayout' in receipt) || !('projectedPlacePayout' in receipt)) {\n return 0\n }\n\n return new Currency(receipt.projectedWinPayout || 0).add(receipt.projectedPlacePayout || 0).value\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, radius } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\n\nconst enum LocalConstants {\n MediumSizeClass = 'js-radio--md',\n TickTypeClass = 'js-radio--tick',\n}\n\nexport const RadioButton: React.FC<\n {\n id: string\n type: 'Tick' | 'Radio'\n isChecked: boolean\n onClick?(): void\n size?: 'sm' | 'md'\n isDisabled?: boolean\n } & ({ text?: string; supportingText?: never } | { text: string; supportingText?: string })\n> = ({\n id,\n type,\n size = 'sm',\n isChecked,\n onClick,\n isDisabled = false,\n // TODO: Extend RadioButton to match Figma text labels\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text,\n // TODO: Extend RadioButton to match Figma text labels\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n supportingText,\n}) => {\n const classNames: string[] = []\n if (type === 'Tick') classNames.push(LocalConstants.TickTypeClass)\n if (size === 'md') classNames.push(LocalConstants.MediumSizeClass)\n\n return (\n \n \n !isDisabled && onClick?.()}\n disabled={isDisabled}\n aria-checked={isChecked}\n role='radio'\n />\n\n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n '--radioSize': '1.6rem',\n '--radioDarkColor': colors.neutral[300],\n '--radioLightColor': colors.white,\n\n position: 'relative',\n display: 'inline-flex',\n\n [`&.${LocalConstants.MediumSizeClass}`]: { '--radioSize': '2rem' },\n\n // Radio Button\n '> span:first-of-type': {\n '> label': {\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: 'var(--radioSize)',\n height: 'var(--radioSize)',\n borderRadius: radius.full,\n touchAction: 'manipulation',\n cursor: 'pointer',\n transition: 'all 150ms linear',\n },\n\n '> input[type=checkbox]': {\n height: 0,\n width: 0,\n visibility: 'hidden',\n appearance: 'none',\n position: 'absolute',\n\n ':checked + label': {\n '--radioDarkColor': colors.lavender[500],\n },\n\n ':disabled + label': {\n '--radioDarkColor': colors.neutral[300],\n '--radioLightColor': colors.neutral[200],\n cursor: 'not-allowed',\n },\n\n ':checked:disabled + label': {\n '--radioDarkColor': colors.neutral[300],\n '--radioLightColor': colors.neutral[200],\n },\n\n '+ label': {\n border: '0.1rem solid var(--radioDarkColor)',\n backgroundColor: 'var(--radioLightColor)',\n },\n },\n },\n\n [`&.${LocalConstants.TickTypeClass}`]: {\n 'input[type=checkbox]:checked + label': {\n backgroundColor: 'var(--radioDarkColor)',\n },\n },\n\n [`&:not(.${LocalConstants.TickTypeClass})`]: {\n 'input[type=checkbox]:checked + label > span': {\n width: 'calc(var(--radioSize) / 2)',\n height: 'calc(var(--radioSize) / 2)',\n borderRadius: radius.full,\n backgroundColor: 'var(--radioDarkColor)',\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { RadioButton } from '@mobi/component-library/Selection&Input/RadioButton'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/Icon'\nimport type { PromoType, PromoTypeClass } from '../types'\nimport { promoTypeColorThemes } from '../constants'\n\nexport const PromoSelection: React.FC<{\n itemId: string\n promoType: PromoType\n title: string\n isSelected: boolean\n hasActiveSelection: boolean\n onClick: () => void\n setSelectionHeight: React.Dispatch>\n isPromoSelectorExpanded: boolean\n renderPosition: number\n descriptionSlots?: React.ReactNode[]\n}> = ({\n itemId,\n promoType,\n title,\n isSelected,\n hasActiveSelection,\n onClick,\n setSelectionHeight,\n isPromoSelectorExpanded,\n renderPosition,\n descriptionSlots,\n}) => {\n const ref = React.useRef(null)\n\n React.useEffect(() => {\n if (!ref.current) return\n\n const selectionHeight = ref.current.getBoundingClientRect().height\n if (isSelected) {\n setSelectionHeight(selectionHeight)\n }\n\n if (!isPromoSelectorExpanded) {\n ref.current.style.transition = hasActiveSelection\n ? 'transform 0.4s ease, opacity 0.2s ease'\n : ''\n ref.current.style.transform = `translateY(${isSelected ? `-${selectionHeight * renderPosition}px` : '0px'})`\n ref.current.style.opacity = !hasActiveSelection || isSelected ? '1' : '0'\n ref.current.style.borderColor = isSelected ? colors.white : ''\n } else {\n ref.current.style.transform = 'translateY(0px)'\n ref.current.style.transition = hasActiveSelection\n ? 'transform 0.4s ease, opacity 0.3s ease 0.2s'\n : ''\n ref.current.style.opacity = '1'\n ref.current.style.borderColor = ''\n }\n }, [isSelected, setSelectionHeight, isPromoSelectorExpanded, renderPosition, hasActiveSelection])\n\n const promoTypeClass: PromoTypeClass = `PromoType-${promoType}`\n\n return (\n \n
    \n \n {promoType === 'SuperPick' && (\n \n )}\n \n
    \n\n
    \n

    {title}

    \n {descriptionSlots?.map((slot, slotNum) => slot && {slot})}\n
    \n\n
    \n \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div(\n {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n borderBottom: '0.1rem solid var(--main-color)',\n fontFamily: font.family.primary,\n backgroundColor: colors.white,\n\n transition: 'transform 0.4s ease',\n transform: 'translateY(0px)',\n opacity: 1,\n\n ':last-of-type': { border: 0 },\n\n // Icon\n '> div:nth-of-type(1)': {\n '> span': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '3.2rem',\n height: '3.2rem',\n borderRadius: radius.full,\n backgroundColor: 'var(--main-color)',\n },\n },\n\n // Title\n '> div:nth-of-type(2)': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx2,\n\n '> h4': {\n margin: 0,\n padding: 0,\n color: colors.black,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.medium,\n },\n\n '> span': {\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n },\n\n // Radio Button\n '> div:nth-of-type(3)': {\n marginLeft: 'auto',\n },\n },\n promoTypeColorThemes\n)\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { hexColors } from '@mobi/settings'\nimport { colors, radius, spacing, font } from '@mobi/component-library/Theme/Common'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Icon as LegacyIcon } from '@mobi/component-library/Common/Icon'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport type { PromoSelectionObject, PromoType, PromoTypeClass } from './types'\nimport { PromoSelection } from './PromoSelection'\nimport { promoTypeColorThemes } from './constants'\n\nconst enum LocalConstants {\n AccordionExpandedClass = 'js-accordion--expanded',\n ChevronClass = 'js-accordion__chevron',\n}\n\nexport const PromoSelector: React.FC<{\n itemId: string\n promoType: PromoType\n selections: PromoSelectionObject[]\n onToggle?: (isExpanded: boolean) => void\n}> = ({ promoType, itemId, selections, onToggle }) => {\n const [buttonId] = React.useState(() => `${promoType}.button`)\n const [regionId] = React.useState(() => `${promoType}.region`)\n\n const [selectionHeight, setSelectionHeight] = React.useState(0)\n\n const hasActiveSelection = selections.some(selection => selection.isSelected)\n\n const { wrapperRef, contentRef, shouldRender, isExpanded, toggleExpanded } = useExpandToggle({\n timeoutMs: 400,\n collapsedHeight: hasActiveSelection ? selectionHeight : 0,\n })\n\n const promoTypeClass: PromoTypeClass = `PromoType-${promoType}`\n const classNames: string[] = [promoTypeClass]\n if (isExpanded) classNames.push(LocalConstants.AccordionExpandedClass)\n\n return (\n \n

    \n {\n onToggle?.(isExpanded)\n toggleExpanded()\n }}\n aria-expanded={isExpanded}\n aria-controls={regionId}\n id={buttonId}\n >\n {promoType === 'SuperPick' && (\n \n SuperPicks\n \n )}\n\n \n \n \n \n

    \n\n {(hasActiveSelection || isExpanded || shouldRender) && (\n
    \n
    \n {selections.map((selection, i) => (\n \n ))}\n
    \n
    \n )}\n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst ContainerStyled = styled.div(\n {\n overflow: 'hidden',\n backgroundColor: colors.white,\n borderRadius: radius.md,\n border: '0.1rem solid var(--main-color)',\n\n // Header\n '> h2': {\n margin: 0,\n\n '> button': {\n boxSizing: 'border-box',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minHeight: '4rem',\n padding: `${spacing.smx2} ${spacing.sm} ${spacing.smx2} ${spacing.md}`,\n background: 'var(--main-color)',\n border: 0,\n\n '&:hover': { cursor: 'pointer' },\n\n // Title Text\n '> span:first-of-type': {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx1,\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n color: colors.black,\n fontWeight: font.weight.medium,\n textAlign: 'left',\n },\n\n // Chevron Icon\n ['> .' + LocalConstants.ChevronClass]: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transform: 'rotate(0deg)',\n transition: 'all 400ms ease',\n color: colors.black,\n },\n },\n },\n\n // Wrapper\n '> div': {\n overflow: 'hidden',\n height: 0,\n transition: 'height 400ms ease, opacity 400ms ease',\n willChange: 'height',\n\n '> div': {\n display: 'grid',\n gridAutoRows: '1fr',\n padding: '0 ' + spacing.sm,\n },\n },\n\n ['&.' + LocalConstants.AccordionExpandedClass]: {\n ['> h2 > button > .' + LocalConstants.ChevronClass]: {\n transform: 'rotate(-180deg)',\n },\n },\n },\n promoTypeColorThemes\n)\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { PromoSelector } from '@mobi/betslip/Components/Common/PromoSelector'\nimport { PromoBanner } from '@mobi/betslip/Components/Common/PromoBanner'\nimport type { BetSlipItem, BetSpecialOffer } from '@mobi/betslip/types'\nimport { calculateProjectedReward } from '@mobi/betslip/helpers/superPicks'\nimport { setSelectedSpecialOffer } from '@mobi/betslip/Store/Bets'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\n\nexport const SuperPicks: React.FC<\n Pick & {\n winPrice: number\n placePrice: number\n }\n> = ({ specialOffers, id, winPrice, placePrice, selectedSuperPickOffer, investment }) => {\n const dispatch = useDispatch()\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n\n if (workflowStatus !== 'ready') {\n return selectedSuperPickOffer ? (\n \n ) : null\n }\n\n const selections: Selections = specialOffers.map(specialOffer => {\n const projectedReward = calculateProjectedReward(specialOffer, investment, {\n winPrice,\n placePrice,\n })\n const selectedSuperPickSeq = selectedSuperPickOffer?.specialSeq\n const isSelected = specialOffer.specialSeq === selectedSuperPickSeq\n const isInsuranceOffer = specialOffer.specialTypeCode === 'WBI'\n const maxReward = getMaxReward(specialOffer)\n\n return {\n isSelected,\n title: specialOffer.title as string,\n onClick: () => dispatch(setSelectedSpecialOffer({ id, specialOffer })),\n descriptionSlots: [\n <>\n {`${isInsuranceOffer ? 'Money Back: ' : ''} $${projectedReward}`}{' '}\n {maxReward}\n ,\n ],\n }\n })\n\n return (\n
    \n \n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst getMaxReward = (specialOffer: BetSpecialOffer): string => {\n if (!specialOffer.elements) return ''\n\n const nonBoostElement = specialOffer.elements.find(\n (element: NonNullable[0]) => !element.isBoost\n )\n if (!nonBoostElement) return ''\n\n return nonBoostElement.maxReward ? ` up to $${nonBoostElement.maxReward}` : ''\n}\n\n// =====\n// Types\n// =====\n\ntype Selections = React.ComponentProps['selections']\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from '@emotion/styled'\nimport { Currency, toMoney } from '@mobi/utils/money'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { Checkbox } from '@mobi/component-library/Common/V2/Inputs/Checkbox'\nimport type { BetSlipItem, FobSelection } from '@mobi/betslip/types'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport {\n isFobSelection,\n isFobSportsSelection,\n isStartingPriceSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { selectActiveInvestment } from '@mobi/betslip/Store/Workflow/selectors'\nimport { toggleIsEachWay } from '@mobi/betslip/Store/Bets'\nimport { SummaryLine } from '@mobi/betslip/Components/Common/SummaryLine'\nimport { Investment, InvestmentsWrapperStyled } from '@mobi/betslip/Components/Common/Investment'\nimport { calculateEstReturnSingleItem } from '@mobi/betslip/helpers/calculator/singles'\nimport { calculateBoosts } from '@mobi/betslip/helpers/calculator/misc'\nimport { SuperPicks } from './Components/SuperPicks'\n\nexport const FobInvestment: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n const dispatch = useDispatch()\n\n const activeInvestment = useAppSelector(selectActiveInvestment)\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n const isLoggedIn = useAppSelector(state => state.betslip.workflow.isHostUserLoggedIn)\n const canShowInducements = useAppSelector(state => state.betslip.workflow.canShowInducements)\n\n const isStartingPrice = isStartingPriceSelection(item.selection)\n\n if (!isFobSelection(item.selection) && !isStartingPrice) return null\n\n const { winPrice, placePrice } = item.selection as FobSelection\n const isItemInputActive = activeInvestment?.itemId === item.id\n\n const [winBoost, placeBoost] = calculateBoosts(item.selectedSuperPickOffer ?? null)\n\n const hasWinPrice = !!winPrice\n const hasPlacePrice = !!placePrice\n\n const isStartingPriceBet = isStartingPriceSelection(item.selection)\n const isSportsSelection = isFobSportsSelection(item.selection)\n const isEditable = !item.receipt && workflowStatus === 'ready'\n const shouldHideWinPlacePrice =\n workflowStatus === 'proposed' || workflowStatus === 'bets-placed' || isStartingPriceBet\n\n const isSuperPickAvailable =\n canShowInducements && isLoggedIn && !!item.specialOffers && item.specialOffers.length > 0\n\n if (isSportsSelection) {\n return (\n \n \n\n \n \n )\n }\n\n return (\n \n {item.isEachWayAvailable ? (\n \n 0}\n value={item.investment.win.value}\n itemId={item.id}\n label={\n item.isEachWayAvailable\n ? item.isEachWay && isEditable\n ? 'Win & Place'\n : 'Win'\n : 'Cost'\n }\n investmentType='Win'\n isEditable={isEditable}\n isDisabled={isBusy}\n // isBonusBet={!!investment.win.isBonusBet}\n isActive={isItemInputActive && activeInvestment.investmentType === 'Win'}\n />\n {!isEditable && item.isEachWay && (\n \n )}\n {isEditable && (\n \n dispatch(toggleIsEachWay({ id: item.id, isEachWay: !item.isEachWay }))\n }\n />\n }\n />\n )}\n \n ) : (\n \n {(hasWinPrice || isStartingPriceBet) && (\n 0}\n key={`${item.id}.Win${winBoost ? '.Boost' : ''}`}\n value={item.investment.win.value}\n itemId={item.id}\n investmentType='Win'\n display='stacked'\n isEditable={isEditable}\n isDisabled={isBusy}\n // isBonusBet={!!investment.win.isBonusBet}\n isActive={isItemInputActive && activeInvestment.investmentType === 'Win'}\n price={\n !shouldHideWinPlacePrice ? new Currency(winPrice).add(winBoost).value : undefined\n }\n isBoostedPrice={winBoost > 0}\n />\n )}\n\n {hasPlacePrice && (\n 0}\n key={`${item.id}.Place${placeBoost ? '.Boost' : ''}`}\n value={item.investment.place.value}\n itemId={item.id}\n investmentType='Place'\n display='stacked'\n isEditable={isEditable}\n isDisabled={isBusy}\n // isBonusBet={!!investment.place.isBonusBet}\n isActive={isItemInputActive && activeInvestment.investmentType === 'Place'}\n price={\n !shouldHideWinPlacePrice\n ? new Currency(placePrice).add(placeBoost).value\n : undefined\n }\n isBoostedPrice={placeBoost > 0}\n />\n )}\n \n )}\n\n {!isStartingPriceSelection(item.selection) && (\n \n )}\n {isSuperPickAvailable && (\n \n )}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { toMoney } from '@mobi/utils/money'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport type { ToteSelection, BetSlipItem, AllUpSelection } from '@mobi/betslip/types'\nimport {\n isToteSelection,\n isNoveltyBetType,\n isAllUpSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport { Investment, InvestmentsWrapperStyled } from '@mobi/betslip/Components/Common/Investment'\nimport { SummaryLine } from '@mobi/betslip/Components/Common/SummaryLine'\nimport { selectActiveInvestment } from '@mobi/betslip/Store/Workflow/selectors'\nimport { spacing, colors, font } from '@mobi/component-library/Theme/Common'\n\nexport const ToteInvestment: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n const { itemId, investmentType } = useAppSelector(selectActiveInvestment) || {}\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n\n const { investment, selection, shouldAllowPlaceInvestment } = item\n const shouldDisplayFlexi = isToteSelection(selection) && isNoveltyBetType(selection.betType)\n\n const isItemInputActive = itemId === item.id\n const isEditable = !item.receipt && workflowStatus === 'ready' && !isBusy\n\n const toteBetType = (item.selection as ToteSelection).betType\n\n let flexi\n if (shouldDisplayFlexi) {\n flexi = selection.numberOfCombinations\n ? Math.floor(((investment.win.value * 100) / selection.numberOfCombinations) * 100) / 100\n : 0\n }\n\n const isAllUp = isAllUpSelection(selection)\n const allUpCombinations = isAllUp ? getNumCombinationsSelected(selection.formulas) : 0\n const allUpTotalCost = isAllUp ? item.investment.win.value * allUpCombinations : 0\n\n return (\n \n \n\n {shouldAllowPlaceInvestment && (\n \n )}\n\n {shouldDisplayFlexi && }\n\n {isAllUp && (\n <>\n \n\n {allUpTotalCost > 0 && }\n \n )}\n\n {shouldDisplayFlexi && !isAllUp && selection.numberOfCombinations && (\n \n \n Combos {selection.numberOfCombinations}\n \n }\n right={\n \n Cost per combo{' '}\n {toMoney(investment.win.value / selection.numberOfCombinations || 0)}\n \n }\n />\n \n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getNumCombinationsSelected(selections: AllUpSelection['formulas']): number {\n return selections\n .filter(f => f.isSelected)\n .reduce((accumulator, currentValue) => accumulator + currentValue.numberOfCombinations, 0)\n}\n\n// ======\n// Styles\n// ======\n\nconst ComboStyled = styled.div({\n flex: '0 0 100%',\n paddingTop: spacing.sm,\n borderTop: '0.5px solid ' + colors.neutral[200],\n})\n\nconst ComboSummaryStyled = styled.span({\n fontWeight: font.weight.regular,\n '> span': {\n fontWeight: font.weight.medium,\n },\n})\n","import React from 'react'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { isFatalErrorType } from '@mobi/betslip/helpers/state'\nimport { isToteSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { FobInvestment, ToteInvestment } from './Components'\n\nexport const BetInvestment: React.FC<{\n item: BetSlipItem\n}> = ({ item }) => {\n if (!item.selection || isFatalErrorType(item.betErrorType)) return null\n\n if (!isToteSelection(item.selection)) {\n return \n }\n\n if (isToteSelection(item.selection)) {\n return \n }\n\n return null\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const BetCardTitle: React.FC<{ title: string; rightComponent?: React.ReactNode }> = ({\n title,\n rightComponent,\n}) => {\n return (\n \n {title}\n\n {rightComponent && {rightComponent}}\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n justifyContent: 'space-between',\n paddingBottom: spacing.smx1,\n borderBottom: `0.5px solid ${colors.neutral[200]}`,\n fontFamily: font.family.primary,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.black,\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Currency } from '@mobi/utils/money'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { SummaryLine } from '@mobi/betslip/Components/Common/SummaryLine'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport type { BetSlipItem, MultiInvestmentKey } from '@mobi/betslip/types'\nimport { MULTI_FORMULA_COMBINATIONS } from '@mobi/betslip/helpers/constants'\nimport { calculateMultiProjectedPay } from '@mobi/betslip/helpers/calculator/multis'\nimport { isValidMultiInvestmentForLegs } from '@mobi/betslip/helpers/state'\n\nexport const InvestmentSummary: React.FC<{ selectedMultiItems: BetSlipItem[] }> = ({\n selectedMultiItems,\n}) => {\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n\n const hasStandardMultiInvestment = !!multiInvestment.value\n const hasComboMultisInvestment = isValidMultiInvestmentForLegs(\n multiInvestment,\n selectedMultiItems.length,\n { shouldCheckOnlyFormulas: true }\n )\n const multiPotentialPayout = hasStandardMultiInvestment\n ? calculateMultiProjectedPay(selectedMultiItems, multiInvestment, true)\n : 0\n const totalProjPay = calculateMultiProjectedPay(selectedMultiItems, multiInvestment)\n\n const legCount = selectedMultiItems.length\n\n return (\n \n {hasStandardMultiInvestment && (\n <>\n \n \n \n )}\n\n {hasComboMultisInvestment && (\n <>\n {hasStandardMultiInvestment &&
    }\n\n

    Combo Multi

    \n\n \n\n {legCount > 2 && (\n \n )}\n\n {legCount > 3 && (\n \n )}\n\n {legCount > 4 && (\n \n )}\n\n {legCount > 5 && (\n \n )}\n\n \n \n )}\n
    \n )\n}\n\n// ===============\n// Local Component\n// ===============\n\nconst ComboSummaryLine: React.FC<{\n comboKey: MultiInvestmentKey\n legCount: number\n label: string\n cost: number\n}> = ({ comboKey, legCount, label, cost }) => {\n const combos = MULTI_FORMULA_COMBINATIONS[comboKey]\n const comboCount = combos[`${legCount}`]\n\n if (!cost) return null\n\n return (\n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n\n '> hr': {\n margin: 0,\n border: 0,\n height: '0.5px',\n background: colors.neutral[200],\n },\n\n '> h4': {\n margin: 0,\n padding: 0,\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n color: colors.black,\n textAlign: 'unset',\n },\n})\n","import React, { useContext } from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { InfoBox } from '@mobi/component-library/Common/V2/Display/InfoBox'\nimport { colors, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { isFatalErrorType } from '@mobi/betslip/helpers/state'\nimport { isFobSportsDetails } from '@mobi/betslip/helpers/typeGuards'\nimport { BetInfo } from '@mobi/betslip/Components/Common/BetInfo/BetInfo'\nimport { toggleIsItemInMulti } from '@mobi/betslip/Store/Bets'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport { ShareBetContext } from '@mobi/betslip/Components/Common/ShareMyBet/context'\n\nconst enum LocalConstants {\n VisuallyDisabledClass = 'js-multi-item__grouped-leg--disabled',\n}\n\nexport const MultiItem: React.FC<{ items: BetSlipItem[] }> = ({ items }) => {\n const dispatch = useDispatch()\n\n const isShareDisplay = useContext(ShareBetContext)\n const workflow = useSelector(selectWorkflowStatus)\n\n const hasMultipleInGroup = items.length > 1\n const hasSelectedInGroup = hasMultipleInGroup && items.some(item => item.isInMulti)\n const hasFatalError = isFatalErrorType(items[0].betErrorType)\n\n const createMultiLegClickHandler: (id: string) => React.MouseEventHandler =\n id => e => {\n e.preventDefault()\n if (isShareDisplay || hasFatalError || workflow !== 'ready') return\n dispatch(toggleIsItemInMulti({ id, isInGroup: hasMultipleInGroup }))\n }\n\n return (\n \n \n\n {hasMultipleInGroup && !hasFatalError && (\n \n Conflict in this {isFobSportsDetails(items[0].selectionDetails) ? 'match' : 'race'}\n \n )}\n\n {hasFatalError && (\n \n This event has closed\n \n )}\n\n
      \n {items.map(item => (\n \n \n \n ))}\n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n padding: spacing.smx1,\n border: `1px solid ${colors.neutral[200]}`,\n borderRadius: radius.lgx1,\n\n '> ul': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n padding: 0,\n margin: 0,\n listStyle: 'none',\n\n '> li': {\n display: 'flex',\n flexDirection: 'column',\n transition: 'opacity 0.1s ease',\n opacity: 1,\n\n '> button': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n background: 0,\n border: 0,\n padding: 0,\n textAlign: 'unset',\n },\n },\n },\n\n [`li.${LocalConstants.VisuallyDisabledClass}`]: {\n opacity: 0.5,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { font, spacing } from '@mobi/component-library/Theme/Common'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { BetCardTitle } from '@mobi/betslip/Components/Common/BetCardTitle'\nimport { calculateMultiReturn } from '@mobi/betslip/helpers/calculator/multis'\nimport {\n getBetsInMulti,\n getMultiLegEventOrRaceKey,\n hasTooFewMultiLegs,\n hasTooManyMultiLegs,\n} from '@mobi/betslip/helpers/state'\nimport { isFobSportsDetails } from '@mobi/betslip/helpers/typeGuards'\nimport {\n MAX_LEGS_IN_RACE_MULTI,\n MAX_LEGS_IN_SPORT_MULTI,\n MIN_LEGS_IN_MULTI,\n} from '@mobi/betslip/helpers/constants'\nimport { InfoBox } from '@mobi/component-library/Common/V2/Display/InfoBox'\nimport { Price } from '../../../Common/Price'\nimport { InvestmentSummary } from './Components/InvestmentSummary'\nimport { MultiItem } from './Components/MultiItem'\n\nexport const MultiItems: React.FC<{\n multiItems: BetSlipItem[]\n hasValidMultiInvestment: boolean\n isEditable: boolean\n children?: React.ReactNode\n}> = ({ multiItems, children, hasValidMultiInvestment, isEditable }) => {\n const multiReturn = calculateMultiReturn(multiItems, { shouldRound: true }) || null\n\n const selectedMultiItems = getBetsInMulti(multiItems)\n const groupedItems = groupByEventOrRace(multiItems, isEditable)\n\n const isBelowMinLegCount = hasTooFewMultiLegs(selectedMultiItems)\n const isExceedingMaxLegCount = hasTooManyMultiLegs(selectedMultiItems)\n\n const isSportsMulti = selectedMultiItems.every(\n item => item.isInMulti && isFobSportsDetails(item.selectionDetails)\n )\n\n const maxLegCount = isExceedingMaxLegCount\n ? isSportsMulti\n ? MAX_LEGS_IN_SPORT_MULTI\n : MAX_LEGS_IN_RACE_MULTI\n : 0\n\n const MultiPriceKey = React.useMemo(\n () => selectedMultiItems.map(({ id, multiLegBetType }) => id + multiLegBetType).join('.'),\n [selectedMultiItems]\n )\n\n return (\n \n : 'N/A'\n }\n />\n\n {(isBelowMinLegCount || isExceedingMaxLegCount) && (\n \n {isBelowMinLegCount &&\n `Minimum of ${MIN_LEGS_IN_MULTI} legs allowed for a Multi bet. Please review your bet.`}\n\n {isExceedingMaxLegCount &&\n `Maximum of ${maxLegCount} legs allowed for a Multi bet. Please review your bet.`}\n \n )}\n\n
    \n {Array.from(groupedItems).map(([groupId, items]) => (\n \n ))}\n
    \n\n {children}\n\n {!isEditable && hasValidMultiInvestment && (\n \n )}\n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction groupByEventOrRace(items: BetSlipItem[], isEditable: boolean): GroupedItems {\n const groups: GroupedItems = new Map()\n\n return items.reduce((map: GroupedItems, item: BetSlipItem) => {\n if (!isEditable && !item.isInMulti) return map\n\n const groupKey = getMultiLegEventOrRaceKey(item.selectionDetails)\n if (!groupKey) return map.set(item.id, [item])\n\n if (map.has(groupKey)) {\n const currentGrouping = map.get(groupKey) as BetSlipItem[]\n map.set(groupKey, [...currentGrouping, item])\n } else {\n map.set(groupKey, [item])\n }\n\n return map\n }, groups)\n}\n\n// ======\n// Styles\n// ======\n\nconst MultiContentStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n fontFamily: font.family.primary,\n\n // Selections\n '> section': {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n})\n\n// =====\n// Types\n// =====\n\ntype GroupedItems = Map\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useMutation } from 'react-query'\nimport { Constants } from '@mobi/settings'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { Tray } from '@mobi/component-library/Overlays/Tray'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { InfoBox } from '@mobi/component-library/Common/V2/Display/InfoBox'\nimport { Toggle } from '@mobi/component-library/Selection&Input/Toggle'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport { BetInfo } from '@mobi/betslip/Components/Common/BetInfo'\nimport { InlineAlert } from '@mobi/betslip/Components/Common/InlineAlert'\nimport { SvgLazy } from '@mobi/component-library/Common/Svg/SvgLazy'\nimport { BetInvestment } from '@mobi/betslip/Components/Singles/Components/SingleItem/Components/BetInvestment'\nimport { MultiItems } from '@mobi/betslip/Components/Multi/Components/MultiItems'\nimport tabtouchHandImage from './assets/tabtouch-hand.png'\nimport { ShareBetContext } from '../../context'\n\nconst enum LocalConstants {\n Title = 'My TABTouch Bet',\n MessageDefault = 'Have you got the touch? Check out this bet on TABtouch.\\n',\n MessagePending = \"Here's hoping I've got the touch! Check out this bet I placed on TABtouch.\\n\",\n}\n\nexport const ShareMyBetTray: React.FC<{\n isOpen: boolean\n headerTitle: string\n onDismiss: () => void\n items: BetSlipItem[]\n isBetPlaced: boolean\n}> = ({ isOpen, headerTitle, onDismiss, items, isBetPlaced }) => {\n const shareMyBetRef = React.useRef(null)\n\n const [shouldShowStakeInfo, setShouldShowStakeInfo] = React.useState(false)\n\n const handleShareClick = async () => {\n if (!shareMyBetRef.current) return\n const shareMyBetEl = shareMyBetRef.current\n const hostHelpers = getHostHelpers()\n const data = {\n title: LocalConstants.Title,\n message: isBetPlaced ? LocalConstants.MessagePending : LocalConstants.MessageDefault,\n }\n await hostHelpers.handleShareBet(items, data, shareMyBetEl)\n }\n\n const { mutate: onClick, isLoading, isError } = useMutation(handleShareClick)\n\n const toggleStakePayoutDetails = () => setShouldShowStakeInfo(curr => !curr)\n\n const isMultiBet = items.length > 1\n\n return (\n \n \n \n
    \n
    \n \n\n \n
    \n\n
    \n {isBetPlaced && (\n \n )}\n\n
    \n {isMultiBet ? (\n <>\n \n \n ) : (\n <>\n \n\n {shouldShowStakeInfo && }\n \n )}\n
    \n
    \n\n

    Gamble responsibly. Call Gambling Help on {Constants.GamblingHelpPhoneNumber}

    \n
    \n\n {isBetPlaced && (\n
    \n Show stake information\n \n
    \n )}\n\n {isError && (\n \n Sorry, we're unable to create share. Please try again later.\n \n )}\n\n onClick()}\n disabled={isLoading}\n >\n Share Bet\n \n
    \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n\n '& > div:nth-of-type(1)': {\n paddingBottom: spacing.big,\n background: colors.studio[600],\n borderRadius: radius.lgx1,\n\n // Branding Header\n '& > div:nth-of-type(1)': {\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n paddingTop: spacing.smx1,\n\n svg: { maxWidth: '11.1rem' },\n\n img: {\n position: 'absolute',\n bottom: '100%',\n right: '50%',\n width: '205px',\n height: '138px',\n transform: 'translate(-3.5rem, 4.3rem)',\n },\n },\n\n // Bet Area\n '& > div:nth-of-type(2)': {\n backgroundColor: colors.white,\n borderRadius: radius.lgx1,\n fontFamily: font.family.primary,\n margin: spacing.md,\n overflow: 'hidden',\n\n article: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n padding: spacing.sm,\n },\n },\n\n p: {\n margin: 0,\n paddingBottom: spacing.md,\n fontFamily: font.family.primary,\n fontSize: font.size.base.fontSize,\n fontWeight: font.weight.regular,\n lineHeight: font.size.base.lineHeight,\n textAlign: 'center',\n color: colors.studio[200],\n },\n },\n\n //Stake Toggle Area\n '& > div:nth-of-type(2)': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n fontWeight: font.weight.medium,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n },\n})\n","import React from 'react'\nimport { BetSlipItem } from '@mobi/betslip/types'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport { ShareButton } from '@mobi/betslip/Components/Common/BetCard/Components/FooterButtons/FooterButtons'\nimport { ShareMyBetTray } from './Components/ShareMyBetTray'\n\nexport const ShareMyBet: React.FC<{ items: BetSlipItem[]; isBetPlaced: boolean }> = ({\n items,\n isBetPlaced,\n}) => {\n const [isShareMyBetTrayOpen, setIsShareMyBetTrayOpen] = React.useState(false)\n\n const hostHelpers = getHostHelpers()\n const isShareBetAllowed = hostHelpers.canShareBet(items)\n\n if (!isShareBetAllowed) {\n return null\n }\n\n const handleOpen = () => setIsShareMyBetTrayOpen(true)\n const handleClose = () => setIsShareMyBetTrayOpen(false)\n\n return (\n <>\n \n\n \n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { isAllUpSelection } from '@mobi/betslip/helpers/typeGuards'\nimport { useDispatch } from 'react-redux'\nimport { toggleAllUpFormula } from '@mobi/betslip/Store/Bets'\n\nexport const AllUpFormula: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n const dispatch = useDispatch()\n\n if (!isAllUpSelection(item.selection)) return null\n\n const handleClick = (formula: number) => {\n dispatch(toggleAllUpFormula({ id: item.id, formula }))\n }\n\n return (\n \n {item.selection.formulas.map(({ formula, isSelected, numberOfCombinations }) => (\n \n ))}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst FORMULA_NAME_MAP = {\n 1: 'Singles',\n 2: 'Doubles',\n 3: 'Trebles',\n 4: 'Pick 4',\n 5: 'Pick 5',\n 6: 'Pick 6',\n}\n\n// ======\n// Styles\n// ======\n\nconst SingleAllUpFormulaContainerStyled = styled.div({\n display: 'flex',\n gap: spacing.smx2,\n paddingTop: spacing.sm,\n overflowX: 'auto',\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n\n '> button': {\n boxSizing: 'border-box',\n minWidth: 'calc(100% / 6)',\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n padding: `${spacing.smx2} ${spacing.sm}`,\n minHeight: '5rem',\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: 1.2,\n fontWeight: font.weight.medium,\n color: colors.neutral[800],\n background: colors.neutral[200],\n border: '0.1rem solid ' + colors.neutral[200],\n borderRadius: radius.sm,\n boxShadow: shadow.xs,\n touchAction: 'manipulation',\n\n '&[data-is-selected=\"true\"]': {\n color: colors.white,\n background: colors.studio[600],\n borderColor: colors.studio[500],\n },\n },\n})\n","import React from 'react'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { InlineAlert } from '@mobi/betslip/Components/Common/InlineAlert'\n\nexport const ItemMessage: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n if (item.receipt) return \n\n if (item.betErrorType === 'Closed')\n return \n\n if (item.betErrorType === 'HandicapChanged')\n return \n\n if (item.betErrorType === 'Unspecified')\n return \n\n return null\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const ReceiptDetail: React.FC> = ({ receipt }) => {\n if (!receipt) return null\n\n return (\n \n Receipt: {receipt.ticketNumber}\n \n )\n}\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minHeight: '2rem',\n paddingTop: spacing.smx1,\n fontWeight: font.weight.regular,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.neutral[800],\n\n '> span:first-of-type': {\n fontWeight: font.weight.medium,\n marginRight: spacing.smx1,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch } from 'react-redux'\nimport { colors } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { removeItemFromBetSlipById } from '@mobi/betslip/Store/Bets'\nimport type { BetSlipItem } from '@mobi/betslip/types'\n\nconst enum LocalConstants {\n AutoRemoveCountdownSeconds = 120,\n AnimationDurationMs = 300,\n}\n\nexport const RemoveButton: React.FC<\n Pick & {\n wrapperRef: React.RefObject\n }\n> = ({ id, betErrorType, wrapperRef }) => {\n const dispatch = useDispatch()\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n const isBettingClosed = betErrorType === 'Closed'\n\n // store the event function so we can remove it from the element\n const removeItemDispatcher = React.useCallback(\n () => dispatch(removeItemFromBetSlipById({ id })),\n [dispatch, id]\n )\n\n const removeItemWithAnimationHandler = React.useCallback(() => {\n const wrapperEl = wrapperRef.current\n if (!wrapperEl) {\n removeItemDispatcher()\n return\n }\n\n wrapperEl.addEventListener('transitionend', removeItemDispatcher)\n\n wrapperEl.style.height = wrapperEl.offsetHeight + 'px'\n wrapperEl.style.overflow = 'hidden'\n wrapperEl.style.transition = `height ${LocalConstants.AnimationDurationMs}ms linear`\n\n // this happens synchro in ff so ensure it hapens in next frame with set timeout and not requestAnimationFrame\n setTimeout(() => {\n wrapperEl.style.height = '0px'\n })\n }, [wrapperRef, removeItemDispatcher])\n\n React.useEffect(() => {\n if (!isBettingClosed) return\n\n const timerId = setTimeout(() => {\n removeItemWithAnimationHandler()\n }, LocalConstants.AutoRemoveCountdownSeconds * 1_000)\n\n return () => clearTimeout(timerId)\n }, [isBettingClosed, removeItemWithAnimationHandler])\n\n // delete listener on unmount\n React.useEffect(() => {\n const wrapperEl = wrapperRef.current\n if (!wrapperEl) {\n return\n }\n\n return () => wrapperEl.removeEventListener('transitionend', removeItemDispatcher)\n }, [wrapperRef, removeItemDispatcher])\n\n return (\n \n \n \n \n\n {isBettingClosed && (\n
    \n \n \n \n
    \n )}\n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n position: 'relative',\n\n '> div': {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n pointerEvents: 'none',\n\n '@keyframes progress': {\n from: { strokeDasharray: '0 100' },\n to: { strokeDasharray: '100 100' },\n },\n\n '> svg': {\n display: 'block',\n maxWidth: '100%',\n\n path: {\n fill: 'none',\n strokeWidth: 2,\n strokeLinecap: 'round',\n animation: `progress ${LocalConstants.AutoRemoveCountdownSeconds}s linear forwards`,\n },\n },\n },\n})\n","import React from 'react'\nimport { BetCard } from '@mobi/betslip/Components/Common/BetCard'\nimport { ShareMyBet } from '@mobi/betslip/Components/Common/ShareMyBet'\nimport { isAllUpSelection } from '@mobi/betslip/helpers/typeGuards'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { BetInfo } from '@mobi/betslip/Components/Common/BetInfo'\nimport { isFatalErrorType } from '@mobi/betslip/helpers/state'\nimport { AllUpFormula, BetInvestment, ItemMessage, ReceiptDetail, RemoveButton } from './Components'\n\nexport const SingleItem: React.FC<{ item: BetSlipItem }> = ({ item }) => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const wrapperRef = React.createRef()\n\n const isAllUp = isAllUpSelection(item.selection)\n const hasFatalError = isFatalErrorType(item.betErrorType) || false\n const isEditable = workflowStatus === 'ready'\n\n return (\n
    \n }>\n \n\n {!hasFatalError && }\n\n {(isEditable || item.receipt) && (\n : undefined}\n leftSection={item.receipt && }\n rightSection={\n <>\n {!hasFatalError && }\n\n {!item.receipt && (\n \n )}\n \n }\n />\n )}\n \n
    \n )\n}\n","import type { BetSlipItem } from '@mobi/betslip/types'\nimport type { BetSlipWorkflowState } from '@mobi/betslip/Store/Workflow'\nimport { hasInvestment, hasErrors, hasBeenPlaced } from '@mobi/betslip/helpers/state'\n\nexport const filterItemsForWorkflow = (\n items: BetSlipItem[],\n workflowStatus: BetSlipWorkflowState['currentStatus']\n): BetSlipItem[] => {\n switch (workflowStatus) {\n case 'proposed': {\n return items.filter(item => hasErrors(item) || hasInvestment(item))\n }\n\n case 'bets-placed': {\n return items.filter(item => hasErrors(item) || hasBeenPlaced(item))\n }\n\n default:\n return items\n }\n}\n","import React, { forwardRef } from 'react'\nimport styled from '@emotion/styled'\nimport { Accordion } from '@mobi/component-library/Common/V2/Accordion'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { SingleItem } from './Components/SingleItem'\nimport { filterItemsForWorkflow } from './helpers/filterItemsForWorkflow'\n\nexport const Singles = forwardRef(({ items }, ref) => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n\n const filteredItems: BetSlipItem[] = filterItemsForWorkflow(items, workflowStatus)\n\n if (!filteredItems || filteredItems.length === 0) return null\n\n return (\n \n \n {filteredItems.map(item => (\n \n ))}\n \n \n )\n})\n\n// ======\n// Styles\n// ======\n\nconst ListStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx1,\n paddingBottom: spacing.smx1,\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nexport const ReceiptNumber: React.FC<{ ticketNumber: number }> = ({ ticketNumber }) => {\n return (\n \n Receipt: {ticketNumber}\n \n )\n}\n\nconst WrapperStyled = styled.span({\n display: 'flex',\n alignItems: 'center',\n gap: spacing.smx2,\n fontSize: font.size.sm.fontSize,\n letterSpacing: font.size.sm.letterSpacing,\n lineHeight: font.size.sm.lineHeight,\n color: colors.neutral[800],\n fontWeight: font.weight.regular,\n\n '> span': {\n fontWeight: font.weight.medium,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Currency } from '@mobi/utils/money'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { selectActiveInvestment } from '@mobi/betslip/Store/Workflow/selectors'\nimport { Investment } from '@mobi/betslip/Components/Common/Investment'\nimport type { InvestmentType, MultiInvestmentKey } from '@mobi/betslip/types'\nimport { MULTI_FORMULA_COMBINATIONS } from '@mobi/betslip/helpers/constants'\n\nexport const ComboInvestment: React.FC<{\n comboFieldType: InvestmentType\n multiInvestmentKey: MultiInvestmentKey\n label: string\n legCount: number\n isDisabled?: boolean\n}> = ({ multiInvestmentKey, comboFieldType, label, legCount, isDisabled }) => {\n const activeInvestment = useAppSelector(selectActiveInvestment)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n\n const value = multiInvestment[multiInvestmentKey]\n const combos = MULTI_FORMULA_COMBINATIONS[multiInvestmentKey]\n const comboCount = combos[`${legCount}`]\n\n return (\n \n
    \n
    \n {label}\n {comboCount} Combos\n
    \n\n \n
    \n\n {value > 0 && (\n
    \n Cost {new Currency(value).multiply(comboCount).format()}\n
    \n )}\n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: spacing.sm,\n borderBottom: `0.1rem solid ${colors.neutral[200]}`,\n fontFamily: font.family.primary,\n\n ':first-of-type': { paddingTop: spacing.sm },\n ':last-of-type': { border: 0, paddingBottom: 0 },\n\n // Label and Input\n '> div:first-of-type': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n '> div:first-of-type': {\n display: 'flex',\n flexDirection: 'column',\n\n '> span:first-of-type': {\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.medium,\n color: colors.black,\n },\n\n '> span:last-of-type': {\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n },\n },\n\n // Cost\n '> div:nth-of-type(2)': {\n display: 'flex',\n justifyContent: 'end',\n paddingTop: spacing.smx2,\n fontSize: font.size.md.fontSize,\n letterSpacing: font.size.md.letterSpacing,\n lineHeight: font.size.md.lineHeight,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Currency } from '@mobi/utils/money'\nimport { spacing } from '@mobi/component-library/Theme/Common'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { isValidMultiInvestmentForLegs } from '@mobi/betslip/helpers/state'\nimport { ComboInvestment } from './Components/ComboInvestment'\nimport { SummaryLine } from '@mobi/betslip/Components/Common/SummaryLine'\nimport {\n calclulateCombinedMultiInvestment,\n calculateMultiProjectedPay,\n} from '@mobi/betslip/helpers/calculator/multis'\n\nexport const ComboMultis: React.FC<{\n isDisabled: boolean\n selectedMultiItems: BetSlipItem[]\n}> = ({ isDisabled, selectedMultiItems }) => {\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n\n const legCount = selectedMultiItems.length\n const shouldEnableSingles = isValidMultiInvestmentForLegs(multiInvestment, legCount)\n const totalProjPay = calculateMultiProjectedPay(selectedMultiItems, multiInvestment)\n\n return (\n \n \n\n {legCount > 2 && (\n \n )}\n\n {legCount > 3 && (\n \n )}\n\n {legCount > 4 && (\n \n )}\n\n {legCount > 5 && (\n \n )}\n\n
    \n \n\n \n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n})\n","import React, { forwardRef } from 'react'\nimport { Accordion } from '@mobi/component-library/Common/V2/Accordion'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { selectActiveInvestment } from '@mobi/betslip/Store/Workflow/selectors'\nimport { calculateMultiProjectedPay } from '@mobi/betslip/helpers/calculator/multis'\nimport {\n getBetsInMulti,\n isSelectionAllowedInMulti,\n isValidMulti,\n isValidMultiInvestmentForLegs,\n} from '@mobi/betslip/helpers/state'\nimport { MAX_LEGS_FOR_MULTI_FORMULA, MIN_LEGS_IN_MULTI } from '@mobi/betslip/helpers/constants'\nimport { Investment, InvestmentsWrapperStyled } from '../Common/Investment'\nimport { ShareMyBet } from '../Common/ShareMyBet'\nimport { InlineAlert } from '../Common/InlineAlert'\nimport { ReceiptNumber } from '../Common/ReceiptNumber'\nimport { BetCard } from '../Common/BetCard'\nimport { ComboMultis } from './Components'\nimport { MultiItems } from './Components/MultiItems'\n\nexport const Multi = forwardRef(({ items }, ref) => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n const activeInvestment = useAppSelector(selectActiveInvestment)\n const receipt = useAppSelector(state => state.betslip.bets.multiReceipt)\n const multiBetError = useAppSelector(state => state.betslip.bets.multiBetError)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n\n const multiItems = items.filter(item => isSelectionAllowedInMulti(item.selection))\n const hasEnoughMultiItems = multiItems.length >= MIN_LEGS_IN_MULTI\n const selectedMultiItems = getBetsInMulti(items)\n\n const isMultiValid = isValidMulti(multiInvestment, multiBetError, selectedMultiItems)\n const hasValidMultiInvestment = isValidMultiInvestmentForLegs(\n multiInvestment,\n selectedMultiItems.length\n )\n\n const isEditable = workflowStatus === 'ready'\n\n if (!hasEnoughMultiItems || (!isEditable && !isMultiValid && !multiBetError)) return null\n\n const isDisabled = !isEditable || isBusy || receipt != null\n\n const hasAllowableMultiCountForCombos =\n selectedMultiItems.length >= MIN_LEGS_IN_MULTI &&\n selectedMultiItems.length <= MAX_LEGS_FOR_MULTI_FORMULA\n\n const shouldRenderMultiCombosInputs =\n isEditable && hasAllowableMultiCountForCombos && !multiInvestment.bonusBetId\n\n return (\n \n }\n >\n \n {isEditable && (\n \n \n\n \n \n )}\n \n\n {workflowStatus !== 'proposed' && (\n : null}\n rightSection={}\n expandableText={shouldRenderMultiCombosInputs ? 'Combo Multis' : undefined}\n expandableContent={\n shouldRenderMultiCombosInputs ? (\n \n ) : null\n }\n />\n )}\n \n \n )\n})\n","import React, { useContext } from 'react'\nimport styled from '@emotion/styled'\nimport type { Dispatch } from '@reduxjs/toolkit'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { colors, font, radius, shadow, spacing } from '@mobi/component-library/Theme/Common'\nimport type { InvestmentType } from '@mobi/betslip/types'\nimport {\n BetSlipWorkflowState,\n setActiveInvestment,\n setKeypadActiveValue,\n type KeypadInput,\n} from '@mobi/betslip/Store/Workflow'\nimport { selectActiveInvestment } from '@mobi/betslip/Store/Workflow/selectors'\nimport { BetSlipContext } from '@mobi/betslip/context'\nimport { usePhysicalKeyboardEntry } from './hooks/usePhysicalKeyboardEntry'\nimport { useSyncActiveValueWithSelection } from './hooks/useSyncActiveValueWithSelection'\nimport { selectPresetDenominations } from '@mobi/betslip/Store/Config/selectors'\n\nexport const Keypad: React.FC = () => {\n const dispatch = useDispatch()\n const activeInvestment = useSelector(selectActiveInvestment)\n const presetDenominations = useSelector(selectPresetDenominations)\n\n const registeredInvestmentInputsRef = useContext(BetSlipContext)?.registeredInvestmentInputsRef\n\n const keypadClickHandler = React.useCallback(\n (keypadInput: KeypadInput) => dispatch(setKeypadActiveValue({ keypadInput })),\n [dispatch]\n )\n\n useSyncActiveValueWithSelection(activeInvestment)\n usePhysicalKeyboardEntry(keypadClickHandler)\n\n const switchInputClickHandler = (direction: 'UP' | 'DOWN') => {\n handleSwitchInputClick({ registeredInvestmentInputsRef, activeInvestment, direction, dispatch })\n }\n\n const denominationKeys: KeypadInputMap[] = presetDenominations.map(value => {\n return {\n label: `+ $${value.user || value.default}`,\n type: 'denomation',\n value: value.user || value.default,\n }\n })\n\n return (\n \n
    \n
    \n switchInputClickHandler('UP')}\n color='tertiary_grey'\n isIconOnlyButton\n size='xs'\n >\n \n \n\n switchInputClickHandler('DOWN')}\n color='tertiary_grey'\n isIconOnlyButton\n size='xs'\n >\n \n \n
    \n\n
    \n dispatch(setActiveInvestment(null))}\n >\n Done\n \n
    \n
    \n\n
    \n {numericKeys.map(key => (\n \n ))}\n\n keypadClickHandler({ type: 'action', value: 'del' })}\n >\n \n \n\n
    \n keypadClickHandler({ type: 'action', value: 'clear' })}\n >\n Clear\n \n\n {denominationKeys &&\n denominationKeys.map(key => (\n \n ))}\n
    \n
    \n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst numericKeys: KeypadInputMap[] = [\n { label: '1', type: 'numeric', value: '1' },\n { label: '2', type: 'numeric', value: '2' },\n { label: '3', type: 'numeric', value: '3' },\n { label: '4', type: 'numeric', value: '4' },\n { label: '5', type: 'numeric', value: '5' },\n { label: '6', type: 'numeric', value: '6' },\n { label: '7', type: 'numeric', value: '7' },\n { label: '8', type: 'numeric', value: '8' },\n { label: '9', type: 'numeric', value: '9' },\n { label: '.', type: 'action', value: '.' },\n { label: '0', type: 'numeric', value: '0' },\n]\n\nfunction handleSwitchInputClick({\n registeredInvestmentInputsRef,\n activeInvestment,\n dispatch,\n direction,\n}: HandleInputClickArgs) {\n if (!registeredInvestmentInputsRef?.current || !activeInvestment) return\n\n const currentIndex = registeredInvestmentInputsRef.current.findIndex(\n ({ itemId, investmentType }) =>\n itemId === activeInvestment.itemId && investmentType === activeInvestment.investmentType\n )\n const newIndex = direction === 'UP' ? currentIndex - 1 : currentIndex + 1\n const registeredLength = registeredInvestmentInputsRef.current.length\n const safeIndex =\n newIndex < 0 ? registeredLength - 1 : newIndex === registeredLength ? 0 : newIndex\n dispatch(setActiveInvestment(registeredInvestmentInputsRef.current[safeIndex]))\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.md,\n\n // Input cycling, reverse stake and done\n '> div:first-of-type': {\n display: 'flex',\n justifyContent: 'space-between',\n\n button: {\n color: colors.white,\n ':focus, :hover': { background: 0 },\n ':active': { backgroundColor: colors.studio[800], color: colors.studio[200], border: 0 },\n },\n },\n\n // Keypad buttons\n '> div:last-of-type': {\n display: 'grid',\n gridTemplateColumns: 'repeat(4, 1fr)',\n gridTemplateRows: 'repeat(4, auto)',\n gap: spacing.smx2,\n padding: spacing.smx2,\n borderRadius: radius.lg,\n backgroundColor: colors.studio[800],\n\n '> div:first-of-type': {\n gridColumnStart: '4',\n gridColumnEnd: '5',\n gridRowStart: '1',\n gridRowEnd: '5',\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.smx2,\n },\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '4.5rem',\n fontSize: font.size.xl.fontSize,\n letterSpacing: font.size.xl.letterSpacing,\n lineHeight: font.size.xl.lineHeight,\n fontWeight: font.weight.medium,\n borderRadius: radius.md,\n border: '0.1rem solid ' + colors.lavender[700],\n backgroundColor: colors.studio[700],\n color: colors.white,\n boxShadow: shadow.sm,\n touchAction: 'manipulation',\n userSelect: 'none',\n\n '&:active': {\n backgroundColor: colors.studio[800],\n borderColor: colors.lavender[800],\n },\n },\n },\n})\n\n// =====\n// Types\n// =====\n\ntype KeypadInputMap = KeypadInput & { label: string }\n\ntype HandleInputClickArgs = {\n registeredInvestmentInputsRef?: React.MutableRefObject<\n { itemId: string; investmentType: InvestmentType }[]\n >\n activeInvestment: BetSlipWorkflowState['activeInvestment']\n dispatch: Dispatch\n direction: 'UP' | 'DOWN'\n}\n","import React from 'react'\nimport { setInvestmentAmount } from '@mobi/betslip/Store/Bets'\nimport { selectKeypadActiveValue } from '@mobi/betslip/Store/Workflow/selectors'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport { BetSlipWorkflowState, setKeypadActiveValue } from '@mobi/betslip/Store/Workflow'\n\nexport const useSyncActiveValueWithSelection = (\n activeInvestment: BetSlipWorkflowState['activeInvestment']\n) => {\n React.useEffect(() => {\n if (!activeInvestment) return\n const hostHelpers = getHostHelpers()\n\n const { itemId, investmentType } = activeInvestment\n\n const unsubscribe = hostHelpers.redux.startListening({\n actionCreator: setKeypadActiveValue,\n effect: (_, listenerApi) => {\n const value = selectKeypadActiveValue(listenerApi.getState())\n if (value === null) return\n listenerApi.dispatch(setInvestmentAmount({ itemId, investmentType, value }))\n },\n })\n\n return () => unsubscribe()\n }, [activeInvestment])\n}\n","import React from 'react'\nimport type { KeypadInput } from '@mobi/betslip/Store/Workflow'\n\nexport const usePhysicalKeyboardEntry = (\n keypadClickHandler: (keypadInput: KeypadInput) => void\n) => {\n React.useEffect(() => {\n if (window.ontouchstart) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (Number.isInteger(+e.key)) {\n keypadClickHandler({ type: 'numeric', value: e.key as `${number}` })\n return\n }\n if (e.key === 'Backspace') {\n keypadClickHandler({ type: 'action', value: 'del' })\n return\n }\n if (e.key === '.') {\n keypadClickHandler({ type: 'action', value: '.' })\n return\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [keypadClickHandler])\n}\n","import { Currency } from '@mobi/utils/money'\nimport type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport type { BetSlipItem, FobBetReceiptResponse, MultiInvestment } from '@mobi/betslip/types'\nimport {\n getBetsInMulti,\n getBetsToPlace,\n hasTooFewMultiLegs,\n hasTooManyMultiLegs,\n isFatalErrorType,\n} from '../state'\nimport { calclulateCombinedMultiInvestment, calculateMultiProjectedPay } from './multis'\nimport {\n calculateBetCostSingleItem,\n calculateBetCostSingleItemFromReceipt,\n calculateEstReturnForSingles,\n calculateEstReturnForSinglesReceipt,\n} from './singles'\n\nexport const calculateTotalStake = (\n betslipItems: BetSlipItem[],\n multiInvestment: MultiInvestment,\n multiError: BetSlipBetsState['multiBetError'] | null\n) => {\n const combinedSingleCost = getBetsToPlace(betslipItems).reduce(\n (total, item) => new Currency(calculateBetCostSingleItem(item)).add(total).value,\n 0\n )\n\n const multiItems = getBetsInMulti(betslipItems)\n if (\n hasTooFewMultiLegs(multiItems) ||\n hasTooManyMultiLegs(multiItems) ||\n multiError?.betErrorType === 'DuplicateBonusBet' ||\n isFatalErrorType(multiError?.betErrorType) ||\n multiError?.betErrorType === 'Unspecified'\n ) {\n return combinedSingleCost\n }\n return combinedSingleCost + calclulateCombinedMultiInvestment(multiItems, multiInvestment)\n}\n\nexport const calculateTotalStakeReceipt = (\n betslipItems: BetSlipItem[],\n multiReceipt: FobBetReceiptResponse | undefined\n) => {\n const combinedSingleCost = betslipItems.reduce(\n (total, item) => new Currency(calculateBetCostSingleItemFromReceipt(item)).add(total).value,\n 0\n )\n\n return new Currency(combinedSingleCost).add(multiReceipt?.amountPaid || 0).value\n}\nexport function calculateEstReturn(\n placeableItems: BetSlipItem[],\n placeableMultis: BetSlipItem[],\n multiInvestment: MultiInvestment\n): number {\n const singlesEstRtn = calculateEstReturnForSingles(placeableItems) || 0\n const multiAndFormulaEstRtn = calculateMultiProjectedPay(placeableMultis, multiInvestment)\n return new Currency(singlesEstRtn).add(multiAndFormulaEstRtn).value\n}\n\nexport function calculateReceiptReturn(\n placeableItems: BetSlipItem[],\n multiReceipt: FobBetReceiptResponse | undefined\n): number {\n const singlesEstRtn = calculateEstReturnForSinglesReceipt(placeableItems) || 0\n return new Currency(singlesEstRtn).add(multiReceipt?.projectedWinPayout || 0).value\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch } from 'react-redux'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { Modal } from '@mobi/component-library/Overlays/Modal'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { clearAllBetSlipItems } from '@mobi/betslip/Store/Bets'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\n\nexport const ClearBetSlipButton: React.FC = () => {\n const dispatch = useDispatch()\n\n const [isModalOpen, setIsModalOpen] = React.useState(false)\n\n const handleClearBetSlip = () => {\n setIsModalOpen(false)\n dispatch(clearAllBetSlipItems())\n const hostHelpers = getHostHelpers()\n hostHelpers.toggleBetSlipDrawer?.(false)\n }\n\n return (\n <>\n setIsModalOpen(true)}\n >\n Clear Bet Slip\n \n\n \n \n
    \n
    \n \n
    \n\n

    Clear Bet Slip?

    \n\n

    Are you sure you want to remove all bets from your Bet Slip?

    \n
    \n\n
    \n setIsModalOpen(false)}\n >\n Cancel\n \n\n \n Clear Bet Slip\n \n
    \n
    \n
    \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n\n '> header': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n marginBottom: spacing.bigx1,\n fontFamily: font.family.primary,\n\n '> div:first-of-type': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '4.8rem',\n height: '4.8rem',\n marginBottom: spacing.md,\n borderRadius: '50%',\n background: colors.warning[50],\n\n '> span': { transform: 'translateY(-0.1rem)' },\n },\n\n '> h2': {\n marginBottom: spacing.smx1,\n\n fontSize: font.size.xl2.fontSize,\n letterSpacing: font.size.xl2.letterSpacing,\n lineHeight: font.size.xl2.lineHeight,\n fontWeight: font.weight.semibold,\n\n color: colors.neutral[900],\n textShadow: 'none',\n textTransform: 'unset',\n },\n\n '> p': {\n margin: 0,\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.regular,\n\n color: colors.neutral[700],\n textWrap: 'balance',\n },\n },\n\n '> div:last-of-type': {\n display: 'flex',\n alignSelf: 'stretch',\n gap: spacing.smx1,\n },\n})\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport styled from '@emotion/styled'\nimport type { Dispatch } from '@reduxjs/toolkit'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { toMoney } from '@mobi/utils/money'\nimport { colors, spacing } from '@mobi/component-library/Theme/Common'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { Icon } from '@mobi/component-library/Common/V2/Icon'\nimport { LoadingSpinner } from '@mobi/component-library/Feedback/LoadingSpinner'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { clearAllReceiptsFromItems, removeItemsWithReceipt } from '@mobi/betslip/Store/Bets'\nimport {\n getBetsInMulti,\n getBetsToPlace,\n isFatalErrorType,\n isValidMulti,\n} from '@mobi/betslip/helpers/state'\nimport { calculateTotalStake } from '@mobi/betslip/helpers/calculator/combined'\nimport { confirmAllBets, proposeAllBets } from '@mobi/betslip/Store/Workflow/asyncActions'\nimport { setWorkflowStatusToReady } from '@mobi/betslip/Store/Workflow'\nimport { ClearBetSlipButton } from './Components/ClearBetSlipButton'\nimport {\n selectIsBettingDisabled,\n selectIsHostUserLoggedIn,\n} from '@mobi/betslip/Store/Workflow/selectors'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\n\nexport const ButtonsSection: React.FC = () => {\n const history = useHistory()\n const dispatch = useDispatch()\n const hostHelpers = getHostHelpers()\n\n const isLoggedIn = useAppSelector(selectIsHostUserLoggedIn)\n\n const items = useSelector(selectBetSlipItems)\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const isBusy = useAppSelector(state => state.betslip.workflow.isBusy)\n const isBettingDisabled = useSelector(selectIsBettingDisabled)\n const accountBalance = useAppSelector(state => state.betslip.workflow.hostAccountBalance)\n\n const multiReceipt = useAppSelector(state => state.betslip.bets.multiReceipt)\n const multiBetError = useAppSelector(state => state.betslip.bets.multiBetError)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n\n const hasProposed = workflowStatus === 'proposed'\n\n const isValidMultiPresent =\n !multiReceipt && isValidMulti(multiInvestment, multiBetError, getBetsInMulti(items))\n\n const singlesLeftToPlace = getBetsToPlace(items).length\n const numberOfBets = singlesLeftToPlace + (isValidMultiPresent ? 1 : 0)\n\n const totalStake = calculateTotalStake(items, multiInvestment, multiBetError)\n const isInsufficientFunds = accountBalance && accountBalance < totalStake\n\n const hasInsufficientFundsError =\n isInsufficientFunds ||\n (hasProposed && !!multiBetError && multiBetError.betErrorType === 'InsufficientFunds') ||\n items.some(x => x.betErrorType === 'InsufficientFunds')\n\n const hasSeriousMultiError =\n !!multiBetError &&\n (isFatalErrorType(multiBetError.betErrorType) ||\n multiBetError.betErrorType === 'BetPlacementFault' ||\n multiBetError.betErrorType === 'DuplicateBonusBet' ||\n multiBetError.betErrorType === 'Unspecified')\n\n const hasMultiLeftToPlace = !multiReceipt && !hasSeriousMultiError && isValidMultiPresent\n const hasBetsLeftToPlace = singlesLeftToPlace > 0 || hasMultiLeftToPlace\n\n const shouldShowClear = items.length > 0 && !hasProposed && !isBusy\n\n const handleDepositClick = () => {\n hostHelpers.toggleBetSlipDrawer?.(false)\n history.push(hostHelpers.hostRoutes.Deposit)\n }\n\n if (!isLoggedIn) {\n return (\n \n {shouldShowClear && }\n\n \n \n )\n }\n\n if (workflowStatus === 'ready') {\n return (\n \n {shouldShowClear && }\n {hasInsufficientFundsError ? (\n \n ) : (\n 0)}\n onClick={() => dispatch(proposeAllBets() || isBettingDisabled)}\n >\n {isBusy ? : <>Bet {toMoney(totalStake)}}\n \n )}\n \n )\n }\n\n if (workflowStatus === 'proposed') {\n return (\n \n dispatch(setWorkflowStatusToReady())}\n >\n \n \n\n {hasInsufficientFundsError ? (\n \n ) : (\n dispatch(confirmAllBets())}\n >\n {isBusy ? (\n \n ) : (\n `Confirm ${numberOfBets} Bet${numberOfBets > 1 ? 's' : ''}`\n )}\n \n )}\n \n )\n }\n\n if (workflowStatus === 'bets-placed') {\n return (\n \n handleReuseSelectionsClick(dispatch)}\n >\n Reuse Selections\n \n\n \n \n )\n }\n\n return null\n}\n\n// =======\n// Helpers\n// =======\n\nfunction handleDoneClick(dispatch: Dispatch) {\n dispatch(removeItemsWithReceipt())\n dispatch(setWorkflowStatusToReady())\n}\n\nfunction handleReuseSelectionsClick(dispatch: Dispatch) {\n dispatch(clearAllReceiptsFromItems())\n dispatch(setWorkflowStatusToReady())\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n gap: spacing.sm,\n paddingTop: spacing.md,\n})\n","import React from 'react'\nimport { ToastContent } from '@mobi/component-library/Feedback/Toast'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { hasBeenPlaced } from '@mobi/betslip/helpers/state'\n\nexport const BetsPlacedSuccessToast: React.FC = () => {\n const items = useAppSelector(state => state.betslip.bets.items)\n const multiReceipt = useAppSelector(state => state.betslip.bets.multiReceipt)\n\n let placedBetsCount = items.filter(hasBeenPlaced).length\n if (multiReceipt) ++placedBetsCount\n\n return (\n \n )\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { InfoBox } from '@mobi/component-library/Common/V2/Display/InfoBox'\nimport { toMoney } from '@mobi/utils/money'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport {\n calculateEstReturn,\n calculateReceiptReturn,\n calculateTotalStake,\n calculateTotalStakeReceipt,\n} from '@mobi/betslip/helpers/calculator/combined'\nimport { getBetsToPlace, getBetsInMulti, isValidMulti } from '@mobi/betslip/helpers/state'\nimport { BetSlipContext } from '@mobi/betslip/context'\nimport { BetsPlacedSuccessToast } from './Components/BetsPlacedSuccessToast'\nimport { filterItemsForWorkflow } from '@mobi/betslip/Components/Singles/helpers/filterItemsForWorkflow'\n\nexport const SummarySection: React.FC<{ isReceiptView: boolean }> = ({ isReceiptView = false }) => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const apiErrorMessage = useAppSelector(state => state.betslip.workflow.apiErrorMessage)\n const _items = useAppSelector(state => state.betslip.bets.items)\n const items = isReceiptView ? filterItemsForWorkflow(_items, workflowStatus) : _items\n const multiBetError = useAppSelector(state => state.betslip.bets.multiBetError)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n const multiReceipt = useAppSelector(state => state.betslip.bets.multiReceipt)\n const accountBalance = useAppSelector(state => state.betslip.workflow.hostAccountBalance)\n\n const toastEmitter = React.useContext(BetSlipContext)?.toastEmitter\n\n React.useEffect(() => {\n if (workflowStatus !== 'bets-placed' || !toastEmitter) return\n toastEmitter.emit('addToast', {\n id: 'success',\n content: ,\n isDismissable: true,\n timeoutMs: Infinity,\n })\n return () => {\n toastEmitter.emit('removeToast', { id: 'success' })\n }\n }, [workflowStatus, toastEmitter])\n\n const totalStake = isReceiptView\n ? calculateTotalStakeReceipt(items, multiReceipt)\n : calculateTotalStake(items, multiInvestment, multiBetError)\n\n const isInsufficientFunds = accountBalance && accountBalance < totalStake\n\n const hasInsufficientFundsError =\n isInsufficientFunds ||\n (!!multiBetError && multiBetError.betErrorType === 'InsufficientFunds') ||\n items.some(x => x.betErrorType === 'InsufficientFunds')\n\n const multiItems = getBetsInMulti(items)\n const placeableItems = getBetsToPlace(items)\n const placeableMultis =\n !multiReceipt && isValidMulti(multiInvestment, null, multiItems) ? multiItems : []\n const estimatedReturn = isReceiptView\n ? calculateReceiptReturn(items, multiReceipt)\n : calculateEstReturn(placeableItems, placeableMultis, multiInvestment)\n\n const displayValue = Number.isFinite(estimatedReturn) && estimatedReturn > 0\n\n return (\n \n {hasInsufficientFundsError && (\n \n Low balance\n
    Please make a deposit or adjust stake to place a bet.
    \n
    \n )}\n\n {!!apiErrorMessage && (\n // TODO: Determine where error messaging will go, refer to logic\n \n \n Error\n
    {apiErrorMessage}
    \n
    \n
    \n )}\n\n
    \n Total Cost\n {toMoney(totalStake)}\n
    \n\n
    \n Potential Returns\n {displayValue ? toMoney(estimatedReturn) : 'N/A'}\n
    \n
    \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n\n '> div': {\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: font.size.lg.fontSize,\n letterSpacing: font.size.lg.letterSpacing,\n lineHeight: font.size.lg.lineHeight,\n fontWeight: font.weight.regular,\n\n '> span': {\n color: colors.white,\n },\n\n '> span:last-of-type': {\n fontWeight: font.weight.semibold,\n },\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useSelector } from 'react-redux'\nimport { useExpandToggle } from '@mobi/utils/hooks/useExpandToggle'\nimport { colors, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport {\n selectActiveInvestment,\n selectWorkflowStatus,\n} from '@mobi/betslip/Store/Workflow/selectors'\nimport { Keypad } from './Components/Keypad'\nimport { ButtonsSection } from './Components/ButtonsSection'\nimport { SummarySection } from './Components/SummarySection'\n\nconst enum LocalConstants {\n ExpandTimingMs = 250,\n ExpandableClass = 'js-footer__expandable',\n VisibleClass = 'js-footer__expandable--visible',\n}\n\nexport const Footer: React.FC = () => {\n const shouldDisplayKeypad = !!useSelector(selectActiveInvestment)\n const workflowStatus = useSelector(selectWorkflowStatus)\n\n const { toggleExpanded: toggleKeypad, ...keypadExpand } = useExpandToggle({\n timeoutMs: LocalConstants.ExpandTimingMs as number,\n })\n const { toggleExpanded: toggleSummary, ...summaryExpand } = useExpandToggle({\n timeoutMs: LocalConstants.ExpandTimingMs as number,\n shouldStartExpanded: true,\n })\n\n React.useEffect(() => {\n toggleKeypad(shouldDisplayKeypad)\n toggleSummary(!shouldDisplayKeypad)\n }, [toggleKeypad, toggleSummary, shouldDisplayKeypad])\n\n React.useEffect(() => {\n if (!summaryExpand.wrapperRef.current) return\n summaryExpand.wrapperRef.current.style.height = 'auto'\n summaryExpand.wrapperRef.current.style.opacity = '1'\n }, [summaryExpand.wrapperRef])\n\n return (\n \n {(keypadExpand.shouldRender || keypadExpand.isExpanded) && (\n \n
    \n \n
    \n
    \n )}\n\n {(summaryExpand.shouldRender || summaryExpand.isExpanded) && (\n \n
    \n \n
    \n
    \n )}\n\n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst WrapperStyled = styled.div({\n padding: spacing.md,\n paddingBottom: spacing.lg,\n borderTopLeftRadius: radius.lgx4,\n borderTopRightRadius: radius.lgx4,\n backgroundColor: colors.lavender[900],\n\n [`.${LocalConstants.ExpandableClass}`]: {\n height: 0,\n overflow: 'hidden',\n transition: `height ${LocalConstants.ExpandTimingMs}ms cubic-bezier(0.44, 0.1, 0.27, 0.98), opacity ${LocalConstants.ExpandTimingMs}ms ease`,\n willChange: 'height',\n opacity: 0,\n },\n\n [`.${LocalConstants.VisibleClass}`]: {\n opacity: 1,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Button, Icon } from '@mobi/component-library/Common/V2'\nimport { Icon as IconLegacy } from '@mobi/component-library/Common/Icon'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\nimport { getHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport { Link } from 'react-router-dom'\n\nexport const EmptyState = () => {\n const hostHelpers = getHostHelpers()\n\n return (\n \n
    \n
    \n \n
    \n

    Your Bet Slip is Empty

    \n Check out today's racing\n
    \n\n
    \n hostHelpers.toggleBetSlipDrawer?.(false)}\n component={RacingButtonLink}\n />\n
    \n
    \n )\n}\n\nconst RacingButtonLink = React.forwardRef<\n HTMLButtonElement,\n { onClick: () => void; navigate: () => void }\n>(({ ...props }, ref) => (\n {\n props.navigate()\n props.onClick()\n }}\n color='secondary_color'\n size='sm'\n >\n \n Today's Racing\n \n))\n\nconst WrapperStyled = styled.div({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n gap: '1.9rem',\n maxWidth: '20.8rem',\n margin: 'auto',\n\n 'div:nth-of-type(1)': {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n '> div': {\n background: colors.surface[200],\n borderRadius: radius.full,\n height: '16.4rem',\n width: '16.4rem',\n },\n\n h1: {\n ...font.size.lg,\n fontWeight: font.weight.semibold,\n fontFamily: font.family.primary,\n },\n\n span: {\n ...font.size.lg,\n fontWeight: font.weight.regular,\n },\n },\n\n 'div:nth-of-type(2)': {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: spacing.smx1,\n },\n})\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\n\nconst enum LocalConstants {\n ActiveIndicatorWidthPx = 1000,\n TabButtonActiveClass = 'js-tabs__tab-button--active',\n TabButtonFillClass = 'js-tabs__tab-button--fill',\n}\n\n/** Main wrapping component to be used with children */\nexport const Tabs: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const scrollContainerRef = React.useRef(null)\n const activeIndicatorRef = React.useRef(null)\n\n React.useEffect(() => {\n if (!activeIndicatorRef.current) return\n activeIndicatorRef.current.style.transition = 'transform 0.2s'\n }, [])\n\n return (\n \n \n
      \n {children}\n\n \n
    \n
    \n
    \n )\n}\n\n/** Requires wrapping parent component */\nexport const TabButton: React.FC<{\n name: string\n isSelected: boolean\n onClick: () => void\n shouldFillSpace?: boolean\n}> = ({ name, isSelected, onClick, shouldFillSpace = true }) => {\n const buttonContainerRef = React.useRef(null)\n const buttonRef = React.useRef(null)\n const { activeIndicatorRef, scrollContainerRef } = React.useContext(RefSharingContext)\n\n const repositionActiveIndicator = React.useCallback(() => {\n if (!buttonRef.current || !activeIndicatorRef?.current) return\n const percentageDiff = buttonRef.current.offsetWidth / LocalConstants.ActiveIndicatorWidthPx\n activeIndicatorRef.current.style.transform = `translateX(${buttonRef.current.offsetLeft}px) scaleX(${percentageDiff})`\n }, [activeIndicatorRef])\n\n // On isSelected, set position of active indicator and scroll tab into view\n React.useEffect(() => {\n if (!isSelected || !buttonContainerRef.current || !scrollContainerRef?.current) return\n repositionActiveIndicator()\n scrollContainerRef.current.scrollLeft =\n buttonContainerRef.current.offsetLeft - buttonContainerRef.current.offsetWidth\n }, [isSelected, repositionActiveIndicator, scrollContainerRef])\n\n // Respond to changes in document size to resposition active indicator\n React.useEffect(() => {\n if (!window.ResizeObserver || !isSelected) return\n const observer = new ResizeObserver(repositionActiveIndicator)\n observer.observe(document.body)\n return () => observer.disconnect()\n }, [isSelected, repositionActiveIndicator])\n\n const classNames = []\n if (isSelected) classNames.push(LocalConstants.TabButtonActiveClass)\n if (shouldFillSpace) classNames.push(LocalConstants.TabButtonFillClass)\n\n return (\n \n \n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nconst RefSharingContext = React.createContext<{\n activeIndicatorRef?: React.RefObject\n scrollContainerRef?: React.RefObject\n}>({})\n\n// ======\n// Styles\n// ======\n\nconst TabsWrapperStyled = styled.div({\n overflow: 'hidden',\n\n '*': { boxSizing: 'border-box' },\n\n '> ul': {\n position: 'relative',\n display: 'flex',\n alignItems: 'stretch',\n borderSpacing: 0,\n width: '100%',\n minHeight: '4.8rem',\n padding: 0,\n margin: 0,\n listStyle: 'none',\n background: colors.white,\n borderBottom: `0.05rem solid ${colors.neutral[200]}`,\n\n overflowX: 'auto',\n overscrollBehavior: 'contain',\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n WebkitTapHighlightColor: 'transparent',\n scrollbarWidth: 'thin',\n scrollbarColor: colors.neutral[300] + ' ' + colors.surface[50],\n\n '@media (pointer: coarse)': {\n scrollbarWidth: 'none',\n '::-webkit-scrollbar': { display: 'none' },\n },\n },\n\n // Active Indicator\n '> ul > span': {\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: LocalConstants.ActiveIndicatorWidthPx + 'px',\n height: '0.2rem',\n backgroundColor: colors.studio[500],\n\n transform: 'scaleX(0)',\n transformOrigin: 'left',\n },\n})\n\nconst TabButtonWrapperStyled = styled.li({\n display: 'flex',\n justifyContent: 'center',\n paddingLeft: spacing.smx1,\n paddingRight: spacing.smx1,\n\n '&:first-of-type': { marginLeft: spacing.smx1 },\n '&:last-of-type': { marginRight: spacing.smx1 },\n\n '> button': {\n flexShrink: 0,\n position: 'relative',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.smx2,\n minHeight: '4.8rem',\n padding: 0,\n whiteSpace: 'nowrap',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n border: 0,\n backgroundColor: 'transparent',\n width: '100%',\n cursor: 'pointer',\n\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n fontWeight: font.weight.regular,\n color: colors.neutral[800],\n\n '> span:first-of-type': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n\n transition: 'color 0.3s',\n },\n\n '> span > span': {\n fontSize: 0,\n lineHeight: 1,\n paddingRight: spacing.smx2,\n },\n\n // Used to prevent font weight jump on active state\n '> span:last-of-type': {\n visibility: 'hidden',\n fontWeight: font.weight.medium,\n },\n },\n\n [`&.${LocalConstants.TabButtonFillClass}`]: {\n flex: 1,\n },\n\n [`&.${LocalConstants.TabButtonActiveClass} > button > span:first-of-type`]: {\n color: colors.black,\n fontWeight: font.weight.medium,\n },\n})\n","import React from 'react'\nimport { TabButton, Tabs } from '@mobi/component-library/Navigation/Tabs'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { hasInvestment, isSelectionAllowedInMulti, isValidMulti } from '@mobi/betslip/helpers/state'\nimport { MIN_LEGS_IN_MULTI } from '@mobi/betslip/helpers/constants'\nimport { selectVisibleBettingSection } from '@mobi/betslip/Store/Workflow/selectors'\nimport { useListenForDesiredBettingSection } from './hooks/useListenForDesiredBettingSection'\nimport { filterItemsForWorkflow } from '../Singles/helpers/filterItemsForWorkflow'\n\nexport const TabButtons: React.FC<{\n containerRef: React.RefObject\n singlesRef: React.RefObject\n multiRef: React.RefObject\n}> = ({ containerRef, singlesRef, multiRef }) => {\n const items = useAppSelector(selectBetSlipItems)\n const visibleBettingSection = useAppSelector(selectVisibleBettingSection)\n\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n const multiBetError = useAppSelector(state => state.betslip.bets.multiBetError)\n\n const multiItems = items.filter(item => isSelectionAllowedInMulti(item.selection))\n const activeMultiItems = multiItems.filter(item => item.isInMulti)\n\n const singleItemsForWorkflow = filterItemsForWorkflow(items, workflowStatus)\n\n const isMultiValid = isValidMulti(multiInvestment, multiBetError, activeMultiItems)\n const isEditable = workflowStatus === 'ready'\n const shouldRenderSinglesTab = isEditable || (!isEditable && items.some(hasInvestment))\n const hasEnoughMultiItems = multiItems.length >= MIN_LEGS_IN_MULTI\n\n const handleTabClick = React.useCallback(\n (elRef: React.RefObject) => {\n const top = getRelativeScrollTopOffset(elRef.current as HTMLDivElement)\n containerRef.current?.scrollTo({ top, behavior: 'smooth' })\n },\n [containerRef]\n )\n\n const scrollToMulti = React.useCallback(() => {\n handleTabClick(multiRef)\n }, [handleTabClick, multiRef])\n\n const scrollToSingles = React.useCallback(() => {\n handleTabClick(singlesRef)\n }, [handleTabClick, singlesRef])\n\n useListenForDesiredBettingSection({ scrollToMulti, scrollToSingles })\n\n return (\n \n {shouldRenderSinglesTab && (\n \n )}\n\n {((isEditable && hasEnoughMultiItems) || (!isEditable && isMultiValid)) && (\n \n )}\n \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getRelativeScrollTopOffset(el: HTMLDivElement): number {\n const parent = el.parentElement as HTMLDivElement\n return el.offsetTop - parent.offsetTop\n}\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useAppSelector } from '@mobi/betslip/Store/hooks'\nimport { setDesiredBettingSection, type BettingSection } from '@mobi/betslip/Store/Workflow'\n\nexport const useListenForDesiredBettingSection = ({\n scrollToSingles,\n scrollToMulti,\n}: ScrollToHandlers) => {\n const dispatch = useDispatch()\n const desiredBettingSection = useAppSelector(\n state => state.betslip.workflow.desiredBettingSection\n )\n\n React.useEffect(() => {\n if (!desiredBettingSection) return\n if (desiredBettingSection === 'Multi') scrollToMulti()\n if (desiredBettingSection === 'Singles') scrollToSingles()\n dispatch(setDesiredBettingSection(null))\n }, [desiredBettingSection, scrollToMulti, scrollToSingles, dispatch])\n}\n\ntype ScrollToHandlers = Record<`scrollTo${BettingSection}`, () => void>\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport type { BetSlipItem } from '../types'\nimport { setVisibleBettingSection } from '../Store/Workflow'\nimport { isSelectionAllowedInMulti } from '../helpers/state'\nimport { MIN_LEGS_IN_MULTI } from '../helpers/constants'\n\nexport const useTabSectionObserver = (\n containerElRef: React.RefObject,\n items: BetSlipItem[]\n) => {\n const dispatch = useDispatch()\n\n const singlesElRef = React.useRef(null)\n const multiElRef = React.useRef(null)\n\n const multiItems = items.filter(item => isSelectionAllowedInMulti(item.selection))\n const hasEnoughMultiItems = multiItems.length >= MIN_LEGS_IN_MULTI\n\n React.useEffect(() => {\n if (!containerElRef.current) return\n\n const ratioMap = new WeakMap()\n\n const observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n ratioMap.set(entry.target as HTMLDivElement, entry.intersectionRatio)\n })\n\n const singlesRatio = getRatioValue(singlesElRef.current, ratioMap)\n const multiRatio = getRatioValue(multiElRef.current, ratioMap)\n\n dispatch(setVisibleBettingSection(singlesRatio > multiRatio ? 'Singles' : 'Multi'))\n },\n { root: containerElRef.current, threshold: [0, 0.25, 0.5, 0.75, 1] }\n )\n\n if (singlesElRef.current) observer.observe(singlesElRef.current)\n if (multiElRef.current) observer.observe(multiElRef.current)\n\n return () => observer.disconnect()\n }, [dispatch, containerElRef, hasEnoughMultiItems])\n\n return { singlesElRef, multiElRef }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getRatioValue(\n el: HTMLDivElement | null,\n ratioMap: WeakMap\n): number {\n return (el && ratioMap.get(el)) ?? 0\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useDispatch } from 'react-redux'\nimport { colors, font, spacing } from '@mobi/component-library/Theme/Common'\nimport { Toasts } from '@mobi/component-library/Feedback/Toast'\nimport { createToastsEventEmitter } from '@mobi/component-library/Feedback/Toast/helpers/events'\nimport { useBodyScrollLock } from '@mobi/utils/hooks/useBodyScrollLock'\nimport { useAppSelector } from './Store/hooks'\nimport { selectBetSlipItems } from './Store/Bets/selectors'\nimport { type BetSlipWorkflowState } from './Store/Workflow'\nimport { TabButtons, Singles, Multi, Footer, EmptyState } from './Components'\nimport { BetSlipContext } from './context'\nimport { refreshAllBets } from './Store/Workflow/asyncActions'\nimport { selectIsHostUserLoggedIn, selectWorkflowStatus } from './Store/Workflow/selectors'\nimport { useTabSectionObserver } from './hooks/useTabSectionObserver'\n\nconst enum LocalConstants {\n ScrollableClass = 'js-betslip__scrollable',\n FooterClass = 'js-betslip__footer',\n}\n\nexport const BetSlip: React.FC = () => {\n const dispatch = useDispatch()\n const [toastEmitter] = React.useState(createToastsEventEmitter)\n\n const registeredInvestmentInputsRef = React.useRef<\n NonNullable[]\n >([])\n\n const items = useAppSelector(selectBetSlipItems)\n const workflowStatus = useAppSelector(selectWorkflowStatus)\n const isLoggedIn = useAppSelector(selectIsHostUserLoggedIn)\n\n const scrollableContinerRef = useBodyScrollLock()\n\n const { singlesElRef, multiElRef } = useTabSectionObserver(scrollableContinerRef, items)\n\n React.useEffect(() => {\n if (workflowStatus === 'ready' && isLoggedIn) dispatch(refreshAllBets())\n }, [dispatch, workflowStatus, isLoggedIn])\n\n if (items.length === 0) {\n return (\n \n \n \n )\n }\n\n return (\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// Styles\n// ======\n\nconst BetslipContainerStyled = styled.div({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.surface[300],\n fontFamily: font.family.primary,\n\n ['.' + LocalConstants.ScrollableClass]: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: spacing.md,\n overflowY: 'auto',\n overflowX: 'hidden',\n scrollBehavior: 'smooth',\n overscrollBehavior: 'contain',\n },\n\n ['.' + LocalConstants.FooterClass]: {\n position: 'relative',\n marginTop: 'auto',\n\n '> div:first-of-type': {\n position: 'absolute',\n top: 0,\n width: '100%',\n },\n },\n})\n","import React, { ReactNode } from 'react'\nimport styled from '@emotion/styled'\nimport { colors, font, radius, spacing } from '@mobi/component-library/Theme/Common'\n\ntype BadgeColor = 'gray' | 'green' | 'yellow' | 'red' | 'blue' | 'purple'\n\n/**\n * A badge that displays some text\n */\nexport const Badge: React.FC<{\n children: ReactNode\n color?: BadgeColor\n}> = ({ color = 'gray', children }) => {children}\n\n// Styles\n\nconst BadgeStyled = styled.span<{ badgeColor: BadgeColor }>(\n {\n boxSizing: 'border-box',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 ' + spacing.smx1,\n\n borderRadius: radius.lgx2,\n fontFamily: font.family.primary,\n fontSize: font.size.md.fontSize,\n lineHeight: font.size.md.lineHeight,\n letterSpacing: font.size.md.letterSpacing,\n fontWeight: font.weight.medium,\n },\n ({ badgeColor }) => {\n switch (badgeColor) {\n case 'gray':\n return {\n color: colors.neutral['900'],\n backgroundColor: colors.neutral['200'],\n }\n case 'green':\n return {\n color: colors.success['600'],\n backgroundColor: colors.success['50'],\n }\n case 'yellow':\n return {\n color: colors.chocolate['600'],\n backgroundColor: colors.warning['50'],\n }\n case 'red':\n return {\n color: colors.error['600'],\n backgroundColor: colors.error['50'],\n }\n case 'blue':\n return {\n color: colors.mariner['600'],\n backgroundColor: colors.mariner['50'],\n }\n case 'purple':\n return {\n backgroundColor: colors.lavender['50'],\n color: colors.lavender['700'],\n }\n }\n }\n)\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { useHistory } from 'react-router-dom'\nimport { BetSlipWorkflowState } from '@mobi/betslip/Store/Workflow'\nimport { selectBetSlipItems } from '@mobi/betslip/Store/Bets/selectors'\nimport { Button, Icon } from '@mobi/component-library/Common/V2'\nimport { Badge } from '@mobi/component-library/Feedback/Badge'\nimport { font, colors, spacing, measurements } from '@mobi/component-library/Theme/Common'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport { filterItemsForWorkflow } from '@mobi/betslip/Components/Singles/helpers/filterItemsForWorkflow'\nimport { getBetsInMulti, isValidMulti } from '@mobi/betslip/helpers/state'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport { useLogon } from '@core/Utils/hooks'\nimport { BalancePill } from '@core/Areas/AppHeader/Components/Balance/BalancePill'\nimport { showLogin } from '@core/Areas/Login/helpers'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { MyBetsButtons } from '@core/Areas/AppHeader/Components/MyBetsButtons'\n\nexport const HeaderPanel: React.FC = () => {\n const dispatch = useAppDispatch()\n const history = useHistory()\n const { isLoggedIn } = useLogon()\n\n const [isLargeWidth] = React.useState(() => window.innerWidth > 480)\n\n const currentworkflowStatus = useAppSelector(selectWorkflowStatus)\n const betSlipItems = useAppSelector(selectBetSlipItems)\n const multiInvestment = useAppSelector(state => state.betslip.bets.multiInvestment)\n const multiBetError = useAppSelector(state => state.betslip.bets.multiBetError)\n\n const selectedMultiItems = getBetsInMulti(betSlipItems)\n const isMultiValid = isValidMulti(multiInvestment, multiBetError, selectedMultiItems)\n\n const filteredItems = filterItemsForWorkflow(betSlipItems, currentworkflowStatus)\n const betslipCount = filteredItems.length + (isMultiValid ? 1 : 0)\n\n const headerText = getWorkflowHeader(currentworkflowStatus)\n\n return (\n \n
    \n

    \n \n {headerText}\n

    \n\n {betslipCount}\n
    \n\n {isLoggedIn ? (\n
    \n
    \n \n
    \n\n \n
    \n ) : (\n
    \n \n\n {\n history.push(AppRoutes.SignUp)\n dispatch(setBetSlipNewIsOpen(false))\n }}\n >\n
    \n Sign up\n
    \n \n
    \n )}\n
    \n )\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction getWorkflowHeader(workflow: Workflow): string {\n if (workflow === 'proposed') return 'Review'\n if (workflow === 'bets-placed') return 'Bet Receipt'\n return 'Bet Slip'\n}\n\n// ======\n// Styles\n// ======\n\nconst HeaderPanelWrapperStyled = styled.header({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n boxSizing: 'border-box',\n padding: spacing.sm,\n paddingLeft: 0,\n height: measurements.mobi.headerHeight,\n fontFamily: font.family.primary,\n\n '> div:nth-of-type(1)': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: spacing.smx1,\n\n // title\n '> h2': {\n display: 'flex',\n alignItems: 'center',\n fontWeight: font.weight.semibold,\n fontSize: font.size.xl2.fontSize,\n lineHeight: font.size.xl2.lineHeight,\n letterSpacing: font.size.xl2.letterSpacing,\n color: colors.black,\n textTransform: 'unset',\n textShadow: 'none',\n\n // chevron\n '> button': {\n alignSelf: 'stretch',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 0,\n padding: 0,\n border: 0,\n background: 'transparent',\n minWidth: '5rem',\n },\n },\n\n // number of bets\n '> span': {\n fontWeight: font.weight.semibold,\n },\n },\n\n // balance and pending\n '> div:nth-of-type(2)': {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'stretch',\n gap: spacing.smx1,\n\n '> button': {\n paddingLeft: spacing.smx1,\n paddingRight: spacing.smx1,\n\n '> div': {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n flexShrink: 0,\n\n '> span:nth-of-type(1)': {\n fontWeight: font.weight.medium,\n fontSize: font.size.lg.fontSize,\n lineHeight: font.size.lg.lineHeight,\n letterSpacing: font.size.lg.letterSpacing,\n },\n\n '> span:nth-of-type(2)': {\n marginTop: '-0.2rem',\n fontWeight: font.weight.regular,\n fontSize: font.size.xs.fontSize,\n lineHeight: font.size.xs.lineHeight,\n },\n },\n },\n },\n})\n\n// Types\n\ntype Workflow = BetSlipWorkflowState['currentStatus']\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { Banner } from '@mobi/component-library/Common/V2/Banner'\nimport { Button } from '@mobi/component-library/Common/V2/Buttons'\nimport { MIN_INVESTMENT_VALUE } from '@mobi/betslip/helpers/constants'\nimport { useAppDispatch } from '@core/Store/hooks'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\n\nexport const LowBalanceStatus: React.FC = () => {\n const dispatch = useAppDispatch()\n const history = useHistory()\n\n const [shouldDisplay, setShouldDisplay] = React.useState(false)\n\n React.useEffect(() => {\n const subscription = userAccountState$\n .skipWhile(state => !state.isLoggedIn)\n .map(state => state.accountBalance)\n .distinctUntilChanged()\n .subscribe(accountBalance => {\n if (accountBalance) {\n setShouldDisplay(accountBalance < MIN_INVESTMENT_VALUE)\n }\n })\n return () => {\n subscription.dispose()\n }\n }, [])\n\n const handleDepositClick = () => {\n dispatch(setBetSlipNewIsOpen(false))\n history.push(AppRoutes.Deposit)\n }\n\n if (!shouldDisplay) return null\n\n return (\n \n Deposit\n \n }\n onClickDismiss={() => {\n setShouldDisplay(false)\n }}\n text='Low Balance.'\n type='warning'\n />\n )\n}\n","import React, { useEffect } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { setBettingDisabledStatus } from '@mobi/betslip/Store/Workflow'\nimport { Banner } from '@mobi/component-library/Common/V2'\nimport { useTakeABreak } from '@core/Areas/Account/TakeABreak/Hooks'\nimport { Constants } from '@mobi/settings'\n\nexport const TakeABreakStatus = () => {\n const dispatch = useDispatch()\n\n const { data: takeABreakStatus } = useTakeABreak()\n\n useEffect(() => {\n dispatch(setBettingDisabledStatus(takeABreakStatus?.inProgress ?? false))\n }, [dispatch, takeABreakStatus])\n\n if (!takeABreakStatus?.inProgress) return null\n\n return (\n \n )\n}\n","import React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useInducementService } from '@core/Utils/hooks/useInducementService'\nimport { setBetSlipCanShowInducementsSync } from '@mobi/betslip/Store/Workflow'\n\nexport const InducementSync: React.FC = () => {\n const dispatch = useDispatch()\n const canShowInducements = useInducementService()\n\n React.useEffect(() => {\n dispatch(setBetSlipCanShowInducementsSync(canShowInducements))\n }, [dispatch, canShowInducements])\n\n return null\n}\n","import type {\n ToteSelection,\n AllUpSelection,\n BetLegType,\n BetSlipItem,\n BetSlipBetRequest,\n RequestType,\n} from '@mobi/betslip/types'\nimport {\n isAllUpSelection,\n isFobMatchedSelection,\n isFobPropositionSelection,\n isFobSelection,\n isFobSportsSelection,\n isStartingPriceMatchedSelection,\n isStartingPriceSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport { getToteProductPlanSequence } from '@mobi/betslip/helpers/betting'\nimport { calculateBoosts, determineLegTypeFromInvestments } from './calculator/misc'\nimport { getBetsInMulti, getBetsToPlace, hasNoFatalErrors, isValidMulti } from './state'\n\nexport function buildBetSlipRequest(type: RequestType, state: BetSlipBetsState): BetSlipBetRequest {\n const fobItems: BetSlipBetRequest['fixedOddsBets'] = []\n const toteItems: BetSlipBetRequest['toteBets'] = []\n const allUpItems: BetSlipBetRequest['allUpBets'] = []\n\n const isRefreshing = type === 'refresh'\n\n const singleItems = isRefreshing\n ? state.items.filter(hasNoFatalErrors)\n : getBetsToPlace(state.items)\n\n singleItems.forEach((item, index) => {\n if (!isToteSelection(item.selection)) {\n const request = buildFixedOddsBet(item, index, isRefreshing)\n fobItems.push(request)\n return\n }\n\n if (isAllUpSelection(item.selection)) {\n allUpItems.push(buildAllUpBet(item, index))\n return\n }\n\n if (isToteSelection(item.selection)) {\n const request = buildToteBet(item, index, isRefreshing)\n toteItems.push(request)\n return\n }\n })\n\n const multiItems = !state.multiReceipt ? getBetsInMulti(state.items) : undefined\n\n if (\n multiItems &&\n multiItems.length > 0 &&\n isValidMulti(state.multiInvestment, state.multiBetError, multiItems)\n ) {\n const request = buildMultiFixedOddsBet(state.multiInvestment, multiItems, singleItems.length)\n fobItems.push(request)\n }\n\n return {\n fixedOddsBets: fobItems,\n toteBets: toteItems,\n allUpBets: allUpItems,\n favouriteNumbersBets: [],\n toteSportsBets: [],\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nfunction buildMultiFixedOddsBet(\n spend: BetSlipBetsState['multiInvestment'],\n multis: BetSlipItem[],\n position: number\n): BetSlipBetRequest['fixedOddsBets'][0] {\n const legs = multis.map(item => buildFixedOddsBetLeg(item, true))\n\n const campaign = { id: -1, rewardType: 'None' }\n\n if (spend.bonusBetId) {\n campaign.id = spend.bonusBetId\n campaign.rewardType = 'BonusBetReward'\n } else if (!spend.isBonusCash) {\n campaign.id = 0\n campaign.rewardType = 'BonusCashReward'\n }\n\n return {\n id: Date.now().toString(),\n investmentWin: spend.value || undefined,\n formulaInvestment: buildValidFormulas(spend, legs.length),\n legs,\n specials: [],\n position,\n selectedCampaign: campaign.id != -1 ? campaign : undefined,\n }\n}\n\nfunction buildValidFormulas(\n multiInvestment: BetSlipBetsState['multiInvestment'],\n numberOfValidLegs: number\n): BetSlipBetRequest['fixedOddsBets'][0]['formulaInvestment'] {\n const formulaInvestment: BetSlipBetRequest['fixedOddsBets'][0]['formulaInvestment'] = {}\n if (numberOfValidLegs >= 2 && multiInvestment.f1) {\n formulaInvestment.singles = multiInvestment.f1\n }\n if (numberOfValidLegs >= 3 && multiInvestment.f2) {\n formulaInvestment.doubles = multiInvestment.f2\n }\n if (numberOfValidLegs >= 4 && multiInvestment.f3) {\n formulaInvestment.trebles = multiInvestment.f3\n }\n if (numberOfValidLegs >= 5 && multiInvestment.f4) {\n formulaInvestment.pick4 = multiInvestment.f4\n }\n if (numberOfValidLegs >= 6 && multiInvestment.f5) {\n formulaInvestment.pick5 = multiInvestment.f5\n }\n return formulaInvestment\n}\n\nfunction buildFixedOddsBet(\n item: BetSlipItem,\n position: number,\n isRefreshing = false\n): BetSlipBetRequest['fixedOddsBets'][0] {\n const [winBoost, placeBoost] = calculateBoosts(item.selectedSuperPickOffer || null)\n return {\n id: item.id || '',\n investmentWin: item.investment.win.value || undefined,\n investmentPlace: item.investment.place.value || undefined,\n legs: [buildFixedOddsBetLeg(item, false)],\n specials:\n item.selectedSuperPickOffer && item.selectedSuperPickOffer.specialSeq && !isRefreshing\n ? [\n {\n specialSeq: item.selectedSuperPickOffer.specialSeq,\n boostPrice: winBoost || placeBoost,\n },\n ]\n : [],\n position,\n selectedCampaign: item.campaign\n ? { id: item.campaign.id, rewardType: item.campaign.rewardType }\n : undefined,\n }\n}\n\nfunction buildFixedOddsBetLeg(\n item: BetSlipItem,\n isMultiBetLeg: boolean\n): BetSlipBetRequest['fixedOddsBets'][0]['legs'][0] {\n let handicap = 0\n let priceWin\n let pricePlace\n let sportDetails\n let raceDetails\n let externalBetId\n\n const isStartingPrice = isStartingPriceSelection(item.selection)\n\n if (isFobPropositionSelection(item.selection)) {\n handicap = item.selection.handicap || 0\n sportDetails = {\n propositionSeq: item.selection.propositionSeq,\n variantSeq: item.selection.variantSeq,\n }\n }\n\n if (isFobMatchedSelection(item.selection) || isStartingPriceMatchedSelection(item.selection)) {\n raceDetails = createRacingDetails(\n item.selection.fixtureDate,\n item.selection.fixtureId,\n item.selection.raceNumber,\n item.selection.acceptorNumber\n )\n }\n\n let legType: BetLegType | undefined = undefined\n\n if (isFobSportsSelection(item.selection)) {\n externalBetId = item.selection.externalBetId\n sportDetails = {}\n } else {\n if (isStartingPrice) {\n legType = 'SP'\n } else if (isMultiBetLeg) {\n legType = item.multiLegBetType || 'W'\n } else if (item.isEachWayAvailable) {\n item.isEachWay ? (legType = 'EW') : (legType = 'W')\n } else {\n legType = determineLegTypeFromInvestments(\n item.investment.win.value,\n item.investment.place.value\n )\n }\n }\n\n if (isFobSelection(item.selection)) {\n priceWin = item.selection.winPrice || undefined\n pricePlace = item.selection.placePrice || undefined\n } else if (isStartingPrice) {\n priceWin = null\n pricePlace = null\n }\n\n return {\n id: item.id || '',\n legType,\n handicap,\n priceWin,\n pricePlace,\n externalBetId,\n sportDetails,\n raceDetails,\n }\n}\n\nfunction buildToteBet(\n item: BetSlipItem,\n position: number,\n isRefreshing = false\n): BetSlipBetRequest['toteBets'][0] {\n const selection = item.selection as ToteSelection\n const hasWinInvestment = !!item.investment.win.value && item.investment.win.value > 0\n const hasPlaceInvestment = !!item.investment.place.value && item.investment.place.value > 0\n const productPlanSeq = getToteProductPlanSequence(\n selection.betType,\n isRefreshing,\n selection.isRovingBanker,\n hasWinInvestment,\n hasPlaceInvestment\n )\n return {\n betTransactionId: item.id || '',\n productPlanSeq,\n fixtureId: selection.fixtureId,\n fixtureDate: selection.fixtureDate,\n raceNumber: selection.raceNumber,\n selections: selection.selectionString,\n investmentWin: item.investment.win.value === 0 ? undefined : item.investment.win.value,\n investmentPlace: item.investment.place.value === 0 ? undefined : item.investment.place.value,\n position,\n }\n}\n\nfunction buildAllUpBet(item: BetSlipItem, position: number): BetSlipBetRequest['allUpBets'][0] {\n const selection = item.selection as AllUpSelection\n const productPlanSeq = getToteProductPlanSequence(selection.betType, false)\n const raceDetails: AllUpSelection['details'] = []\n selection.details.forEach(selectionDetail => {\n if (selectionDetail.poolType === 'EW') {\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: 'W',\n betSelections: selectionDetail.betSelections,\n })\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: 'P',\n betSelections: selectionDetail.betSelections,\n })\n } else {\n raceDetails.push({\n raceNum: selectionDetail.raceNum,\n poolType: selectionDetail.poolType,\n betSelections: selectionDetail.betSelections,\n })\n }\n })\n return {\n betTransactionId: item.id || '',\n productPlanSeq,\n fixtureId: selection.fixtureId,\n fixtureDate: selection.fixtureDate,\n raceDetails,\n formulas: selection.formulas.filter(formula => formula.isSelected),\n investment: item.investment.win.value,\n position,\n }\n}\n\nconst createRacingDetails = (\n fixtureDate: string,\n fixtureId: string,\n raceNumber: number,\n starterNumber?: number\n): RaceDetails => ({ fixtureDate, fixtureId, raceNumber, starterNumber })\n\n// =====\n// Types\n// =====\n\ninterface RaceDetails {\n fixtureDate?: string\n fixtureId: string\n raceNumber: number\n starterNumber?: number\n propositionCode?: string\n}\n","import type { BetSlipBetsState } from '@mobi/betslip/Store/Bets'\nimport type { RequestType } from '@mobi/betslip/types'\nimport { buildBetSlipRequest } from '@mobi/betslip/helpers/requestBuilder'\nimport {\n betslipPropose as propose,\n betslipCommit as commit,\n betslipRefresh as refresh,\n} from '@core/Data/betting'\n\nexport async function postAllBetsToServer(queryType: RequestType, state: BetSlipBetsState) {\n const request = buildBetSlipRequest(queryType, state)\n\n if (queryType === 'propose') {\n const response = await propose(request)\n return response\n }\n\n if (queryType === 'confirm') {\n const response = await commit(request)\n return response\n }\n\n const response = await refresh(request)\n return response\n}\n","import { PlanSeq } from '@mobi/api-types'\nimport type { BetSlipItem } from '@mobi/betslip/types'\nimport { getToteProductPlanSequence } from '@mobi/betslip/helpers/betting'\nimport {\n isFobSelection,\n isFobSportsSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\n\nexport const getPlanSequence = (item: BetSlipItem) => {\n const planSeq: number = PlanSeq.Unknown\n\n if (!item) {\n return planSeq\n }\n\n if (isToteSelection(item.selection)) {\n return getToteProductPlanSequence(item.selection.betType, true, item.selection.isRovingBanker)\n }\n\n if (isFobSportsSelection(item.selection)) {\n return PlanSeq.FOBSports\n }\n\n if (isFobSelection(item.selection)) {\n return PlanSeq.FOBRacing\n }\n\n return planSeq\n}\n","import type { BetSlipItem, FobPropositionSelection } from '@mobi/betslip/types'\nimport {\n isFobDetails,\n isFobMatchedSelection,\n isFobPropositionSelection,\n isFobSportsDetails,\n isFobSportsSelection,\n isRaceDetails,\n isSameRaceMultiSelection,\n isToteSelection,\n} from '@mobi/betslip/helpers/typeGuards'\nimport type {\n BetDetails,\n FOOBetDetails,\n LoadBetDetails,\n SportDetails,\n} from '@core/Utils/betting/loadBet/types'\nimport { getPlanSequence } from './getPlanSequence'\n\nexport const createLoadBetDetails = (item: BetSlipItem): LoadBetDetails | null => {\n const planSeq = getPlanSequence(item)\n\n if (isFobPropositionSelection(item.selection) && isFobDetails(item.selectionDetails)) {\n const fooBetDetails: FOOBetDetails = {\n competitionName: item.selectionDetails.competitionName as string,\n competitionSeq: item.selectionDetails.event.toString(),\n propositionSeq: +item.selection.propositionSeq,\n betType: item.selectionDetails.marketName,\n sportName: item.selectionDetails.sportName as string,\n eventStartDateTime: item.selectionDetails.eventStartTime.toString(),\n }\n return fooBetDetails\n }\n\n if (isFobSportsSelection(item.selection) && isFobSportsDetails(item.selectionDetails)) {\n const sportDetails: SportDetails = {\n eventId: item.selectionDetails.eventId,\n externalBetId: item.selection.externalBetId,\n tournamentId: Number(item.selectionDetails.tournamentId),\n marketId: item.selectionDetails.marketId,\n sportId: item.selectionDetails.sportId,\n }\n return sportDetails\n }\n\n if (isToteSelection(item.selection) && isRaceDetails(item.selectionDetails)) {\n const selectionString = item.selection.selectionString\n const numberOfCombinations = item.selection.numberOfCombinations\n\n const toteBetDetails: BetDetails = {\n fixtureId: item.selectionDetails.races[0].meetingId,\n fixtureDate: new Date(item.selectionDetails.races[0].meetingDate),\n races:\n item.selectionDetails.races.length === 1\n ? [item.selectionDetails.races[0].raceNumber]\n : item.selectionDetails.races.map(race => race.raceNumber),\n selectionString,\n planSeq,\n numberOfCombinations,\n betType: item.selection.betType,\n }\n return toteBetDetails\n }\n\n // TODO: Add Same Race Multi\n if (isSameRaceMultiSelection(item.selection)) {\n return null\n }\n\n if (isFobMatchedSelection(item.selection) && isRaceDetails(item.selectionDetails)) {\n const selectionString = item.selection.acceptorNumber.toString()\n const numberOfCombinations = 1\n const betType = `${(item.selection as FobPropositionSelection).marketCode || 'Win & Place'} - Fixed`\n\n const fixedMatchedBetDetails: BetDetails = {\n fixtureId: item.selectionDetails.races[0].meetingId,\n fixtureDate: new Date(item.selectionDetails.races[0].meetingDate),\n races: [item.selectionDetails.races[0].raceNumber],\n selectionString,\n planSeq,\n numberOfCombinations,\n betType,\n }\n return fixedMatchedBetDetails\n }\n\n return null\n}\n","import type { BetSlipItem } from '@mobi/betslip/types/betslip'\nimport { isReactNativeApp, sendToNative } from '@mobi/web-native-comms/web'\nimport { createImageUrlFromHtml } from '@core/Areas/AccountActivity/Components/Ticket/Components/ShareBet/Components/SharePreview/helpers/createImageUrlFromHtml'\nimport { postShareBetDataAndGenerateLink } from '@core/Services/ShareIncoming/ShareBet/helpers/api'\nimport { createLoadBetDetails } from './helpers/createLoadBetDetails'\n\nexport const handleShareBet = async (\n items: BetSlipItem[],\n data: { title: string; message: string },\n shareMyBetEl: HTMLDivElement | null\n): Promise => {\n if (!shareMyBetEl) throw Error('No HTML element to generate preview')\n\n if (isReactNativeApp) {\n const [{ link }, base64Image] = await Promise.all([\n createShareBetAndPostWithBetSlip(items),\n createImageUrlFromHtml(shareMyBetEl),\n ])\n\n return sendToNative('SHARE_SHEET_REQUEST', {\n url: base64Image,\n title: data.title,\n subject: data.title,\n message: data.message + link + ' 🤘',\n })\n } else {\n const { link } = await createShareBetAndPostWithBetSlip(items)\n\n const navigatorShareData: ShareData = {\n title: data.title,\n text: data.message + link + ' 🤘',\n }\n\n if (navigator.canShare?.(navigatorShareData)) {\n return await navigator.share(navigatorShareData)\n }\n\n throw Error('No capability to share')\n }\n}\n\n// =============\n// Local Helpers\n// =============\n\nasync function createShareBetAndPostWithBetSlip(items: BetSlipItem[]) {\n const betsToShare = items.flatMap(item => createLoadBetDetails(item) || [])\n\n if (betsToShare.length === 0) throw Error('Unable to create bet to share')\n\n const response = await postShareBetDataAndGenerateLink(betsToShare)\n\n if (!response.link) throw Error('ShareBet: Error ' + response.message)\n\n return response\n}\n","let isBrowserShareSupported: boolean | null = null\n\nexport const doesBrowserSupportShare = (): boolean => {\n if (isBrowserShareSupported !== null) {\n return isBrowserShareSupported\n }\n\n if (!navigator.canShare) {\n return false\n }\n\n isBrowserShareSupported = !!navigator.canShare({\n title: 'sample',\n text: 'testing if the text param is accepted',\n })\n\n return isBrowserShareSupported\n}\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { Drawer } from '@mobi/component-library/Overlays/Drawer'\nimport { BetSlip } from '@mobi/betslip/App'\nimport { setHostHelpers } from '@mobi/betslip/helpers/hostHelpers'\nimport { setWorkflowStatusToReady } from '@mobi/betslip/Store/Workflow'\nimport { selectWorkflowStatus } from '@mobi/betslip/Store/Workflow/selectors'\nimport { removeItemsWithFatalError, removeItemsWithReceipt } from '@mobi/betslip/Store/Bets'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { startListening } from '@core/Store/listenerMiddleware'\nimport { useAppDispatch, useAppSelector } from '@core/Store/hooks'\nimport { setBetSlipNewIsOpen } from '../AppHeader/Store'\nimport { HeaderPanel } from './Components/HeaderPanel'\nimport { LowBalanceStatus } from './Components/LowBalanceStatus'\nimport { TakeABreakStatus } from './Components/TakeABreakStatus'\nimport { InducementSync } from './Components/InducementSync'\nimport {\n postAllBetsToServer,\n handleShareBet,\n showLogin,\n canShareBet,\n toggleBetSlipDrawer,\n} from './helpers'\nimport {\n useRealtimeFobPriceChanges,\n useRefreshBalanceOnBetsPlaced,\n useAccountBalanceSync,\n useBetSlipAnalytics,\n useHapticFeedbackOnBetsSuccess,\n useIsNewBetSlipFeatureActive,\n useToastOnClearBetSlipSuccess,\n} from './hooks'\n\nsetHostHelpers({\n postAllBetsToServer,\n toggleBetSlipDrawer,\n handleShareBet,\n canShareBet,\n redux: { startListening },\n hostRoutes: {\n Meetings: AppRoutes.Meetings,\n Sports: AppRoutes.Sports,\n Deposit: AppRoutes.Deposit,\n },\n showLogin,\n})\n\nexport const BetSlipNew: React.FC = () => {\n const isNewBetSlipDesignActive = useIsNewBetSlipFeatureActive()\n\n if (!isNewBetSlipDesignActive) return null\n\n return \n}\n\n// Local Component w/ Main Content\n\nconst BetSlipComponent: React.FC = () => {\n const dispatch = useAppDispatch()\n\n const isOpen = useAppSelector(state => state.appHeader.isBetSlipNewOpen)\n useToastOnClearBetSlipSuccess(isOpen)\n useHapticFeedbackOnBetsSuccess(isOpen)\n const workflowStatus = useAppSelector(selectWorkflowStatus)\n\n useRealtimeFobPriceChanges(isOpen)\n useRefreshBalanceOnBetsPlaced()\n useAccountBalanceSync()\n useBetSlipAnalytics(isOpen)\n\n React.useEffect(() => {\n if (!isOpen) {\n dispatch(removeItemsWithFatalError())\n\n if (workflowStatus !== 'ready') {\n dispatch(setWorkflowStatusToReady())\n\n if (workflowStatus === 'bets-placed') {\n dispatch(removeItemsWithReceipt())\n }\n }\n }\n }, [dispatch, isOpen, workflowStatus])\n\n return (\n dispatch(setBetSlipNewIsOpen(false))}\n >\n \n\n \n\n \n\n \n\n \n \n \n \n )\n}\n\n// ======\n// Styles\n// ======\n\nconst BetSlipParentWrapperStyled = styled.div({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n overflow: 'hidden',\n})\n","import { store } from '@core/Store'\nimport { setBetSlipNewIsOpen } from '@core/Areas/AppHeader/Store'\nimport { showLogin as showLoginHelper } from '@core/Areas/Login/helpers'\n\nexport const toggleBetSlipDrawer = (isOpen: boolean) => {\n store.dispatch(setBetSlipNewIsOpen(isOpen))\n}\n\nexport const showLogin = () => {\n showLoginHelper({\n onLoginSuccessCallback: () => {\n store.dispatch(setBetSlipNewIsOpen(true))\n },\n })\n}\n\nexport { postAllBetsToServer } from './postAllBetsToServer'\n\nexport { handleShareBet } from './shareBet/handleShareBet'\nexport { canShareBet } from './shareBet/canShareBet'\n","import { BetSlipItem } from '@mobi/betslip/types'\nimport { isReactNativeApp } from '@mobi/web-native-comms/web'\nimport { isLoadBetSupported } from '@core/Utils/betting/loadBet'\nimport { getPlanSequence } from './helpers/getPlanSequence'\nimport { doesBrowserSupportShare } from './helpers/doesBrowserSupportShare'\n\nexport const canShareBet = (items: BetSlipItem[]) => {\n if (!isReactNativeApp && !doesBrowserSupportShare()) return false\n\n if (items.length > 1) return items.every(item => item.isInMulti)\n\n const planSeq = getPlanSequence(items[0])\n\n return isLoadBetSupported(planSeq)\n}\n","import React from 'react'\nimport { useAppSelector } from '@core/Store/hooks'\nimport {\n fetchAccountBalanceAsync,\n fetchCampaignsAsync,\n} from '@core/State/UserAccount/async-signals'\n\nexport const useRefreshBalanceOnBetsPlaced = () => {\n const workflowStatus = useAppSelector(state => state.betslip.workflow.currentStatus)\n\n React.useEffect(() => {\n if (workflowStatus == 'bets-placed') {\n fetchAccountBalanceAsync()\n fetchCampaignsAsync()\n }\n }, [workflowStatus])\n}\n","import { useEffect } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { state$ as userAccountState$ } from '@core/State/UserAccount/userAccountDriver'\nimport {\n setBetSlipUserAccountBalanceSync,\n setBetSlipIsUserLoggedInSync,\n} from '@mobi/betslip/Store/Workflow'\n\nexport const useAccountBalanceSync = () => {\n const dispatch = useDispatch()\n\n useEffect(() => {\n const subscription = userAccountState$\n .distinctUntilChanged(state => `${state.isLoggedIn}.${state.accountBalance}`)\n .subscribe(state => {\n dispatch(setBetSlipUserAccountBalanceSync(state.accountBalance))\n dispatch(setBetSlipIsUserLoggedInSync(!!state.isLoggedIn))\n })\n return () => {\n subscription.dispose()\n }\n }, [dispatch])\n}\n","import styled from '@emotion/styled'\nimport { Tab, TabList } from 'react-tabs'\nimport { hexColors } from '@mobi/settings'\nimport { InputField } from '@mobi/component-library/Common/Input'\nimport { DepositLimitComponentTheme } from '../../themes'\nimport { ButtonBlockStyled } from '@mobi/component-library/Common/Buttons'\n\ninterface Theme {\n theme?: DepositLimitComponentTheme\n}\n\nexport const DepositLimitsContainerStyled = styled('div')(\n {\n boxSizing: 'border-box',\n height: '100%',\n textAlign: 'left',\n },\n ({ theme }) => ({\n fontSize: theme.container.text.size,\n padding: theme.container.padding,\n margin: theme.container.margin,\n width: theme.container.width,\n })\n)\n\nexport const ViewTitleStyled = styled('div')({\n padding: '1rem 0 0 0',\n color: hexColors.dimGrey,\n})\n\nexport const ViewValueStyled = styled('div')({\n padding: '0.5rem 0 0.75rem 0',\n fontSize: '1.8rem',\n})\n\nexport const EditButtonContainer = styled('div')({\n margin: '3rem 0',\n})\n\nexport const FieldSetStyled = styled('fieldset')({\n borderStyle: 'none',\n})\n\nexport const OrderedListStyled = styled('ol')({\n fontSize: 'inherit',\n listStyleType: 'none',\n padding: 0,\n})\n\ninterface OrderListItemStyledProps {\n hasUnderline?: boolean\n}\n\nexport const OrderedListItemStyled = styled('li')(\n {\n margin: '0.5rem 0',\n },\n\n ({ hasUnderline }) => ({\n borderBottom: hasUnderline ? `1px solid ${hexColors.veryLightGrey}` : undefined,\n })\n)\n\nexport const ListItemSubtitleStyled = styled('span')(\n {\n paddingLeft: '3rem',\n display: 'inline-block',\n },\n ({ theme }) => ({\n paddingLeft: theme.radio.paddingLeft,\n })\n)\n\nexport const AmountInputStyled = styled(InputField)(\n {\n fontWeight: 'bold',\n textAlign: 'left',\n },\n ({ theme }) => ({\n fontSize: theme.input.fontSize,\n padding: theme.input.padding,\n })\n)\n\nexport const ButtonBlockThemed = styled(ButtonBlockStyled)(({ theme }) => ({\n fontSize: theme.button.fontSize,\n height: theme.button.height,\n}))\n\nexport const AccountHolderTabList = styled(TabList)({\n borderBottom: `0.1rem solid ${hexColors.chocolate}`,\n display: 'flex',\n flexWrap: 'nowrap',\n margin: '0 0 2rem',\n padding: 0,\n})\n// Unfortunately typings for react-tabs are out of date, but `tabsRole` is required to use\n// react-tabs in combination with emotion (styled components).\n// See: https://github.com/reactjs/react-tabs#custom-components\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n;(AccountHolderTabList as any).tabsRole = 'TabList'\n\nconst tabPadding = 1 // rem\nconst selectedTabBorderWidth = 0.4 // rem\n\nexport const AccountHolderTab = styled(Tab)({\n color: hexColors.dimGrey,\n cursor: 'pointer',\n flex: '1 0',\n fontSize: '1.2rem',\n listStyle: 'none',\n padding: `${tabPadding}rem`,\n textAlign: 'center',\n width: '50%',\n\n '&.selected': {\n paddingBottom: `${tabPadding - selectedTabBorderWidth}rem`,\n borderBottom: `${selectedTabBorderWidth}rem solid ${hexColors.chocolate}`,\n color: hexColors.chocolate,\n },\n})\n// Adding a custom class name for the `select` state in order to style it above.\nAccountHolderTab.defaultProps = { selectedClassName: 'selected' }\n\n// Unfortunately typings for react-tabs are out of date, but `tabsRole` is required to use\n// react-tabs in combination with emotion (styled components).\n// See: https://github.com/reactjs/react-tabs#custom-components\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n;(AccountHolderTab as any).tabsRole = 'Tab'\n\nexport const TabLabel = styled('strong')({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100%',\n})\n","import React from 'react'\nimport { navigateToDepositLimitsEdit } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { PreCommitmentDetails } from '@mobi/api-types'\nimport { ButtonBlock } from '@mobi/component-library/Common/Buttons'\nimport { toMoney } from '@mobi/utils/money'\nimport {\n ViewTitleStyled as ViewTitle,\n EditButtonContainer,\n OrderedListStyled as OrderedList,\n OrderedListItemStyled as OrderListItem,\n ViewValueStyled as ViewValue,\n} from '../DepositLimits/DepositLimits.styles'\nimport {\n CoolingOffNoticeBox,\n CurrentFrequencyNoticeBox,\n CurrentAmountNoticeBox,\n SuccessMessage,\n} from '../DepositLimitsComponents/DepositLimitsComponents'\nimport { AccountHolder } from '@core/Data/Account/accountHolder'\n\nconst NoLimit = 'No Personal Limit'\nconst NoAmount = N/A\n\ninterface DepositLimitsViewAccountHolderProps {\n accountHolder: AccountHolder\n isDesktop?: boolean\n saveSuccess?: boolean\n}\n\nexport function DepositLimitsViewAccountHolder(\n props: DepositLimitsViewAccountHolderProps\n): JSX.Element {\n const { saveSuccess, accountHolder, isDesktop } = props\n const {\n BetAccountHolderNumber: accountHolderNumber,\n PreCommitmentDetails: preCommitmentDetails,\n } = accountHolder\n\n const {\n MaxDepositAmount,\n MaxDepositFrequency,\n ProposedMaxDepositAmount,\n ProposedMaxDepositFrequency,\n ProposedOptOutDate,\n ProposedMaxDepositDate,\n } = preCommitmentDetails\n\n const isOptingOut = !!(\n ProposedOptOutDate ||\n (ProposedMaxDepositDate && !ProposedMaxDepositFrequency && !ProposedMaxDepositAmount) ||\n (!MaxDepositFrequency &&\n !ProposedMaxDepositFrequency &&\n !MaxDepositAmount &&\n !ProposedMaxDepositAmount)\n )\n\n const frequencyDisplay = isOptingOut\n ? NoLimit\n : ProposedMaxDepositFrequency || MaxDepositFrequency || NoLimit\n const amount = ProposedMaxDepositAmount || MaxDepositAmount\n const amountDisplay = isOptingOut\n ? NoAmount\n : amount\n ? toMoney(amount, { decimalPlaces: 0 })\n : NoAmount\n\n const isLimitProposed = !!(ProposedOptOutDate || ProposedMaxDepositDate)\n const displayCurrentFrequency =\n isLimitProposed && ProposedMaxDepositFrequency !== MaxDepositFrequency\n const displayCurrentAmount = isLimitProposed && ProposedMaxDepositAmount !== MaxDepositAmount\n\n return (\n \n \n \n \n Frequency Selected\n {frequencyDisplay}\n {displayCurrentFrequency && }\n \n \n For Amount\n {amountDisplay}\n {displayCurrentAmount && }\n \n \n \n {accountHolderNumber && (\n navigateToDepositLimitsEdit({ isDesktop, accountHolderNumber })}\n testId='edit-button'\n >\n Edit\n \n )}\n \n \n )\n}\n\ninterface HeaderMessageProps {\n preCommitmentDetails: PreCommitmentDetails\n saveSuccess?: boolean\n}\n\nexport function HeaderMessage(props: HeaderMessageProps): JSX.Element | null {\n const {\n preCommitmentDetails: { MaxDepositFrequency, ProposedMaxDepositDate, ProposedOptOutDate },\n saveSuccess,\n } = props\n\n if (MaxDepositFrequency && (ProposedMaxDepositDate || ProposedOptOutDate)) {\n const coolingOffDate = ProposedMaxDepositDate || ProposedOptOutDate\n if (coolingOffDate) {\n return \n }\n }\n\n if (saveSuccess) {\n return \n }\n\n return null\n}\n","import type { CSSProperties } from 'react'\nimport {\n type RadioThemeSettings,\n defaultTheme as RadioDefaultTheme,\n} from '@mobi/component-library/Common/Input'\nimport {\n PopupThemeSettings,\n defaultTheme as PopupDefaultTheme,\n} from '@core/Components/Popup/Popup.styles'\n\ninterface ContainerThemeSettings {\n text: {\n size: CSSProperties['fontSize']\n }\n padding: CSSProperties['padding']\n margin: CSSProperties['margin']\n width: CSSProperties['width']\n}\n\ninterface InputThemeSettings {\n fontSize: CSSProperties['fontSize']\n padding: CSSProperties['padding']\n}\n\ninterface ButtonThemeSettings {\n fontSize: CSSProperties['fontSize']\n height: CSSProperties['height']\n}\n\nexport enum DepositLimitThemes {\n default = 'default',\n signUp = 'signUp',\n desktopSignup = 'desktopSignup',\n}\n\ninterface DepositLimitComponentThemeSettings {\n container: ContainerThemeSettings\n input: InputThemeSettings\n button: ButtonThemeSettings\n}\n\nexport type DepositLimitComponentTheme = DepositLimitComponentThemeSettings &\n PopupThemeSettings &\n RadioThemeSettings\n\n// MOBI & DESKTOP default theme (when going through 'Account Preferences')\nconst defaultTheme: DepositLimitComponentTheme = {\n container: {\n text: {\n size: '1.2rem',\n },\n padding: '0 1rem',\n margin: '1rem 0 2rem',\n width: '100%',\n },\n input: {\n fontSize: '2.4rem',\n padding: '1rem',\n },\n button: {\n fontSize: '1.2rem',\n height: '4rem',\n },\n ...RadioDefaultTheme,\n ...PopupDefaultTheme,\n}\n\n// MOBI 'sign up' theme\nconst signUpTheme: DepositLimitComponentTheme = {\n container: {\n text: {\n size: '1em',\n },\n padding: 0,\n margin: defaultTheme.container.margin,\n width: defaultTheme.container.width,\n },\n radio: {\n width: defaultTheme.radio.width,\n get height() {\n return signUpTheme.radio.width\n },\n paddingLeft: defaultTheme.radio.paddingLeft,\n },\n input: {\n fontSize: defaultTheme.input.fontSize,\n padding: defaultTheme.input.padding,\n },\n button: {\n fontSize: defaultTheme.button.fontSize,\n height: defaultTheme.button.height,\n },\n popup: {\n transform: defaultTheme.popup.transform,\n },\n}\n\n// DESKTOP 'sign up' theme\nconst desktopSignUpTheme: DepositLimitComponentTheme = {\n container: {\n text: {\n size: '1em',\n },\n padding: '',\n margin: '1rem auto',\n width: '50%',\n },\n radio: {\n height: '1.6667em',\n width: '1.6667em',\n get paddingLeft() {\n return `calc(${desktopSignUpTheme.radio.width} * 1.5)`\n },\n },\n input: {\n fontSize: '1.8em',\n padding: '0.5em',\n },\n button: {\n fontSize: '1.16667em',\n height: 'auto',\n },\n popup: {\n // it would be way too complicated to scale all the components within the popup\n // separately. Instead, we are just scaling down the entire popup during sign up.\n // Bear in mind, this particular popup only shows when there is an error during\n // a 'Deposit Limit save' action.\n transform: 'scale(0.7)',\n },\n}\n\nexport function getDepositLimitTheme(theme?: DepositLimitThemes): DepositLimitComponentTheme {\n switch (theme) {\n case DepositLimitThemes.signUp:\n return signUpTheme\n case DepositLimitThemes.desktopSignup:\n return desktopSignUpTheme\n case DepositLimitThemes.default:\n default:\n return defaultTheme\n }\n}\n","import React from 'react'\nimport { Tabs, TabPanel } from 'react-tabs'\nimport { ThemeProvider } from '@emotion/react'\nimport { NameDetails } from '@mobi/api-types'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\nimport {\n DepositLimitsContainerStyled as DepositLimitsContainer,\n AccountHolderTabList as TabList,\n AccountHolderTab as Tab,\n TabLabel,\n} from '../DepositLimits/DepositLimits.styles'\nimport { AccountHolders, AccountHolder } from '@core/Data/Account/accountHolder'\nimport { DepositLimitsViewAccountHolder } from '../DepositLimitsViewAccountHolder/DepositLimitsViewAccountHolder'\nimport { getDepositLimitTheme, DepositLimitThemes } from '../../themes'\n\ninterface DepositLimitsViewProps {\n accountHolders: AccountHolders\n selectedAccountHolderNumber?: number\n isDesktop?: boolean\n saveSuccess?: boolean\n}\n\nexport class DepositLimitsView extends React.Component {\n public render(): JSX.Element {\n const {\n accountHolders: { primaryAccountHolder, secondaryAccountHolder },\n selectedAccountHolderNumber,\n isDesktop,\n saveSuccess,\n } = this.props\n\n return (\n \n \n {!isDesktop && }\n \n \n TABtouch supports responsible wagering. Manage the amount you can deposit by setting\n yourself weekly, fortnightly or even monthly limits to help you manage your betting.\n \n\n {!secondaryAccountHolder ? (\n \n ) : (\n \n )}\n \n \n \n )\n }\n}\n\ninterface DepositLimitsViewAccountHolderTabsProps {\n primaryAccountHolder: AccountHolder\n secondaryAccountHolder: AccountHolder\n isDesktop?: boolean\n selectedAccountHolderNumber?: number\n saveSuccess?: boolean\n}\n\nexport function DepositLimitsViewAccountHolderTabs(\n props: DepositLimitsViewAccountHolderTabsProps\n): JSX.Element {\n const {\n primaryAccountHolder,\n secondaryAccountHolder,\n selectedAccountHolderNumber,\n saveSuccess,\n isDesktop,\n } = props\n\n const defaultTabIndex =\n secondaryAccountHolder.BetAccountHolderNumber === selectedAccountHolderNumber ? 1 : 0\n\n return (\n \n \n {[primaryAccountHolder, secondaryAccountHolder].map((accountHolder, index) => (\n \n {buildName(accountHolder.NameDetails)}\n \n ))}\n \n {[primaryAccountHolder, secondaryAccountHolder].map((accountHolder, index) => (\n \n \n \n ))}\n \n )\n}\n\nfunction buildName(nameDetails: NameDetails) {\n return [nameDetails.FirstName, nameDetails.Surname].filter(n => !!n).join(' ')\n}\n","import React from 'react'\nimport dayjs from 'dayjs'\nimport { navigateToDepositLimitsView } from '@classic/AppUtils/Framework/Intent/navigation'\nimport { ThemeProvider } from '@emotion/react'\nimport { MainContainer } from '@core/Components/Containers'\nimport { ContentHeader } from '@core/Components/ContentHeader'\nimport { Grid, GridCell } from '@mobi/component-library/Common/Grid'\nimport { Paragraph } from '@core/Components/Text/Paragraph'\n\nimport {\n DepositLimitsContainerStyled as DepositLimitsContainer,\n AmountInputStyled as AmountInput,\n ListItemSubtitleStyled as ListItemSubtitle,\n OrderedListStyled as OrderedList,\n OrderedListItemStyled,\n ButtonBlockThemed,\n FieldSetStyled as FieldSet,\n} from '../DepositLimits/DepositLimits.styles'\nimport { savePrecommitments } from '@core/Data/Account/contactDetails'\nimport { PreCommitmentDetails, DepositLimitFrequency } from '@mobi/api-types'\nimport { CheckboxInput } from '@mobi/component-library/Common/Input'\nimport { RadioInput } from '@mobi/component-library/Common/Input'\nimport {\n CoolingOffNoticeBox,\n CurrentFrequencyNoticeBox,\n CurrentAmountNoticeBox,\n ErrorPopupNoticeBox,\n} from '../DepositLimitsComponents/DepositLimitsComponents'\nimport { AccountHolder } from '@core/Data/Account/accountHolder'\nimport { getDepositLimitTheme, DepositLimitThemes, DepositLimitComponentTheme } from '../../themes'\n\ninterface DepositLimitsEditProps {\n accountHolder: AccountHolder\n isDesktop?: boolean\n isSignup?: boolean\n onCancel?(): void\n onSubmit?(): void\n}\n\nexport interface DepositLimitsEditState {\n accountHolderNumber: number\n precommitmentDetails: PreCommitmentDetails\n maxDeposit: {\n amount: number | null\n frequency: DepositLimitFrequency\n }\n amountEntry: string\n allowAmountEntry: boolean\n amountValidationError: string | false\n confirmCheckboxState: boolean\n isSubmitEnabled: boolean\n showError: boolean\n coolingOffPeriodRequired: boolean\n}\n\nexport class DepositLimitsEdit extends React.Component<\n DepositLimitsEditProps,\n DepositLimitsEditState\n> {\n private MIN_DEPOSIT_AMOUNT: number\n private MAX_DEPOSIT_AMOUNT: number\n\n constructor(props: DepositLimitsEditProps) {\n super(props)\n\n this.MIN_DEPOSIT_AMOUNT = 1\n this.MAX_DEPOSIT_AMOUNT = 99999\n\n const { isSignup } = props\n const { BetAccountHolderNumber, PreCommitmentDetails: details } = props.accountHolder\n const { MaxDepositAmount, MaxDepositFrequency } = details\n\n this.state = {\n accountHolderNumber: BetAccountHolderNumber,\n precommitmentDetails: details,\n maxDeposit: {\n amount: MaxDepositAmount,\n frequency: MaxDepositFrequency,\n },\n amountEntry: MaxDepositAmount ? MaxDepositAmount.toString() : '',\n allowAmountEntry: !!MaxDepositFrequency,\n amountValidationError: false,\n confirmCheckboxState: isSignup || false,\n isSubmitEnabled: false,\n showError: false,\n coolingOffPeriodRequired: false,\n }\n }\n\n public componentDidUpdate(): void {\n if (this.state.showError) {\n window.scrollTo(0, 0)\n }\n }\n\n public render(): JSX.Element {\n const { isDesktop, isSignup } = this.props\n const {\n isSubmitEnabled,\n allowAmountEntry,\n amountValidationError,\n maxDeposit: { frequency },\n amountEntry,\n precommitmentDetails,\n coolingOffPeriodRequired,\n } = this.state\n\n let theme: DepositLimitComponentTheme\n if (isSignup && isDesktop) {\n theme = getDepositLimitTheme(DepositLimitThemes.desktopSignup)\n } else if (isSignup && !isDesktop) {\n theme = getDepositLimitTheme(DepositLimitThemes.signUp)\n } else {\n theme = getDepositLimitTheme(DepositLimitThemes.default)\n }\n\n return (\n \n \n {!isSignup && !isDesktop ? : null}\n \n \n TABtouch supports responsible wagering. You can control the amount you deposit by\n setting your preferred limits below.\n \n \n Please be aware there is a daily limit of $10,000 for debit card, Apple Pay, Google\n Pay and PayPal deposits.\n \n\n
    \n
    \n Select the frequency of your limit\n\n {!isSignup && precommitmentDetails.MaxDepositFrequency && (\n \n )}\n\n \n \n \n \n You can deposit without setting your own personal limit.\n \n \n \n \n \n Restriction lasts until 12:00am the following day.\n \n \n \n \n \n Restriction starts Monday and resets the following Sunday.\n \n \n \n \n \n Restriction starts Monday and will reset two weeks after on the Sunday.\n \n \n \n \n \n Restrictions are based on the calendar month.\n \n \n \n
    \n \n\n {!isSignup && precommitmentDetails.MaxDepositAmount && (\n \n )}\n\n \n\n {!isSignup && (\n \n By Proceeding…\n
    I understand that once my deposit limit is set, there will be a 7 day\n cooling off period should I choose to increase the amount or frequency of the\n limit. Any limit decrease will be effective immediately.\n
    \n )}\n\n {!isSignup && coolingOffPeriodRequired && (\n \n )}\n\n {!isSignup && (\n \n )}\n\n \n \n \n {isSignup ? 'Skip' : 'Cancel'}\n \n \n \n \n {isSignup ? 'Confirm' : 'Save'}\n \n \n \n \n
    \n {this.state.showError && }\n
    \n
    \n )\n }\n\n private handleFormSubmit = (\n event: React.FormEvent | React.FormEvent\n ) => {\n event.preventDefault()\n if (this.state.isSubmitEnabled) {\n this.saveDepositLimits()\n }\n }\n\n private handleCancelClick = () => {\n if (this.props.onCancel) {\n this.props.onCancel()\n } else {\n navigateToDepositLimitsView({\n isDesktop: this.props.isDesktop,\n saveSuccess: false,\n accountHolderNumber: this.state.accountHolderNumber,\n })\n }\n }\n\n private saveDepositLimits = async () => {\n // Disable the proceed button to stop people from 'double-tapping' it.\n this.setState({ isSubmitEnabled: false })\n\n const {\n precommitmentDetails: {\n ProposedOptOutDate,\n MaxBetAmount,\n ProposedMaxBetAmount,\n ProposedMaxBetDate,\n OptInMarketingIndicator,\n UserCreditCardBlockedIndicator,\n ProposedUserCreditCardBlockedDate,\n BlockPayPalIndicator,\n ProposedPayPalReleaseDate,\n },\n maxDeposit: { frequency, amount },\n accountHolderNumber,\n } = this.state\n\n // the CRM API requires these transformations or it will delete any proposed values :'(\n const newMaxBetAmount =\n ProposedMaxBetDate || ProposedOptOutDate ? ProposedMaxBetAmount : MaxBetAmount\n const newOptInIndicator = !!newMaxBetAmount || !!frequency\n const newUserCreditCardBlockerIndicator =\n !ProposedUserCreditCardBlockedDate && UserCreditCardBlockedIndicator\n const newBlockPayPaylIndicator = !ProposedPayPalReleaseDate && BlockPayPalIndicator\n\n try {\n await savePrecommitments({\n BetAccountNumber: accountHolderNumber,\n OptInIndicator: newOptInIndicator,\n MaxBetAmount: newMaxBetAmount,\n MaxWeeklyDepositLimit: '',\n OptInMarketingIndicator,\n UserCreditCardBlockedIndicator: newUserCreditCardBlockerIndicator,\n BlockPayPalIndicator: newBlockPayPaylIndicator,\n AccountHolderId: accountHolderNumber,\n PreCommitmentMaxDepositAmount: frequency && amount,\n PreCommitmentMaxDepositFrequency: frequency,\n })\n\n this.setState({ showError: false })\n\n if (this.props.onSubmit) {\n this.props.onSubmit()\n } else {\n navigateToDepositLimitsView({\n isDesktop: this.props.isDesktop,\n saveSuccess: true,\n accountHolderNumber: this.state.accountHolderNumber,\n })\n }\n } catch {\n this.setState({ showError: true, isSubmitEnabled: true })\n }\n }\n\n private handleFrequencyChange = (event: React.FormEvent) => {\n const { value } = event.currentTarget\n const frequency =\n value === 'Daily' || value === 'Weekly' || value === 'Fortnightly' || value === 'Monthly'\n ? value\n : null\n\n this.setState(state => ({\n allowAmountEntry: !!frequency,\n maxDeposit: {\n ...state.maxDeposit,\n frequency,\n },\n }))\n\n this.isCoolingOffPeriodRequired()\n this.canProceedToSaveDepositLimits()\n }\n\n private handleAmountChange = (event: React.FormEvent) => {\n const amountEntry = event.currentTarget.value\n this.setState({ amountEntry })\n\n this.validateAmount()\n this.isCoolingOffPeriodRequired()\n this.canProceedToSaveDepositLimits()\n }\n\n private validateAmount = () => {\n this.setState(state => {\n const { amountEntry } = state\n const newAmount = Number(amountEntry)\n const invalidMessage = `Please enter a whole number between ${this.MIN_DEPOSIT_AMOUNT} and ${this.MAX_DEPOSIT_AMOUNT}`\n const isValid =\n !Number.isNaN(newAmount) &&\n Number.isInteger(newAmount) &&\n newAmount >= this.MIN_DEPOSIT_AMOUNT &&\n newAmount <= this.MAX_DEPOSIT_AMOUNT\n return {\n maxDeposit: {\n ...state.maxDeposit,\n amount: isValid ? newAmount : null,\n },\n amountValidationError: !isValid && invalidMessage,\n }\n })\n }\n\n private isCoolingOffPeriodRequired = () => {\n this.setState(state => {\n const coolingOffPeriodRequired =\n state.maxDeposit.frequency && state.amountValidationError\n ? false\n : this.evaluateCoolingOffPeriodRequired(\n state.precommitmentDetails.MaxDepositFrequency,\n state.precommitmentDetails.MaxDepositAmount,\n state.maxDeposit.frequency,\n state.maxDeposit.amount\n )\n\n return {\n coolingOffPeriodRequired,\n }\n })\n }\n\n private evaluateCoolingOffPeriodRequired = (\n oldFrequency: DepositLimitFrequency,\n oldAmount: number | null,\n newFrequency: DepositLimitFrequency,\n newAmount: number | null\n ) => {\n if (!oldFrequency || !oldAmount) {\n return false\n }\n\n if (!newFrequency || !newAmount) {\n return true\n }\n\n if (newAmount > oldAmount) {\n return true\n }\n\n const divisors: Record, number> = {\n Daily: 1,\n Weekly: 7,\n Fortnightly: 14,\n Monthly: 30.4375,\n }\n\n const oldDayRate = oldAmount / divisors[oldFrequency]\n const newDayRate = newAmount / divisors[newFrequency]\n\n if (newDayRate > oldDayRate) {\n return true\n }\n\n return false\n }\n\n private calculateCoolingOffPeriodEndDate(): Date {\n return dayjs().startOf('day').add(7, 'days').toDate()\n }\n\n private handleConfirmCheckboxChange = (event: React.FormEvent) => {\n const { checked } = event.currentTarget\n this.setState({ confirmCheckboxState: checked }, this.canProceedToSaveDepositLimits)\n }\n\n private canProceedToSaveDepositLimits() {\n this.setState(state => {\n const {\n maxDeposit: { frequency, amount },\n confirmCheckboxState,\n amountValidationError,\n } = state\n const isSubmitEnabled =\n (!frequency || (!!amount && !amountValidationError)) && confirmCheckboxState\n return { isSubmitEnabled }\n })\n }\n\n private closePopup = () => {\n this.setState({ showError: false })\n }\n}\n","import React from 'react'\nimport { LoadingInstance, ErroredInstance, isLoading, isErrored } from 'rwwa-data-access'\nimport { DepositLimitsView } from '../DepositLimitsView/DepositLimitsView'\nimport { AccountHolders, AccountHoldersKey } from '@core/Data/Account/accountHolder'\nimport { Spinner, DesktopSpinner } from '@mobi/component-library/Common/Spinner'\nimport { ErrorMessage } from '@core/Components/Messages'\nimport { connect } from '@core/Components/HOCs'\nimport { DepositLimitsEdit } from '../DepositLimitsEdit/DepositLimitsEdit'\n\ninterface DepositLimitsProps {\n selectedAccountHolderNumber?: number | undefined\n mode?: 'view' | 'edit'\n isDesktop?: boolean\n saveSuccess?: boolean\n}\n\nexport function DepositLimits(props: DepositLimitsProps): JSX.Element {\n const { selectedAccountHolderNumber, mode = 'view', isDesktop, saveSuccess = false } = props\n\n return (\n \n )\n}\n\nconst ConnectDepositLimits = connect({ accountHolders: AccountHolders })(\n DepositLimitsLoader\n) as unknown as React.ComponentClass<\n {\n accountHolders: string\n } & DepositLimitsProps\n>\n\ninterface DepositLimitsLoaderProps {\n accountHolders: typeof LoadingInstance | typeof ErroredInstance | AccountHolders\n selectedAccountHolderNumber?: number | undefined\n mode?: 'view' | 'edit'\n isDesktop?: boolean\n saveSuccess?: boolean\n}\n\nexport function DepositLimitsLoader(props: DepositLimitsLoaderProps): JSX.Element {\n const { accountHolders, selectedAccountHolderNumber, mode, isDesktop, saveSuccess } = props\n\n if (isLoading(accountHolders)) {\n return isDesktop ? : \n }\n\n if (isErrored(accountHolders)) {\n return An error occurred while loading the \"Deposit Limits\" page.\n }\n\n if (mode === 'edit') {\n const { primaryAccountHolder, secondaryAccountHolder } = accountHolders\n\n const accountHolder =\n secondaryAccountHolder &&\n secondaryAccountHolder.BetAccountHolderNumber === selectedAccountHolderNumber\n ? secondaryAccountHolder\n : primaryAccountHolder\n\n return \n }\n\n return (\n \n )\n}\n","import React, { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport * as QueryString from 'query-string'\nimport { AccountHolders, AccountHoldersKey } from '@core/Data/Account/accountHolder'\nimport { State } from 'rwwa-data-access'\nimport { DepositLimits } from './Components/DepositLimits/DepositLimits'\n\nexport const DepositLimitsPage = () => {\n const { saveSuccess, accountHolderNumber } = QueryString.parse(\n useLocation().search\n ) as SearchParams\n\n useEffect(() => {\n AccountHolders.hardInvalidate(null as unknown as State, AccountHoldersKey)\n }, [])\n\n const finalAccountHolderNumber: number | undefined = /^\\d+$/.test(accountHolderNumber as string)\n ? Number(accountHolderNumber)\n : undefined\n\n const finalSaveSuccess: boolean = finalAccountHolderNumber && saveSuccess == 'true' ? true : false\n\n return (\n \n )\n}\n\n// =====\n// Types\n// =====\n\ntype SearchParams = {\n saveSuccess?: string\n accountHolderNumber?: string\n}\n","import React from 'react'\nimport { useParams, useHistory } from 'react-router-dom'\nimport { AppRoutes } from '@core/AppRoutes'\nimport { DepositLimits } from './Components/DepositLimits/DepositLimits'\n\nexport const DepositLimitsEditPage = () => {\n const history = useHistory()\n const { depositLimitId } = useParams<{ depositLimitId: string }>()\n\n const accountHolderNumberPattern = /\\d+$/\n const accountHolderNumber = accountHolderNumberPattern.test(depositLimitId)\n ? Number(depositLimitId)\n : undefined\n\n if (!accountHolderNumber) {\n history.push(AppRoutes.Home)\n }\n\n return \n}\n","import React, { StrictMode } from 'react'\nimport { Provider } from 'react-redux'\nimport { PersistGate } from 'redux-persist/integration/react'\nimport { HashRouter, Switch, Route, Redirect } from 'react-router-dom'\nimport { QueryClientProvider } from 'react-query'\nimport { persistor, store } from '@core/Store'\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { AppRoutes } from './AppRoutes'\nimport { Home } from './Areas/Home/Home'\nimport { Jackpots } from './Areas/Jackpots'\nimport { MeetingsPage } from './Areas/Meetings'\nimport { NextEventsPage } from './Areas/NextEvents/NextEventsPage'\nimport { FavouriteNumbersPage } from './Areas/FavouriteNumbers/FavouriteNumbersPage'\nimport { SkyVideoPlayer } from './Areas/SkyVideoPlayer'\nimport { FloatingTabRadioButton } from './Areas/Navigation/FloatingTabRadioButton'\nimport { StructuredSearchPage } from './Areas/StructuredSearch'\nimport { AppHeader } from './Areas/AppHeader/AppHeader'\nimport { RaceListPage } from './Areas/RaceList/RaceList'\nimport { RaceEvents } from './Areas/Racing/Components/RaceEvents/RaceEvents'\nimport { Withdraw } from './Areas/Withdraw'\nimport { BankAccount } from './Areas/BankAccount'\nimport { ContactUsPage } from './Areas/ContactUs/ContactUsPage'\nimport { BankAccountEdit } from './Areas/BankAccount'\nimport { SpecialsPage } from './Areas/Specials/SpecialsPage'\nimport { TippingPage } from './Areas/Tipping'\nimport { Blackbook } from './Areas/Blackbook'\nimport { AccountActivity } from './Areas/AccountActivity'\nimport { ReverificationPopupMobi } from './Areas/Reverification/ReverificationPopup'\nimport { KambiClient, KambiRouteEffects, useKambiClient } from './Areas/Kambi'\nimport { Overlay } from '@core/Components/Overlay/Overlay'\nimport { GlobalCss } from './Settings/Components/GlobalCss'\nimport { MyPreferences } from './Areas/Account/MyPreferences'\nimport { MysteryBetPage } from './Areas/MysteryBet'\nimport { SignUp } from './Areas/Account/SignUp'\nimport { SignUpComplete } from './Areas/Account/SignUp/SignUpComplete'\nimport { Toolbox, DevTools } from './Areas/Toolbox'\nimport { ChangePassword, ChangeTemporaryPassword } from './Areas/ChangePassword'\nimport { RequireAuth } from './Components/RequireAuth/RequireAuth'\nimport { ContactDetailsEditMobiWrapper, ContactDetailsMobiWrapper } from './Areas/ContactDetails'\nimport { CloseAccount } from './Areas/CloseAccount'\nimport { BiometricsPage } from './Areas/Biometrics/BiometricsPage'\nimport { ModalContainer } from './Components/Modal'\nimport { useAndroidBackButton } from '@core/NativeServices/Navigation/useAndroidBackButton'\nimport {\n Account,\n BetOfferPage,\n PrecommitmentPage,\n TakeABreakPage,\n Logout,\n VerificationBanner,\n} from './Areas/Account'\nimport { ActivityStatements } from './Areas/Account/ActivityStatements'\nimport { TABLocatorWeb } from './Areas/TABLocatorWeb'\nimport { RaceCardFixedOnly } from './Areas/RaceCardFixedOnly'\nimport { Login } from './Areas/Login'\nimport { useInitAnalyticsDataLayer } from './Services/Analytics'\nimport { RaceCard } from './Areas/RaceCard/RaceCard'\nimport { RaceCardSky } from './Areas/RaceCardSky'\nimport { GoodThingsSlice } from './Areas/Racing/Components/RacingFormSliceJS/GoodThings'\nimport { Settings } from './Areas/Settings'\nimport { Deposit } from './Areas/Deposit'\nimport { Verification } from './Areas/Account/Verification'\nimport { useOptimoveTrackingEvents } from './Services/Optimove/hooks'\nimport { useNativeAppLaunchState } from './NativeServices/AppLaunchState'\nimport { TabNavigation } from './Areas/Navigation/Components/TabNavigation'\nimport { Popup as PopupLegacy } from '@core/Components/Popup/Popup'\nimport { HostContextMobile } from '@core/Contexts/HostContextMobile'\nimport { BetSlipNew } from './Areas/BetSlipNew'\nimport { Toasts } from '@mobi/component-library/Feedback/Toast'\nimport { DepositLimitsEditPage, DepositLimitsPage } from './Areas/DepositLimits'\nimport { useNavigationObserver } from './State/Navigation/hooks/useNavigationObserver'\nimport { useBiometricsStatus } from '@mobi/account/Areas/Verification/Biometrics/Hooks/useBiometricsStatus'\nimport { updateDataLayer } from '@classic/Foundation/Analytics/Analytics'\n\nconst App = () => (\n \n \n \n \n \n \n \n \n \n \n \n)\n\nconst AppWithRoutes = () => {\n useNavigationObserver()\n useKambiClient()\n useAndroidBackButton()\n useInitAnalyticsDataLayer()\n useOptimoveTrackingEvents()\n useNativeAppLaunchState()\n\n const { isBiometricsStatusReady, isBiometricsEnabled } = useBiometricsStatus()\n if (isBiometricsStatusReady) {\n updateDataLayer({ user: { isBiometricsEnabled } })\n }\n\n return (\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 \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 \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 \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n\n {/* List Of Race Events\n from meetings - fobracing/FR/Races/2021-01-21?selectiondate=2021-01-21\n back from race event item - fobracing/FR/Races?selectiondate=2021-01-21\n date path param therefore is made optional (not used by MVC)\n todo: remove optional date once we reactify race events item mvc\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 \n \n \n \n \n
    \n\n \n\n \n \n )\n}\n\nexport default App\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { isReactNativeAndroid, subscribeToNative } from '@mobi/web-native-comms/web'\n\nexport const useAndroidBackButton = (): void => {\n const history = useHistory()\n\n React.useEffect(() => {\n if (!isReactNativeAndroid) return undefined\n\n const subscription = subscribeToNative('ANDROID_NAVIGATE_BACK', () => {\n history.goBack()\n })\n return () => {\n subscription?.dispose()\n }\n }, [history])\n}\n","import React from 'react'\nimport { getHashFragment } from '@classic/Foundation/Navigation/Nav'\nimport { NavigatedTo } from '../driver'\n\nexport const useNavigationObserver = (): void => {\n React.useEffect(() => {\n const handleHashChange = () => {\n const url = getHashFragment()\n NavigatedTo({ url })\n }\n handleHashChange()\n window.addEventListener('hashchange', handleHashChange)\n\n return () => {\n window.removeEventListener('hashchange', handleHashChange)\n }\n })\n}\n","import React from 'react'\nimport { isReactNativeApp, sendToNative, subscribeToNative } from '@mobi/web-native-comms/web'\nimport { store } from '@core/Store'\nimport { resetSkyVideoPlayerPersistedState } from '@core/Areas/SkyVideoPlayer/Store'\n\nexport const useNativeAppLaunchState = () => {\n React.useEffect(() => {\n if (!isReactNativeApp) return\n\n const subscription = subscribeToNative('APP_LAUNCH_STATE_RESPONSE', ({ isColdStart }) => {\n if (isColdStart) {\n store.dispatch(resetSkyVideoPlayerPersistedState())\n }\n })\n\n sendToNative('APP_LAUNCH_STATE_REQUEST')\n\n return () => subscription.dispose()\n }, [])\n}\n","import '../assets/scss/mobi.scss'\nimport './include-polyfill'\n\nimport * as ko from 'knockout'\nimport * as React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport * as analyticsService from '@classic/Foundation/Analytics/AnalyticsService'\nimport * as modal from '@classic/Foundation/Modal/modal'\nimport * as analyticsDataLayer from '@classic/Foundation/Analytics/AnalyticsDataLayer'\nimport * as rwwaRxStateMachineDevTools from '@core/Utils/rwwa-rx-state-machine-dev-tools'\n\nimport { queryClient } from '@core/Data/ReactQuery'\nimport { serverConfigQuery } from '@core/Data/ServerConfig/query'\nimport {\n startDeepLinkingListeners,\n startUserLoginListeners,\n startLocationServiceListeners,\n startPushNotificationsAuthStatus,\n startMetadataStatusUpdate,\n startRaceKeyNotification,\n startWebviewIsAliveListener,\n} from '@core/NativeServices'\nimport '@classic/AppUtils/Framework/CustomBindings/React'\nimport { registerUserAccountSideEffects } from '@core/State/UserAccount/side-effects'\nimport { registerRaceBettingPageCommandSideEffects } from '@classic/Betting-v2/Components/Commands/driver-side-effects'\nimport { DepositLimitsAnniversaryPopup } from '@core/Areas/DepositLimits/Components/DepositLimitsAnniversaryPopup/DepositLimitsAnniversaryPopup'\nimport { initializeLaunchDarklyServiceWithConfig } from '@core/State/LaunchDarklyFeatures/LaunchDarklyService'\nimport '@core/State/PushData'\nimport { iotSubscribeTopics } from '@mobi/utils/awsiot'\nimport { getGlobalPushSubscriptions } from '@mobi/utils/awsiot/topics'\nimport App from '@core/App'\nimport { init as initWebNativeComms } from '@mobi/web-native-comms/web'\nimport { refreshLogonState } from '@core/Areas/Login/helpers'\nimport { initializeSentry } from '@core/Services/Sentry'\nimport { defer } from '@mobi/utils'\n\nko.options.deferUpdates = true\n// @ts-expect-error Missing type\nko.onError = error => {\n // eslint-disable-next-line no-console\n console.error('Knockout Error: \\n' + error.message)\n throw error\n}\n\nwindow.AnalyticsDataLayer = analyticsDataLayer\n\nqueryClient\n .fetchQuery(serverConfigQuery)\n .then(config => {\n if (config.enableSentryIo) {\n initializeSentry(config.sentryIoUrl, config.serverEnvironment)\n }\n return initializeLaunchDarklyServiceWithConfig(config)\n })\n .then(() => {\n const container = document.getElementById('deposit-limit-anniversary-popup')\n if (container) {\n const root = createRoot(container)\n root.render(React.createElement(DepositLimitsAnniversaryPopup, null))\n }\n })\n\ndefer(() => {\n initWebNativeComms()\n\n refreshLogonState()\n analyticsService.init()\n modal.init()\n\n startDeepLinkingListeners()\n startUserLoginListeners()\n startLocationServiceListeners()\n startPushNotificationsAuthStatus()\n startMetadataStatusUpdate()\n startRaceKeyNotification()\n startWebviewIsAliveListener()\n\n // Register driver side effects here\n registerUserAccountSideEffects()\n registerRaceBettingPageCommandSideEffects()\n\n // Render \n const container = document.getElementById('js-react-app')\n if (container) {\n const root = createRoot(container)\n root.render(React.createElement(App, null))\n }\n\n // Do global push subscriptions\n iotSubscribeTopics(getGlobalPushSubscriptions())\n})\n\n// Set up DEV tools\nif (!PRODUCTION) {\n rwwaRxStateMachineDevTools.start()\n // @ts-expect-error DEV only global\n if (module.hot) module.hot.accept()\n}\n"],"names":["AppStyled","_styled","target","name","styles","PageStyled","boxSizing","width","margin","padding","spacing","md","LoadingContainerStyled","PanelStyled","PaymentMethodsStyled","flex","borderTop","concat","colors","neutral","marginTop","bigx1","messages","generic_failure","unable_to_retrieve_tokens","exceeds_deposit_limit","minimum_deposit_exceeds_deposit_limit","no_previous_payment_method","no_suitable_card","selected_card_is_a_credit_card","sufficient_balance","unsecure_client","cannot_deposit","card_verification_failed","unsupported_payment_method","unable_load_payment_method","unable_deposit_non_tokenized_card","user_canceled","deposit_failed","declined_by_payment_processor","paypal_initialization_failed","tokenization_failed","DepositError","_Error","reason","transactionId","code","message","_this","_classCallCheck","_callSuper","_inherits","_createClass","key","get","this","value","error","undefined","unwrapErrorMessage","coerceIntoError","details","_ref","_details$message","_details$failureCode","failureCode","isPaymentProcessorErrorCode","failureMessage","defaultError","_wrapNativeSuper","Error","DepositHeader","title","onClose","React","AccountHeader","alignItems","ApplePayButtonWeb","_ref$initialData","initialData","clientToken","depositAmount","isDepositAllowed","onStart","onCancel","onDepositing","onSuccess","onFailure","_useBraintreeClient","useBraintreeClient","isReady","client","_useApplePayDeposit","useApplePayDeposit","braintreeClient","tokenize","deposit","onApplePayConfirmed","_ref2","_asyncToGenerator","_regeneratorRuntime","_callee","data","_yield$deposit","isSuccess","errorDetails","_context","prev","next","sent","_objectWithoutProperties","_excluded","fromErrorDetails","t0","coerce","stop","_x","apply","arguments","onApplePayButtonClicked","_ref3","_callee2","_context2","current","abrupt","onError","ApplePayButton","disabled","onClick","ApplePayButtonNative","_onFailure2","_onSuccess2","_useApplePayInterop","useApplePayInterop","token","amount","paymentMethodNonce","depositSource","disposeNativeSubscriptions","finish","_x2","attachNativeSubscriptions","_callee3","_context3","CreditCardButton","accountNumber","creditCard","showIssuer","mustUse3DSecure","customerMustUseThreeDSecure","clientTokenThreeDSecure","useCreditCardDeposit","onCreditCardButtonClicked","response","isUsingNewCard","issuerName","MasterCardButton","VisaButton","determineCreditCardButton","_CreditCardButton","lastFour","Button","color","size","CreditCardPanel","_selectedCard$isDebit","_selectedCard$isExpir","_initialData$paymentM","history","useHistory","flow","useSelector","selectDepositFlow","primaryCard","paymentMethods","find","card","isDefault","_useState","useState","_useState2","_slicedToArray","selectedCard","setSelectedCard","selectedCardIsDebitCard","isDebitCard","selectedCardHasExpired","isExpired","canDeposit","navigateToManageCards","push","routes","manageCards","track","paymentMethod","depositVariant","isFullWidth","Icon","selectableCards","filter","isCardValid","CreditCardSelector","cards","isOpenByDefault","onSelect","GooglePayButtonWeb","payFunctionRef","useRef","buttonContainerRef","isGooglePayAvailable","useGooglePayAvailability","_useGooglePayDeposit","useGooglePayDeposit","verify","isButtonReady","setButtonReady","onGooglePayConfirmed","useCallback","isGooglePayError","statusCode","statusMessage","pay","useEffect","getGooglePaymentsClient","then","_buttonContainerRef$c","button","createButton","_payFunctionRef$curre","call","buttonType","buttonColor","buttonLocale","buttonSizeMode","append","style","display","PaymentSDKButtonContainerStyled","id","ref","isDisabled","SpinnerStandalone","InfoBox","_pay","Promise","resolve","reject","abort","abortController","AbortController","promise","race","signal","addEventListener","once","subscribeToNative","cleanupSignal","waitForGooglePayFailure","waitForGooglePayCanceled","finally","sendToNative","price","_ref4","_errorDetails$transac","catch","wasCanceled","_","canceled","GooglePayButtonNative","depositMutation","useDeposit","canUserStartDeposit","mutateAsync","GooglePayButton","displayName","PayPalButtonCaption","fontFamily","font","family","primary","fontWeight","weight","medium","textAlign","sm","payPalButtonCaption","PayPalButtonWeb","isInitializing","didInitialize","buttonContainer","transactionDetailsRef","_usePayPalDeposit","usePayPalDeposit","init","onPayPalConfirmed","getTransactionDetails","onInit","errorCode","PayPalButtonNative","onPayPalButtonClicked","successSubscription","nonce","billingAddress","lastName","firstName","payerId","email","paymentMethodToken","payPalAddress","street","line1","line2","city","state","postCode","countryCode","payPalEmail","payPalPayerId","failSubscription","cancelSubscription","dispose","PayPalButton","opacity","pointerEvents","marginLeft","marginRight","maxWidth","AccountBalanceHeaderStyled","_objectSpread","flexFlow","justifyContent","theme","regular","AccountBalanceTitleStyled","gap","background","surface","borderRadius","AccountBalanceAmountStyled","studio","AccountBalanceHeader","toMoney","GridStyled","_ref$gap","_ref$cols","cols","_ref$rows","rows","gridTemplateColumns","gridTemplateRows","Grid","children","props","PaymentMethods","memo","_ref$selectedPaymentM","selectedPaymentMethod","showScanMyBet","showApplePay","showGooglePay","showBPay","showCash","showPayID","deviceType","isDesktop","PaymentMethodSelectionButton","selected","PaymentMethodBlocked","BlockedPaymentMethodText","paymentMethodTypeNameMap","CustomerServiceCentre","maxBPayDeposit","formattedMaxBPayDeposit","toLocaleString","BPayPanel","_accountNumber$toStri","isPreCommitmentLimitSet","containerRef","isOldAccountNumbers","BPayPanelStyled","CopyField","onCopied","copiedContent","copiedLocation","suffixText","toString","depositLimits","maximum","fontVariant","role","gridAutoRows","marginBottom","lg","dt","semibold","dd","CashPanel","events","useHostContext","CashPanelStyled","e","preventDefault","findTab","SvgLazy","flexDirection","rowGap","ScanMyBetPanel","ScanMyBetPanelStyled","type","getPayIdStatus","payIds","length","findPayIdPendingActivation","findActivePayId","payID","CreationStatus","PayIDPanelStyled","p","MissingPayIDCardStyled","backgroundColor","lavender","radius","lgx1","columnGap","big","white","svg","to","transform","animation","a","InfoContainerStyled","PayIDInstructions","ContainerStyled","Accordion","onToggle","isExpanded","ContentStyled","paddingBottom","smx2","ol","paddingLeft","none","lineHeight","PayIDPanel","payIdDetailList","_usePayID","isGeneratingPayId","useIsMutating","mutationKey","queryKeys","generatePayId","status","setStatus","queryClient","useQueryClient","failureCount","useMutation","mutationFn","put","betAccountNumber","incrementFailureCount","timeStamp","Date","toISOString","reportErrorIfNeeded","statusText","invalidateQueries","queryKey","depositBetAccount","addCrumb","onMutate","mutate","generate","activePayID","usePayID","prefixText","text","heading","PayId","Centered","PaymentButton","isNative","panelProps","Component","determinePaymentMethodPanel","SelfServeDepositPanels","Panel","externalPaymentPanels","BPay","Cash","ScanMyBet","PayID","TooltipStyled","zIndex","boxShadow","animationDuration","animationName","animationTimingFunction","position","height","strong","textTransform","fontStyle","paddingRight","fontSize","_ref$color","tooltipColors","blue","mariner","black","TooltipReferenceContainer","Tooltip","_middlewareData$arrow","_middlewareData$arrow2","triggerElRef","tooltipId","_ref$offsetPx","offsetPx","hasTooltipBeenSeen","_ref$title","onDismissed","_ref$flipElement","flipElement","untilDate","_ref$isHidden","isHidden","arrowRef","_React$useState","getTime","isBeforeUntilDate","_React$useState3","_React$useState4","isDismissed","setIsDismissed","shouldRender","useMemo","middleware","offset","shift","arrow","element","flip","_useFloating","useFloating","elements","reference","refs","placement","floatingStyles","updatePosition","update","middlewareData","handleDismiss","targetNode","window","ResizeObserver","resizeObserver","observe","disconnect","mutationObserver","MutationObserver","document","body","childList","subtree","removeEventListener","setFloating","_defineProperty","left","x","top","y","right","bottom","split","DepositLimitStatus","_ref$depositLimits","minimum","setHasTooltipBeenSeen","depositLimitStatusRef","Container","PaymentMethodMinimum","getPaymentMethodMinimum","showExceedsLimit","isSelfServePaymentMethod","infoBoxColour","href","DepositBody","_betAccountData$PayId","isSelectedPaymentMethodSelfServe","isPaymentMethodBlocked","accountBalance","betAccountData","asModal","dispatch","useDispatch","lastSelectedPaymentMethod","selectLastSelectedPaymentMethod","_useSelector","selectDepositState","inputValue","depositInput","native","isApplePayWebSupported","isPaymentRequestApiSupported","PayIdDetailList","PreCommitmentMaxDepositFrequency","paymentMethodStatuses","CreditCard","available","blocked","CreditCardBlockedInd","PayPal","BlockPayPalInd","ApplePay","BlockApplePayInd","GooglePay","BlockGooglePayInd","BlockEftInd","isAvailable","isBlocked","onPaymentMethodClick","selectPaymentMethod","DepositPanel","DepositProgress","depositStatus","isOpen","previousDepositStatus","renderableDepositStatus","Overlay","BusyPanel","SuccessPanel","onDone","FailPanel","renderPanel","commonProps","dismissStatus","channel","Modal","_extends","modalStyle","ModalContentStyled","Tray","headerTitle","shouldShowHeader","requiresExtraBottomPadding","isReactNativeApp","trayStyle","TrayContentStyled","lgx2","_depositFailure$displ","depositFailure","_useToggleControl","useToggleControl","openTray","open","closeTray","close","cancel","cancelStep","successfulDepositCount","incrementSuccessCount","isFirstDeposit","isSecondDeposit","onDepositSuccess","depositSucceeded","errorTrigger","depositFailed","displayMessage","onDepositInputChanged","amountInputValidationRegex","test","setDepositInput","isValid","helpText","toFixed","isDepositLimitReached","isDepositingAllowed","InvalidCardAlert","PaymentAmount","onAmountChange","maximumAmount","finished","getAlertText","availability","setAvailability","isReactNativeAndroid","checkGooglePayAvailability","withTimeout","GOOGLE_PAY_NATIVE_CHECK_TIMEOUT_MS","checkNativeGooglePay","_window","PaymentRequest","initGooglePayWeb","isUserReadyToPay","hostApi","userData","useUserContactDetails","googlePayClient","_yield$tokenize","paymentTokenResult","liabilityShiftStatus","merchantId","getGoogleMerchantId","getPaymentTokens","wasUserCanceled","forceThreeDSecureClient","_ref5","threeDSecure","isNetworkTokenized","verifyThreeDSecure","bin","threeDSecureInfo","liabilityShifted","logLiabilityShiftSuccess","logLiabilityShiftRejected","ThreeDSecureError","logLiabilityShiftError","errorMessage","_initGooglePayWeb","head","querySelector","scriptLoader","scriptElement","intervalId","timeoutId","pollPromise","setInterval","clearInterval","clearTimeout","timeoutPromise","setTimeout","err","isReadyToPay","apiVersion","apiVersionMinor","allowedPaymentMethods","parameters","allowedAuthMethods","allowedCardNetworks","existingPaymentMethodRequired","result","_tokenize","braintreeGooglePayClient","paymentDataRequest","paymentData","googlePayment","create","googlePayVersion","googleMerchantId","createPaymentDataRequest","merchantInfo","transactionInfo","totalPrice","totalPriceStatus","currencyCode","map","billingAddressRequired","billingAddressParameters","format","allowCreditCards","loadPaymentData","parseResponse","_typeof","loadedPayPalSdk","getPayPal","loadSdk","_loadSdk","sdkLoader","prevPayPalSdk","paypal","Object","assign","_init","container","paypalCheckout","braintreePayPalCheckout","loadPayPalSDK","currency","intent","commit","renderButtons","_renderButtons","buttonRenderer","Buttons","fundingSource","onApprove","_onApprove","_response$details","_getTransactionDetail","tokenizePayment","authorization","postalCode","_x3","createOrder","createPayment","render","useApplePayAvailabilityInterop","disposals","useDidMount","payload","useWillUnmount","forEach","applePayClient","request","session","applePay","createPaymentRequest","merchantCapabilities","total","label","ApplePaySession","onvalidatemerchant","event","merchantSession","performValidation","validationURL","completeMerchantValidation","isBraintreeError","oncancel","onpaymentauthorized","_yield$applePayClient","payment","completePayment","STATUS_SUCCESS","STATUS_FAILURE","begin","callbacks","item","_callbacks$onSuccess","failureSubscription","_callbacks$onFailure","cancelledSubscription","_callbacks$onCancel","prepareDeposit","makeDefault","_prepareDeposit","_yield$generatePaymen","generatePaymentNonce","_getPaymentTokens","_creditCard$bin","number","slice","useMigrateLegacyLocalStorage","_tryGetLegacyLastUsed","tryGetLegacyLastUsedPaymentMethod","_tryGetLegacyLastUsed2","remove","setLastUsedPaymentMethod","useInitialData","useQuery","depositInitialData","queryFn","refetchOnWindowFocus","enabled","select","sort","sortCardsByDefaultThenValidity","url","msg","exception","DepositUrl","InitialData","initialDataSchema","parse","issuerNames","includes","ZodError","useBetAccount","options","betAccount","cacheTime","fetchBetAccount","_fetchBetAccount","isReadyResolve","isReadyPromise","currentClient","braintree","clientInstance","_isReadyResolve$curre","lastUsedPaymentMethod","lastUsedPaymentMethodForAccount","_mutationFn","args","deviceData","getCurrentEnvironment","getDeviceData","useHostedFields","_ref$fields","fields","expiry","cvc","onInitError","hostedFieldsRef","hostedFields","_hostedFields$getStat","expirationDate","cvv","errors","_yield$hostedFields$t","_error","HostedFieldsError","uninitialized","getState","field","reduce","fieldName","dataset","keys","validationErrors","t1","tokenizationFailure","networkError","unknown","_number$current","_expiry$current","_cvc$current","input","letterSpacing","placeholder","hostedFieldsError","timeout","_hostedFieldsRef$curr","teardown","userContactDetails","staleTime","refetchOnReconnect","refetchOnMount","parser","contactDetailsSchema","ContactDetailsApiPath","initialState","depositFlow","createSlice","reducers","resetLastUsedPaymentMethod","_ref6","reset","_ref7","setDepositFlow","_ref8","persistReducer","whitelist","storage","debug","reducer","_slice$actions","actions","selectLastUsedPaymentMethod","fieldErrors","liabilityShiftExempt","minimumLiabilityShiftThreshold","previousError","z","object","string","regex","replace","creditCardExpirationPattern","ctx","parsedDate","parseExpirationDate","addIssue","ZodIssueCode","custom","NEVER","min","max","depositHome","FeedbackPayIdStatusChange","processId","addToast","isDismissable","content","ToastContent","icon","subtitle","FeedbackBalanceChange","balanceChangeEvent","timeoutMs","FeedbackBalanceChangeError","initializeWithCountIfNotInitialized","count","loadCounts","saveCount","nextCount","getFromLocalStorage","JSON","setInLocalStorage","stringify","card1","card2","card1Score","Number","googlePaymentClient","_googlePaymentClient","google","payments","api","PaymentsClient","environment","_window$google","supportsVersion","canMakePayments","_unused","console","warn","log","_verifyThreeDSecure","_yield$createThreeDSe","_yield$createThreeDSe2","threeDSClient","threeDSClientError","wasCancelled","createThreeDSecureClient","failedToInitialize","on","verifyCard","formatAdditionalUserInformation","noData","verificationFailed","_createThreeDSecureClient","version","_userData$Contact$Ema","_userData$Contact$Mob","_userData$NameDetails","_userData$NameDetails2","_userData$PostalAddre","_userData$PostalAddre2","additionalInfo","streetAddress","PostalAddress","StreetNumber","StreetName","StreetType","part","join","UnitNumber","Contact","Email","mobilePhoneNumber","Mobile","PhoneNumber","givenName","NameDetails","FirstName","surname","Surname","locality","Suburb","Postcode","region","Country","State","countryCodeAlpha2","paymentProcessorErrorCodes","_getDeviceData","dataCollector","kount","every","prop","_generatePaymentNonce","paymentAmount","rawResponse","post","GeneratePaymentNonce","paymentNonceResponseSchema","_x4","_deposit","depositResponseSchema","Deposit","removeFromLocalStorage","lastPayment","liabilityShiftPossible","DocumentPermission","isBusy","onChange","CheckboxInput","medicareCardColours","medicareExpiryNext10Years","thisYear","getFullYear","range","Medicare","setNumber","_useState3","_useState4","cardColour","setCardColour","_useState5","_useState6","setReference","_useState7","_useState8","middleNameOnCard","setMiddleNameOnCard","_useState9","_useState10","expiryDay","setExpiryDay","_useState11","_useState12","expiryMonth","setExpiryMonth","_useState13","_useState14","expiryYear","setExpiryYear","_useState15","_useState16","givePermission","setGivePermission","_useState17","_useState18","cardNumberError","setCardNumberError","_useState19","_useState20","referenceNumberError","setReferenceNumberError","_useState21","_useState22","cardExpiryError","setCardExpiryError","isMedicareCardExpiryValid","isCardNumberValid","isReferenceNumberValid","isGreenMedicareCardSelected","EVERYTHING_EXCEPT_NUMBERS","allowToProceed","daysInMonth","expiryDate","todayTemp","today","getMonth","getDate","days","_toConsumableArray","Array","i","day","FormLayout","DocumentBodyStyled","InputField","required","inputName","currentTarget","maxLength","inputMode","pattern","onBlur","SelectField","disablePlaceholder","defaultValue","colour","prevState","GridRow","GridCell","valign","flexGrow","hideLabel","months","year","ValidationErrorStyled","checked","DocumentNextButton","onSubmit","searchSuburbStatePostcodes","search","encodeURIComponent","searchStreetTypes","searchAddresses","withValueMapping","searchFn","results","useCountryList","countryList","getCountryList","SignUpUrl","CountryList","useSignUpNavigation","navigateTo","route","setAccountSignUp","action","signUp","setInternetProspect","internetProspect","setVerification","verification","setRwwaRanking","rwwaRanking","setFailedType","failedType","setPassportToAttemptVerification","produce","draft","_state$signUp","AgeVerification","Attempt","Passport","PassportNumber","passportNumber","BirthSurname","PlaceOfBirth","CountryOfBirth","CitizenshipGivenName","CitizenshipSurname","passportCountry","None","EnquiryId","getSignUpState","getRwwaRanking","getSignUpFailedType","savePrecommitmentDetails","_savePrecommitmentDetails","model","onCompletion","PreCommitmentDetails","SavePrecommitments","updateDepositLimitAnniversary","_updateDepositLimitAnniversary","UpdateDepositLimitAnniversary","SIGNUP_ROOT_ROUTE","contactDetails","contactDetailsError","passwordForm","biometrics","depositLimit","depositBonus","driversLicence","passport","medicare","signUpSuccess","BiometricsToggle","_ref$isDisabled","_ref$toggleState","toggleState","toggleTitle","BiometricsToggleStyled","TextContainerStyled","TextStyled","SwitchStyled","Toggle","toggledOn","isValidBsb","bsb","RegExp","formatBsb","substring","isValidAccountName","accountName","isAccountNameIncludingSurname","accountHolderSurname","toLowerCase","isValidAccountNumber","WITHDRAW_ROOT_ROUTE","home","bankAccount","bankAccountLegacy","HostContext","createContext","useContext","HostProvider","Provider","eventKey","_window$dataLayer","other","dataLayer","depositMethod","addCard","withdrawDetails","getBsbDetails","createZeptoContact","deleteZeptoContact","balanceUpdate","isBalanceChangedSuccess","isAccountBalanceChangedPushEvent","isBalanceChangedError","isAccountBalanceChangedExceptionPushEvent","payIdUpdate","Math","round","random","isPayIdStatusChangedPushEvent","WithdrawUrl","withdraw","defaultParser","json","_json","_args","fetch","method","ok","_json2","_args2","credentials","headers","JSONContentHeaders","_json3","_args3","_x5","del","_callee4","_json4","_args4","_context4","_x6","_x7","Accept","reportError","nullable","union","literal","addressSchema","unitNumber","optional","streetNumber","streetName","streetType","suburb","postcode","country","phoneNumberSchema","areaCode","phoneNumber","accountHolderSchema","betAccountHolderNumber","nameDateOfBirthChanged","boolean","nameDetails","middleName","preferredName","dateOfBirth","contact","homePhone","workPhone","mobile","or","residentialAddress","postalAddress","postalAddressSameAsResidential","primaryContact","initialIDVerificationDetail","isIDVerified","isNameVerified","isDOBVerified","isAddressVerified","remainingAttempts","canNameOrDOBChange","canNameOrDOBChangeSpecified","numberOfAddressChanges","gte","numberOfAddressChangesSpecified","primaryAccountHolderDetailsSchema","primaryAccountHolderDetails","verifyResponseSchema","driversLicenceDetails","cardNumber","residentialAddressDetails","previousResidentialAddressDetails","nameAndBirthDateDetails","birthDate","passportDetails","medicareDetails","addressChangeCount","readonly","verifyErrorMessageSchema","description","enum","PlanSeq","formattedExpiryDate","paypalPayerId","paypalEmail","array","isSecurityCompatibleClient","nonTransactionalCreditCardResponse","nullish","extend","expirationMonth","expirationYear","isRacePageDto","Tag","isResultsPageDto","FixedOddsMarketCodes","OddsEvens","InsideOutside","HeadToHead","HalfVsHalf","RunnerVsField","Concession","FavouriteOut","StartingPrice","RaceStatus","webAppVersionDetailsSchema","serverVersion","machineIdentifier","serverEnvironment","enableSentryIo","enableJsConsoleLogging","sentryIoUrl","enableAnalytics","isInternalRequest","launchDarklyClientID","eventNotificationApi","identityPoolId","racingWAStreamUrl","releaseDate","datetime","username","gitRefName","gitCommitSha","gitPipelineId","gitPipelineIid","gitProject","gitProjectUrl","gitJobId","webAppVersionsSchema","versions","record","versionsByReleaseDate","mapErrorResponseCodeToType","isInteger","betErrorTypes","errorType","values","getBetErrorType","getMultibetErrorDescription","multiBetResponse","_multiBetResponse$err","success","betErrorType","MultiErrorMapping","InvalidBonusBet","DuplicateBonusBet","mapResponse","currentItem","responses","isRefreshing","ignorePriceChanges","modifiedItem","legs","matchedLegInMultiBetResponse","leg","_matchedLegInMultiBet","matchedSingleInResponse","res","matchedSingleInResponseError","matchedLegInMultiBetErrorType","newSelection","buildSelection","prices","newMultiBetLegError","betError","isFatalErrorType","mapMultiBetError","hasFatalError","selection","multiBetLegError","isInMulti","responseLeg","specialOffers","hasSelectedSpecialOfferOnResponse","selectedSuperPickOffer","specialOffer","specialSeq","updateSpecialOffersFromResponse","isSuperPickAvailable","s","shouldClearSpecials","resError","SingleErrorMapping","HandicapChanged","getErrorMessage","investment","getNewInvestmentAfterResponse","receiptItem","receipt","isToteSelection","isFobBetReceiptResponse","responsePrices","isFobSelection","isStartingPriceSelection","priceSource","placePrice","winPrice","shouldResetInvestment","win","isBonusBet","place","bonusBet","updateItemInvestment","investmentType","betId","newValue","Currency","MIN_INVESTMENT_VALUE","MAX_INVESTMENT_VALUE","getValidBetAmount","multiComboInvestmentTypes","multiInvestment","selectedItem","items","isEachWay","newStake","divide","calculateMultiReturn","shouldRound","getMultiBetResponse","_responses$find","defaultBetSlipBetsState","isSingleExpanded","isMultiExpanded","multiBetError","f1","f2","f3","f4","f5","bonusBetId","multiReceipt","betsSlice","addItemsToBetSlip","_state$items","itemIdsToDeselectIsInMulti","some","newMultiItems","flatMap","currMultiKey","getBetsInMulti","getMultiLegEventOrRaceKey","selectionDetails","clearAllBetSlipItems","removeItemFromBetSlipById","externalBetId","isFobSportsSelection","hasTooFewMultiLegs","hasTooManyMultiLegs","setInvestmentAmount","itemId","setSelectedSpecialOffer","_itemToUpdate$selecte","_payload$specialOffer","itemToUpdate","isSpecialUsed","_item$selectedSuperPi","_itemToUpdate$selecte2","tokenId","clearAllReceiptsFromItems","isBonusCash","removeItemsWithReceipt","removeItemsWithFatalError","hasNoFatalErrors","updateBetSlipFobRacingItemPrice","_action$payload","propositionId","newWinPrice","newPlacePrice","propositionSeq","updateBetSlipSportsItemPrice","_action$payload2","eventId","marketId","outcomeId","isFobSportsDetails","toggleIsItemInMulti","isToggleItemNowInMulti","isInGroup","groupKey","toggleMultiItemBetLegType","multiLegBetType","toggleAllUpFormula","selectedBet","isAllUpSelection","formulas","formula","isSelected","toggleIsEachWay","extraReducers","builder","addCase","refreshAllBets","fulfilled","newItems","proposeAllBets","confirmAllBets","newMultiReceipt","campaignActivatedInd","_betsSlice$actions","configSlice","presetKeypadAmounts","default","user","setUserPresetDenomination","index","preset","createAsyncThunk","thunkAPI","hostHelpers","getHostHelpers","postAllBetsToServer","betslip","bets","betsState","handleSettingServerCallRejectionState","errorResponse","currentStatus","apiErrorMessage","workflowSlice","activeInvestment","keypadActiveValue","hostAccountBalance","isBettingDisabled","isHostUserLoggedIn","canShowInducements","visibleBettingSection","desiredBettingSection","setActiveInvestment","setDesiredBettingSection","setKeypadActiveValue","_ref3$payload","keypadInput","isInitValue","stringValue","_stringValue$split","_stringValue$split2","dollars","cents","currValue","currentValue","_Currency$add$toStrin","add","_Currency$add$toStrin2","determineValueFromKeypad","setWorkflowStatusToReady","setBettingDisabledStatus","setBetSlipUserAccountBalanceSync","setBetSlipIsUserLoggedInSync","setBetSlipCanShowInducementsSync","setVisibleBettingSection","pending","rejected","_workflowSlice$action","determineLegTypeFromInvestments","winInvestment","placeInvestment","calculateBoosts","winBoost","placeBoost","_selectedSuperPickOff","elementWithPriceIncrease","priceIncrease","roundDownDecimal","floor","multiItems","tooManyBets","MIN_LEGS_IN_MULTI","multiReturn","multiply","rawValue","calclulateCombinedMultiInvestment","isValidMulti","formulaTotal","multiItemsCount","MAX_LEGS_FOR_MULTI_FORMULA","multiInvestmentKey","legKey","MULTI_FORMULA_COMBINATIONS","calculateMultiFormulaReturn","formulaNumber","currentInvestment","combos","doGenerateCombinations","combo","generateMultiFormulaCombos","cur","comboCalc","calculateMultiProjectedPay","shouldExcludeFormulas","multiProjectedPay","subtract","finalMultiProjectedPay","formulaProjectedPay","MAX_LEGS_IN_RACE_MULTI","MAX_LEGS_IN_SPORT_MULTI","setHostHelpers","initHelpers","isSelectionAllowedInMulti","isSameRaceMultiSelection","isFatalMultiBetLegError","_item$multiBetLegErro","hasErrors","isValidMultiInvestmentForLegs","shouldCheckOnlyFormulas","from","multiError","uniqueKeys","Set","has","hasBeenPlaced","hasInvestment","isRaceDetails","getBetsToPlace","hasNoUnspecifiedErrors","isArray","bet","races","isFobDetails","sportId","isFobPropositionSelection","isFobMatchedSelection","betType","isMysterySelection","mysteryOption","isNoveltyBetType","isMysteryComboBetType","productCode","marketCode","isStartingPriceMatchedSelection","asRaceDetails","propositionName","Boolean","allowedKeys","MoneyInput","onClearButtonPress","onInputValueChange","inputProps","inputWidth","MoneyInputStyled","autoComplete","prefix","suffix","PillButtonStyled","isIconOnlyButton","onKeyDown","Input","smx1","border","xl8","marginInlineStart","marginInlineEnd","PillButton","defaultShortcutAmounts","fiveDigitMoneyInputRegex","_ref$shortcutAmounts","shortcutAmounts","PaymentAmountContainerStyled","InputContainerStyled","sanitizedValue","onInputValueChanged","defer","AmountButtonsContainerStyled","AmountButtonStyled","onAddDefinedAmount","gapY","gapX","AccountHeaderWrapper","ButtonWrapper","TextWrapper","MainTitle","Description","getTextAlign","xl4","BaseButtonStyled","verticalAlign","transition","touchAction","buttonColors","hexColors","sushi","hover","darken","lighten","secondary","nightRider","veryLightGrey","whiteSmoke","light","dark","nero","charCoal","muted","danger","freeSpeechRed","transparentize","link","gainsboro","tab","blueDiamond","darkGrey","tab_invert","ButtonStyled","uppercaseText","borderColor","userSelect","ButtonBlockStyled","ButtonWithIconStyled","_ref3$color","ButtonCloseStyled","grey","cursor","BaseMaterialButtonStyled","paddingTop","textDecoration","SecondaryButtonStyled","PrimaryButtonStyled","_default$selected$dis","_default$selected$dis2","defaultBackground","defaultColor","defaultBorderColor","_default$selected$dis3","selectedBackground","selectedColor","selectedBorderColor","_default$selected$dis4","disabledBackground","disabledColor","ButtonSelectionStyled","_ref4$isDisabled","buttonReset","UnstyledButton","_ref$selected","_ref$uppercaseText","_ref$disabled","buttonProps","ButtonBlock","_ref$isDesktop","_ref$isBusy","busyIndicatorColour","testId","BusyIndicator","ButtonWithIcon","CloseButton","supportMap","middle","align","center","GridCellStyled","_ref3$valign","_ref3$align","minWidth","flexBasis","GridCellInnerStyled","GridRowStyled","withComponent","passPropsToChildren","propsToPass","child","SvgIconStyled","transformation","_ref$valign","_ref$height","_ref$width","sizes","fill","allraces","racesall","asterisk","backspace","blackbook","calendar","closeAccount","comment","cross","crossCircledSolid","dog","dogs","envelopeOpen","errorCircled","externalLink","favouriteNumbers","featureraces","fixed","fixedHollow","futurefinalfield","giddyup","greysboxchallenge","hamburger","help","house","info","infoCircled","infoCircledInvert","infoInvert","jockeychallenge","logout","listen","watch","blog","play","minus","minusCircled","more","mystery","notificationAdd","notifications","notificationsActive","offer","pencil","person","personMinimal","jockey","phone","plus","plusCircled","plusCircledFill","pushNotification","racingspecials","redo","resulted","scanMyBet","shareIos","shareAndroid","shareWeb","twitter","facebook","instagram","sports","statement","stm","tabLocator","tabtouchLogoCompact","tickCircled","tickCircleSolid","trackConditions","trash","trot","trots","unchecked","visibilityoff","visibilityon","warningCircled","weatherCloudy","weatherFine","weatherOvercast","weatherShowery","weatherUnkown","accumulator","ACC","alpinesports","ALP","athletics","ATL","badminton","BDM","bandy","BDY","baseball","BSB","basketball","BB","boxing","BOX","commonwealthgames","CWG","cricket","CRT","cycling","CYC","darts","DRT","elections","ELT","entertainment","ENT","esports","EST","financial","FIN","footballau","AR","footballca","CAF","footballdark","FB","footballgaelic","FBG","footballlight","FBL","footballus","AF","footballworldcup","WCP","friendlies","FRD","fustal","FUT","golf","GLF","handball","HDB","hockey","FHK","hockeyice","ICE","jackpot","lawnbowls","LBO","live","LVB","martialarts","MMA","motorsport","MTR","netball","NET","pesapallo","PES","raceall","allrace","rugby","RGL","rugbyunion","RGU","snooker","SNK","squash","SQS","surfing","WRF","surfironman","SRI","swimming","SWM","tabletennis","TTN","tennis","TN","totesports","TIPPING","volleyball","VLB","wintersports","WSP","yachting","YCT","_ref$size","className","_ref$viewBox","viewBox","resolvedPath","iconPaths","d","arrowup","arrowdown","arrowleft","arrowright","arrowdownwithtail","arrowupwithtail","refresh","specials","specialsBackground","inputBoxBaseStyles","css","appearance","outline","InputBoxStyled","lightGreyCommon","inputLabelBaseStyles","InputLabelStyled","dimGrey","lightRedCommonError","borderBottomColor","borderWidth","InputPasswordVisibilityStyled","alignContent","lola","forwardRef","handleAddOnAction","addOnIcon","addonAriaLabel","inputTestId","errorTestId","nameProp","inputType","htmlFor","CurrencyInputField","defaultTheme","radio","RadioInputStyled","visibility","backgroundImage","backgroundRepeat","backgroundPosition","RadioLabelStyled","RadioInput","CheckboxInputStyled","backgroundSize","CheckboxInputLabelStyled","minHeight","boxPosition","checkboxTestId","SuggestionsContainerStyled","listStyle","overflowY","maxItems","maxHeight","listItemFontSize","AutocompleteInputField","_ref$minChars","minChars","_ref$debounceMs","debounceMs","fetchSuggestionsCallback","onUnselect","_ref$renderInput","renderInput","renderDefaultInput","setState","setItems","debouncedOnInputValueChange","debounced","debounceFn","suggestions","suggestion","_useCombobox","useCombobox","initialSelectedItem","itemToString","_item$value","onSelectedItemChange","changes","_changes$selectedItem","stateChangeTypes","FunctionReset","highlightedIndex","getMenuProps","getInputProps","getItemProps","toggleColors","trackFill","trackFillActive","leftCircle","rightCircle","selectedText","inverted","allgreen","ToggleStyled","ThemedToggleStyled","_ref$type","stroke","toggleOnCharacter","toggleOffCharacter","ToggleProps","clipId","useId","cx","rx","ry","strokeWidth","strokeLinecap","textAnchor","cy","r","clipPath","ToggleIndicator","character","SelectBoxStyled","OptionStyled","createOption","option","_ref2$options","_ref2$childrenLast","childrenLast","selectProps","rotate360","keyframes","SpinnerOverlayStyled","SpinnerHolderStyled","SpinnerStyled","borderLeftColor","DesktopSpinnerOverlayStyled","SpinnerInlineStyled","borderStyle","_ref2$color","Spinner","DesktopSpinner","SvgComponents","GiddyUpLogo","lazy","SkyRacing","TABLogo","PayIDLogo","TABtouchLogo","TABtouchBrandLogo","dimensions","SvgComponent","Suspense","fallback","shouldStartExpanded","_ref$shouldUseDefault","shouldUseDefaultTheme","isFirstRenderRef","buttonId","regionId","_useExpandToggle","useExpandToggle","wrapperRef","contentRef","toggleExpanded","classNames","bigx3","overflow","willChange","shadow","xs","themes","greyDark","warning","BannerStyled","flexShrink","IconSize","Banner","_ref$hideIcon","hideIcon","onClickDismiss","BannerIcon","_ref$isFullWidth","_ref2$size","_ref2$isFullWidth","_ref2$isIconOnlyButto","buttonSizing","_ref3$isIconOnlyButto","_ref3$isPillButton","isPillButton","pill","xl","secondary_color","secondary_grey","secondary_outline","secondary_destructive","tertiary_color","transparent","tertiary_grey","positive","destructive","InfoBoxStyled","MessageContainer","infoBoxSizing","infoBoxColors","orange","red","Icons","BannerError","BannerNeutral","BannerPrimary","BannerSuccess","BannerWarning","CustomBetSlipWithTabtouchLogo","CustomBetslip","CustomScale02","CustomScanMyBet","DuocolorAlertTriangle","DuocolorArrowCircleRight","DuocolorArrowNarrowRight","DuocolorArrowsUp","DuocolorBank","DuocolorCalendar","DuocolorCheckCircle","DuocolorCloud01","DuocolorCloudRaining05","DuocolorCloudSun02","DuocolorCopy02","DuocolorCurrencyDollarCircle","DuocolorDelete","DuocolorLoading01","DuocolorStar01","DuocolorSun","LineAlertCircle","LineAlertTriangle","LineBank","LineBankNote03","LineBellPlus","LineBookmarkAdd","LineCheck","LineCheckCircle","LineCheckCircleBroken","LineCreditCard02","LineInfoCircle","LineMaximize01","LineMaximize02","LineMenu01","LineMinimize02","LinePencil01","LinePhoneCall01","LinePlaceholder","LinePlusCircle","LineReceipt","LineRefreshCw05","LineRepeat04","LineSearchSm","LineShare02","LineStar01","LineTrash01","LineTrash04","LineVolumeMax","LineVolumeX","LogoFacebook","LogoInstagram","LogoX","SolidBarChart10","SolidBellRinging01","SolidCheckCircle","SolidChevronDown","SolidChevronLeft","SolidChevronRight","SolidChevronRightDouble","SolidChevronUp","SolidCircle","SolidFile06","SolidLayoutGrid01","SolidList","SolidPauseCircle","SolidPlayCircle","SolidRefreshCw01","SolidRows02","SolidScale02","SolidSkipBack15","SolidSkipForward15","SolidStar01","SolidStopCircle","SolidTarget03","SolidTrendUp01","SolidTriangle","SolidTrophy01","SolidUser01","SolidXCircle","SolidXClose","svgAttributes","IconComponent","IconWrapper","Checkbox","inputAttributes","CheckboxStyled","xmlns","strokeLinejoin","span","InputFieldStyled","_colors$disabled4","_colors$focused","_colors$focused2","_colors$disabled5","_colors$disabled6","_ref$invalid","invalid","_theme$components$Inp","components","effectiveColors","isInvalid","_colors$disabled$back","_colors$disabled","_colors$disabled$bord","_colors$disabled2","_colors$disabled$help","_colors$disabled3","_colors$invalid$backg","_colors$invalid","_colors$invalid$borde","_colors$invalid2","_colors$invalid$helpT","_colors$invalid3","determineColors","outlineColor","outlineStyle","outlineWidth","focused","caretColor","caret","_ref$isInvalid","Password","isPasswordVisible","setPasswordVisible","isVisible","CopyFieldStyled","CopyButtonStyled","onCopyError","timeoutRef","valueWasRecentlyCopied","setValueWasRecentlyCopied","stopPropagation","copyToClipboard","bold","borderBottom","flexDirections","horizontal","vertical","AlertBoxActionsStyled","orientation","AlertBoxIconStyled","AlertBoxContentStyled","xl2","AlertBox","_ref$confirmColor","confirmColor","confirmText","onConfirm","_ref$cancelColor","cancelColor","cancelText","_ref$actionOrientatio","actionOrientation","ModalOverlay","centered","CustomerServiceTelephone","isInternational","callCenterInternationalPhoneNumber","callCenterPhoneNumber","linkText","LinkStyled","buttonAttributes","ApplePayButtonStyled","provider","PaymentMethodButtonStyled","makeAccessibleName","CreditCardDisplayStyled","CreditCardDisplay","Mastercard","Visa","themeName","_themes$themeName","textColor","svgWidth","svgHeight","PaymentMethodSelectionButtonStyled","PaymentMethodSelectionIconStyled","PaymentMethodSelectionTextStyled","PaymentMethodSelectionChevronStyled","PaymentMethodLogo","ChevronRight","ProviderMap","VISA","MASTER_CARD","paypalGold","applepay","mastercard","visa","americanExpressBlue","americanExpress","googlepay","CreditCardAlertLabel","alertLabel","BadgeStyled","Alert","nameCardIssuerMap","CreditCardName","CreditCardListStyled","li","CreditCardListItemStyled","CreditCardList","renderSuffix","renderIcon","_renderIcon","isHighlightedCard","isSameCard","Logo","cardIssuerNameMap","cardIssuer","LogoContainerStyled","CardIssuerStyled","issuer","aOrAn","_ref$isOpenByDefault","setIsOpen","isPrimaryCardValid","shouldRenderDropdown","CreditCardSelectorStyled","CreditCardSelectorToggleStyled","as","determineIndefiniteArticle","tabIndex","isCardSelected","ul","PaypalLogo","GooglePayLogo","ApplePayLogo","BPayLogo","maskType","maskUnits","mask","fillRule","clipRule","CreditCardLogo","draw","strokeDashoffset","strokeDasharray","PanelIconStyled","_ref$backgroundColor","PanelBankCardIconStyled","_themes$provider","PanelHeaderStyled","PanelSubHeaderStyled","PanelButtonsStyled","LoadingSpinner","Header","Subheader","onConfirmed","onCanceled","depositSourceMap","Animation","_ref$wasDepositDeclin","wasDepositDeclined","_ref$message","inAppPayments","PaymentMethodsSchema","PaymentMethodsSelfServeSchema","formatCardText","otherCard","safeParse","LoaderBarsStyled","isWhite","SvgStyled","x1","y1","x2","y2","gradientUnits","stopColor","stopOpacity","globalToastEmitter","mitt","toast","emit","removeToast","createToastsEventEmitter","Toast","onMount","toastEmitter","toastRef","Infinity","timerId","ToastStyled","getToastThemeClass","animationFillMode","alignSelf","Toasts","_ref$toastEmitter","isRelativeToParent","toastsMapRef","Map","_React$useState2","toasts","setToasts","toastElRefDictRef","registerToastRefEl","set","_toastsMapRef$current","_toastsMapRef$current2","_toastElRefDictRef$cu","toastEl","delete","WrapperStyled","layering","modalOverlay","measurements","mobi","Content","iconPathDict","full","_ref$dismissStatus","onDismiss","_ref$modalStyle","useRenderTimeoutControl","containerClassName","canBeDismissed","isCloseButtonVisible","ModalContainerStyled","ModalStyled","backdropFilter","lgx4","textShadow","_ref$shouldShowHeader","_ref$shouldCoverFulls","shouldCoverFullscreen","_ref$requiresExtraBot","shouldRenderTray","scrollContainerRef","useBodyScrollLock","wrapperClassNames","overlayHigh","bondi","chocolate","celery","base","xl3","xl5","xl6","xl7","baseSize","desktop","baseLayer","stickyPageElements","pagePopoverElements","appHeader","overlayLow","login","skyVideoPlayerFloating","headerHeight","bottomTabsHeight","lgx3","lgx5","lgx6","bigx2","huge","hugex1","hugex2","hugex3","inputColors","linkColors","visited","active","newTheme","Link","Breakpoint","media","operator","breakpoint","indexOf","getMediaQueryPrefix","pixelValue","getMediaQueryValue","greaterThan","greaterOrEqualThan","lessThan","lessOrEqualThan","VerificationButtonStyled","VerificationButton","_ref$showIcon","showIcon","FooterMessageStyled","headerStyling","bodyTextStyling","layoutBaseStyling","InfoLayoutStyled","gridRow","h1","FormLayoutStyled","h2","_ref$invertColors","invertColors","_ref$footerMessage","footerMessage","_ref$footerMessageInP","footerMessageInProgress","darkPurple","vividViolet","deepLilac","affair","lavenderBlue","amethyst","jacarta","blueDiamond90L","blueDiamond97L","grey1","athensGrey","grey3","lightGrey","grey2","matterhorn","summerSky","cobalt","infoBlueLight","skyTvBlue","infoBlueDark","bondiBlue","scooter","darkCyan","pattensBlue","paleCornflowerBlue","pacificBlue","citrus","yellowGreen","crimson","cinnabar","skyTvRed","tangerine","alizarin","lightOrange","capeHoney","lemon","lilac","racingWa","brand","darkMuted","kambi","Constants","ResponsibleWageringURL","BetStopURL","GamblingHelpOnlineURL","GamblingHelpPhoneNumber","FeatureFlags","RACING_HOMEPAGE_FEATURED","HOMEPAGE_SUPERPICKS","HOMEPAGE_SUPERPICKS_DATA","RACING_SMART_FORM_FIXED_ODDS","POC_API_GATEWAY","PUSHDATA_PRICECHANGE","PUSHDATA_RACECLOSE","PUSHDATA_USERINFO","NATIVE_DEPOSITS","CONFIG_BALANCE_POLL_INTERVAL","VISION_PLAYER_MIGRATION","MYSTERY_ON_RACE_BETTING_PAGE","KAMBI_MAINTENANCE","REBET_PENDING_TICKET","REBET_TAB","SHARE_BET","SHARE_BET_LINK","RATE_MY_APP","POPULAR_BETS_DISPLAY","TRENDING_SAME_RACE_MULTI","TAKE_A_BREAK","SAME_RACE_MULTI","NCPF_ACTIVITY_STATEMENTS","RACE_PAGE_VIDEO_CONTENT","QUICKBET_KEEP_SELECTIONS","CENTS_INCREMENTS_BET","BONUS_CASH_IMPROVEMENTS","SEARCH_UNMATCHED_RACING","ENHANCED_BETSLIP","INTELLIGENT_FORM_DISPLAY","SHOW_SKY_CHANNEL","SHARE_BLACKBOOK_RUNNER","WITHDRAW_UPLIFT","WITHDRAW_REALTIME","SWIPE_TO_CHANGE_RACE","HAPTIC_FEEDBACK","PENDING_BETS_FOR_RACE","FOO_FORM_SUMMARY","FOO_FORM_ENABLED","RESULTED_TICKET_REPLAYS","MULTIPLE_RACE_ALERTS_ENABLED","SIGNUP_DESIGN","SIGNUP_OPT_IN_MARKING","FIXED_ODDS_SPORTS","SPORTS_API_DATA_SOURCE","FIELD_SUMMARY_V2","SEND_GA_EVENTS_TO_FIREBASE","NEW_BET_SLIP_DESIGN","UNBUNDLE_IOS_JS","RACING_WA_VISION_CHANNEL","RACE_REPLAY_IMPROVEMENTS","PENDING_BETS_BUTTON_IN_APP_HEADER","getFlagDefaults","flag","_FeatureFlags$flag","statesInAustralia","createAddressMoniker","address","extractSuburbStatePostcode","suburbStateAndPostcode","parts","trim","createFullSuburb","formatAddress","start","dayjs","advancedFormat","isSameOrAfter","isSameOrBefore","isToday","isTomorrow","isYesterday","localeData","relativeTime","timezone","utc","customParseFormat","duration","setDefault","ONE_MINUTE","formatDate","date","moment","toISODate","formatDateStringWithoutChangingTimezone","dateString","birthDateFormat","parseBirthDate","birthDateString","toDate","formatBirthDate","month","currentYear","currentLocks","registerBodyScrollLock","el","disableBodyScroll","allowTouchMove","getAttribute","deregisterBodyScrollLock","clearAllBodyScrollLocks","func","waitMilliseconds","setUpDebounce","_len","_key","debounceWithReturn","funcToDebounce","delay","_len2","argsFromCall","_key2","groupBy","list","getKey","previous","group","tap","tappable","callback","deferredFunction","isEnabled","scrollableContentRef","_ref$collapsedHeight","collapsedHeight","timeoutMsRef","setIsExpanded","wrapperEl","contentEl","offsetHeight","autoHeightTimeoutId","animationTimeoutId","requestAnimationFrame","shouldForceExpandValue","curr","_ref$shouldRender","shouldRenderControlState","setShouldRenderControlState","prevShouldRenderControlState","glue","finalGlue","contents","copyToClipboardNative","copyToClipboardWeb","_navigator$clipboard","navigator","clipboard","writeText","textarea","createElement","textContent","didCopy","execCommand","copyToClipboardLegacy","DOMException","matches","match","_matches","monthFromCard","padStart","PRODUCTION_HOST_NAMES","hostname","location","hasValue","obj","numberValue","isNaN","timeoutInMs","timeoutValue","attributes","script","src","async","appendChild","useSentryScope","areaTag","userId","_ref$useUserIdAsFinge","useUserIdAsFingerprint","configureSentryScope","resetSentryScope","configureScope","scope","setTag","setUser","setFingerprint","clearUser","_options$startOpen","startOpen","setOpen","toggle","category","level","addBreadcrumb","reportWarning","captureMessage","captureException","last","startsWithVowelPattern","word","numberFormatter","numberFormatterWithZeroDecimal","_numberFormatter","_numberFormatterWithZ","_options$decimalPlace","decimalPlaces","isFinite","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","roundEstimateDown","decimals","strValue","decimalPosition","sliceEndPosition","toDisplayPrice","int","dec","_price$toString$split","_price$toString$split2","_price$toString$split3","_price$toString$split4","_price$toString$split5","_price$toString$split6","defaults","errorOnInvalid","negativePattern","opts","_value","_settings","settings","v","roundToTwoDecimals","_this$_settings$optio","abs","parseFloat","useRounding","decimalString","isLocalStorageSupported","localStorage","getItem","setItem","removeItem","swallowQuotaExceededError","commService","CommService","subscribers","topic","callbackRef","_this$subscribers$top","_this$subscribers$top2","indexToRemove","findIndex","currListener","splice","_this$subscribers$top3","_this$subscribers$top4","reactNativeConstants","ReactNativeConstants","OS","ReactNativeWebView","isReactNativeIos","MajorVersion","AppVersion","messageHandler","ReactNativeComms","_window$ReactNativeWe","v4","postMessage","removeCallback","addCallback","messageId","_JSON$parse","_JSON$parse$id","notifySubscribers","GiddyUpTabChanged","stateMachine","QuaddieValueChanged","navigateHome","createIntent","navigateToContactDetailsEdit","navigateToDepositLimitsView","navigateToDepositLimitsEdit","navigateToPendingBets","navigateToNextEvents","navigateBack","navigateHistoryBack","pushHandlerTag","popHandlerTag","modalNavigateBack","navigateToLogout","navigateToMeeting","navigateToRace","navigateToFixedMeeting","navigateToFixedRace","navigateToFixedProduct","navigationState$","attachDriver","path","driver","immutable","tag","hash","back","_intent$data","saveSuccess","accountHolderNumber","_intent$data2","fixtureId","raceNumber","fixtureDate","distinctUntilChanged","deepMerge","source","isObject","prototype","hasOwnProperty","updateDataLayer","gtm","assignStructuredSearch","structuredSearch","trackAccountNumber","trackActionInvoked","actionTaken","actionInvoked","trackModalState","modalDisplayed","modalName","navigation","giddyUpViewed","giddyUp","setGiddyUpQuaddieValue","quaddieValueSelected","setGiddyUpTab","selectedTab","navigationDefaultData","currentScreenName","currentScreenCode","previousScreenCode","previousScreenName","giddyUpDefaultData","defaultData","accountOperationType","featureToggles","isVisionOpen","isHapticsEnabled","isEnhancedBetslipEnabled","isPayoutNotificationsEnabled","isBiometricsEnabled","preferences","cashBetting","productType","construction","placementMethod","isFirstBet","racing","tote","cost","numberOfTickets","bonusCashUsed","bonusCashAmount","mixed","betBatchId","tags","openedWith","quickbet","keypadState","opened","timestamp","closed","betPlaced","specialOfferSelection","localAuthAnalyticsData","msgBusName","msgDispatched","msgName","msgType","device","bioMetricsStatus","present","deviceInfo","deviceModel","deviceFamily","deviceName","deviceMajorVersion","deviceMinorVersion","deviceOSMajorVersion","deviceOSMinorVersion","deviceOSPatchVersion","deviceRawInfo","deviceDisplayName","deviceDisplayPPI","deviceNumCores","deviceCPUFreq","isLocalCustomPinAvailable","isLocalDevicePinAvailable","localAuthAccounts","isLocalAuthActive","localAuthActivationDateTime","localAuthLastLoginDateTime","localAuthMethod","localAuthMethodAttempted","numberOfFailedLocalAuthAttempts","uniqueUserId","eventDateTime","eventName","criteria","nav","menu","loginForgotPassword","loginForgotAccountNumber","loginForgotAccountNumberSent","loginResetPasswordSucces","loginSuccess","loginFailed","searchQuery","profileSettingsChange","accountDropDownOpened","accountDropDownClick","navExit","navNav","exitToBaseKey","exitToFacebook","exitToTwitter","exitToAndroid","exitToIos","exitToWebsite","exitToAflHub","exitToAndroidInstructions","betSelected","betAccountSelected","betAccountReview","betAccountProcessed","quickbetOpen","quickbetClosed","quickbetAccountSelected","quickbetAccountReview","quickbetAccountProcessed","quickbetBonusBetButtonShown","quickbetBonusBetButtonActivated","quickbetBonusBetButtonDeactivated","quickbetBonusBetSelected","quickbetBonusBetUnselected","quickbetBonusCashSelected","quickbetBonusCashUnselected","quickbetBonusBetProposed","quickbetBonusBetAddedToBetslip","quickbetBonusCashRemoved","quickbetBonusCashButtonActivated","quickbetBonusCashButtonDeactivated","mysteryBonusCashButtonActivated","mysteryBonusCashButtonDeactivated","betslipBetaSelected","betslipBetaReview","betslipBetaProcessed","betslipBetAdded","betslipBetRemoved","betslipCleared","betslipAccountSelected","betslipAccountReview","betslipAccountProcessed","betslipCashSelected","betslipBonusBetButtonShown","betslipBonusBetButtonActivated","betslipBonusBetButtonDeactivated","betslipBonusBetSelected","betslipBonusBetUnselected","betslipBonusBetChosen","betslipBonusBetConfirmed","betslipBonusCashRemoved","mysterySelected","mysteryAccountSelected","mysteryReview","mysteryReceipt","favNumbersSelected","favNumbersAccountSelected","favNumbersAccountReview","favNumbersAccountProcessed","tippingSelected","tippingAccountSelected","tippingAccountReview","tippingAccountProcessed","multiBetAdded","multiBetRemoved","multiCleared","multiAccountSelected","multiAccountReview","multiAccountProcessed","multiToastClicked","accountProcessed","depositBaseKey","checkInBaseKey","activityBaseKey","visionOpened","visionClosed","visionPositionChanged","visionFullScreenOn","visionFullScreenOff","visionSky1Selected","visionSky2Selected","visionRacingWASelected","visionRaceReplaySelected","visionWindowResized","visionMuted","visionUnMuted","skyPendingBetsOpen","skyPendingBetsClosed","radioOn","radioOff","trendingBetSelected","trendingBetSortingChanged","raceNotificationEnabled","raceNotificationDisabled","shareBet","shareBetLinkOpen","shareBetLinkLogin","shareBetLinkAcquisition","shareBetLinkPlaced","shareBlackbook","rebet","loadedBetBetslip","takeABreakInformation","takeABreakConfirmation","takeABreakAlreadyActive","takeABreakCancel","takeABreakSubmitSelection","takeABreakSubmitSucceeded","takeABreakSubmitFailed","activityStatementsSelected","activityStatementRequestSubmitted","activityStatementRequestSuccess","activityStatementRequestFailure","activityStatementsUpdateEmail","androidMigrationNotNow","androidMigrationReinstall","accountActivityTabChange","tooltipDismiss","productSelectionChanged","racePromotionLoaded","racePromotionOpened","racePromotionClosed","racePromotionTermsAndConditionsClicked","racePreviewLoaded","racePreviewOpened","racePreviewClosed","raceReplayOpened","raceReplayLaunched","raceReplayFullScreen","raceReplayMute","raceReplayClosed","videoPreviewLoaded","videoPreviewOpened","videoPreviewClosed","videoPreviewPlayed","videoPreviewNotSupported","betInformerButtonPressed","betModifierButtonPressed","meetingsCalendarNextMonth","meetingsCalendarPrevMonth","meetingsCalendarSelectMonth","meetingsCalendarOpened","meetingsCalendarSelectedDay","meetingsFavouriteAdded","meetingsFavouriteRemoved","meetingsFavouriteUsed","meetingsRaceCodeToggle","meetingsDayQuickSelect","meetingsDayPrevArrow","meetingsDayNextArrow","tipsBetClicked","racePreviewBetClicked","biometricsTogglePressed","hamburgerMenuClicked","blackbookOddsClicked","blackbookAlertsUpdated","blackbookNavigateToRace","blackbookEntryDeleteClicked","blackbookEntryDeleted","blackbookEntryDeleteCanceled","blackbookEntryExpanded","blackbookSortChanged","blackbookCommentClicked","blackbookCommentCancel","blackbookCommentSave","blackbookAddRunner","blackbookGoToBlackbook","blackbookUnableToAdd","blackbookChangeView","featureBannerViewed","featureItemBannerViewed","featureBannerClicked","featureItemClicked","categoryNavigation","quickDepositShown","quickDepositStarted","quickDepositSucceeded","quickDepositFailed","quickDepositCancelled","quickDepositOtherDepositClicked","quickDepositEditBetClicked","quickDeposit3dSecure","quickDepositNon3dSecure","quickDeposit3dSecureNotShifted","quickDeposit3dSecureError","quickDeposit3dSecureUserDataSuccess","quickDeposit3dSecureUserDataFail","signUpClicked","signUpStart","signUpJoin","signUpVerifyAddress","signUpCreatePassword","signUpDepositLimits","signUpUnsuccessful","signUpUnsuccessfulCallUs","signUpComplete","signUpDepositClick","verificationSelectOption","signUpVerificationEnterIdentification","verificationAccountPending","signUpAlreadyHaveAccount","signUpGoBackHomePage","signUpNeedAssistance","signUpError","raceCardSwiped","raceCardPendingBetsOpen","raceCardPendingBetsViewAll","raceCardResultedBetsOpen","raceCardResultedBetsViewAll","raceCardSorting","skyRaceCardListViewOpen","skyRaceCardFilterCodeUpdate","skyRaceCardFilterRegionUpdate","moreSkyRacesLoaded","resetSkyScrollView","verificationBannerLoaded","verificationCallUs","verificationVerifyNow","verificationStart","verificationDetailsCorrect","verificationEditDetails","verificationEnterIdentification","verificationSuccess","verificationDepositClick","verificationFail","verificationEditDetailsLocked","verificationNeedAssistance","verificationGoBackHomePage","verificationError","verificationContactUs","verificationCallUsLater","verificationBetOffer","verificationGetInTouch","verificationSavedDetails","withdrawal_error","withdrawal_cancel","withdrawal_success","optimoveTrack","formOpened","formClosed","getHistory","addToHistory","historyData","resetBetData","saveTrackData","loadTrackData","deserialisedStorage","activateDebug","deactivateDebug","trackNav","trackKey","trackBetSingleSelected","trackBetSingleReview","trackBetSingleReceipt","trackBetSlipAdd","trackEvent","trackBetSlipReview","trackBetSlipReceipt","trackBetSlipCashSelected","trackBetSlipClear","trackMysterySelected","trackMysteryReview","trackMysteryReceipt","trackFavNumbersSelected","trackFavNumbersReview","trackFavNumbersReceipt","trackTippingSelected","trackTippingReview","trackTippingReceipt","trackMultiAdd","trackMultiReview","trackMultiReceipt","trackMultiClear","trackMultiRemove","trackExit","externalSite","trackMenu","trackAccount","trackDeposit","trackCheckIn","trackSearchQuery","searchQueryText","trackTrendingBetSelected","trackTrendingBetSortingChanged","trackShareBet","trackRebet","trackLoadedBetBetslip","trackTakeABreakInformation","trackTakeABreakConfirmation","trackTakeABreakAlreadyActive","trackTakeABreakCancel","trackTakeABreakSubmitSelection","trackTakeABreakSubmitSucceeded","trackTakeABreakSubmitFailed","trackActivityStatementsSelected","trackActivityStatementRequestSubmitted","emailAddresses","trackActivityStatementRequestSuccess","trackActivityStatementRequestFailure","trackActivityStatementsUpdateEmail","trackAccountActivityTab","trackBonusBetEvent","metadata","trackRacePromotionLoaded","trackRacePromotionOpened","trackRacePromotionClosed","trackRacePromotionTermsAndConditionsClicked","trackSideMenuEvent","trackOnRadioToggle","isRadioPlaying","sourceComponent","page","trackRacePreviewLoaded","trackRacePreviewOpened","trackRacePreviewClosed","trackLoginSuccess","keepLoggedIn","rememberAccount","isBioAuthUsed","trackLoginFailed","trackLogout","trackLoginForgotPassword","trackLoginForgotAccountNumber","trackLoginForgotAccountNumberSent","deliveryMethod","trackLoginResetPasswordSuccess","trackVideoPreviewLoaded","trackVideoPreviewOpened","trackVideoPreviewClosed","trackVideoPreviewPlayed","trackVideoPreviewNotSupported","streamUrl","contentType","trackBiometricsToggle","userAccountState$","take","subscribe","appVersion","fullClientVersion","logFirebaseAnalyticsEvent","_window$dataLayer2","_data$accountNumber","_data$accountNumber2","getFeatureValue","flatData","flattenObjectRecursive","flattenObjectForFirebase","keyWithPrefix","isHome","isHomeUrl","navChange","getHashFragment","ERROR_CODE_APP_VERSION_MISMATCH","ERROR_CODE_UNAUTHORIZED","ApiServiceError","fetchFromApi","Headers","optionalHeaders","isRelativeUrl","getServerVersion","getLastKnownLocationAsString","getLastKnownVenueAsString","addCustomHeaders","reload","HasLoggedOut","_get","_post","_response$headers$get","getPostParameters","deleteAsync","_deleteAsync","_response$headers$get2","isInIosBrowser","userAgent","logDebug","fetchQuery","serverConfigQuery","config","logError","TABTOUCH","configuration","MYSTERY_BET_ROUTE","AppRoutes","Home","SignUp","CompletedSignUp","SIGNUP_COMPLETE_ROUTE","Jackpots","NextEvents","SportsRoot","KAMBI_ROOT_ROUTE","Sports","Meetings","Account","AccountLogout","AccountActivity","ACCOUNT_ACTIVITY_ROUTE","ActivityStatements","ACTIVITY_STATEMENTS_ROUTE","ChangePassword","ChangeTemporaryPassword","CHANGE_TEMP_PASSWORD_ROUTE","Settings","ContactDetails","ContactUs","ContactDetailsEdit","MarketingCommunications","CloseAccount","FavouriteNumbers","StructuredSearch","StructuredSearchRoute","Withdraw","BankAccount","BankAccountRoute","BankAccountEdit","BankAccountEditRoute","Precommitment","PRECOMMITMENT_ROUTE","TakeABreak","TAKE_A_BREAK_ROUTE","RaceCard","RaceCardSky","RaceList","RaceEvents","RaceCardFixedOnly","Specials","MysteryBet","Tipping","Blackbook","Offers","GoodThings","TABLocatorWeb","Toolbox","Biometrics","Verification","DepositLimitsEdit","DepositLimits","RACES_ROUTES","CREATE_ACTIVITY_STATEMENT_PATH","NothingToShowStyled","BetOfferContainerStyled","BonusHeaderRowStyled","BonusCellStyled","BonusIconStyled","BonusDetailRowStyled","BonusAmountsRowStyled","BonusAmountsHeadingStyled","BonusAmountsValueStyled","BonusFineprintRowStyled","BonusButtonRowStyled","BonusButtonCellStyled","FaqContainerStyled","FaqLinkStyled","BetOfferItem","shouldDisplayCampaign","campaign","getTitleText","shouldDisplayAmounts","getTotalAmount","getRemainingAmount","getTermsAndConditions","rel","shouldShowButton","handleCampaignClick","getButtonText","isActivationPending","isLive","isActivated","triggerType","initialAmount","remainingAmount","rewardExpiryDate","rewardExpiry","minimumBet","minimumAmount","minimumBetString","PRECOMMITMENT_API_PATH_PREFIX","DEFAULT_COOLING_OFF_PERIOD_DAYS","trackSignUpClick","trackSignUpStart","trackSignUpJoin","trackSignUpVerifyAddress","addressMethod","trackSignUpCreatePassword","previousStep","trackSignUpDepositLimits","depositFrequency","limitAmount","skipped","trackSignUpComplete","trackSignUpDepositClick","trackVerificationSelectOption","optionSelected","repeatAttempt","trackVerificationEnterIdentification","verifyResult","trackSignUpAlreadyHaveAccount","trackSignUpGoBackHomePage","trackSignUpNeedAssistance","trackSignUpError","trackSignUpUnsuccessful","trackSignUpUnsuccessfulCallUs","OldSignUpPage","NewSignUpPage","signUpDesign","useFeature","useDisableAppHeaderRender","SignUpPage","StrictMode","TAKE_A_BREAK_API_PATH_PREFIX","verificationSlice","contactDetailsVerified","isVerified","verifyContactDetails","hasBeenVerified","_verificationSlice$ac","sharedParams","verificationEntry","verificationFlow","trackVerificationBannerLoaded","params","trackVerificationVerifyNowButtonClicked","trackVerificationStart","trackVerificationDetailsCorrect","trackVerificationEditDetails","trackVerificationDepositClick","trackVerificationNeedAssistance","trackVerificationGoBackHomePage","trackVerificationError","trackVerificationContactUs","trackVerificationCallUsLater","trackVerificationSavedDetails","getRaceUrl","_campaign$redemptionD","redemptionDetails","baseUrl","accountActivitySlice","activeReplayTicketId","pendingSortOrder","resultsSortOrder","setActiveReplayTicketId","setPendingSortOrder","setResultsSortOrder","_accountActivitySlice","ACCOUNT_ACTIVITY_PENDING_ROUTE","ACCOUNT_ACTIVITY_RESULTS_ROUTE","cacheCleaner","ONE_HOUR","DEFAULT_SUPERPICK_STATUS","isLoading","tokens","refetch","_cacheCleaner","useGetSpecialTokens","_superpicksMap$toJS","accountState","useObservable","defaultUserAccountState","superpicksMap","superpicks","toJS","query","_querySpecialTokens","querySpecialTokens","retry","refetchInterval","refetchIntervalInBackground","onSettled","SetSuperpickStatus","getSpecialTokenUrl","populatedCurrentTokens","_json$data","_json$data4","isTokenFault","TokensFault","_json$data2","_json$data3","Message","ErrorCode","Tokens","AppHeaderButtonStyled","HamburgerButton","toggleIsHamburgerMenuOpen","BackButton","routeState$","routeState","AppHeaderLogo","LogoButtonStyled","LogoSVGStyled","IconLegacy","SignUpButton","LoginButton","showLogin","containerType","BET_SLIP_BUTTON_ID","appHeaderSlice","isAppHeaderVisible","isBalanceVisible","isBetSlipNewOpen","isDropDownOpen","isHamburgerMenuOpen","isStickyEnabled","isPreviousPendingBetsSportsOnly","shouldDisableAppHeaderRender","toggleIsAppHeaderSticky","toggleIsAppHeaderVisible","toggleIsBalanceVisible","toggleIsDropDownOpen","setDisableAppHeaderRender","setBetSlipNewIsOpen","setIsPreviousPendingBetsSportsOnly","_appHeaderSlice$actio","useAppDispatch","blackbookSlice","sortOrder","sortOrderJockeys","setSortOrder","setSortOrderJockeys","_blackbookSlice$actio","defaultPhoneCountryCode","getContactDetailsFields","BetAccountHolderNumber","fullName","buildName","PreferredName","buildDateOfBirth","DateOfBirth","phoneMobile","buildPhoneNumber","phoneHome","HomePhone","phoneWork","WorkPhone","addressResidential","ResidentialAddress","addressResidentialMoniker","addressPostal","PostalAddressSameAsResidential","addressPostalMoniker","addressPostalSame","driversLicenceNumber","DriversLicence","driversLicenceState","driversLicenceCardNumber","CardNumber","PassportCountry","medicareBlueYellowExpiryDate","BlueYellowMedicareExpiryDate","medicareGreenExpiry","GreenMedicareExpiry","medicareCardColour","MedicareCardColour","medicareMiddleNameOnCard","MedicareMiddleNameOnCard","medicareNumber","medicareReference","Reference","NameDateOfBirthChanged","nameDateOfBirthChangedInitial","isInternationalCustomer","MiddleName","n","AreaCode","buildAddress","addressLine","suburbStatePostcode","serializeContactDetails","BetAccountHolder","NameChanged","parseLandlinePhoneNumber","exec","CountryCode","ResidentialAddressMoniker","VerifyResidentialAddress","verifyResidentialAddress","PostalAddressMoniker","VerifyPostalAddress","verifyPostalAddress","defaultContactDetailsState","updateSuccess","loading","isReverificationSuccess","updateFailed","isAdditionalDetailsChanged","agreeToVerifyAdditionalDetails","snapshotAfterUpdate","makeTypedFactory","ValidationErrorsFactory","ValidationFields","UpdateFields","createSignal","SaveButtonClicked","Reset","UpdateSuccess","UpdateFailed","ReverificationSucceeded","ReverificationFailed","ChangeValue","ValidateField","ChangeResidentialAddress","ChangePostalAddress","ContactDetailsStateFactory","validateAField","licenceNumber","medicareColor","isEmailValid","isPhoneNumberValid","isLicenceCardNumberValid","isPassportNumberValid","licenceCardNumber","isFieldValidationSuccess","state$","newState","merge","validateAllFields","saveContactDetails","resp","isContactDetailsUpdateSuccess","hardInvalidate","ReinitialiseReverificationDetails","cancelRefetch","save","_signal$data","currentState","haveResidentailAddressChanged","fieldError","hasIn","setIn","_signal$data2","havePostalAddressChanged","_signal$data3","haveAdditionalDetailsChanged","App","_ref$asModal","_useObservablePropert","useObservableProperties","isBodyScrollLocked","containerElementRef","DepositMainContainer","OverlayClose","ModalBackdrop","MainContainer","overscrollBehavior","needsExtraBottomPadding","openDepositModal","openDeposit","OverlayOpen","layer","trackOptimoveEvent","customURL","pageTtile","trackTopNavigationClicked","cn_target","trackBottomNavigationClicked","KAMBI_HOME_HASH_ROUTE","KAMBI_BETHISTORY_HASH_ROUTE","KAMBI_PENDING_HASH_ROUTE","KAMBI_RESULTED_HASH_ROUTE","KAMBI_CSS_HIDDEN_CLASS","KAMBI_BETSLIP_DIV_CLASS","KAMBI_DIV_ID","KAMBI_WRAPPER_DIV_ID","loginSlice","isLoginShown","isKeepMeLoggedIn","isBiometricsEnabledOnTempPasswordChange","setIsLoginShown","_ref$payload","shouldShow","onLoginSuccessCallback","onLoginSuccessRedirectUrl","onLoginCancelledRedirectUrl","setIsKeepMeLoggedIn","setIsBiometricsEnabledOnTempPasswordChange","_loginSlice$actions","AUTH_ROOT_API","postLogon","postLogout","refreshLogonState","getRememberAccountNumber","getIsAuthenticated","getIsLoggedOn","attemptLogin","isSuccessful","mustChangePassword","loginViaBioAuth","requiresReset","triggerBiometricsPrompt","password","_refreshLogonState","forceLogon","antiforgeryEl","serverRenderedLoginEl","getElementById","innerHTML","HasLoggedIn","hideLogin","store","meetingsSlice","currentCodeTab","favourites","toggleMeetingsFavourite","fav","setMeetingsRaceCode","_meetingsSlice$action","iosBottomPaddingCss","WebOnlyNav","heightCss","activeTab","isSkyVideoPlayerOpen","useAppSelector","selectIsSkyVideoPlayerOpen","isNewSportsFeatureEnabled","useIsFobSportsFeatureActive","isRadioBusy","useRadio","isHomePage","isSports","isRaces","bottomNavRef","isSkyRacingTabActive","WebOnlyContainerStyled","Global","getComputedStyle","onNavItemClicked","navigateToLastRacesPath","navigateToSkyRacePage","_e$currentTarget$text","_e$currentTarget","globalAudioElement","isVisionPlaying","selectIsRadioPlaying","setIsRadioBusy","audioElement","setAudioElement","pause","isPlaying","setRadioPlaying","setCloseSkyVideoPlayer","paused","currentTime","onPauseEvent","onPlayEvent","handleRadioToggle","Audio","setAttribute","load","navigationSlice","registerNotification","notificationTimes","registerNotifications","filtered","_x$notificationTimes","fromEntries","unregisterNotification","PasswordVisibilityToggleStyled","PasswordVisibilityToggleLabelStyled","PasswordHideIconStyled","PasswordInputStyled","PasswordGroupStyled","PasswordFormStyled","PasswordLabelStyled","PasswordVisibilityToggle","_ref$hasText","hasText","getPasswordTheme","testAutomationId","ThemeProvider","onMouseDown","PasswordComponent","labelName","onVisibleToggle","validationError","shouldScrollIntoView","labelRef","onFocus","_labelRef$current","_labelRef$current2","scrollIntoView","defaultPasswordState","new","newBlurred","confirm","confirmBlurred","confirmValidationError","isValidLength","hasNumber","hasSpecialCharacters","hasUpperCase","hasLowerCase","invalidCharacters","isConfirmPasswordVisible","hasAttemptedCreatePassword","isValidationSuccess","isPasswordWithinFiftyChars","hasConsecutiveRepeatCharacters","UpdateNewPassword","UpdateConfirmPassword","NewPasswordOnBlur","ConfirmPasswordOnBlur","ValidatePassword","CreatePassword","IsPasswordVisible","IsConfirmPasswordVisible","PasswordStateFactory","isPasswordValid","isPasswordValidLength","hasNumberOrSymbol","hasUpperAndLowerCaseCharacters","hasInvailLetters","getInvalidCharacters","isWithinFiftyChars","hasConsecutiveRepeatChars","getPasswordErrorMessageFromState","getConfirmPasswordError","newPassword","InteractiveRulesListStyled","SingleRuleStyled","isHighlighted","TickedIconStyled","tickIcon","InteractiveRules","rules","rule","isRuleMet","Rules","ComplexPasswordObserve","observeImmutable","passwordState$","PasswordRulesList","_excluded2","rulesArray","themeRules","PasswordThemes","lightTheme","lightSignup","darkTheme","lastDepositError","quickDepositSlice","closeQuickDeposit","clearQuickDepositError","onQuickDepositError","setQuickDepositStatus","_quickDepositSlice$ac","QUICKBET_MODAL_ID","raceCardSlice","currentBetType","currentRacePageQueryKey","toteSwapState","selectedProposition","setSelectedProposition","shouldToggleSelection","setCurrentBetType","setToteSwapOptions","activeToteSwap","opt","setActiveToteSwap","setRacePageReactQueryKey","_raceCardSlice$action","SkyPageLimit","useNextSkyRaces","limit","getSkyRaceLimit","fetchSkyRaces","_useQuery","nextSkyRaces","keepPreviousData","isError","nextRaces","isMoreToFetch","fetchMoreRaces","setSkyRaceLimit","analyticsKeys","clickCount","resetLimit","skyRacesInitialState","filters","international","local","isSelectedRaceScrolledOutOfView","resetTimestamp","isSkyRaceListViewOpen","skyRaceLimit","skyRacesSlice","toggleFilter","newFilters","validateFilters","setIsSelectedRaceScrolledOutOfView","setResetTimestamp","now","toggleIsSkyRaceListViewOpen","_skyRacesSlice$action","getSkyRaceFilters","skyRaces","getResetTimestamp","getIsSkyRaceListViewOpen","getIsSelectedRaceScrolledOutOfView","skyRaceCardHashRoute","trackVisionOpened","openLocation","defaultDetails","requiresReverification","reverificationDue","numDaysRemaining","hasAttemptedReverification","ReverificationDetailKey","ReverificationDetailsTypeKey","ReverificationDetails","declareResourceType","typeKey","fetchMultipleNoPromise","Rx","fromPromise","apiService","hardTimeToLive","recordify","localStorageRemindMeLaterKeyPart","GetReverificationDetailDidSucceed","GetReverificationDetailDidFail","ShowReverificationPopup","ConfirmReverificationDetails","ReverificationCompleted","RemindMeLater","ReverificationStateFactory","isFeatureActive","onHomePage","userInitiatedReverification","remindMeLater","isReverificationFailed","isReverificationCompleted","reinitialise","getPromise","reverificationDetail","getRemindMeLaterKey","getRemindMeLaterLastSetDate","localStorageRemindMeLaterKey","shouldRemindMeLater","remindMeLaterLastSetDate","NavigatedTo","dateIso","settingsSlice","hapticFeedback","enhancedBetslip","touched","newSports","newBetSlip","setHapticFeedbackSetting","setNewSportsSetting","setNewBetSlipSetting","setEnhancedBetslipSetting","_settingsSlice$action","getEnhancedBetslipSetting","isHapticFeedbackSettingEnabled","getNewSportsSetting","getNewBetSlipSetting","useEntitlement","isEntitled","skyVideoPlayer","IsEntitled","notEntitledMessage","ReasonText","displayVisionNotEntitledMessage","setEntitlementStatus","RegisterToast","skyVideoPlayerInitialState","selectedChannel","playerStatus","previousPlayerStatus","isPlayerOpen","isMuted","isFullscreen","isControlShowing","dockedPlayerHeight","isPendingBetsDrawerOpen","canRenderPendingBetsDrawer","raceReplayKey","raceReplayUrl","raceReplayUrlChanged","raceReplayTitle","raceReplayMeetingDate","raceReplayElapsedSeconds","raceReplayDurationSeconds","skyVideoPlayerSlice","setIsFullscreen","trackFullScreenOn","trackFullScreenOff","setIsPendingBetsDrawerOpen","setCanRenderPendingBetsDrawer","isEnoughRoomToRender","setIsPlaying","setIsMuted","trackVisionMute","trackVisionUnMute","setSelectedChannel","trackSelectedChannel","setIsControlShowing","setSkyVideoPlayerStatus","_ref9","newPreviousPlayerStatus","_ref10","_ref10$payload","shouldTrack","trackVisionClosed","resetRaceReplayState","setSkyDockedPlayerHeight","_ref11","resetSkyVideoPlayerPersistedState","setRaceReplayElapsedSeconds","_ref12","ceil","setRaceReplayDurationSeconds","_ref13","_skyVideoPlayerSlice$","persistKeys","selectIsDockedSkyVideoPlayerOpen","selectDockedPlayerHeight","selectCanRenderPendingBetsDrawer","selectIsPendingBetsDrawerOpen","selectVideoPlayerChannel","selectVideoPlayerStatus","selectRaceReplay","_skyVideoPlayer$raceR","_skyVideoPlayer$raceR2","trackName","meetingDate","Sky1","Sky2","RacingWA","Replay","isNewSportsFeatureSettingActive","toolboxSlice","isReactQueryDevToolsEnabled","toggleReactQueryDevTools","SuggestionStyled","Autocomplete","_React$Component","defaultState","autocomplete$","sub","ChangeInput","ClearSuggestions","GetSuggestions","SetSuggestions","ChangeSelection","BlurInput","Initialize","Update","getSuggestionsForInputValue","onSelection","newInputValue","inputValuePrevious","previousInput","currentInput","acc","val","idx","getInputDifference","hasSelection","highlightedSuggestion","getSuggestionValue","_this2","prevProps","_this3","Auto","Autosuggest","_this$state","_this$props","autoFocus","mergedProps","focusInputOnSuggestionClick","changeEvent","onSuggestionsFetchRequested","onSuggestionsClearRequested","onSuggestionSelected","renderSuggestion","renderInputComponent","propsForInput","renderSuggestionsContainer","containerProps","containerColors","surface50","surface300","MainContainerStyled","_ref$forceSizing","forceSizing","DEFAULT_GUTTER_SIZE","GapX","_ref2$gutterSize","gutterSize","_ref2$scrollable","scrollable","selector","GapY","_ref$gutterSize","connect","specification","repos","latest$","combineLatest","repo","data$","latest","Inner","_class","subscription","nextProps","nextState","specRow","resourceKey","instance","getFrom","ErroredInstance","observable$","WrappedComponent","ObservableHOC","hasReceivedValue","ANIMATION_DURATION_MS","ModalScreenCoverStyled","ModalPositionStyled","_ref$position","ModalAnimationContainerStyled","exitAnimation","moveUp","customAnimations","moveDown","ModalContentContainerStyled","_ref3$cornerStyle","cornerStyle","maskImage","ModalCloseButtonStyled","_ref4$color","ModalBackgroundStyled","fadeOut","fadeIn","addToBetslip","modalAnimation","_source$getBoundingCl","getBoundingClientRect","sourceLeft","sourceTop","sourceHeight","sourceWidth","_target$getBoundingCl","targetLeft","targetTop","targetHeight","targetWidth","scale","translateX","translateY","translateToTarget","ModalContainer","rootState","modal","TransitionGroup","Transition","_ref$item","modalComponent","modalComponentProps","_ref$item$isDismissab","onCloseCallback","modalContainerRef","handleClose","closeModal","ScreenCover","Position","AnimationContainer","ContentContainer","contentProps","Background","_ref2$contentProps","modalSlice","setExitAnimation","openModal","preventDismissal","allowDismissal","_ref8$payload","closeAllModals","_modalSlice$actions","OverlayStyled","OverlayHeaderStyled","OverlayHeadingStyled","OverlayCloseButtonStyled","ANIMATION_OPACITY","entering","exiting","ANIMATION_TRANSLATEY","OverlayChild","overlayRef","anime","targets","ANIMATION_DURATION","easing","OverlayReset","OverlayComponent","in","unmountOnExit","_ref2$record","OverlayStateFactory","popup","PopupStyled","PopupContainerStyled","PopupCenteredStyled","PopupContainerCenteredStyled","PopupTitleStyled","RemoveToast","ToastStateFactory","uuid","BetAccountDetailsKey","BetAccountKey","BetAccountRepo","isLoggedInCheck","_state$isLoggedIn","isLoggedIn","ContactDetailsKey","isBetAccountHolderNumber","fetchContactDetails","savePrecommitments","_savePrecommitments","removeQueries","invalidate","Races","fetchMultiple","fromArray","bufferWithCount","MAX_KEYS_TO_REQUEST","raceKeys","mergeAll","selectMany","raceMap","filterObject","meetingName","success$","just","failed","failed$","acceptorKeys","maxToKeep","createRaceObjectFromResponse","meetingDto","meetingId","MeetingId","meetingCode","MeetingCodeText","MeetingDate","MeetingName","SelectedRace","RaceNumber","raceTime","RaceTime","RaceType","distance","Distance","Key","Acceptors","acceptorMap","acceptors","acceptor","fetchNullableResourcesWithKeys","resourceType","maxKeyLength","prevKey","urlPath","availableLengthForKeys","numToBuffer","keySeparator","bufferedKeys","resource","failedKeys","PoolKeys","List","Pools","isRacingPool","pool","isFavouriteNumbersPool","isTippingPool","accountBase","accountContactDetails","accountPreferences","accountActivityBase","accountActivityData","isOrderByEvent","userSelectedDate","activityStatementsAccountDetails","activityStatementsAccountHolders","banner","raceCardPromotion","blackbookComments","blackbookDetails","blackbookRunnersBase","blackbookRunners","account","blackbookRunnersForJockey","jockeyName","eventDetails","feedBackContacts","feedBackSubjects","getBankAccount","inducement","kambiPendingTicketsCount","meetingPreview","meetings","raceList","meeting","mysteryBetDetails","mysteryQuickPickPropose","pendingTicketsCount","racePendingTickets","raceKey","raceResultedTickets","hasFixedResulted","precommitmentDetails","racePageCompleteBase","racePageFormBase","racePageStartersForRaces","racePageForm","racePageFieldSummary","racecourseSeq","racePageFieldFOOForm","racePageComplete","videoEntitlementRequest","videoKey","raceReplayRequest","sameRaceMultiGetSelectionPrice","signUpContactDetails","specialsTerms","takeABreak","serverConfig","toteSportsCurrentPools","toteSportsPool","toteSportsResultedPools","trendingBets","videoPreview","QueryClient","predicate","mapObject","iterator","newObject","lastKnownLocation","lastKnownVenue","startLocationServiceListeners","getLastKnownLocation","getLastKnownVenue","isoCode","latitude","longitude","campaigns","panel","expandablePanel","header","inline","informationIcon","bonusbet","purple","specialIcon","greyWhite","subContentHeader","detailsText","nextEvents","unselected","expandable","badge","empty","summary","superPick","noticeBox","betLeg","removeButton","multiDetails","comboText","silk","legInfo","boosted","priceChange","increase","decrease","mix","meetingList","dateNavigation","activeBackground","activeBorder","activeText","oldBackground","baseBackground","directionalArrow","headerText","hoverBackground","hoverText","inThisMonth","inText","outText","inBackground","outBackground","isDayToday","isNotText","matrix","fixtureStatus","textDark","textLight","quaddieChip","class","fixedFlucs","separator","dividends","disabledtext","green","specialIndicator","foreground","starters","buttonSelection","launchicon","initialText","scratched","highlights","section","groupheader","tabs","resultDetails","rangeInput","tooltip","indicator","notdragged","dragged","structuredSearchLocationModal","TABLocation","isUserAnonymous","isLdInitialized","features","Factory","OnFeatureChange","currentUrl","routeStack","backUrl","lastRacesPath","fromJS","payloadUrl","newRoute","currentStack","newStack","getBackUrlFromStack","getNewStack","cleanedCurrentUrlPath","isCurrentUrlRacePath","isRaceRoute","isCurrentUrlMeetingsPath","newLastRacesPath","getRacePathValues","stack","matchPath","navState$","navState","currentHashPath","newRacesPath","fetchAccountBalanceAsync","_fetchAccountBalanceAsync","_yield$getAccountBala","balance","UpdateAccountBalance","fetchCampaignsAsync","_fetchCampaignsAsync","UpdateCampaigns","UpdateBonusBalance","bonusBetBalance","bonusCashBalance","hasEvaluatedUserAuth","accountBalanceUpdatedTime","activeCampaigns","availableCampaigns","residentialDetail","SetResidentialDetail","UserAccountStateFactory","newAccountBalance","ImmutableList","isRedeemed","combineReducers","workflow","configureStore","accountActivity","raceCard","toolbox","quickDeposit","devTools","getDefaultMiddleware","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","ignoredPaths","prepend","listenerMiddleware","persistor","persistStore","createListenerMiddleware","startListening","stopListening","shortClientVersion","VERSION_MAJOR","VERSION_MINOR","BUILD_NUMBER","lastVisibilityChangeTime","refreshBalanceIfInForeground","visibilityState","useRefreshBalanceOnForeground","useLogon","useDataAccess","repository","LoadingInstance","feature","featureState$","_record$get$get","initial","properties","useObservableImmutable","property","accu","usePrevious","usePriceChangeAnimation","priceWin","pricePlace","suppressAnimation","wpChangeTypeState","setWpChangeTypeState","priceDisplayState","setPriceDisplayState","timer1IdRef","timer2IdRef","prevWinPriceRef","prevPlacePriceRef","winChangeType","getPriceChangeType","placeChangeType","currNum","prevNum","sortNumberAscending","b","timed","operation","fn","logToSentry","getFromRepo","_getFromRepo","isErrored","subscriptions","publish","topicSubscriptions","ret","_step","_iterator","_createForOfIteratorHelper","done","context","f","priority","added","topicIndex","topics","topicLength","subscriptionInfo","unshift","unsubscribe","showPopup","popupDiv","jQuery","hide","documentHeight","animate","scrollTop","pageYOffset","parentElement","newHeight","eventType","elementQuerySelector","cb","amplify","msgPublish","msgData","qs","querySelectorAll","started","cleanseNumber","parseInt","cleanseCurrency","loggingService","msgBusService","direction","operationType","step","checkInStep","mode","winValue","placeValue","ticket","toteBetValue","fobWinValue","fobPlaceValue","numToteRacingBets","costOfToteRacingBets","numFixedRacingBets","costOfFixedRacingBets","ModelType","ExpectedCost","TicketNumber","tickets","ticketNumber","totalCost","Title","ko","register","viewModel","createViewModel","template","modalIntents","navigationIntents","component","showBackButton","$modalState","analytics","classList","contains","publishModalClose","modalEl","bodyScrollLock","capturedTop","setScrollTop","deferred","messageBus","displayComponent","navigateToSportsPath","isNewSportsFeatureActive","startDeepLinkingListeners","urlObject","URL","isSearchParamOnly","WESTERN_AUSTRALIA","SOUTH_AUSTRALIA","AU_COUNTRY_CODE","SA_STATE_CODE","isUserResidentOfSA","_residentialDetail$to","toArray","_residentialDetail$to2","isUserAccountStatePending","userAccountRecord","determineUserRegulationId","getCookieValue","cookieName","cookies","updateMetadata","_yield$userAccountSta","gpsPosition","pulseLocation","skipWhile","toPromise","deviceIdentifier","pulseLocationId","venueId","AuthStatusLocalStorageKey","startPushNotificationsAuthStatus","where","persistedAuthStatus","oldStatus","newStatus","deviceId","lastUpdated","diff","hidden","visibilityChange","msHidden","webkitHidden","defaultDeviceState","hiddenLastChange","onLine","fcmToken","fcmTokenStatus","StateChanged","lastFired","FcmTokenUpdated","DeviceStateFactory","mergeDeep","debounce","startRaceKeyNotification","notifs","_x$split","_x$split2","times","handleFCMToken","mapOfReactRoots","WeakMap","react","domNodeDisposal","addDisposeCallback","root","unmount","controlsDescendantBindings","valueAccessor","allBindingsAccessor","componentType","_options$nonObservabl","nonObservables","wrappedComponent","shouldWrapWithRedux","shouldWrapWithReactQuery","QueryClientProvider","createRoot","getFobPriceChangeTopic","getToteRaceTopic","raceId","getAccountTopic","getFobPriceChangeByPropositionTopic","DisplayKambiClient","HideKambiClient","LoggedInKambiPlayer","LoggedOutKambiPlayer","BeginKambiLogin","EndKambiLogin","RemoveKambiSpinner","UnsupportedBrowser","UpdateBetslipMaximized","UpdateUserData","isBetslipMaximized","logoutToken","loginPending","isKambiRendered","isBrowserSupported","playerSessionId","pendingBetHistory","_pendingBetHistory","kambiState","betHistory","kambiState$","_kc","apiPlayerBaseUrl","fetchRacePendingTicketsCount","fetchKambiPendingTicketCount","PendingBetHistory","pollingQueryOptions","racingPendingTicketsQuery","racingPendingTicketsPollingQuery","kambiPendingTicketsQuery","kambiPendingTicketsPollingQuery","invalidateRacingPendingTicketsQueryData","invalidateKambiPendingTicketsQueryData","mqttClient","environmentConfig","cognitoCredentials","clientId","logging","topicRefCount","internalEvent$","event$","scan","sequence","emitterTimestamp","cachedTopics","connectionCloseCounter","connectionCloseLastSeen","MAX_SAFE_INTEGER","resetMqttClient","startMqtt","accessKeyId","secretAccessKey","sessionToken","substr","awsIot","host","protocol","maximumReconnectTimeMs","secretKey","iotSubscribeTopics","parsedPayload","logInfo","onNext","end","getCredentialsForIot","secret","updateWebSocketCredentials","iotUnsubscribeTopics","iotRemoveTopicsfromCache","_console","optionalParams","_console2","iot","getClientId","enableLogging","getSubscriptions","table","eventNotificationApiSettings","CognitoIdentityCredentials","IdentityPoolId","pushDataSubscription","accountNumberLoggedIn","Observable","featureStateRecord","isAccountPushFeatureActive","pushEventSubscription","transactionType","BetslipDepositModalClosed","OnOpen","OnClose","ClearBetslip","EditBets","ToggleBetslipExpandable","CloseBetslipExpandable","KeepBets","ScrollTo","AddSingleToBetslip","AddSinglesToBetslip","RemoveSingleBet","UpdateItemInBetslip","DeselectSuperPick","UpdateBetslipItemPrice","UpdateMultiBetSpend","ToggleMultiBet","ToggleMultiLegBetType","ToggleMultiFormulaExpanded","RefreshBetslip","RemoveBonusBetsFromBetslip","RefreshBetslipSuccessful","RefreshBetslipFailed","ProposeAllBets","ProposeAllBetsSuccessful","ProposeAllBetsFailed","ConfirmAllBets","ConfirmAllBetsSuccessful","ConfirmAllBetsFailed","registerUserAccountSideEffects","registerUserAccountPushData","pairwise","hasLoggedOut","hasLoggedIn","hasLogInStateChanged","BetAccountNumber","accountNumberHash","BetAccountNumberHash","Balance","syncLoginStateWithNativeApp","ResidentialCountry","ResidentialState","IsIDVerified","verified","_navState$get","ToggleFixedFlucs","ToggleShowAllForm","ToggleMarketMovers","ToggleDoubleProvDiv","ToggleQuaddieProvDiv","ToggleInfoToolbarVisible","ToggleStewardsCommentsVisible","ToggleTipsVisible","ToggleResultsVisible","ToggleFieldVisible","ToggleRaceReplayVisible","ToggleRacePreviewVisible","bettingV2CommandStateDefaultState","showFixedFlucs","showAllForm","showMarketMovers","showDoubleProvDiv","showQuaddieProvDiv","infoToolBarVisible","commentsVisible","tipsVisible","resultsVisible","fieldVisible","replayVisible","previewVisible","BettingV2CommandStateFactory","segmentPrefix","toTitleCase","upper","toUpperCase","ParagraphStyled","Paragraph","_ref$align","fontFamilies","fontFamiliesBold","fontSizes","vision","fontSizeMedium","fontSizeLarge","informationPanel","NoticeBoxTypes","NoticeBoxStyled","hasBorder","NoticeBoxSingleStyled","NoticeBoxIconStyled","NoticeBoxTitleStyled","NoticeBoxChildContentWrapperStyled","NoticeBox","noticeBoxType","_ref$testId","buttonClick","_ref$buttonText","buttonText","htmlAttributes","titleTestId","NoticeBoxIcon","NoticeBoxSingle","Success","Warning","Info","AnniversaryPopup","InfoCopyStyled","AnniversaryPopupContent","accountHolder","onKeepLimit","onChangeLimit","FullName","CurrentLimit","InfoCopy","PreCommitmentMaxDepositAmount","ExistingDepositLimit","NoDepositLimit","PopupNoticeBox","_ref$closeText","closeText","SuccessMessage","CoolingOffNoticeBox","coolingOffEndDate","formattedDate","CurrentFrequencyNoticeBox","frequency","CurrentAmountNoticeBox","ErrorPopupNoticeBox","subTitle","SuccessPopupNoticeBox","DisplayState","DepositLimitsAnniversaryPopup","DepositLimitsAnniversaryPopupComponent","ldClient","closeAll","displayState","HideAll","respondToDepositLimitAnniversary","keep","AccountHolderId","Keep","Location","Desktop","Mobi","keepLimit","changeLimit","allState","UserAccountState$","RouteState$","betAccountRepoState","userAccountState","is","setHideAll","betAccountLoader","AccountHolderList","accountHolders","isInDateRange","anniversary","primaryAccountHolder","ah","IsPrimaryAccountHolder","primaryAccountHolderIsInDateRange","PreCommitmentAnniversaryDate","secondaryAccountHolder","secondaryAccountHolderIsInDateRange","isOnHomePage","Prompt","_this$subscription","ANONYMOUS_CONTEXT","kind","anonymous","getCustomUserAttributes","subscribeToLaunchDarklyChanges","changeset","subscribeToUserStateChanges","ldContext","updatedFlags","identify","initializeLaunchDarklyServiceWithConfig","_document$getElementB","serverFlags","LDFlags","serverProvidedAccountNumber","bootstrapAccountNumber","bootstrapClientFlags","bootstrapServerFlags","$valid","$flagsState","initialFlags","propName","getSimpleCustomUserAttributes","initializeLaunchDarkly","streaming","sendEventsOnlyForVariation","flags","variation","initialize","clientVersion","nativeAppVersion","os","systemMajorVersion","TargetChannel","AlwaysShow","Inducement","notification","NavigationLink","NavigationLinkText","startsWith","InternalTrackingCode","dismissedNotificationsStore","Notification","dismissedNotifications","setDismissedNotifications","hasLoggedOutSubscription","signal$","resetDismissedNotifications","isLoadingNotifications","isErrorNotifications","filterData","_notification$Sys","Sys","Id","Visibility","AllChannels","DesktopOnly","MobileOnly","_notification$Type","_notification$Sys3","Type","TitleMessage","NotificationLink","Dismissible","_notification$Sys2","prevValue","HideIcon","BannerPicture","image","imageWide","areaName","draggable","srcSet","PaginationStyled","dotSize","PaginationDotStyled","MessageStyled","ErrorMessageStyled","SuccessMessageStyled","Pagination","dotCount","_ref$index","BannerContainerStyled","BannerContainerInnerStyled","BannerPaginationStyled","CarouselWrapper","onViewChange","bannerCount","timerTrackMsRef","currentBanner","setCurrentBanner","isAutoAdvanceOn","setIsAutoAdvanceOn","SwipeableViews","enableMouseEvents","onChangeIndex","PaginationWrap","BannerContainer","FallBackBanner","fallbackImage","fallbackWideImage","mapBannerDataToEcommerceItems","itemBrand","clickUrl","itemIdMatch","promotion_name","bannerName","internalTrackingCode","item_id","bannerPosition","creative_slot","bannerLocation","item_brand","item_variant","LinkWrapper","abGroupingTokenPresent","analyticsData","anchorRef","mouseMoveRef","handleMouseMove","movementX","removeMouseMoveEventListener","anchorEl","_anchorRef$current","onMouseUp","onMouseLeave","ev","newData","ecommerce","trackBannerClicked","mapApiBanner","Name","Image","File","Url","ImageWide","imageText","desktopUrl","DesktopLink","AbGroupingToken","viewedBannersRef","banners","filteredBanners","_item$Link","_item$DesktopLink","IsInducement","AbGroupingSegment","targetSegment","filterABSegments","filterBannersForArea","bannerElement","innerHeight","trackBannerViewed","HOME_CSS_SHARED_VALUES","HomeMainContainerStyled","BannerCardStyled","HomeScrollWrapperStyled","h3","HomeScrollHeaderStyled","HomeScrollableContainerStyled","overflowX","scrollBehavior","WebkitOverflowScrolling","WebkitTapHighlightColor","HomeScrollListItemsStyled","flexWrap","HomeScrollHeaderLinkStyled","HomeNavigationContainerStyled","div","iconSize","testAttributes","HomeNavigation","onNavButtonClick","isToteRaceChangePushEvent","useNextRaces","nextEventsfilters","Trots","Dogs","LoadingPlaceholder","LoadingPlaceholderStyled","HomeNextRacesListItemStyled","HomeNextRacesLoading","SkyTvSvg","colorOverride","skyColor","channelConfig","SkyTvButton","_ref$isLoading","displayType","SkyButtonStyled","transformOrigin","channelColor","StatusBadge","_ref$badgeSize","badgeSize","StatusBadgeStyled","badgeColors","gray","yellow","SkyTvBadge","getVisionChannelForDisplay","channelId","isRacingWA","isMatchingVideoPlaying","activeChannel","desiredChannel","isSameRace","isThoroughbredRaceInWA","isThoroughbredRacePageInWA","MeetingInformation","GeoLocationCode","isThoroughbredNextRaceInWA","TimeToJumpAbsoluteTimeStyled","TimeToJumpDayFlagStyled","timezoneOffsetCookieName","adjustDateTimeByTimezoneOffsetIfRequired","getExplicitTimezoneOffset","parseIso8601Date","parseIso8601DateTime","timezoneOffset","getTimezoneOffset","negate","cookieValue","TimeSpanColorFormat","TimeSpanCalculator","ts","passedStartTime","hours","minutes","seconds","bulbHexColors","RaceCountdown","raceStartTime","displaySize","timeRemainingRef","timeRemaining","setTimeRemaining","bulbColor","setBulbColor","updateTimer","timeSpan","countdown","getNow","bulbHexColor","RaceCountdownContainerStyled","TimeToJumpComponent","showDay","showCountDown","advertisedStartTime","_ref$showDayBeforeTim","showDayBeforeTime","AstDayThenTimeComponent","AstTimeComponent","getNextRaceTimeDisplayOptions","milliToAst","DateTimeProvider","BetType","InvariantFailureException","EventAggregator","injectable","_dec","Guard","AppWindow","evt","capture","handler","innerWidth","ApiService","LogInHelper","loggedOn","scrollTo","behavior","ContainerModule","bind","inSingletonScope","rootContainer","services","PyosService","urlProvider","inject","retrieveFobSpecialTokensUrl","getSpecialUrl","fobBetPreEnquiryUrl","SpecialsUrlProvider","specialUrl","canShowInducementsUrl","initialise","Stake","Win","Place","Decimal","stake","_toDecimal","PriceDetails","priceDetails","DollarReturn","LegTypeCode","WinPlace","PyosRewardCalculator","offerlegTypeCode","legTypeCode","legTypeIsEligible","specialOfferElement","individualStake","validateStake","dollarReturn","offerLegTypeCode","calculationLegTypeCode","calculateLegReward","priceIncreased","checkSuperPickEligible","calculateProjectedReward","normalise","checkEligible","_specialOffer$element","boostElement","isBoost","winReward","calculateLegBoostReward","placeReward","totalReward","maxReward","maxStake","isExclusiveLegType","isZero","profit","actualProfitMultiplier","profitMultiplier","combinedMultiplier","stakeMultiplier","_specialOffer$element2","nonBoostElement","PyosExtensions","Lock","FobAmount","BetSpecialOfferElement","specialProductCode","specialProductName","rewardReturn","offerElement","BetSpecialOffer","shortDescription","specialType","isTemplatedSpecial","specialTypeCode","isBoostOffer","isInsuranceOffer","nonBoostReward","isSuperBoost","bso","_bso$title","isSportsEnquirySelectionExDto","sel","PropositionSeq","PyosStoreState","PyosStore","appWindow","eventAggregator","pyosService","rewardCalculator","extensions","loginHelper","_appWindow","_eventAggregator","_pyosService","_rewardCalculator","_extensions","_loginHelper","_lock","_status","Ok","_specialOffers","_selectedSpecialSeq","_betSelection","_isExpanded","_specialsErrorMessage","_disposables","_canShowInducements","loginSubscription","setupHasLoggedInSubscription","domElementExists","enquireSpecialOffers","_this$loginSubscripti","Loading","so","calculateProjectedBoostReward","selectedSpecial","isOfferEligible","LoadFailed","clearSelectedSpecial","selectedSpecialSeq","setSpecialOffers","getLegTypeIneligibilityDisplay","betSelection","trylock","SelectedSpecial","Racing","FixtureId","FixtureDateTime","SportsEx","fobBetPreEnquiry","CanShowInducements","SpecialTokenOffers","SpecialOffers","SpecialOffersFault","unlock","PyosMessageViewModel","_store","slideDown","slideUp","CurrencyConverter","decimalNumbers","currencySymbol","decimalSymbol","thousandsSymbol","c","t","m","nubmerValue","integerValue","integerString","j","PyosSelectViewModel","_formFieldId","_currencyConverter","isSelectedSpecialSeq","projectedReward","isHeader","reward","isInt","setSelectedSpecial","isObjectEmptyObject","getOwnPropertyNames","formFieldId","offers","numberOfRows","numberOfColoumns","tableRows","row","cell","hasOffers","primaryAction","selectedOffer","parent","parentContainer","viewModels","BetEnquiryService","betViewModel","requestDataJson","Request","fromJson","betViewModelDto","ObservableFixedOddsRaceInformation","bettingConditions","bettingRules","bettingTerms","isSuspended","isClosed","isResulted","isPlaceAvailable","isFixedOddsOnly","isRaceAvailable","payoutInformation","marketSequence","ObservableRace","tips","tipster","raceName","raceType","raceCode","isFixedOddsRace","payoutInfomation","provDivUpdateTime","fixedPlacesPaying","fixedOddsInfo","hasSpecials","hasJackpots","jackpotPoolNames","hasPlacePool","raceStatus","MissingMeetingInformationException","WeatherClassUtil","classes","weathersunny","weathercloudy","weathercloudypartly","weatherraining","defaultClass","getClassForWeather","Weather","weatherClass","ObservableMeetingInformation","nextRaceNumber","previousRaceNumber","hasNextRace","hasPreviousRace","trackCondition","weatherAtLocation","selectedRace","mergeDone","availablePools","notify","raceCourse","raceTimeLocal","ObservablePool","jurisdictionDescription","hasJackpot","jackpotTotal","isAbandoned","poolingIcon","raceNumbers","hasPoolingIcon","isInternationalPool","dto","Total","HasJackpot","JackpotTotal","IsAbandoned","PoolingIcon","RaceNumbers","JurisdictionDescription","meetingInformation","AvailablePools","MeetingCode","HasNextRace","HasPreviousRace","NextRaceNumber","PreviousRaceNumber","TrackCondition","WeatherAtLocation","fromDto","observableRace","RaceName","Tips","Tipster","IsFixedOddsRace","PayoutInfomation","FixedPlacesPaying","HasSpecials","HasJackpots","HasPlacePool","ProvDivUpdateTime","jackpotPoolNamesString","FixedOddsInfo","BettingConditions","BettingRules","BettingTerms","IsClosed","IsFixedOddsOnly","IsPlaceAvailable","IsRaceAvailable","IsResulted","IsSuspended","PayoutInformation","MarketSequence","mapFixedOdds","MissingStarterException","ObservableProvDiv","outcome","ObservableProvDivPool","provDivs","quaddieProvDivLegNums","provDiv","dtos","pools","poolDto","QuaddieProvDivLegNums","ProvDivs","addProvDiv","Div","Outcome","provDivPools","checkIfIsInIPad","ua","vendor","SilkImages","small","SilkImage","large","larger","largest","windowInnerWidth","SilkImageSize","starterNumber","starterType","isTrot","leftPosition","topOffset","finisherNumber","finisherType","numberOfFinisherInRace","getCssBackgroundForStarter","numberOfStartersInRace","imageSizingResult","getImageSizingForStarterType","getImageSizingForDogs","getImageSizingForTrots","getImageSizingForRaces","leftOffsetIntoOriginalImage","horizontalAndVerticalBackgroundSize","leftOffset","silks","mapSilkImage","silkImages","silkImage","ObservableFixedFlucs","winOpeningDividend","winHighDividend","winLowDividend","winDividends","ObservableSameRaceMultiPrices","top2","top3","top4","isFavourite","srmTopLimit","BaseRaceCodeBuilder","isScratched","IsScratched","isScratchedToteAndFob","IsScratchedToteAndFob","isFixedOddsStarter","IsFixedOddsStarter","IsFavourite","starterPersonName","StarterPersonName","trainerName","TrainerName","isEmergency","IsEmergency","emergencyNum","EmergencyNumber","displayPlaceDividend","DisplayPlaceDividend","displayWinDividend","DisplayWinDividend","isToteEnabled","IsToteEnabled","scratchType","ScratchType","LastFour","rating","Rating","isRiderChanged","IsRiderChanged","computeEmRes","hasFixedOdds","HasFixedOdds","isFormAvailable","IsFormDataEmpty","fixedOddsStarterInfo","_dto$FixedOddsInfo","starter","starterDto","FixedOddsStarterInfo","hasWinDividend","HasWinDividend","hasPlaceDividend","HasPlaceDividend","scratchedTime","ScratchedTime","winDividendDeduction","WinDividendDeduction","placeDividendDeduction","PlaceDividendDeduction","playerNo","PlayerNo","mapFixedFlucs","FixedFlucs","propositionSequence","PropositionSequence","sameRaceMultiPrices","mapSameRaceMultiPrices","SameRaceMultiPrices","ProvDivPoolMapper","ProvDivPools","SilkImageMapper","marketMovers","mapMarketMovers","MarketMovers","hasMarketMovers","HasMarketMovers","Top2","Top3","Top4","SrmTopLimit","WinOpeningDividend","WinHighDividend","WinLowDividend","WinDividends","MinutesToAst","Dividend","RaceTypes","ObservableFixedOddsStarterInfo","ObservableStarter","emres","isFixedScratchedOrSuspended","isSameRaceMultiSuspended","getSilkImageFor","ObservableRaceStarter","_ObservableStarter","jockeyWeight","barrier","_getPrototypeOf","RaceBuilder","_BaseRaceCodeBuilder","Barrier","JockeyWeight","ObservableDogStarter","boxNumber","stripeCount","DogBuilder","Box","StripeCount","ObservableTrotStarter","handicap","TrotBuilder","Handicap","MissingStartersException","PoolType","PoolInfo","friendly","ObservableRaceKeyPoolInfo","hasQuinellaPool","hasWinPool","hasWinPlacePool","selectedPool","configure","Quinella","ObservableRaceKey","startTime","poolInfo","allUpPools","isDoubleLeg","isQuaddieLeg","poolTotal","createObservablePool","addPoolTotal","mapAllUpPools","_step2","_iterator2","AllUpPools","addAllUpPool","RaceStarters","RaceKey","HasWinPool","HasWinPlacePool","HasQuinellaPool","Leg","StartTime","Pay","PoolMapper","IsDoubleLeg","IsQuaddieLeg","Starters","StarterBuilder","build","addStartersForRace","_step3","observableStarters","_iterator3","AvailableBetTypes","addBetType","ObservableRaceStarters","Value","_raceStarters$Value$f","raceStarters","getStartersForRace","_this$starters$filter","flat","disposeSelection","otherLookUp","mergeStarterForRace","_step4","_iterator4","otherStartersToMap","_step5","_iterator5","StartersMerger","Merger","dest","_merge","untypedMerge","ObservablePage","pageType","isMultiInProgress","numberOfLegsInMulti","specialOffersInfo","hasDoubleProvDivs","hasQuaddieProvDivs","persistedSortOption","setPersistedSortOption","_ref$direction","intersection","difference","ObservableSelectedRaceStarters","selections","getSelectionsByRaceNumber","getSelectionsByLeg","updatedSelections","updatedStarters","currentSelections","updatedStarter","originalStarter","preserved","getRaceNumbers","matchStartersForRace","previousStarters","previousStarter","onlyFirstSelected","columnWidth","checkBoxes","sets","checkBox","selectedAt","startersCount","ButtonSelectionType","WinPlaceToteProcessor","bettingContext","turnOffFieldAt","isFixed","starterSelection","newStarters","Fob","Tote","WinPlaceFobProcessor","hasAny","WinPlaceProcessorFactory","selectionType","WinPlaceSelectionProcessor","selectionsErrorMessage","processor","buttonSelectionType","process","toggleFieldAt","selectAllStarters","clearAllStarterSelections","newSelections","racesWithStarters","racesWithSelections","raceSelections","WinPlaceValidator","starterSelections","hasFob","bettingOptionsSelected","hasTote","getTotalNumberOfStartersForRace","ToteSelectionResult","selectionString","selectionStrings","FobSelectionResult","propositionNumber","WinPlaceSelectionResultProcessor","winPlaceStarterOverride","_starter$selection","getLegForRaceNumber","fieldSelectedAtIndex","sortedStarterNumbers","_starter$selection2","BetTypeInformation","supportsFlexi","sortOptions","multiBet","multiSelections","checkBoxCount","betSelectionTemplate","fieldCheckBoxCount","sameAsCheckBoxCount","selectionStringProcessor","validator","displayText","selectionResultProcessor","AllUp","Mystery","SameRaceMulti","Exacta","Trifecta","First4","Double","Quaddie","sortOption","WinPlaceConfigurator","BaseCheckBoxSelectionProcessor","_starters","CheckBoxSelectionPipeline","all","selectionContext","hasSelectedAt","CheckBoxPipelineProcessor","isLegIn","isStarterRovingBanker","_this4","anySelected","AllwaysCheckBoxPipelineProcessor","_CheckBoxPipelineProc","isBoxed","maintainExistingSetOfStartersWithCurrent","currentStarterUnChecked","turnOffAllwaysField","RovingBankerCheckBoxPipelineProcessor","rovingBanker","supplied","totalRovingBankers","maintainExistingSetOfStarters","clearAt","isWith","assignTotalRovingBankers","clearFieldIfNoRovingBanker","turnOffRovingBankerField","clearAll","RegularCheckBoxPipelineProcessor","toggledStarter","clearFieldIndexes","sameAsSelectedAtAnyIndex","dependenciesOnSelectedIndex","sameAsColumnsDependendentOnSelectedColumn","turnOffSameAsButtonForIndex","updateSameAsColumnsDependentOnSelectedIndex","dependencies","selectedColumn","cascadeSelectionToOtherColumns","cascadeDeselectionToOtherColumns","checkBoxSelection","dependency","dependenciesAttachedToDependency","sameAsColumnsDependendentOn","otherDependencyWithCheckBoxSelectionForAMatchingColumn","column","otherSameAsColumnSelectedWithSelection","deps","dep","enableAt","checkboxes","sameAs","otherDependencies","otherdep","currentCheckBoxes","turnOffSameAs","selectedBetType","isQuinella","LegInCheckBoxPipelineProcessor","totalLegIns","turnOffOtherLegIn","turnOffLegInField","otherSameAsColumnsDependendentOn","cascadeSameAsSelectedThroughColumns","notifyDependentColumnOfSelection","sameAsAt","cascadeSameAsDeselectedThroughColumns","affected","notifyDependentColumnOfDeselection","enableSiblingIfSelected","columnOtherDependencies","anySelectedAtIndicies","CheckBoxSameAsProcessor","sameAsNode","enable","affectStarters","updateColumnMatchingSameAs","disable","CheckBoxFieldProcessor","processFieldSelection","checkBoxOptionsSelected","toggleStarterSelection","turnOffSameAsForColumn","updateSameAsColumns","fieldIndex","sameAsColumnsDependendentOnSelectedFieldIndex","CheckboxSelectionProcessor","_BaseCheckBoxSelectio","CheckBoxPipelineService","ForwardingCheckBoxValidatorProcessor","RovingBankerCheckBoxValidatorProcessor","_ForwardingCheckBoxVa","validate","populateSet","checkbox","AllwaysCheckBoxValidatorProcessor","selectedCount","isAllwaysBet","otherSetsButFirstEmpty","RegularCheckBoxValidatorProcessor","populateSets","populateSizes","guardInvalidSizes","checkSizeConstraintsMet","doesValidPathExist","reverse","navigateGrid","excluded","CheckBoxValidatorProcessorPipeline","TrifectaValidator","pipeline","CheckBoxSelectionResult","CheckBoxProjection","CheckBoxValuesProjection","CheckBoxSelectionResultProcessor","_selections","legNumber","legHasSameAsSelections","sameAsSelectedAtIndex","sameAsCols","sameAsSelectedAtIndexString","nonSameAsSelections","additionalSelectedStarters","calculateSameAsString","dotSeperate","stream","sameAsColumns","columnSet","sameAsSet","sameAsColumn","getSelectedCheckboxesForLeg","additionals","str","num","TrifectaConfigurator","MultiLegSelectionResult","MultiLegSelectionResultProcessor","checkboxProjection","checkboxValuesProjection","MultiLegValidator","allLegsHaveSelections","MysteryConfigurator","AllUpValidator","betweenTwoAndSixLegsWithSelections","quinellaLegsHaveNoneOrTwoSelectionsMinimum","AllUpConfigurator","QuaddieConfigurator","DoubleConfigurator","FirstFourValidator","FirstFourConfigurator","SameRaceMultiValidator","selectedStarters","getSelectionsFromStarters","starterButton","allStarters","starterIndex","_checkStartersDoNotHa","starterSelectionsWithMultipleLegCounts","starterWithLegSelections","legCount","isLegSelected","checkStartersDoNotHaveMultipleLegs","_checkStartersDoNotHa2","noStarterHasMultipleLegs","singleStarterWithTwoSelectionsIndex","hasSingleStarterWithTwoSelections","starterNumberIndex","legSelection","legSelectionIndex","getSelectionsAfterLegNumberChange","isNumberOfStartersWithLegSelectionsInRange","startersWithLegSelections","checkNumberOfStartersWithLegWithinRange","isSingleCombination","legCounts","aggregatedLegCounts","_loop","crt","legIndex","checkSingleCombinationExists","sumLegSelectionsCount","getSumLegSelectionCount","SameRaceMultiSelectionProcessor","errorTimeout","legSelectionContext","processSingleSelection","removeOldSelection","_SameRaceMultiValidat","hideError","removeNewSelection","showError","orderedStarters","_bettingContext","_index","_selected","_row","_column","starterArray","SameRaceMultiSelectionResultProcessor","selectedRaceStarters","fobSelectionResults","toSameRaceMultiSelectionResultLeg","SameRaceMultiConfigurator","ExactaValidator","ExactaConfigurator","CheckBoxSelectionProcessor","QuinellaValidator","numLegIns","numWiths","QuinellaConfigurator","Formula","numberOfCombinations","AllUpFormulas","allUpFormulasDto","newFormulas","getFormulas","updateFormulas","deselectDefaultFormula","addNewFormulas","selectDefaultFormula","removeOldFormulas","lastFormula","SingleCombinations","DoubleCombinations","TrebleCombinations","FoursCombinations","FivesCombinations","SixCombinations","newFormula","oldFormula","needsRemovingFormulaNumbers","oldFormulaNumber","InvestmentAmountModel","numberCombinations","supportFlexi","SameAs","BettingInformation","lastSelectedBetType","betIdentifier","allUpFormulas","investment1","investment2","lastSelectionBetType","legVisible","responseContent","rovingBankersSelected","minimumNumberOfFieldsRequired","BetTypeInformationBuilder","sizeSameAsToBetType","isExacta","isTrifecta","isFirst4","onlyFirstLegHasSelections","checkboxDefaultCount","isAlwaysBet","clearFieldSelections","resetSameAsSelections","turnOffAllFields","turnOffAllSameAsSelections","fieldSelectedAtAnyIndex","getSameAtRowAndColumn","sameAt","getSameAtColumn","getRaceNumberForLeg","updateSelectionForRace","ObservableRacePage","_ObservablePage","availableBetTypes","giddyUpRaceKey","giddyUpFixtureKey","mappedBetType","getRaceKeyForRaceNumber","mergeStartersForRaceKey","mergeStartersForRace","_this$raceStarters$st","keyValue","_this$raceStarters$st2","clearOutStarterSelections","forceClear","RacePageResponseType","ObservableRaceFinishers","finishers","finisher","otherFinishers","justWithFinisher","arrayFilter","ObservableRaceReplay","hasVideo","raceLocation","ObservableResultsPage","raceFinishers","simplePlacings","protestStatus","noveltyDividends","availableSubstitutePools","availableScratchings","raceReplay","addFinishersForRace","subPool","scratching","ObservableFixedOddsFinisherInfo","winDiv","placeDiv","shouldDisplayPlaceDividend","ObservableFinisher","placing","isCountBack","toteWinDiv","totePlaceDiv","toteWinProvDiv","totePlaceProvDiv","fixedOddsFinisherInfo","spWinPrice","ObservableRaceFinisher","_ObservableFinisher","BaseFinisherCodeBuilder","Placing","IsCountBack","ToteWinDiv","TotePlaceDiv","ToteWinProvDiv","TotePlaceProvDiv","ShouldDisplayPlaceDividend","SpWinPrice","FixedOddsFinisherInfo","WinDiv","PlaceDiv","RaceFinisherBuilder","_BaseFinisherCodeBuil","ObservableDogFinisher","DogFinisherBuilder","ObservableTrotFinisher","TrotFinisherBuilder","Finishers","addFinisher","FinisherBuilder","ObservableSubstitutePool","subs","ObservableSubstitute","displayNumber","displayResult","starterName","isWinner","isLoser","isUnallocated","updateDisplayVars","availablePool","RaceLegs","AvailableSubstitutesInPool","subInPool","StarterNumber","IsWinner","IsLoser","IsUnallocated","addSubstitutePool","ObservableScratching","isFixedOdds","scratchedDateTime","winDivDeduction","placeDivDeduction","raceCodes","tz","dtoScratching","StarterName","IsFixedOdds","ScratchedDateTime","WinDivDeduction","PlaceDivDeduction","addScratching","NoveltyDividend","poolName","hasRaceNumbers","raceNumbersString","dividend","NoveltyDividends","noveltyDividend","noveltyDividendModel","addNoveltyDividends","noveltyDividendDto","PoolName","numbersString","Dividends","dividendDto","mapStarters","mapResults","MeetingRaceMapper","addRace","resultsModel","ProtestStatus","SimplePlacings","GiddyUpRaceKey","GiddyUpFixtureKey","FinishersMapper","NoveltyDividendsMapper","SubstitutePoolMapper","AvailableSubstitutePools","ScratchingsMapper","AvailableScratchings","mapRaceReplay","raceModel","BetTypesMapper","StartersMapper","SpecialOffersInfo","HasDoubleProvDivs","HasQuaddieProvDivs","generateBetIdentifier","meetingDateText","unixTimestamp","RaceReplay","HasVideo","VideoKey","RaceLocation","UrlProvider","getBetCost","proposeBet","commitBet","addLegToMultiBet","getGiddyUpEntitlement","_getCompleteRaceApiUrl2","getCompleteRaceApiUrl","getStartersApiUrl","getRaceStartersApiUrl","appendVersionCacheBreaker","getRacePageDataFromApi","getRaceFormDataFromApi","getFormForRaceApiUrl","useRacePageData","_ref$withForm","withForm","_useQueries","useQueries","_useQueries2","form","isFetching","StartersReactQueryService","_retrieveStartersForRaces","_retrieveCompleteRace","pageDto","Mapper","useStartersData","setQueryData","FormReactQueryService","LegacyTabModel","RaceNo","Sel","AllUpBetType","LegacyBetModelBuilder","isForEnquiry","shouldBeFormDataCompatible","createModel","HasInvestment","Investment1","Investment2","isAllUp","processAllUpFormulas","selectedFormulas","Combinations","checkForAllwaysBet","tabViewModel","selString","getLegsForProcessing","resultsForLeg","IsSpecialFobBet","processMultiLeg","processSingleLeg","PyosSelectedSpecial","IsRovingBanker","IsAllways","transformLegTabs","IsFlexi","RaceSelections","configureMultiLegTabsAsFormDataFormat","configureTabs","PropositionNumber","FixedWinPrice","FixedPlacePrice","transformSingleLegTabs","IsQuinellaLegIn","configureSingleLegTabsAsFormDataFormat","BetIdentifier","Tabs","selectionResult","LegacyBetAdapter","betEnquiryService","errorHandler","bettingInformation","betViewModelBuilder","enquireAllUpBet","getModel","enquireBet","ExceptionMessage","showErrorMessage","raceNumbersToRefresh","caughtException","parseJSON","responseText","handleErrorAsIs","ErrorHandler","_ErrorHandler","logInHelper","showWarningOrErrorPopup","presentLogIn","html","click","hideErrorPopup","show","hideNewErrorPopup","ERROR_CODE_NOT_FOUND","sortNumber","sortPlacing","sortName","sortPrice","sortFixedPrice","sortSameRaceMultiWinPrice","_left$fixedOddsStarte","_right$fixedOddsStart","leftWin","rightWin","leftMissing","isSameRaceMultiScratchedSuspendedOrWithoutPrice","rightMissing","for","shouldFilter","_starter$fixedOddsSta","ModelSorter","sortOptionProperty","sortOptiondirection","SortFunction","scratchOrSuspended","sortableStarters","BettingInformationManager","applicationWindow","raceInformation","reapplySort","startersForRace","_this$raceInformation","isFixedAvailable","supportsSort","setSortFor","raceChanged","shouldResetToWinPlace","shouldResetBackToWinPlace","betTypeToReset","preserveSelections","setUpForLegs","setUpFields","EntitlementsDataTransferObject","EntitlementService","serviceName","isGiddyUpEntitled","Disposable","evtAggregator","disposed","disposableEventAggregatorSubscriptions","onDisposal","removeSubscriptions","clear","otherFunctions","existingFunctions","_this$disposableEvent","RaceDisplayType","RaceDisplayStateManagerViewModel","_Disposable","startersService","formService","currentTopics","isRaceCloseFeatureActive","raceStatusSubscription","ldSubscription","deviceSubscription","refetchTimer","raceDisplayState","ready","raceRefreshCommandHandler","Unknown","loadDataFromApi","registerEventHandlers","launchDarkState$","resubscribeToPushData","deviceState$","hiddenLastChanged","registerDisposals","unsubscribeFromPushData","safeSubscribe","shouldClearSelections","refreshDataFromApi","command","getRacePageWebUrl","changeHashTo","mysteryDate","updateQueryCache","fetchDataFromApi","retrieveCompleteRace","retrieveStartersForRaces","observableRacePage","Results","observableResultsPage","silent","errorTitle","unsubscribeFromRaceStateEvents","_this5","getRaceKey","getToteRaceTopics","getMarketId","getFobMarketSettlementTopic","raceState$","subscribeToRaceStateEvents","hasRaceId","isRaceIdMatched","canHandle","isToteRacePoolCompletedPushEvent","isToteRaceResultsDelayedPushEvent","isToteRaceStatusChangedPushEvent","isToteRaceAbandonedPushEvent","hasMarketId","_raceState$$partition","partition","_raceState$$partition2","poolComplete$","others$","handlePushData","handleToteRaceDelayChange","handleRaceStatusChange","handleTotePoolCompleted","handleRaceAbandoned","isFobMarketSettlementPushEvent","handleFobMarketSettlement","newRaceStatus","getRaceStatus","refreshUntil","resultsInformation","_this6","_this7","protestMsg","getRaceDelayDisplayText","raceDelayStatus","holdAllTickets","protestPending","protestDismissed","protestUpheld","isRefreshed","_this8","eventReceivedTime","MORE_BETTING_OPTIONS_ID","CHANGE_BET_TYPE_EVENT","FixedOddsMarketDisplayNames","FixedOddsMarketsInMoreBettingOptions","BettingInformationOverrides","detail","resetMatchedRaceBetTypePersist","BettingStateManagerViewModel","bettingInformationManager","mettingInformationSubscriptions","provisionBettingInformation","configureDisposal","setupSubscriptionsAndEventNotifications","subscribeToMeetingChanges","subscribeToBetTypeChanges","subscribeToSortChange","mergeIsDone","oldRaceNumber","resetStartersSelections","processBetTypeChange","processSort","setSortOption","BetSelectionBuilder","_BetSelectionBuilder$","bi","priceResponse","shouldAllowPlaceInvestment","getShouldAllowPlaceInvestment","buildSameRaceMulti","buildFixed","buildAllUp","buildTote","bettingInfo","getSelectionsResult","acceptorNumber","bettingType","isEachWayAvailable","winPriceLastSeen","placePriceLastSeen","assignFormulas","getAllUpSelections","getTabTouchCoreBetType","getSelectionString","isAllways","isRovingBanker","allUpSelections","raceNum","poolType","getTabTouchCorePoolType","betSelections","selectionStringParts","defaultReturnValue","SelectionProcessor","disposableCallbacks","processSelection","processField","processSameAs","clearAllSelections","updateSelections","generateSelections","assignSelectionForRace","processSameAsSelection","getAllStarters","getAllSelectedStarters","turnOffAllSelections","_this$disposableCallb","SpecialIndicatorStyled","fetchInducements","useInducementService","_data$IsEntitled","_useLogon","SpecialIndicator","ReceiptListStyled","ReceiptListRowStyled","ReceiptListItemStyled","ReceiptListItemTextStyled","ReceiptSpecialIndicator","ReceiptCampaignTextStyled","MAX_DRAWER_CONTENT_WIDTH","BettingDrawerStyled","zIndexOverride","BonusBetReceiptRowStyled","BettingDrawer","handleQuickbetClick","handleAddToBetslipClick","_ref$dataTId","dataTId","ReactDOM","SameRaceMultiQuickbetStyled","SameRaceMultiQuickbet","handleQuickbetSelected","SameRaceMultiPriceDetailContainerStyled","SameRaceMultiPriceTitleStyled","SameRaceMultiPriceDetailStyled","SameRaceMultiKeyStyled","SameRaceMultiValueStyled","SameRaceMultiErrorMessageStyled","SameRaceMultiSelectionPriceDetail","numberOfLegs","SameRaceMultiBettingDrawerStyled","SameRaceMultiBettingDrawerContainerStyled","SameRaceMultiBettingDrawerNoticeBoxPositionerStyled","getSelectionPrice","_getSelectionPrice","queryDefaults","SameRaceMultiPrice","selectionsWithStarters","selectionsQuery","_handleQuickbetSelected","SameRaceMultiBettingDrawer","Money","testElement","isBetslipBetRequest","toteBets","toteSportsBets","isBetslipResponses","placeKambiBetSingle","Authorization","BetResponseCode","NetworkError","BET_RESPONSE_UNKNOWN_ERROR","UnknownError","placeKambiBet","kambiRequest","_request$priceWin","_request$investmentWi","investmentPlace","odds","floatToKambiCurrency","investmentWin","couponRows","allowOddsChange","couponRowIndexes","eachWay","requestId","generateGUID","kambiBetRequestFromRequest","coupon","couponRef","betPlacedTime","placedDate","kambiCurrencyToFloat","projectedWinPayout","potentialPayout","amountPaid","projectedPlacePayout","campaignId","campaignType","hasSpecialOffer","betResponseFromKambiResponse","Unauthorized","generalErrors","InsufficientFunds","couponRowErrors","_error$arguments$find","newPriceString","PriceChanged","previousWinPrice","betErrorFromKambiResponse","s4","isToteRequest","isAllUpRequest","isFobSingleRacingRequest","isFobSingleSportsRequest","isFobSingleKambiSportsRequest","isRacingSingleRequest","propositionCode","isSameRaceMultiBetRequest","selectionPrice","BetErrorType","betErrorTypeMap","Unspecified","InvalidBet","IncorrectNumberOfLegs","PricesChanged","SpecialsError","Closed","BetPlacementFault","ensureBetErrorTypeLiteral","MultiBetFatalErrorMapping","httpStatusToBetResponseCode","networkErrorMessage","placeBet","quickbetMysteryPropose","quickbetFobProposeKambiSingle","quickbetFobProposeSingle","quickbetSameRaceMultiPropose","quickbetTotePropose","quickbetAllUpPropose","quickbetRacingProposeSingle","betslipPropose","confirmBet","proposalIds","quickbetMysteryCommit","quickbetFobCommitKambiSingle","quickbetFobCommitSingle","quickbetSameRaceMultiCommit","quickbetToteCommit","quickbetAllUpCommit","quickbetRacingCommitSingle","betslipCommit","betslipRefresh","KeypadModes","SpecialKeys","Keypress","calculateInvestment","keyPressed","currentAmount","lastKeyPressed","secondLastKeyPressed","Denomination","Clear","Numeric","Backspace","currentStringAmount","decimalCheck","Percentage","calculateBetCost","calculateProjectedReturn","bonusBetValue","boostReward","stakeObj","toNumber","projectedReturn","calculateFlexiAmount","calculateInvestmentFontSizeFactor","ratioByDigitNum","x4","x5","x6","x7","x8","x9","numberOfDigits","ProductCode","isFavouriteNumbersSelection","isToteSportsSelection","poolSequence","ComboLookup","getCombinations","numbers","_ComboLookup$numbers$","costCalculator","calculateCombinations","game1Numbers","game1Selections","game2Selections","isPotLuck","game2Numbers","prevSel","currentSel","calculateSelectionString","isDraw","isAway","BonusDetailsNotification","_objectDestructuringEmpty","isUsingBonusBet","_props$betCost","betCost","createBonusBetDetails","isUsingBonusCash","_props$bonusCashBalan","bonusCashCost","accountFundsCost","createBonusCashDetails","DisclaimerStyled","NotificationType","InvalidSuperPickSelection","NonHandledError","ProposeSucceeded","PriceChange","InsufficientInvestmentForCombinations","RaceClosed","MysteryQuickPickFixedInvestment","ErrorIcon","WarningIcon","InformationIcon","isMysteryDetails","isToteSportsDetails","games","SetInvalidInvestmentNotification","QuickbetLoadSelection","QuickbetClosed","SetAllowInvestmentState","ChangeInvestment","SetActiveInvestment","ToggleEachWay","ToggleBonusBetUsage","ToggleBonusCashUsage","SetBonusBet","ProposeBet","ProposeBetSucceeded","ProposeBetslipBetsSucceeded","ProposeBetFailed","ConfirmBet","ConfirmBetSucceeded","ConfirmBetslipBetsSucceeded","ConfirmBetFailed","ConfirmBetslipBetsFailed","DepositFundsDisplayed","EditBetslipItem","AddingToBetslip","RaceClosedEventReceived","SetMysteryQuickPickPresetInvestment","InsufficientFundsForBet","ClearInsufficientFundsForBet","LoadSuperPicks","ChangeSelectedSuperPick","GetSuperPicksSucceeded","UpdateSelectedSuperPick","GetSuperPicksFailed","SetInvalidSuperPickSelection","ResetInvalidSuperPickSelection","defaultFormulaState","numberOfCombinationsSelected","FormulaStateFactory","ToggleFormula","getNumCombinationsSelected","wasSelected","toggledItem","toList","legs2","legs3","legs4","legs5","legs6","isUnspecifiedErrorType","toBetErrorType","isNonHandledError","hasInvalidLegsOnMulti","isDuplicateBonusBetErrorType","hasBetPlacementFault","hasNotBeenPlaced","clearNonFatalErrors","clearNonFatalMultiBetLegError","setFobSelectionPriceSource","_response$error$type","isDuplicateKey","setInvalidLegOnMultiItem","invalidItems","dupeKeys","checkForDupes","getInvalidMultiItems","_responsePrices$previ","_responsePrices$previ2","previousPlacePrice","defaultNotificationState","notificationType","notificationTitle","notificationSubtitle","defaultQuickbetState","canBet","canChangeInvestment","canProposeBet","canConfirmBet","shouldAllowWinInvestment","isAddingToBetslip","isBetslipItem","presetInvestment","promptForInvestment","isSameRaceMulti","betSource","keepSelections","insufficientFundsForBet","shortfall","canChangeInvestmentState","isQuickbetOpen","QuickbetStateFactory","shouldShowPriceChangeMessage","currentPrices","newPrices","_ref$presetInvestment","_ref$promptForInvestm","uuidv4","metaData","isConfirmationStage","_signal$data2$title","_signal$data2$subtitl","forcedValue","_signal$data$prices","showPricesChanged","betslipError","_betslipError$","_signal$data$response","toastId","stateImmu","getEventId","immutableState$","RaceBettingPageMysterySelection","ClearRaceBettingPageMysterySelection","selectedKey","mysteryRaceBettingPageWrapperState$","newSelectedKeyValue","_children","dateTime","DateTime","SeparatorBullet","handleEvent","rs","scratchedStarter","updateDataWithNewStatus","RaceStatusText","LegSelectionContext","createBetSlipItem","presetData","isAllowedInMulti","InvestmentType","defaultInvestmentState","InvestmentStateFactory","_signal$data$investme","createItemForLegacyBetslip","createUuid","hasIotSubscription","isActive","_isActive","shouldWaitForUser","launchDarkly","launchDarklyState$","triggerHapticFeedback","feedbackType","isHapticEnabled","_window$navigator$vib","_window$navigator","vibrate","useHapticFeedbackOnBetSuccess","listener","defaultSuperpickState","selectedSuperPickSeq","invalidSelectionMessage","isSuperPickLoaded","isSuperBoostAvailable","SuperpickStateFactory","_payload$selection$se","selectedAcceptor","getSuperPicks","FixtureDate","existingOffers","BetInvestmentStyled","BetInvestmentGroupStyled","InvestmentContainerStyled","defaultValueFontSize","InvestmentStyled","shouldFontResize","_ref2$decimalPlaces","TotalCostSectionStyled","TotalCostMoneyStyled","getPriceChange","oldPrice","newPrice","Decrease","Increase","getDividendChange","newDividend","oldDividend","DividendChange","Undefined","MoneyGroupedStyled","borderLeft","borderRight","borderBottomStyle","borderBottomWidth","borderTopStyle","borderTopWidth","MoneyGrouped","LegInfoWrapperStyled","LegInfoPriceTextStyled","hideVisually","SingleLegTypeStyled","determinePriceChangeColor","shouldHighlight","SingleLegMoneyGroupedStyled","EachWayTypeStyled","EachWayPriceStyled","SingleLegPriceStyled","LegInfoPriceFinalDigitStyled","LegInfoPriceFinalDigitWrapStyled","LegInfoPriceFinalDigitInnerStyled","isDecimal","isArrow","LegInfoPriceFinalDigitInnerDigitStyled","LegInfoPriceChangeStyled","shouldDisplay","LegInfoPriceScreenReaderFriendlyStyled","OdometerStyled","DigitContainerStyled","startAnim","DigitStyled","isDecimalSeparator","isExtraDigit","NumString","turnCount","maxTurnCount","numberStr","countRunner","turns","tickAddition","Odometer","_ref3$duration","_ref3$startAnim","_ref3$prefix","_ref3$height","_ref3$width","startCopy","endCopy","startDigits","endDigits","startCount","endCount","countDifference","digitCount","startDigitsMatched","endDigitsMatched","turnsArr","newstartDigitsMatched","startDigitMatchedCount","_digit","startJoined","pow","startJoinedString","GetTurns","indexToDigitCount","LegInfoComponent","_React$PureComponent","_this$props$selectedS","_elementWithPriceIncr","_elementWithPriceIncr2","LegInfoStartingPriceComponent","legType","winPriceChange","winPricePreviousAndCurrent","placePriceChange","placePricePreviousAndCurrent","LegInfoWithPriceComponent","boostAmount","_ref$isActive","_ref$boostAmount","_ref$priceChange","isBoosted","finalPrice","finalPriceString","LegInfoPriceFinalDigit","_ref2$isActive","priceString","priceString0Check","digit","isPriceUpdated","pair","quickbetState$","startWith","superPickState$","quickbetStateRecord","winPriceHistory","placePriceHistory","superPickStateRecord","LegInfo","CheckboxElementStyled","CheckboxIconStyled","_ref$includePadding","includePadding","CheckboxLabelStyled","_ref2$includePadding","_ref$iconSize","checkboxColor","investmentState$","quickbetRecord","investmentRecord","quickbetState","investmentState","EachWayCheckboxComponent","ProjectedReturnStyled","ProjectedReturnMoneyStyled","projectedReturn$","_investmentJs$bonusBe","_specialOffers$find","investmentJs","selectedSpecialOffer","ProjectedReturnComponent","ProjectedReturn","FlexiDisplayStyled","AmountStyled","FlexiDisplay","isUserInputAllowed","calculatedFlexi","MysteryFlexDisplay","divXAnnotation","NumberOfCombinationsDisplayStyled","fontSizeFactorDict","getFontSizeFactor","sizeFactorKey","hasOwn","xDefault","CombinationsStyled","combinations","fontSizeFactor","NumberOfCombinationsDisplay","_ref$numberOfCombinat","BonusBetButtonStyled","isBonusCampaign","rewardType","_userAccountState$isL","_userAccountState$act","hasNotification","BonusBetButtonComponent","_activeCampaigns$leng","toggleBonusBet","trackBonusBetClick","hasActiveCampaigns","BonusBetButton","isCampaignRedeemableWithBettingType","redeemableBy","selectLastDepositError","selectIsBusy","betInvestmentState$","formulaState$","superPickRecord","formulaRecord","_userAccountState$act2","_investmentState$win$","_investmentState$plac","superPickState","formulaState","isSuperPickSelectionInvalid","isWinBonusBet","isPlaceBonusBet","isBonusBetSelected","BetInvestmentComponent","numberOfFormulasSelected","originalState","_useObservableImmutab","_useObservableImmutab2","_useObservableImmutab3","_useObservableImmutab4","_useObservableImmutab5","_useObservableImmutab6","is50cIncrementActive","hasBonusBet","hasBonusCash","isEligibleForBonusBet","isWinActive","isPlaceActive","isFixedOddsRacing","isToteRacing","hideDecimals","shouldDisplayFlexi","shouldDisplayNumberOfCombinations","tippingCombinations","hasSecondaryDisplay","isFixedOddsSport","shouldDisplayBonusButton","InvestmentComponent","EachWayCheckbox","_ref2$isBonusBet","BetInvestment","quickBetDepositing","Swiped","KeypadSwitch$","changeIndex","Swiper","_ref$usePagination","usePagination","threshold","containerStyle","KeypadWrapperStyled","horizontalPadding","KeypadItemStyled","keysPerRow","KeypadButtonStyled","KeypadButton","clickHandler","ariaLabel","KeypadItem","setting","Keypad","_ref2$keypadMode","keypadMode","_ref2$allowDecimals","allowDecimals","_ref2$rowCount","rowCount","_ref2$disabled","_ref2$showHighStake","showHighStake","_ref2$isIncrementAvai","isIncrementAvailable","keypadValues","allowDecimal","Blank","getNumericValues","getDenominationValues","keypadSettings","entry","modalXPadding","QuickbetBodyStyled","superPickEnabled","QuickbetActionsStyled","QuickbetKeypadWrapperStyled","QuickbetKeypadComponent","isTote","QuickbetKeypad","defaultQuickbetReceiptState","divXAnnotations","selectionAnnotations","formulaResponse","betslipReceipt","QuickbetReceiptStateFactory","useTrackAppOpen","QuickbetReceipt","capturedEventRef","QuickbetReceiptDetails","isToteBet","isMysteryBet","isMysteryCombo","isNoveltyBet","_ref2$bonusBet","showBalance","itemSelectionTag","derivedBetCost","projectedPay","betCostMessage","wasCampaignActivated","special","BetslipReceipt","successfulBets","unsuccessfulBets","allSuccess","pluralization","BetslipReceiptDetails","_successfulBets$0$rec","_successfulBets$0$rec2","_bet$receipt$amountPa","_bet$receipt","quickbetAndReceiptState$","receiptState$","receiptState","Receipt","QuickbetButtonStyled","QuickbetBetButtonStyled","QuickbetButtonMoneyStyled","QuickbetAddToBetSlipButtonStyled","_ref$isInQuickbet","isInQuickbet","BusyIndicatorComponent","CampaignStyled","CampaignTitleStyled","RemoveCampaignButtonStyled","LoginButtonComponent","BettingButtonComponent","BusyButtonComponent","EditBetButtonComponent","_ref2$isDisabled","PendingBetsButtonComponent","NextEventButtonComponent","KeepBetsButtonComponent","theRef","CloseButtonComponent","DepositButtonComponent","_ref5$isDisabled","_ref5$color","AddToBetslipButtonComponent","UpdateBetslipItemButtonComponent","RemoveCampaignButtonComponent","proposeBetAsync","_proposeBetAsync","handleBetslipProposeResponses","_confirmBetAsync","handleBetslipCommitResponses","handleQuickbetResponse","_response$","successfulResponses","lastReceipt","_b$receipt$betPlacedT","_b$receipt","_a$receipt$betPlacedT","_a$receipt","errorResponses","mysteryResponse","getToteProductPlanSequence","hasWinInvestment","hasPlaceInvestment","WinAndPlace","ExactaWithRovingBanker","TrifectaWithRovingBanker","First4WithRovingBanker","createBetRequest","useBonusCash","isBonusCashImprovementsActive","favouriteNumbersBets","_bet$game2Selections","selectionsGameOne","selectionsGameTwo","betTransactionId","fixedOddsBets","allUpBets","poolSeq","actuallyUseBonusCash","_selection$bets","createMysteryCommitRequest","mysteryInvestWin","mysteryType","numberOfBets","createMysteryProposeRequest","productPlanSeq","raceDetails","selectionDetail","createAllUpRequest","createToteRequest","variantSeq","selectedCampaign","isStartingPrice","responseVersion","createFobRequest","createFobSportsRequest","createRacingRequest","calculateBetCostShortfall","betCostInDollars","accountBalanceInDollars","bonusCashBalanceInDollars","betAmountInCents","availableBalance","ButtonsContainerComponent","_selection$externalBe","isNewBetSlipFeatureActive","favouriteNumbersCombinations","isFlexiWithInsufficientInvestment","hasSuperPickOrFlexiError","setInvalidSuperPickSelectionNotification","trackBonusBet","handleProposeBetClick","betRequest","hasNonHandledErrorOccurred","isInvestmentError","isMysteryQuickPick","isToteSports","isKambiSportsBet","showAddToBetslipButton","showUpdateBetslipButton","showBusyButton","showEditButton","showProposeButton","showConfirmButton","showLoginButton","showPendingBetsButton","showDepositButton","shouldDisableBetButton","keepBetsRef","handleBetSelection","betFlow","_betslipItem$selectio","betslipItem","confirmBetAsync","handleKeepButtonClick","buttonsState$","_user$campaigns","_investment$bonusBet","_user$campaigns2","bonusCashCampaign","ButtonsContainer","quickDepositIsBusy","rewardTextHeight","SuperPickStyled","HeaderStyled","HeaderBg","HeaderIconStyled","SuperPickButtonsContainer","SuperButtonCellStyled","SuperPickButtonStyled","shouldDisplayReward","transitionDuration","gradientColorStop1","gradientColorStop2","SuperBoostButtonStyled","SuperPickButtonTextStyled","SuperPickButtonSubTextStyled","SuperPickButtonSelectedTextStyled","RewardStyled","RewardInnerStyled","checkDisplayReward","getMaxReward","SuperPickButtonComponent","_specialOffer$title","_specialOffer$special","DisplayReward","SuperBoostButtonComponent","_specialOffer$title2","_specialOffer$special2","SuperPickButton","SuperPickComponent","newSpecialOffer","SuperPickWithSuperBoostsComponent","SuperPickObserver","isSuperBoostFeatureActive","isSuperBoostIncluded","SuperPickWithInducementCheck","superpickState","_investmentState$toJS","QuickbetSuperPickComponent","QuickbetSuperPick","ExpandablePanelThemes","hasPadding","whiteTheme","whiteNestedTheme","hasMargin","purpleTheme","getExpandablePanelTheme","whiteNested","isEmpty","ExpandablePanelStyled","ExpandablePanelHeaderStyled","hideHeaderTap","customHeader","ExpandablePanelTitleStyled","IconStyled","HiddenContentStyled","FormulaHeader","ExpandableSectionStyled","ExpandablePanelContentStyled","ExpandableSection","innerRef","childrenRenderedTimeoutHandle","scrollIntoViewWhenOpened","useSmartScroll","continueOpenCollapsible","_this$innerRef","transitionTime","expanded","hasBeenOpened","shouldOpenOnNextCycle","setInnerRef","handleTransitionEnd","shouldSwitchAutoOnNextCycle","WebkitTransition","msTransition","onTransitionEnd","cleanUpTimeout","_this2$innerRef","currentElementTop","offsetParent","offsetTop","elementContentHeight","documentElement","_this2$innerRef2","_this2$innerRef3","openCollapsible","closeCollapsible","_this$innerRef2","transitionCloseTime","ExpandablePanelContent","_ref$transitionTime","_ref$transitionCloseT","ExpandablePanel","leftIcon","rightIcon","headerClicked","_ref$scrollIntoViewWh","_ref$deferRenderingCo","deferRenderingContentOnExpand","_ref$hideHeaderTap","_ref$dataTidValue","dataTidValue","HeaderProp","headerComponent","_ref$useSmartScroll","FormulaExpandablePanelHeaderComponent","defaultProps","SvgRaceCardIcon","DirectionalIcon","rotations","RightArrowIcon","RefreshIcon","RaceCardIcon","_ref3$size","Chat","ChevronUp","ChevronDown","SpecialsNew","Video","MaterialSvgStyled","icons","Text","CompactPanelContainerStyled","CompactPanelHeaderStyled","CompactPanelHeaderContentStyled","CompactPanelContent","CompactPanel","_theme$content$backgr","_theme$content$text$c","headerIcon","CompactExpandablePanelStyled","CompactExpandablePanelHeaderStyled","CompactExpandablePanel","_ref$defaultExpanded","defaultExpanded","onExpansionChanged","setExpanded","nextExpanded","FormulaStyled","FormulaListStyled","FormulaListItemStyled","FormulaButtonStyled","NameStyled","FormulaButton","_ref$formulaCombinati","formulaCombination","_onClick","formulaCombinations","onClickFormula","comb","formulaNames","QuickbetPanel","ExpandablePanelComponent","ID","btoa","ExpandablePanelFactory","QuickbetFormulaComponent","formulaStateRecord","QuickbetFormula","NotificationsComponent","_notificationData$not","notificationData","_notificationData$not2","_notificationData$not3","_notificationData$not4","notificationState$","Notifications","ActiveCampaignsComponent","showRemoveButton","handleRemoveBonusCashButtonClick","Campaigns","userState$","showTrashButton","userState","quickbetStateValue","QuickbetCampaigns","hasSuperPickError","trackBetConfirmation","betConstruction","isSportsBet","isFavouriteNumbersBet","sportsOrRacingData","getBetType","betSpecialOffers","mysteryDetails","isQuickPick","betTypeName","userFeatures","currentAppState","visionChannel","marketName","calculateBetCostSingleItem","_betslipItem$investme","calculateEstReturnSingleItem","_betslipItem$investme2","calculateEstReturn","placeableItems","placeableMultis","singleItems","singlesEstRtn","nextItem","multiAndFormulaEstRtn","toDecimalPlaces","getFobPrices","getLastSeenFobPrices","_selection$winPriceLa","calculateMultiReturnInternal","priceSelector","_priceSelector","_priceSelector2","createRacingDetails","buildValidFormulas","numberOfValidLegs","formulaInvestment","singles","doubles","trebles","pick4","pick5","buildFixedOddsBetLeg","isMultiBetLeg","sportDetails","buildBetslipRequest","multis","defaultBetslipState","fobItems","toteItems","allUpItems","_calculateBoosts","_calculateBoosts2","boostPrice","buildFixedOddsBet","isMultiMate","estimatedCost","buildToteBet","buildAllUpBet","spend","buildMultiFixedOddsBet","isMulti","startIotSubscription","stopIotSubscription","defaultBetslipItem","hydrateItem","upgradeSchemaIfRequired","market","BetslipExpandableTypes","BETSLIP_STORAGE_KEY","hasProposed","scrollPosition","isMultiFormulaExpanded","BetslipStateFactory","_state$multiBetError","newMultiInvestment","stateToHydrate","hydrateBetslip","fromLocal","getStateFromLocalStorage","itemsWithFobPriceChangeNone","shouldClearInsufficientFundsError","multi","single","newScrollPosition","newItem","trackAddToBetslip","subscribedItems","newPriceSource","refreshItems","_item$selection","hasWinPriceChange","hasPlacePriceChange","hasWinBoostedSuperPick","hasPlaceBoostedSuperPick","itemWithNoFatalErrors","deselectedItem","betslipItemIdToRemove","updatedItems","hasMultiBetError","hasInvalidMultiLegs","shouldKeepError","nonPlacedItems","itemsToRetain","itemsToRetainWithResetLastSeenPrices","_ref2$betslipItemIds","betslipItemIds","refreshSpecificBetslipItemsOnly","betsToRefresh","propose","legsCount","singleBetCampaignActivatedInd","multiBetCampaignActivatedInd","cleanedItems","setStateToLocalStorage","defaultBetData","analyticsDefaultData","betslipAnalyticsSubscriber","confirmAllBetsSuccessful","isMultiBet","step2BetData","mapBetErrorTypeIfNonNullable","Analytics","step3MultiBetData","betItem","getSelection","_betItem","_extractReceipt","_receipt$specialOffer","extractReceipt","_extractReceipt$winIn","_extractReceipt$place","_extractReceipt$speci","_extractReceipt$betCo","launchDarklyState","addedItem","extractErrorMessage","defaultQuickbetData","BalanceInfoBarContainerStyled","BalanceInfoBarStyled","BonusBalanceMoneyStyled","BalanceInfoBar","bonusBalance","PillStyled","HeaderPillStyled","MarketPillStyled","MarketNameStyled","ellipsis","MarketTypeStyled","MarketStyled","CompetitionAndTournamentStyled","SingleSelectionStyled","EventStyled","UpcomingPoolsKey","FavouriteNumbersPools","fetchSingle","_fetchSingle","softTimeToLive","upcomingPools","ToggleGameNumber","TogglePool","ClearSelections","SetNumberOfBets","SetPotLuckNumbers","SetResultKey","DeselectPool","SetShowAll","LoadNumbers","gameOne","gameTwo","potLuckBets","betConfirmed","resultKey","showAllPools","game","updatedGame","selectedPools","SubheaderStyled","SubheaderTextStyled","LineContainerStyled","TotalContainerStyled","TotalBetsStyled","LineInfoStyled","ConfirmInfoStyled","ConfirmInfoTextStyled","ConfirmInfoBetStyled","PoolDateContainerStyled","PoolDateStyled","FavouriteNumbersHeader","_useObservable","favouriteNumbersState$","poolDate","FobHeader","selectionDetailsMap","sportIconCode","tournamentName","competitionName","handicapName","TitleStyled","CountdownPillStyled","FobSportsHeader","sportsSelectionDetails","sportsSelection","sportName","iconTypes","getIconTypeFromMeetingCode","MysteryInfo","_ref$isRaceClosed","isRaceClosed","iconType","NoveltyListStyled","clearFix","NoveltyPlaceStyled","NoveltyStarterStyled","NoveltyPlacePillStyled","NoveltyPlaceTextStyled","SingleSameRaceMultiSelectionStyled","AbbrStyled","ComboBetLinesStyled","MysteryComboSelectionRowStyled","MysteryComboCodeStyled","MysteryComboSelectionStyled","parseMysterySelectionString","acceptorsForRace","parseRawNoveltySelectionString","addAcceptorNameToSingleSelection","ALLWAYS","RB","WITH","selectionForRace","getAcceptorName","getAcceptorsForRace","allAcceptors","getAcceptorTextForSingleSelection","getAcceptorsFromMysteryBetLine","betLine","jointArray","PlaceTextStyled","displayPill","abbrStyled","MysteryNoveltySelection","betLines","parsed","isAlways","MysteryBetInvestmentStyled","NoveltySelection","PoolCodes","INORDER","MysteryComboSelection","betlines","betline","MysteryComboBetLineSelection","poolCode","displayValue","MysterySpendDisplay","MysteryDisplaySelections","selectionComponent","isCombo","isMysteryNoveltyBetType","MysteryHeaderComponent","mysterySelection","MysteryHeader","getMarketTitle","getFixedOrToteDisplay","RaceInfo","fixedOrToteDisplay","MultiRaceSelection","getPoolTypeName","parseAllUpSelections","parseMultiLegSelectionString","Starter","defaultOptions","roundSizeBeforeCalc","calculateRem","sizeInPx","SilkImageFlexibleStyled","sprite","_ref$padding","_calculateAspectRatio","srcWidth","srcHeight","xOffset","_ref2$padding","ratio","newWidth","calculateAspectRatioFit","ratioWidth","ratioHeight","ratioBackgroundPosition","QuickbetSilkImage","imageUrlWithSizes","_imageUrlWithSizes$la","_imageUrlWithSizes$la2","SelectionDisplay","isMultiRaceBetType","extractSelectedAcceptor","legName","sameRaceMultiSortCallback","selectionAcceptor","selectedAcceptors","selectionNumber","RacingHeaderComponent","RacingHeader","OverflowEllipsis","ToteLineContainerStyled","ToteSportsHeader","ToteSportsHeaderComponent","selectionsByGame","homeTeamName","awayTeamName","selectionTypeDescriptions","selectionTypeDescription","gameSelection","BonusBetListContainerStyled","BonusBetListItemContainerStyled","BonusBetListItemButtonStyled","BonusBetLabelStyled","ExpiryLabelStyled","AmountLabelStyled","MoneyStyled","BonusBetListItem","_ref$isBonusCash","handleClick","trackClick","trackerKey","getTrackingKey","_investmentState$bonu","selectedBonusBetCampaignId","hasSelectedSuperPick","BonusBetListComponent","setBonusBet","selectedBonusBets","setSelectedBonusBets","paginatedBonusBets","setPaginatedBonusBets","chunks","chunk","paginate","updateButtonState","newSelectedBonusBets","getButtonState","canShowItem","BonusBetList","externalProps","MysteryQuickPickBonusToggleStyled","mysteryQuickPickState","MysteryQuickPickBonusToggleButtonComponent","_props$activeCampaign","hasActiveBonusCashCampaigns","MysteryQuickPickBonusToggleButton","QuickDepositActions","QuickbetDepositBodyStyled","QuickDepositBodyContainerStyled","QuickDepositLabelStyled","QuickDepositBodySectionStyled","QuickDepositBody","willDepositMinimumAmount","minimumDepositAmount","lastQuickDepositError","_useBetAccount","paymentAvailabilities","PaymentAvailabilities","trackQuickDepositSucceeded","failureReason","renderPaymentMethod","determineComponent","QuickDepositUnavailableActions","accountDepositAvailable","unavailabilityReason","depositButtonText","makeQuickDepositAvailableResponse","validateCardDeposit","getDefaultCreditCard","isAccountDepositAvailable","useQuickDepositValidation","betCostShortfall","_useInitialData","applePayNativeAvailability","googlePayAvailability","validatePayPalDeposit","validateApplePayDeposit","validateGooglePayDeposit","ProcessingMessageStyled","ProcessingMessage","isDepositing","getProcessingMessageForPaymentMethod","QuickDepositUnavailableReason","QuickDeposit","_result$initialData","showNotice","useServerConfig","isSpecialOffersAvailable","notificationVisible","quickDepositEnabledBettingTypes","QuickbetComponent","_activeCampaigns$sort","_ref$shouldShowSuperP","shouldShowSuperPicks","superPickErrorMessage","setInvalidInvestmentNotificationSubscription","quickbetLoadSelectionSubscription","quickbetClosedSubscription","proposeBetFailedSubscription","proposeBetSucceededSubscription","confirmBetFailedSubscription","confirmBetSucceededSubscription","confirmBetslipBetsSucceededSubscription","addingToBetslipSubscription","_registerAnalytics","withLatestFrom","proposeBetFailed","_extractErrorMessage","dataToTrack","proposeBetSucceeded","_extractErrorMessage2","newBetData","confirmBetSucceeded","newBetDataStep2","_x$confirmBetSucceede","quickbetStateData","addToBetSlip","confirmBetSubscription","_registerQuickbetLogg","snapshot","innerText","isRacing","isMystery","isFob","isFavouriteNumbers","isFobSports","shouldShowSuperPicksOverride","mustUseBonusCash","headerType","headerTid","activeBonusCashCampaign","valueOf","showAvailableBonuses","displayQuickDeposit","Quickbet","selectBetSlipItems","selectBetSlipItemCount","createSelector","selectBetSlipMultiLegCount","selectBetSlipFobSelectionsIds","_item$selectionDetail","marketTypeCode","MULTI_BUILDER_TOAST_ID","MultiBuilderToastContent","newItemKey","hasIncompatibleLeg","currItem","shouldRenderIncompatibleLegBanner","_hostHelpers$toggleBe","toggleBetSlipDrawer","textOverflow","showMultiBuilderToast","showAddedToBetSlipToast","toastText","convertToBetSelection","getRaceLink","isFOO","fobDetails","product","raceSeq","eventStartTime","meetingSeq","animateSelectionButtonToBetslip","_animateSelectionButtonToBetslip","targetEl","elementBox","elementCenter","targetBox","targetCenter","clonedButton","cloneNode","clientWidth","clientHeight","rotate","complete","_handleBetSelection","featureState","_betFlow$options3","_betFlow$options4","_betFlow$options$isDi","_betFlow$options","_betFlow$options2","isDirectToBetSlip","clickedElement","currentMultiLegCount","setUp","quickbetProps","StartersPageViewModel","legacyBetAdapter","pyosStore","selectionProcessor","selectedRaceNumberChangedSubscription","selectedBetTypeSubscription","isValidSubscriptionGiddyUp","hasGiddyUpRaceKey","quickbetCloseSubscription","quickbetAddingToBetslipSubscription","isSelectingQuaddieStarters","PLACE_QUICKBET","PLACE_BETSLIP","isPriceChangeFeatureActive","raceEventSubscription","currentSubscribedRaceNumber","currentSubscribedTopics","RACE_CLOSED_TOAST_ID","STARTER_ID_PREFIX","useGiddyUp","isQuickbetKeepSelectionsFeatureActive","doKeepSelections","showGiddyUpInfoPanel","showGiddyUpInTopPanel","foundRace","openGiddyUp","subscribeIsValidGiddyUp","modalClosed","unsubscribeIsValidGiddyUp","_assertThisInitialized","getStarter","getRaceForGiddyUp","selectBetType","selectWinAndPlaceStarters","acceptorNumbers","selectQuaddieStarters","subscribeToRaceEventDebounced","subscribeToRaceEvent","quickbetOnHighlightedStarter","uri","hasValidBetType","isValidUri","parsedQueryString","queryString","pairs","pairRegex","_wrapRegExp","existing","newPair","splits","groups","parseSrmStartersFromToteRaceUri","selectSameRaceMultiStarters","updateSelectedRaceStarters","mergeDisposables","callBacksForDisposal","validateSelections","getStarterSelections","monitorLaunchDarkly","registerHandlers","showGiddyUpInInformationPanel","isSubscriptionChanged","unsubscribeFromRaceEvent","updateSelectionsForCurrentRace","navigationTracking","quickbetStateJs","hasAnErrorOccurred","isBetComplete","refreshSelectionPage","_this5$ldSubscription","handleRemovingRaceClosedToast","currentRaceStatus","raceStartersLocal","raceStarter","betTypeChangedCallback","starterParam","selectedValue","placeSelection","elementId","_this9","raceIndex","scratchedAcceptorCount","startersInitialisedCallback","showWarningMessage","getLegNumber","targetLeg","canKeepSelections","_this10","skyPageRoute","assignMeetingInfo","doKeep","getRaceSelectionDetails","clearAllSelectionsAndRefresh","doBetEnquiry","TotalCombinations","toteSelection","refreshPage","clearSelections","isDouble","getDoubleRaceNumbers","isQuaddie","getQuaddieRaceNumbers","_this11","observableStarter","serializedSilks","imageUrl","fixedOdds","toteOdds","_this12","preferredStarter","singleStarterKeys","createAcceptor","thisRaceKey","getRaceKeyByRaceNumber","starterOffset","_this$raceInformation2","_this$raceInformation3","startersKeyValue","hasSameRaceMulti","bt","_selectedRace$fixedOd","_selectedRace$fixedOd2","_raceInformation$meet","marketSeq","priceChangedTopic","acceptorChangedTopic","sameRaceMultiChangedTopic","getSrmPriceChangedEventTopic","getRacePushDataTopics","pushEventSubscriptions","subscribeToRaceEvents","pushEventReceived","unsubscribeFromRaceEvents","_this13","_this$bettingInformat","pushToteRaceStatusChanged","_this$bettingInformat2","resetFobFavourite","_draft$FixedOddsMarke","fixedOddsMarketMatch","FixedOddsMarkets","fixedPropositionWithChange","Propositions","Price","PriceToDisplay","_starter$FixedOddsSta","getStartersByPropSeq","pushFobPriceChanged","_this$bettingInformat3","acceptorLookup","acceptorTotePools","raceFavourite","pushTotePriceChanged","_this$bettingInformat4","pushToteAcceptorScratched","_this$bettingInformat5","pushToteAcceptorUnscratched","runners","eventDate","raceMatchedToEvent","runnerNumber","top2Price","top3Price","top4Price","pushSameRaceMultiPriceChanged","lowestPriceStarters","fobInfo","currentLowestPrice","currentPrice","loadPromotions","_loadPromotions","useRacePromotions","promotions","_races$raceKey","RacePromotionTextStyled","ExternalLinkStyled","useOnce","wasCalled","termsAndConditionsUrl","onLoaded","onOpened","onClosed","onLinkClicked","filterRacePromotionsByEntitlement","promotion","useInducement","RacePromotions","_useRacePromotions","entitledPromotions","RacePromotion","useBetInformers","toggleButton","buttons","isDogsFormData","formData","StarterType","isRacesFormData","isTrotsFormData","useStewardsComments","_useRacePageData","names","getRaceStarterNames","hasValidStewardsComments","stewardsComments","isDogsRunnerForm","lastRace","Histories","acceptorName","StewardsComments","isRacesRunnerForm","RaceHistories","isTrotsRunnerForm","TrotHistories","formatStewardsComments","Forms","_starters$find","StewardsCommentsStyled","StewardsCommentTextStyled","_useStewardsComments","comments","RaceContentTextStyled","RaceContentBadgeStyled","RaceContentContainerStyled","_getRacePreviews","_meetingPreview$raceP","racePreviews","preview","tipsterProfilePictureUrl","_getVideoPreviews","useRaceContent","getRacePreviews","retryOnMount","racePreview","unpackData","raceContentData","TipsterImageStyled","getToteWinPrice","acceptorDTO","getFixedWinPrice","getFixedPlacePrice","mapAcceptor","meetingDTO","_acceptorDTO$SilkImag","acceptorDto","useAcceptors","extractAcceptors","TipButtonsContainerStyled","makeToteSelection","parsePrice","makeFobMatchedSelection","extractPrice","hasTips","TipButtonStyled","TipInformationStyled","ScratchedTextStyled","_colors$starters$butt","_colors$starters$butt2","secondaryColor","_colors$starters$butt3","priceChangeBG","priceChangeSelectedBG","arrowBorderColor","lightArrowBorderColor","PriceChangeContainerStyled","_ref$isInline","isInline","_ref$containerStyle","PriceWrapperStyled","isWidthDynamic","isPriceChanging","_ref3$isSelected","_ref3$isInline","PriceInnerStyled","_ref4$shouldForceColo","shouldForceColor","_ref4$centerContent","centerContent","PriceLableStyled","PriceChangeIndicatorsStyled","arrowDirection","_ref5$light","getArrowStyles","up","down","PriceChangeIndicatorInsideStyled","PriceChangeIndicatorAboveStyled","getSelectedProposition","getCurrentBetType","getToteSwapOptions","getActiveToteSwap","getCurrentRacePageQueryKey","RaceSmall","RaceLarge","RaceLarger","RaceLargest","DogSmall","DogLarge","DogLarger","DogLargest","TrotSmall","TrotLarge","TrotLarger","TrotLargest","getSize","isTrots","isDogs","imageSize","charAt","getImageUrlWithSize","getImageSizeUrl","urlDate","getSingleSilkImageUri","isFieldSummaryPopulated","getImageUrlWithSizes","SingleSilkImageStyled","isDogsSilk","MatchedSilkImage","_data$MeetingInformat","_data$MeetingInformat2","racePageQueryKey","singleSilkImageUri","RacecourseSeq","SilkWrapperStyled","SilkImageStyled","_ref$baseWidth","baseWidth","breakpoints","_calculateSize","imageHeight","imageWidth","calculateSize","cssObject","makeCSSObject","TipButton","toteScratchType","isRaceOpen","_usePriceChangeAnimat","isFieldSummaryV2Active","getScratchedText","trackTipsBetClickedEvent","buttonPosition","trackTipsBetClicked","trackRacePreviewBetClicked","useBettableTipQuickBetting","tipSource","loadQuickBet","_meeting$SelectedRace","_meeting$SelectedRace2","_makeSelection","makeSelection","_makeSelection2","BettableTip","BettableTips","tip","formatTips","tipNumber","getAcceptorsFromTips","getPriceAndScratchings","RaceContentPanel","_content$racePreview$","_content$racePreview$2","_useRaceContent","expertTips","TipsterImage","alt","previewText","SuggestedBet","suggestedBet","useVideoPreview","getVideoPreviews","entries","VideoContainerStyled","VideoStyled","defaultFallbackOptions","liveSyncDurationCount","liveMaxLatencyDurationCount","liveBackBufferLength","startFragPrefetch","useVideoStream","videoRef","fallbackOptions","onErrorCallback","_ref$isStream","isStream","hlsRef","playbackSupportStatus","setPlaybackSupportStatus","videoEl","initHls","videoElement","hlsInstance","Hls","videoSource","hls","MEDIA_ATTACHED","loadSource","ERROR","fatal","OTHER_ERROR","recoverMediaError","attachMedia","initUsingHLS","videoPlayer","mediaError","MediaError","MEDIA_ERR_SRC_NOT_SUPPORTED","onCanPlay","forceReload","_hlsRef$current","destroy","_useVideoPreview","onVideoPanelLoaded","onVideoPanelOpened","onVideoPanelClosed","onVideoPlayed","onNotSupported","canPlay","fullscreenElement","exitFullscreen","player","removeAttribute","preload","autoPlay","playsInline","controls","FeatureFlag","showWhen","FeatureFlagComponent","_ref2$showWhen","useRaceStatus","hasResulted","hasResults","Open","Released","Interim","Abandoned","BettableTipsPanel","tipsterName","tipsterDisplay","endsWith","RacePanels","_useRaceStatus","_race$MeetingInformat","PanelsContainerStyled","Preview","useEventAggregator","BetInformers","isGiddyUpDisabled","toggleGiddyUp","_ref$raceReplayId","raceReplayId","hasRaceReplayImprovements","_useBetInformers","_useBetInformerAnalyt","trackShowFixedFlucs","trackShowAllForm","trackShowMarketMovers","trackShowDoubleProvDiv","trackShowQuaddieProvDiv","trackCommentsVisible","trackTipsVisible","trackResultsVisible","trackFieldVisible","trackReplayVisible","trackPreviewVisible","trackGiddyUp","useBetInformerAnalytics","isFormDisabled","hasRaceReplayVideo","_race$RaceReplay","meetingHasResults","toggleOff","isFixedFlucsDisabled","isMarketMoversDisabled","isDoubleProvDivDisabled","isQuaddieProvDivDisabled","hasValidTips","isOnSkyRacePage","BetInformersContainerStyled","whiteSpace","scrollbarWidth","scrollbarColor","ResultsPageViewModel","showProtest","showField","viewName","isRaceReplayOn","displayTypeSubscription","fieldVisibleState","hasVideoReplay","bettingV2CommandDriver$","_this2$ldSubscription","_this2$displayTypeSub","subscribeToRaceReplay","getFinisher","raceResults","Projection","RegularProjection","_Projection2","_title","RovingBankerProjection","_Projection3","AllwaysProjection","_Projection4","LegInProjection","_Projection5","MultiLegSelectionsViewModel","selectionStringRaws","selectionRaw","FormDataStyled","wordBreak","BaseStyledCss","BaseStyled","HighlightStyledCss","borderLeftStyle","borderLeftWidth","HighlightStyled","FormGridStyled","FormHistories","isHistoriesTruncated","setIsHistoriesTruncated","historiesToRender","getReplayInfoFromApi","_getReplayInfoFromApi","entitlement","getRaceReplayDataFromApi","getEntitlementUrlFromApi","raceDate","encrpytedVideoKey","toggleSkyVideoPlayer","openSkyVideoPlayer","entitlementData","getOrdinalSuffix","isUpperCase","intNumber","RACE_NOT_FINISHED_STATUSES","SkyVideoButton","_race$raceReplay","_race$raceReplay2","_race$raceReplay3","_race$raceReplay4","isHeaderPinned","showLiveIcon","setShowLiveIcon","activeRaceReplay","isSameRaceReplay","isRacingWAFeatureActive","checkRaceStartTime","ast","lessThanMinute","isBefore","isPastAstBuffer","shouldDisplayRacingWA","skyTvChannelId","handleButtonClick","_race$raceReplay5","_race$raceReplay6","_race$raceReplay7","headerState","formReplay","racePosition","shouldShowLive","RaceReplayKnockout","_RaceOverlay$StarterN","RaceOverlay","RaceCode","koElementRef","isVideoPlaying","setIsVideoPlaying","raceReplayData","setIsOn","setIsOff","getEventAggregator","raceProp","TrackName","HistoryHeader","FieldSize","HistoryHeaderStyled","wordWrap","HistoryExpandable","DogsHistorySingle","_ref$history","BarrierBox","RaceClass","Margin","WinnerTime","BestOfNight","BodyWeight","Placings","LastTenStarts","Career","PrizeMoneyWon","RatingDry","RecommendedPrice","BestTime","LastTime","Sex","Age","Color","SireName","DamName","TrackDistance","OwnerName","RacesHistorySingle","StartPrice","Position800","JockeyName","Weight","Position400","HighlightStat","highlightOn","elm","secondUpRule","lastTenStarts","secondUp","courseConditionRule","courseCondition","stats","_form$TrackConditions","firstUp","trackDistance","Comments","FirstUp","SecondUp","TrackConditions","Stats","GearChanges","TrotsHistorySingle","DriverName","MileRate","StartType","Form","_useRaceFormData","useRaceFormData","getRaceFieldFormDataFromApi","getFieldFormForRaceApiUrl","FOOForm","raceFieldFOOFormData","_useRaceFieldFOOFormD","getBlackbookDetails","deleteBlackbookEntry","postGetBlackbookRunners","useClickOutside","calledRecently","onClickOutside","dropdown","getContactDetails","PromptForUserDecision","handleSelection","promptUserAndReturnDecision","decision","TextAreaStyled","resize","TextArea","maxCharacters","testAreaProps","textAreaRows","setTextAreaRows","onInput","scrollHeight","minLength","isBettingAvailable","RacingTodayDetails","AbandonedInd","CloseTime","ResultedInd","ScratchedInd","SuspendedInd","iconDict","Jockeys","getIconName","meetingToIconKey","meetingIdToContestType","AddCommentModal","onCommentSave","newComment","commentID","setComment","_useMutation","noteID","BlackBookNotesSeq","BlackbookSeq","Comment","postBlackbookComment","isJockey","trackBlackbookNavigateToRace","trackBlackbookEntryDeleted","getCodeAndType","addOrEditBlackbookComment","closeAddCommentModal","refetchActive","_getCodeAndType2","trackBlackbookAddCommentSave","SingleComment","_ref$comment","BlackbookNotesSeq","NotesModDateTime","commentCount","optionsMenuRef","isMenuExpanded","setIsMenuExpanded","_useContactDetails","useContactDetails","isLoadingName","blackbookSeq","blackbookNotesSeq","deleteComment","isWaitingOnDeleteComment","nameToDisplay","handleDeleteClick","handleEditClick","noteTimeLocalised","noteTimeToDisplay","isAfter","fromNow","CommentWrapperStyled","runnerId","_ref$isExternalDispla","isExternalDisplay","useBlackbookRunners","useAccountState$","regexInternationalSuffix","regexApprenticeSuffix","getMatchedRunnerInBlackbook","allBlackbookRunners","starterNameToMatch","starterCodeToMatch","cleanedName","Code","useAddToBlackbook","_useBlackbookRunners","isLoadingRunners","matchedRunnerInBlackbook","fixType","postAddRunnerToBlackbook","handleUnableToAdd","_getCodeAndType3","_getCodeAndType4","AddJockeyButton","_useAddToBlackbook","isJockeyInBlackbook","iconName","BlackbookControl","isRunnerInBlackbook","shouldRenderComments","NumberOfNoteEntries","buildRacesUri","compSeq","useRaceList","iotSubscription","isToteRacePushEvent","refetchInactive","updatedRace","getMeetingRaces","RunnerExpanded","selectionDate","isRunnerExpanded","_ref$source","_ref$isFixedOddsOnly","MatchedForm","_meetingDate$toString","RunnerNumber","BaseFinisherViewModel","shouldDisplayFavouriteInStarterName","isExpandable","fieldSummaryV2","arg","_this3$ldSubscription","getRaceFieldSummaryDataFromApi","getFieldSummaryForRaceApiUrl","useRaceFieldSummaryData","isFormSummaryFeatureActive","HeadingStyled","HeadingBase","H3","Heading","_ref$level","RaceProduct","InfoNoticeBoxStyled","RaceDateHeaderStyled","EventInfoContainerStyled","EventInfoIconSectionStyled","EventInfoIconStyled","Suspended","EventInfoNumberStyled","EventInfoTimeStyled","EventInfoDescriptionSectionStyled","PropositionFooResultsStyled","PropositionStartNumberStyled","PropositionScatchTimeStyled","PropositionResultsStyled","highlightWinner","FavouriteIconWrapper","PropositionOddsStyled","EventInfoStatusStyled","EventInfoStatusTextStyled","EventInfoPayIndicatorTextStyled","EventInfoStatusFieldStyled","ImageGridCellStyled","PropositionGridRowStyled","SeparatorGridRowStyled","_ref7$toUpper","toUpper","ExtraInfoHeaderStyled","InfoIconStyled","HeaderSpecialsIconStyled","SpecialsIconStyled","ExtraInfoDetailStyled","ButtonWrapStyled","PropositionSummaryResultsStyled","PropositionSummaryStyled","SelectionFormTableStyled","Proposition3FieldsStyled","PropositionTrotFieldStyled","PropositionJockeyNameStyled","PropositionTrainerNameStyled","PropositionStrongFieldsStyled","SilkFOODivImageStyled","SilkFOODivImageResultsStyled","SingleSilkDivImageResultsStyled","WrapperComponent","BlackbookIndicatorStyled","raceCodeComponents","_summary$jockeyName","_summary$trainerName","FieldsResults","_raceCodeComponents$r","FieldSummaryResultsComponent","MatchedFieldSummaryResults","fieldSummary","itemField","raceField","handicapDistance","Fields","FieldSummaryComponent","MatchedFieldSummary","MatchedSummaryStyled","DogFinisherViewModel","_BaseFinisherViewMode","stripes","stripeClass","numberOfFinishersInRace","stripe","RaceFinisherViewModel","TrotFinisherViewModel","FinishersListViewModel","FinisherPlaceViewModel","ordinal","FinisherPricesViewModel","showToteWin","showFobWin","showSpWinDividend","displaySpWinDividend","shouldShowFixedFavourite","FieldViewModel","SameAsUIElement","columns","Index","FieldUIElement","MultiFieldViewModel","fieldElements","sameAsElements","visible","showSameAs","setUpColumns","setUpField","setUpSameAs","countSub","getFieldAtIndex","rowCounter","StandardTopPanel","raceInfo","_this$useGiddyUp","_this$useGiddyUp2","SubstitutesViewModel","ScratchingsViewModel","MessageBoxViewModel","showDescription","showLink","iconClass","RaceStatuses","ResultsViewModel","displayFixedDivMessage","FinishersColumnHeader","shouldDisplayFixed","currSort","setCurrSort","currLabel","currDirection","createSortClick","newSort","ColumnHeaderItemStyled","ResultsFieldViewModel","sortedFinishers","currentSortOption","getSortFunction","subscribeToSortChanges","finisherSortOption","currentSortItem","sortItem","mappedSortTypes","trackRaceCardSorting","Fixed","FieldFinisherPricesViewModel","displayToteWinDividend","displayFobWinDividend","displayTotePlaceDividend","displayFobPlaceDividend","showFixedOdds","showScratchedFixedOdds","showSuspendedFixedOdds","AllUpViewModel","legVisibleSubscriptions","doubleProvDivAllowed","quaddieProvDivAllowed","_loadStartersForRace","loadStartersForLeg","raceKeyForLeg","getRaceKeyForLeg","loadStartersForRace","_this$bettingContext","_raceStarters$Starter","MultiLegViewModel","subscribedTopics","subscribeToPushData","getStartersForLeg","startersForLeg","newTopics","currLegRaceNumber","currLegRace","subscribeRaceEvent","unsubscribeRaceEvent","NoveltyDividendsViewModel","ProvDivsViewModel","isDoubleSelected","isQuaddieSelected","isDoubleVisible","isQuaddieVisible","doubleProvDivSub","quaddieProvDivSub","trackRaceReplayVideoLaunched","replayLocation","replayAvailable","trackRaceReplayVideoMute","trackRaceReplayVideoClosed","RaceReplayViewModel","toggleVideo","isVideoOn","closeVideo","shouldDisplayMessage","trackVideoPlay","trackVolumeChange","isMutedNew","volume","CallToActionLoginRequired","GiddyUpSliceLazy","GiddyUpSlice","containerElement","tabChangeSubscription","quaddieChangeSubscription","FormGiddyUpRaceInformation","entitlementService","getStarterFunc","getRaceDetailFunc","selectAcceptorFunc","clearSelectionFunc","selectQuaddieFunc","fixtureKey","getAcceptor","starterKey","_starterKey$split","defaultResult","getSilkImage","hasBetSelected","cssurl","getCssBackgroundFor","hasJumped","getRaceDetail","defaultRace","selectAcceptor","clearSelection","selectQuaddie","displayGiddyUpForm","reasonText","StartersListViewModel","isInfoVisible","subInfoButton","PriceChangeDisplay","priceWinPrefix","pricePlacePrefix","_ref$isVisible","_ref$isSelected","_ref$isWidthDynamic","_ref$isLabelShown","isLabelShown","_ref$arrowLocation","arrowLocation","_ref$isContentCentred","isContentCentred","getArrowDirection","winType","placeType","WinPlaceSelectionButtonStyled","WinPlaceSelectionButtonTitleStyled","_ref$isContentCentere","isContentCentered","WinPlaceSelectionFavouriteStyled","_ref2$favouritePositi","favouritePosition","WinPlaceSelection","selectionName","buttonStyleOverride","_ref$tidAttribute","tidAttribute","_ref$favouritePositio","_ref$centerContent","extra","BUTTON_HEIGHT","BORDER_WIDTH","MultiSelectionPriceViewModel","isFixedOddsOn","shouldDisplayScratchedFixedOdds","shouldDisplaySuspendedFixedOdds","shouldDisplayWinFixedOdds","shouldDisplayPlaceFixedOdds","shouldDisplayStackedPrices","isMultiLegType","isOn","RaceSubHeaderViewModel","formattedStartTime","currentCountDown","bulbColour","raceSelectionString","showTapToSelect","isCurrentRace","selectedPoolSubscription","selectionsChangedSubscription","rt","initialiseTimer","raceSelectionsObject","selectionStringDisplay","FixedWinPlaceSelectionsViewModel","currencyConverter","stakeChangeSubscription","maxProjectedPay","selectionsString","displayWinPrice","displayPlacePrice","hasFixedPlacePool","projectedReturnString","currentBoostedPrice","setDisplayPrice","initialiseTitle","updatePrices","updateReturn","boostPrices","boostReturn","clearBoostedPrices","clearBoostedReturn","winPay","placePay","_boostElement$priceIn","GetPriceIncrease","projectedBoostReward","projReturnString","displayPrice","increment","dividedBy","basePrice","lessThanOrEqualTo","targetPrice","incrementedPrice","animationTimerId","greaterThanOrEqualTo","priceToDisplay","displayPriceString","StarterImageViewModel","cssClass","jumperStripes","isDog","hasSilk","widthCss","backgroundCss","ResultedImageViewModel","SortConverter","FobToteSwitch","centerX","dx","dy","stdDeviation","floodColor","floodOpacity","circle","transitionProperty","transitionTimingFunction","BoxedViewModel","toggleBoxed","LegInViewModel","toggleLegIn","RovingBankerViewModel","toggleRovingBanker","BetModifiers","setSelected","_useToteSwapToggle","toteSwapOptions","activeToteSwapOption","isInsuranceAvailable","isStartingPriceAvailable","fieldEl","useToteSwapToggle","isAllwaysSubscription","isAllwaysActive","isRovingBankerSubscription","isRovingBankerActive","BetModifierButtonStyled","callBackWithSelectedState","trackBetModifierButtonPressed","WebkitUserSelect","FixedPrice","SameRaceMultiWinPrice","StartersColumnHeader","currentSortForRace","_useFixedOdds","setIsFixedOddsOn","shouldDisplayFixedOddsToggle","isWinPlace","toggleFixedOdds","nextFixedOddsOn","useFixedOdds","_useColumnSort","sortSelected","setSortSelected","sortProperty","newOption","useColumnSort","resetSortBackToDefaultIfRequired","selectedSortOption","shouldResetTotePriceSort","shouldResetFixedPriceSort","numberSortOption","shouldShowBetModifiers","shouldDisplayColumn","sortNameText","ColumnHeaderPanelStyled","updatedRaceStatus","InfoToolbarViewModel","subFormButton","StarterPageHeader","starterPageHeaderProps","showBestPrice","createStarterPageHeaderProps","PublishFormMessages","FixedFlucsContainer","FixedFlucsDividend","dividendChange","borderTopColor","FixedFlucsDividendLabel","FixedFlucsSeperator","FixedFlucsChevron","toOdds","commandState$","FixedFlucsWrapperComponent","FixedFlucsComponent","FixedFlucsPointDividend","dividendPoints","dividendIndex","previousDividend","displayData","openingDividend","highDividend","lowDividend","lowDividendDisplay","highDividendDisplay","MarketMoverContainer","MarketMoversDividend","MarketMoversHeader","MarketMoversWrapperComponent","MarketMoversComponent","listItems","marketMover","MarketMoverHeader","MarketMoverPointDividend","MarketMoversContainer","displayDividend","BaseStarterViewModel","shouldDisplaySelectionsStacked","bettingV2Driver$","_this$bettingContext$","DogStarterViewModel","_BaseStarterViewModel","RaceStarterViewModel","TrotStarterViewModel","viewmodels","buildToteRaceUri","formattedMeetingDate","buildSameRaceMultiRaceUri","setSelectedRace","getPayIndicatorText","payIndicator","isUpper","getSimpleRaceStatusText","IconTypes","HomeNextRacesTile","AdvertisedStartTime","shouldShowDay","setShouldShowDay","shouldShowCountdown","setShouldShowCountdown","interval","_getNextRaceTimeDispl","MeetingID","HomeNextRacesListContainer","HomeNextEventNameEventStyled","SkyTvChannelId","HomeNextEventRaceSkyStyled","HomeNextEventRaceTimeStyled","HomeNextRaces","_useNextRaces","ErrorMessage","ScrollableContainer","FeaturedItemsKeys","getPathNameFromIconName","iconPathName","IconName","keyCreator","mappedItems","WithInducements","WithoutInducements","FeaturedItemsRepo","requestedKey","iteratee","createKeysAndGroup","keysWithWireResources","keysWithResources","fetchThenMap","FeaturedEventsItemStyled","FeaturedEventsItemTitleStyled","FeaturedItemListElement","featureItemAction","featureItemTitle","featureItemPosition","FeaturedItems","ConnectedFeaturedItems","featuredItemsKey","timer","time","featuredItems","FeaturedItemsComponent","hasLoadedWithoutError","FeaturedItemsMapped","_reactNativeAppVersio","reactNativeVersion","reactNativeAppVersion","trackedItemsRef","trackGAEvent","trackFeaturedBannerViewed","observer","IntersectionObserver","isIntersecting","trackFeatureItemClicked","SummaryPopupStyled","NoticeboxStyled","ActivitySummaryPopup","onCancellation","isSuccessBusy","setIsSuccessBusy","isCancellationBusy","setIsCancellationBusy","onSuccessClick","onCancellationClick","ActivitySummaryPopupSuccess","ActivitySummaryPopupCancellation","ActivitySummaryPopupStyled","cache","ActivitySummary","renderPopup","Cancellation","checkResponse","postAnswer","statementStartDate","statementEndDate","updateCache","answerSought","check","cached","postAnswerToCrm","receiveStatement","Answer","StatementStartDate","StatementEndDate","RequestFlag","_componentDidMount","_betAccount$Preferred","_betAccount$AccountHo","_betAccount$AccountHo2","FeaturedItemsHeaderStyled","FeaturedItemsListStyled","animationBackground","HomeSuperPicksAnimationContainer","HomeNextSuperPicksContainerStyled","HomeNextSuperPicksListStyled","HomeNextSuperPicksHeaderStyled","HomeNextEventRaceTextStyled","HomeTimeToJump","ListUnstyled","ListStyled","ListItemStyled","ListLinkStyled","_ref$hideChevron","hideChevron","ListItem","ListBadgeStyled","ListBadgeInnerStyled","ListBadge","ListTimeStyled","Flex","NextRaceLoading","HomeNextSuperPicksTile","HomeNextSuperPicksList","raceListItems","UpdateSuperBoostRaceList","RemoveJumpedRaces","superBoostRaces","superBoostRacesState$","applySuperBoostFilterRules","otherRace","ConvertSuperBoostMeetings","SuperBoostMeetings","superBoostRace","RaceCourse","_unused2","HomeNextSuperPicks","HomeNextSuperPicksComponent","setRaces","rawDataFeatureFlagName","rawData","addRawSuperBoostMeetings","raceSubscription","updateRacesTimer","desktopMediaQuery","FooterStyled","gridTemplateAreas","LogoStyled","gridArea","SocialsStyled","GamblingHelplineStyled","RwwaResponsibleWageringStyled","DownloadAppStyled","CopyrightStyled","TabTouch","AppleAppStore","GooglePlayStore","gradientTransform","strokeMiterlimit","SetDepositLimitButton","ExternalLink","majorVersion","getLatestVersionsByGitRefName","previousVersions","filterBySearchTerm","toLocaleLowerCase","sortByReleaseDateDescending","VersionSelectorHeader","VersionSelectorListStyled","_ref$addSpacing","addSpacing","VersionSelectorListItemStyled","_ref2$highlightItem","highlightItem","AccordionStyled","GITLAB_TABTOUCH_MOBI_PROJECT_URL","VersionSelector","webAppVersions","searchIndex","currentVersion","currentMajorVersion","majorVersions","useVersions","searchLatest","filterValue","setFilterValue","autoCorrect","autoCapitalize","searchResult","LatestVersionSelectorListItem","isCurrentVersion","BranchName","Version","VersionDetails","PreviousVersions","ReleaseDate","GitLabCommit","GitLabPipeline","versionOnly","releaseDateFromNow","sortedPreviousVersions","otherVersion","shortSha","COOKIE_NAME","InternalVersionNumber","InternalVersionNumberStyled","UnbundlingStatusDot","StatusDot","versionWithPipelineId","CI_PIPELINE_ID","Footer","_serverConfig$isInter","trackInternalNavigation","trackExitNavigation","onSetDepositLimitClick","onCopyrightClick","isTrayOpen","setIsTrayOpen","isInternal","TabTouchLogo","Socials","GamblingHelpline","RwwaResponsibleWagering","DownloadApp","AppleAppStoreLogo","GooglePlayStoreLogo","Copyright","HomeFooter","showDeveloperOptions","setShowDeveloperOptions","onVersionNumberClick","destination","Wrapper","SubheadingContainer","HeaderContainer","HeaderContent","HomeTrendingBetsScrollableContainerStyled","TrendingBetsListItemStyled","TrendingBetsListItemContainer","TrendingDividendsStyled","TrendingWinDividendStyled","TrendingPlaceDividendStyled","TrendingBetNameStyled","TrendingRaceNameStyled","TrendingRacerStyled","TrendingBetEventRaceTimeStyled","TrendingBetGreyhoundsSilkImageStyled","TrendingBetSilkImageContainerStyled","raceNo","RacingCode","TrendingBetTile","_acceptor$fixedOddsPr","_acceptor$fixedOddsPr2","_acceptor$fixedOddsPr3","_acceptor$fixedOddsPr4","sorting","acceptorLegIds","acceptorId","nextEvent","someParams","fixture","contestType","numberOrBox","silkProps","computeSilkProps","fixedOddsPrices","placeDividends","racer","riderName","driverName","timeToJump","trendingType","_imageUrl$size","TrendingBetCard","TrendingBetCardHeader","TrendingBetCardHeaderLink","TrendingBetCardBody","TrendingBetCardAcceptor","TrendingBetCardSilkAndName","TrendingBetCardSilkImage","TrendingBetCardGreyhoundsSilkImage","TrendingBetCardSameRaceMultiAcceptorName","TrendingBetCardSameRaceMultiAcceptorPosition","TrendingBetCardFooter","TrendingBetCardQuickbetButton","TrendingSameRaceMultiBetTile","betAcceptorLegIds","_bet$price","_bet$price2","acceptorsForUrl","linkToRace","linkToRaceWithSelection","acceptorData","acceptorLegId","sameRaceMultiPosition","sortSameRaceMultiAcceptors","sameRaceMultiPositionToString","getAcceptorsForBet","legId","TrendingBetTileErrorBoundary","hasError","TrendingBetsList","selectedFilter","srm","TrendingBetFilterEnum","SelectContainer","MozOsxFontSmoothing","WebkitFontSmoothing","Select","TrendingBetsFilter","initialFilter","onChanged","FilterSelections","TotalBets","selectable","TotalSpend","TrendingBetsFilterAsTitle","getTrendingBets","sortingOptions","useQueryOptions","Single","localStorageKey","headerContentText","trackSortingChanged","sortingParameterName","TrendingBets","_config$type","persistedValue","setSelectedFilter","sortingParameter","TrendingBetsToggled","flagKey","ContentHeaderStyled","ContentHeaderTitleStyled","ContentHeaderLinkStyled","Rotated180Icon","ContentHeader","refreshCallback","navigateLeftCallback","navigateRightCallback","iconCode","_ref$shouldShowHome","shouldShowHome","useDisableAppHeaderSticky","CountryIsoCode","Australia","NewZealand","HongKong","Singapore","Japan","SouthKorea","SouthAfrica","UnitedArabEmirates","UnitedKingdom","Ireland","France","Germany","Sweden","Norway","UnitedStates","Argentina","Brazil","Chile","Uruguay","CountryIsoCodeOrder","StateOrder","RaceCourseClassCodeOrder","sortMeetings","australianUnsorted","filterAustralianMeetings","internationalUnsorted","filterInternationalMeetings","AustralianMeetings","sortAustralianMeetings","InternationalMeetings","sortInternationalMeetings","sortMeetingOnName","name1","name2","toLocaleUpperCase","localeCompare","isoCountryCode","groupedData","groupedMeetings","homeStateFirstMeeting","homeStateOtherMeetings","orderGroupedAustralianMeetings","reduceMeetingToStates","reduceSortedArray","compareAustralianMeeting","compareInternationalMeeting","geoLocationCode","m1","m2","firstState","secondState","firstClass","raceCourseClassCode","secondClass","compareInternationalGeoLocationAndName","_m1$geoLocationCode","_m2$geoLocationCode","first","getIsoCountryCodeOrdinal","second","useMeetingsQuery","getMeetingsFromApi","useMeetings","incomingDate","allMeetings","cleanedDate","meetingsData","regexRuleToCaptureCountryAbbr","getCleanMeetingName","matchResult","DropdownLink","_meeting$fixed","_meeting$fixed2","_meeting$fixed3","nextRaceUrl","competitionId","racingProduct","nextRaceEventId","MeetingsDropdown","dropdownRef","favouriteMeetings","_sortMeetings","shouldShowDropdown","meetingNameClean","MeetingsDropdownStyled","ignoreValues","totePayoutInformation","fixedPayoutInformation","toteShouldBeIgnored","fixedShouldBeIgnored","PayoutInformationStyled","CountdownBadge","previousTextRef","getCountdownState","useIntervalWhen","formatCountdownDuration","badgeColorForCountdown","secondsToJump","eventTime","millisecondsDiff","isSame","RaceInfoWrapperWithTextExpand","titlePrimary","titleSecondary","shouldSwitchTitles","textualElRef","shouldEnableTextExpand","setShouldEnableTextExpand","isTextExpanded","setIsTextExpanded","spanEl","offsetWidth","scrollWidth","DOCKED_EXPAND_ANIMATION_MS","useHeaderPinnedState","wrapperElRef","setIsHeaderPinned","skyVideoDockedPlayerHeight","intersectionRatio","handleScrollChange","shouldPin","Popover","referenceElRef","_ref$placement","_ref$shouldUsePresetS","shouldUsePresetStyles","PopoverComponent","whileElementsMounted","autoUpdate","PopoverStyled","TimePickerPopover","selectedTimes","setSelectedTimes","registerAlert","deregisterAlert","validNotificationOptions","popoverRef","analyticsDataRef","initialSelectedTimesRef","initialSelectedTimes","newSelectedTimes","serialisedSet","areSelectedTimesEqual","trackAnalytics","PopoverWrapperStyled","updatedTimes","trackRaceNotificationDisabled","trackRaceNotificationEnabled","selectedTimesToDictionary","NotificationButtonStyled","HidePopup","ShowPopup","ShowNotificationAuthPopup","notificationAuthStatus","NotificationAuthPopup","checkNotificationStatusAsync","enableHandler","hardReprompt","openSettings","NotificationAuthPopupContainerStyled","NotificationAuthPopupTitleStyled","NotificationAuthDescriptionStyled","getRegisteredNotifications","notificationTimeOptions","NotificationButton","deepLink","NotificationButtonComponent","selectedNotificationTimes","minutesTillStart","validTimes","setValidTimes","nextNotificationInterval","timeTillNotification","useValidNotificationOptions","prevSelectedTimes","shouldShake","setShouldShake","_React$useState5","_React$useState6","isTimeSelectPopoverOpen","setIsTimeSelectPopoverOpen","isNotificationOn","onNotificationToggle","_selectedTimes","notificationStatus","respSuccess","fcmRegistrationToken","unregister","ShakeWrapperStyled","shake","minutesBeforeStart","isAndroid","raceDeregistration","RaceNotificationButton","expiryTime","checkIfTimerExpired","hasTimerExpired","setHasTimerExpired","hasExpired","origin","RaceInfoHeader","_RaceReplay","_meetingIdToContestTy","_currentRace$skyTvCha","currentRace","courseName","_useHeaderPinnedState","isRaceOpenForBetting","raceStatusText","theDate","shortResultString","RaceButton","firstLegsOfQuaddies","activeIndicatorRef","buttonRef","repositionActiveIndicator","offsetLeft","scrollLeft","buttonClassName","isQuaddieIndicatorShown","isSpecialIndicatorShown","RaceButtonStyled","RaceSelection","onRaceSelected","RacesListStyled","WeatherIcon","courseWeather","weatherIconName","getWeatherIcon","sunnyWeather","cloudyWeather","partlyCloudyWeather","rainyWeather","weather","SkeletonLoader","RaceNavigation","_getPayIndicatorText","_getPayIndicatorText2","fooPayIndicator","isAllUpSelected","useIsAllUpSelected","isTrackConditionKnown","RaceNavigationStyled","_selectedRace$fixed","_selectedRace$fixed2","selectRaceLink","competitionSequence","eventSequence","quaddie","totePayIndicator","fixedPayIndicator","setIsAllUp","PropositionItem","_proposition$placeRet","proposition","raceProduct","onItemSelected","isFieldSelected","setIsRunnerExpanded","winReturn","racingStatus","isFormFeatureActive","getBoxNumber","resultPlace","Scratched","isRaceFixedOddsOnly","FixedOddsOnly","isFutureFinalField","FutureFinalField","isBlackbookAvailable","FeatureRace","isRaceSettledOrResulted","Settled","Resulted","isBettingOpen","shouldShowDogSilks","Challenge","shouldShowSpButton","shouldShowFieldSummary","shouldShowFieldSummaryToFFFRace","PropositionWrapperStyled","isWinnerHighlighted","positionToText","converRaceCodeLowercaseToRaceCode","scratchTime","sequenceNumber","placeReturn","winDeduction","placeDeduction","spWinReturn","PropositionList","isFixedOddsOrFutureFF","translateMatchedPersistedSort","sortedItems","sortOrderFns","handleSortOrderChange","isDesc","isRaceStatusOpenOrSuspended","shouldRenderStartingPriceColHeaderWithResults","runner","SortRowStyled","shouldDisplayItem","isNumberSortEnabled","isAscending","matchedSortOrder","NumberAsc","NumberDesc","NameAsc","NameDesc","ResultAsc","OddsAsc","OddsDesc","fieldSelected","FieldToggle","toggleFieldState","isFieldToggled","isResultsToggled","FieldToggleContainerStyled","ToggleButtonStyled","MaterialIcon","_ref2$enabled","ExtraInfo","isTextItemArray","EventInfo","eventStatus","eventNumber","eventLocation","getRacingStatusText","priceLastUpdateTime","onFieldClicked","fieldState","comparisonFormat","raceStatusValue","lastUpdatedToday","lastUpdatedDisplay","getFixedOddsEventDetails","racingCode","useDisableAndroidBackGesture","BetSelectorsSkeleton","BetInformersSkeleton","StarterHeadersSkeleton","StarterSkeleton","swipeBackward","swipeForward","AnimatedSwipeContainerStyled","animateDirection","isSwipeDisabled","hasAncestorWithAttribute","preventEdgeSwipe","attributeName","hasAttribute","touches","touch","clientX","cancelable","RaceSwipeContainer","onSwipeCallback","isFirstRace","isLastRace","isSwipeToChangeRaceActive","onSwipe","isForwardSwipeDisabled","isBackwardSwipeDisabled","setXOffset","startXRef","startYRef","swipeDirection","setSwipeDirection","handleTouchStart","clientY","handleTouchMove","xDiff","yDiff","handleTouchEnd","changedTouches","isScrolling","handleAnimationEnd","passive","_meeting$races","_data$specials","_data$specials2","_useParams","useParams","competitionNumber","useSearchParams","setSelectedItem","setFieldState","_useFixedOddsEventDet","useFixedOddsEventDetails","racecourseSequence","fieldData","subscriptionForBetslip","useClearSelectionOnPlacement","prevRace","nextRace","lastRaceNumber","firstRaceNumber","RaceNavigationSkeletonLoader","RaceCardSkeletonLoader","isSpAvailable","getTitle","shouldShowDeductions","propositions","getBetSlipIcon","raceToSwipeTo","_raceToSwipeTo$fixed","_raceToSwipeTo$fixed2","conditions","terms","convertItemToBetslipItem","URLSearchParams","useLocation","_selectedItem$sequenc","starterToAcceptor","_starter$FixedOddsSta2","matchedAcceptorForRace","raceData","_raceData$RaceStarter","getToteBetType","productPlanSequence","parseSelectionsString","secondaryDivision","getToteSelection","betDetails","planSeq","singleSelectionGroup","getFOBSelection","fixtureDateAsDate","srmSelections","spSelection","_selectionString","srmSelectionPrice","srmSelection","fobMatchedSelection","SP","LoadBetErrors","Default","BettingClosed","NoSportsInLegacy","getSelectionDetails","shouldForceWinOnly","isMultiRace","isWinPlaceDetails","raceArray","_meeting$MeetingInfor","isBettingClosedOnRace","acceptorKeysList","createAcceptorKey","_starter$FixedOddsSta3","FOBRacing","createSportsQuickbetSelection","tournamentId","bettingClosingTime","outcomeName","buildSportsBetProposition","_buildSportsBetProposition","buildBaseBetSelection","_buildBaseBetSelection","isFOOBetDetails","buildFixedOddsOnlyBet","isSportBetDetails","buildStandardBet","getFOOEventType","competitionSeq","quickbetSelection","_yield$getSelectionDe","PromptBetslipChange","ButtonWrapperStyled","USER_PROMPT_ID","zipLazy","arrs","steps","arr","_marked","zip","_addToBetSlip","prebuiltBets","whatToDoWithExisting","createBetslipItemResults","betsReadyForBetslip","isBettingClosedOnBets","betSlipItems","removeFixedOddsBetslipItems","allSettled","qbSelection","isFulfilled","isRejected","betsToAdd","toRemove","handleUpdatingSoonestAst","itemAst","trackWithMinutesToNextRace","astISOString","nowISOString","minutes_to_next_race","BetslipOverlayStyled","BetslipOverlayHeaderStyled","BetslipOverlayHeaderTextStyled","BetslipMainContainerStyled","EmptyBetslipMessageStyled","AccountBalanceStyled","AccountBalanceTouchableStyled","AccountBalanceMoneyStyled","AccountBalance","sideEffectConfirmAllBetsSuccessful","shouldUpdateBalance","accountBalancesFromResponse","sideEffectRefreshBetslip","legacyModalSubscription","modalClose","throttle","bonusBalanceToDisplay","GridButtonStyled","RefreshButtonStyled","clearBetslip","ClearBetslipButtonComponent","ClearBetslipButton","BetslipErrorBoundaryContainer","handleCloseButtonClick","BetslipErrorBoundary","handlePendingClick","handleClearBetslip","BetsPlacedMessage","placedBetsCount","placedBetsAmount","ConfirmMessage","SummaryStyled","FooterSummaryHeadingStyled","MessagesContainerStyled","FooterNoticeBoxWrapper","EstimatedReturnHeadingStyled","EstimatedReturnComponent","estimatedReturn","EstimatedReturn","multiInvestmentJS","InvalidBetsMessage","ReviewChangesMessage","includeCancellationWarning","TotalStakeValueStyled","TotalStakeComponent","totalStake","TotalStake","_record$get","betslipItems","hasMultiBeenPlaced","combinedSingleCost","PlaceBetsButton","ConfirmBetsButton","handlePendingBetsClick","PendingBetsButton","handleCloseBetslip","handleEditBetsClick","EditBetsButton","handleKeepBetsClick","KeepBetsButton","FooterSummaryComponent","isValidMultiPresent","singlesLeftToPlace","hasInsufficientFundsError","isPriceChangeDown","hasPlacedBets","hasSeriousMultiError","hasBetsLeftToPlace","isReadyToConfirm","isBettingComplete","footerSummaryState$","betSlipState$","betslipRecord","_userAccountRecord$is","betslipState","FooterSummary","BetslipExpandablePanelStyled","BetslipExpandablePanelHeaderStyled","BetslipExpandablePanelTitleStyled","BetslipExpandablePanelToggleStyled","BetslipExpandablePanelBadgeStyled","BetslipExpandablePanel","refreshButton","testTid","isEditable","BetEachWayInvestmentGroupStyled","InvestmentPriceStyled","InvestmentAmountStyled","InvestmentTextStyled","MultiReturn","BETSLIP_ITEM_PADDING","BETSLIP_ITEM_BOX_SHADOW","ItemStyled","_ref$hasFatalError","SingleItemNoticeWrapper","ReceiptHeaderStyled","ReceiptHeaderTextStyled","ReceiptMultiItemContainerStyled","ReceiptListItemFixedMoneyStyled","MultiItemStyled","ItemErrorTextStyled","betslipBettingHeader","subheading","betslipSimpleBettingHeader","_ref2$theme$heading","SubheadingStyled","PilledStyled","RemoveButtonStyled","RemoveButton","PilledContentStyled","pilledContent","BettingHeader","pilled","_ref2$timeInfo","timeInfo","removeHandler","SimpleBettingHeader","ErroredBetInfo","_ref$details","FobBetInfo","isSimpleView","RaceBetInfo","racingIconCode","_ref2$races","_ref2$acceptors","getFixedOddsMarketName","getFobSelectionText","isMultiDisplay","_selection$selectedAc","sNumber","SportBetInfo","BetInfo","_ref$hasProposed","SuccessBetLeg","showPlace","showToggle","showPrice","ErrorBetLeg","MultiItem","_item$multiBetLegErro2","showBetTypeToggle","_ref3$isReceipt","isReceipt","hasMultiLegError","priceChangeStatus","BetslipReceiptMulti","_formulaResponse$mult","_this$props$receipt","bonusValue","isMultiOnly","isMultiFormulaOnly","isMultiWithFormula","multiCost","combinedStake","EmptyItemStyled","MultiSectionStyled","MultiItemListStyled","MultiSpendStyled","MultiDetailsStyled","_ref$isCenter","isCenter","MultiDetailsAmountStyled","MultiTotalContainerStyled","MultiTotalAmountStyled","MultiFormulaExpandablePanelStyled","FormulaTitleTextStyled","FormulaContainerStyled","FormulaItemStyled","FormulaComboTextStyled","FormulaTextStyled","FormulaInvestmentStyled","FormulaCostContainerStyled","FormulaCostChildStyled","isQuickEdit","FormulaCostAmountStyled","QuickEditTitleStyled","QuickEditSubTitleStyled","QuickEditComboTitleStyled","QuickEditComboTextStyled","QuickEditFormulaInvestmentStyled","QuickEditFormulaCostStyled","defaultQuickEditState","InitialiseQuickEditState","SetQuickEditInvestment","ToggleBonusBet","ToggleBonusCash","SetQuickEditValue","QuickEditStateFactory","_bonusBet$value","quickEditState$","quickEditState","_quickEdit$bonusBet","quickEdit","QuickEditContentTypes","quickEdiState$","betslipDriverState$","quickEditRecord","_userAccountRecord$ac","_userAccountRecord$ac2","loggedIn","hasFormula","QUICK_EDIT_MODAL","QuickEditComponent","_ref$combos","_ref$formulaField","formulaField","FormulaFields","Multi","isCentsIncrementActive","shouldAllowDecimals","MultiFormula","QuickEdit","FormulaTitles","MultiFormulaComponent","shouldEnableSingles","formulaFields","formulaCombosForLegs","formulaTitle","isFieldEditable","_ref$investment","betslipState$","handleExpandablePanelClick","MultiItemListComponent","_ref$items","anyBetsPlaced","selectedMultiItems","isMultiValid","isMultiInvestmentValid","hasEnoughBets","hasEnoughSelections","hasTooManyLegs","multiTotalCost","multiReturnLastSeen","calculateLastSeenMultiReturn","multiReturnPriceChange","isValidNumberOfLegs","_multiInvestment$isBo","MultiItemList","SuperPickBadgeStyled","SelectedSuperPickBadgeStyled","AvailableSuperPickBadgeStyled","DisabledSuperPickBadgeStyled","SuperPickRemovedButtonStyled","SelectedSuperPickTextStyled","AvailableSuperPickTextStyled","AvailableSuperPickIconStyled","SelectedSuperPickComponent","onDeselectClick","_label$split","_label$split2","SelectedSuperPick","SuperPickAvailable","FobInvestment","editBetslipItem","hasWinPrice","hasPlacePrice","isStartingPriceBet","handleEditBetslipWin","shouldShowSuperPickButton","shouldShowSuperPickSelected","ToteInvestment","flexi","toteBetType","_ref$investmentType","_item$isUsingBonusCas","betslipStateRecord","_ref3$record","betInvestmentItem","RefreshBetslipButtonComponent","isDisabledRef","RefreshBetslipButton","_record$isLoggedIn","Exception","SingleAllUpFormulaContainerStyled","SingleAllUpFormulaItemStyled","SingleAllUpFormulaTitleStyled","FORMULA_NAME_MAP","F1","F2","F3","F4","F5","F6","SingleAllUpFormula","SingleItemListComponent","filteredItems","itemCount","isNovelty","isWinPlaceBet","isNotDefaultAllUp","isRace","allUpTotalCost","SingleItemList","Betslip","mainElementRef","soonestRef","v1","proposeAllBetsSuccessfulSubscription","trackData","betLegErrorType","proposeAllBetsFailedSubscription","step1BetData","confirmAllBetsFailedSubscription","confirmAllBetsSuccessfulSubscription","betslipStateData","registerAnalyticsSubscriptions","fobPriceChangedSubscription","isFobPriceChangedPushEvent","navigationSubscription","skip","loggedInSubscription","pluck","_mainElementRef$curre","_mainElementRef$curre2","hasItems","showClear","addToLegacyBetslip","_addToLegacyBetslip","incomingBets","zipped","hasExistingBetslipItems","hasBetslipItems","SUPPORTED_TOTE_BET_TYPES","isLoadBetSupported","FOBSports","loadBet","betPayload","_prebuiltBets","addToQuickbet","_addToQuickbet","prebuiltBet","shouldNavigateToRace","handleNavigateToBet","isErrorInstance","_handleNavigateToBet","eventStartDateTime","convertToFixtureDate","postShareBetDataAndGenerateLink","getShareBetDataWithKey","trackShareBetLinkOpen","cleanupSignupSubscription","cleanupSubscription","betPlacedSubscription","listenForLoginOrAcquisition","_betslipStateJS$multi","_betslipStateJS$multi2","betslipStateJS","currMeetingCode","getMeetingCode","trackShareBetLinkPlaced","hasTracked","prevIsLoggedIn","newIsLoggedIn","navSubscription","_selectionDetails$rac","ShareBetIncoming","shareId","betslipPartialValuesRef","isNewBetSlipFeaturSettingActive","_openSharedBet","openSharedBet","dismiss","isNewBetslipActive","_yield$getShareBetDat","addToBetslipResult","ShareBlackbookIncoming","useShareIncomingListener","shareBetId","cleanSearchParamsFromUrl","shareBlackbookPayload","replaceState","ScrollerWrapper","JackpotTitleStyled","JackpotTextStyled","JackpotLoading","ErroredJackpot","Jackpot","JackpotWithRace","loadedPool","LoadedJackpot","codeIcon","fixtureType","JackpotContent","endTime","badgeText","netJackpotAmount","scheduledCloseDateTime","sportDescription","gameStartDateTime","sportCode","ListLink","dayjsEndTime","ListTime","getDisplayEndTime","ConnectedJackpots","poolKeys","JackpotsComponent","JackpotsList","jackpotListItems","poolKey","DataError","LoadingWrapperStyled","trackMeetingsFavouriteUsed","MeetingRow","newFavRef","_getNameAndGeoLocatio","getNameAndGeoLocationCode","linkParamsForMeeting","getMeetingLinkParams","linkToNextRace","getLinkToNextRace","raceTimeOptions","nextRaceAst","MeetingRowStyled","meetingRaceCode","pathname","toteSpecificParams","fixedSpecificParams","MeetingsList","favouriteList","australianList","sortOpenToTop","internationalList","shouldReverseAustAndIntOrder","currentDate","meet","MeetingsListWrapperStyled","getRaceCodeLabel","order","sameDays","d1","d2","generateMatrix","weekStart","firstDayOfMonth","getFirstDayOfMonth","startDate","getDay","getFirstDayOfWeek","__","DateNavigationContainerStyled","DatePickerStyled","DatePickerIcon","CalendarDatePickerHolderStyled","CalendarDatePickerContainerStyled","CalendarDatePickerArrow","DaysOfTheWeekStyled","SingleDayStyled","isInThisMonth","MatrixStyled","SelectStyled","YearStyled","Day","screen","isPrevMonth","isNextMonth","tomorrow","isDayTomorrow","Abbreviations","dayNames","dayIndex","dayNamesOrderedByWeekStart","weekdaysShort","MonthYearSelect","setCurrentDate","selectedMonth","trackMeetingsCalendarSelectMonth","CalendarDatePicker","onChangeLocal","PrimaryDateNavigation","handlers","dateTabsElRef","isCalendarOpen","setIsCalendarOpen","activeTabEl","parentEl","childRect","parentRect","tabDates","sortTabDates","dates","DateTabsWrapperStyled","setDate","trackMeetingsDayQuickSelect","datesForCode","toFirstLetterUppercase","datesForCodeMapped","getDateLabel","forceExplicitDate","SecondaryCodeNavigation","simplifiedDate","createRaceCodeToggle","trackMeetingsRaceCodeToggle","RaceCodeNavigationStyled","cleanDate","utcOffset","cleanRaceCode","MeetingsPage","_useMeetingsData","QueryString","entryDate","entryCode","_useMeetingsQuery","fixedProducts","useMeetingsData","NextRaceFilterContainer","NextEventMeetingNameStyled","NextEventRaceTextStyled","NextEventRaceDistanceStyled","NextEventCodeFilterButtonStyled","NextRace","startDetails","NextRacesFilter","setFilter","NextRacesLoading","NextRaces","filterNextRaces","newFilter","NextEventsPage","FavNumbersNavigationStyled","NumberButtonsStyled","NumberButtonStyled","PoolSelectionButtonStyled","PoolSelectionColumn","PoolGroupHeader","ShowAllPoolsButton","FavouriteNumbersFlex","FavouriteNumbersSection","FavouriteNumbersPoolTotalStyled","FavouriteNumbersDataTable","FavouriteNumbersRow","FavouriteNumbersColumn","Filler","PotLuckNumbersStyled","PotLuckNumbersButtonStyled","PotLuckNumberButtonStyled","PotLuckNumberCostStyled","MyNumbersButtonStyled","SaveNumbersButtonStyled","ButtonGroupStyled","ButtonGroupItemStyled","LOCAL_STOREAGE_KEY","SaveFavouriteNumbers","payloadString","payloadObj","FromLocalStorage","theState","toLocalStorage","NumberSelection","setGame","savedState$","selectedNumbers","usingSavedNumbers","showMyNumbersButton","isSaveButtonDisabled","isDeleteButtonAvailable","NumberButtons","onClickHandler","PoolSelection","selectedPoolDates","showAll","weekendPools","midweekPools","selectedPoolDate","PoolSelectionComponent","_earliestSelectedPool","_earliestSelectedPool2","_earliestSelectedPool3","hasPools","setHasPools","earliestSelectedPool","earliestPoolDate","expectedCloseTime","earliestUpdateTime","NoPools","PoolButtons","PoolSelectionButton","showPoolTotal","poolNumber","FavouriteNumbersBettingDrawer","createFavouriteNumberSelection","poolDetails","selectedPoolDetails","betNumber","foundPoolDetails","EmptyBettingDrawerStyled","isGameSelectionValid","numberOfSelections","FavouriteNumbersBetSummary","FavouriteNumbersBetSummaryComponent","_gameOne$","poolNumberSelections","gameOneSelections","gameTwoSelections","gameOneNumbers","gameTwoNumbers","numberOfPools","potLuckNumbers","calculatePotLuckCost","isValidBet","isPotLuckBetValid","HeaderWithLoadingIndicator","EasyBetTab","PotLuckTab","PotLuckNumbers","NumberOfBets","NumberResultsTabStyled","PrevButtonStyled","isPreviousAvailable","NextButtonStyled","isNextAvailable","DateComponentStyled","NavComponentStyled","PoolInfoComponentStyled","PoolInfoLineStyled","PoolInfoLineLeftStyled","PoolInfoLineRightStyled","JackpotStyled","DetailtextStyled","ResultButtonStyled","OrderStyled","RaceStyled","SubStyled","ResultLegendComponentStyled","ResultTitleStyled","ResultLiStyled","FavnumberResultListStyled","ResultsStyled","FavouriteNumberPoolResults","splitKey","poolResults","NumberResultsTab","currentPool","isNumberAllocated","NavComponent","handletPreviousButtonClick","handleNextButtonClick","PoolInfoComponent","poolResultDisplayDateTitle","poolResultDisplayDate","jackpotAmount","ResultDetails","requiredNumber","numbersRequired","dividendPayable","carryover","winningEntries","FavnumberResultList","ResultLegendComponent","winningEntriesText","showDividendPayable","resultBoxList","ResultButton","isSub","FavouriteNumbersPage","_useQuery$code","setSelection","SelectedTab","playerIcons","docked","exitfullscreen","floating","fullscreen","mute","replay","back15","forward15","PlayerButton","PlayerControlButtonStyled","ResizeIcon","ResizeWrapperStyled","PendingBetsDrawerButton","_data$pendingTicketsC","isAppHeaderPendingBetsFeatureActive","pendingBets","isPendingBetsOpen","pendingBetsCount","PendingBetsDrawerButtonStyled","queueHideControls","timerIdRef","hideControls","handleFullscreenChange","getVisionVideoEl","webkitSupportsPresentationMode","webkitPresentationMode","exitPresentationModeFullscreen","isVideoElInPresentationModeFullscreen","isElementInFullscreen","useFullscreen","webkitSetPresentationMode","VIDEO_PLAYER_PARENT_ID","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","isFullscreenActive","webkitExitFullscreen","webkitCancelFullScreen","exitElementFullscreen","webkitFullscreenElement","webkitCurrentFullScreenElement","findAndStartChildVideoElement","_videoElement$play","videoElements","getElementsByTagName","handleVolumeChange","ProgressBar","elapsedSeconds","durationSeconds","onInteractionStart","onInteractionEnd","progressBarRef","progressPercentage","handleInteractionStart","handleInteractionEnd","formatSeconds","ProgressBarContainerStyled","ProgressBarDurationStyled","ProgressBarStyled","valueAsNumber","onTouchStartCapture","onTouchEndCapture","SkyChannelSelector","activeChannelClass","PlayerSkyChannelButtonStyled","VISION_DRAG_HANDLE_CLASSNAME","VideoPlayerControls","_raceReplayTitle$star","_raceReplayTitle$trac","onPlayClick","onPauseClick","onRestartClick","onSeekClick","isFinished","topBarRef","centerBarRef","bottomBarRef","isInteractingWithProgressBar","setIsInteractingWithProgressBar","topBarElement","centerBarElement","bottomBarElement","useControlToggle","handleFullscreenClick","handleCloseSkyPlayer","isPlayerFullscreen","isPlayerFloating","isPlayerDocked","shouldRenderResizeButton","isReplay","topBarControls","TopBarStyled","ReplayOverlayStyled","centerBarControls","CenterBarStyled","isDimmed","backSkip","forwardSkip","bottomBarControls","BottomBarStyled","_parentContainer$curr","PlayerDragHandleStyled","BigPlayButtonWrapperStyled","ControlBarStyled","channelStreams","VideoPlayerComponent","channelStreamUrl","setChannelStreamUrl","useLogout","onVideoError","_error$error","ErrorTypes","NETWORK_ERROR","ErrorDetails","MANIFEST_LOAD_ERROR","startLoad","MEDIA_ERROR","videoParentEl","stopTimerId","playVideo","stopVideo","handleTimeUpdate","stopVideoWithDelay","disablePictureInPicture","VideoPlayer","videoContainerRef","VideoPlayerRatioWrapperStyled","VideoPlayerRatioInnerStyled","seekSeconds","_videoRef$current","_videoRef$current2","aspectRatio","LOCAL_PORTRAIT_KEY","LOCAL_LANDSCAPE_KEY","DEFAULT_POSITION","usePlayerState","getWidth","setWidth","getPosition","_React$useState4$","setPosition","getOrientation","setOrientation","getLocalStorageKey","getScreenSizeString","setPlayerStateInLocalStorage","handleOrientationChange","calculateDefaultWidth","_window$screen","outerHeight","outerWidth","isScreenLandscape","_JSON$parse2","viewportWidth","_window$matchMedia","_window$screen2","matchMedia","angle","RESIZE_HANDLER_CLASSNAME","FloatingPlayer","floatingPlayerWrapRef","_usePlayerState","_usePlayerState2","_usePlayerState2$","lastPlayerStateRef","_floatingPlayerWrapRe","ReactDraggable","_floatingPlayerWrapRe2","closest","bounds","handle","onDrag","onStop","_lastPlayerStateRef$c","lastX","lastY","trackVisionPositionChanged","FloatingPlayerWrapperStyled","ResizeHandleWrapperStyled","_floatingPlayerWrapRe3","_ref2$left","playerLeft","_ref2$top","playerTop","viewportHeight","handleResizeDragStop","useAccountActivityData","isOrderByEventStart","selectedDate","_useInfiniteQuery","useInfiniteQuery","pageParam","fetchPendingTicketsData","nextPage","getNextPageParam","prevPage","isFinalPage","_nextPage","fetchNextPage","isFetchingNextPage","pages","isEmptyState","sortedIds","LoadMoreButton","LoadMorePendingTickets","apiUrlBase","optionalHeadQuery","buildDataUrl","containerEl","isTransactionResponse","isFauxTicketTransaction","getIdFromSortedString","sameRaceMultiPositionToText","sortSameRaceMultiTicketLegs","sameRaceMultiLegSortCallback","leg1","leg2","position1","acceptorDetails","srmPosition","position2","ShareButton","ExpandableContentButton","ExpandableButtonStyled","CardStyled","borderTopLeftRadius","borderTopRightRadius","linkInfo","_ref$isIndicatorShift","isIndicatorShifted","_ref$isSecondaryDispl","isSecondaryDisplay","_ref$roundDown","roundDown","_ref$isBoostedPrice","isBoostedPrice","prevPriceRef","priceChangeDirectionRef","isChanging","setIsChanging","shouldRenderChange","prevPrice","directionRef","PriceStyled","LegacyIcon","SelectionInfoMultiple","labelElementsRef","widths","largestWidth","captureLabelEls","BetCard","topComponent","subHeading","statusComponent","_ref$iconComponent","iconComponent","linkInfoPrimary","linkInfoSecondary","rightAlignedComponent","priceWinMoney","pricePlaceMoney","hasWinValue","hasPlaceValue","leftSection","rightSection","expandableContent","expandableText","RaceStatusSequence","getLegStatus","isFobRacingWithIncorrectStarterNumbers","productName","isTippingTicket","SportsTipping","FootyTipping","Footo","getTicketLayoutType","isSingleSingle","numLegs","getStatusText","getTicketStatus","_ticket$legs","_ticket$legs2","_ticket$legs3","_ticket$legs4","_ticket$legs5","_ticket$legs6","isCancelled","isWin","payValue","isPending","noPayout","isRefund","isScratchedOrAbandoned","refundedTicketStatuses","isRefundedStatus","shouldUseFallbackIcon","_leg$selections$0$sel","getSingleTicketTitle","_selection$selectionS","shouldReturnNumberSeparate","getNumberFromString","formatDateTime","SilkFallback","_ref$isSmall","isSmall","SilkImageContained","silkUrl","SilkImageHolder","SummaryLine","StatusSilkStyled","isFallback","BetStatusIcon","betStatus","LegStatusSilks","shouldHideSilk","SelectionStatusSilks","abandonedSeq","AbandonedClosed","AbandonedFinalised","AbandonedReleased","raceStatusSeq","raceResult","favouriteCombination","getSelectionStatus","StatusSilks","isDoubleOrQuaddie","isRefundedSameRaceMulti","StatusSilksContainerStyled","Investment","payout","projPayout","return","flexPercent","hasPayoutFromScratchedOrAbandoned","bonusType","hasBonusAmount","PayoutStyled","TicketDisplayContext","getMatchedSkyRaceForTicketLeg","ticketString","createTicketMatchingString","skyRace","createSkyMatchingString","RacingTitle","racesToRender","isMultipleRaceSelection","SkyRaceHeader","nextSkyRace","StatusStyled","MultiTicket","_ticket$combinedDivid","isSkyRaceMatch","combinedDividend","legTitle","H2H","cleanBetType","cleanLegReturn","replaceAll","matchedSkyRace","h4","CountdownStatus","isPreviewMode","isPendingTab","isTipping","countdownDate","timesFromNow","closestTime","indexOfClosest","getCountdownDate","ticketContext","_ticket$formula","formulaText","formulaString","finishedLegAst","reduceCallbackToGetLatestAst","getMultiFinishedLegAst","headingText","latestAst","sortedLegs","isContextPendingBetsDrawer","shouldHideEventDetails","srmLeg","_selectionDetails$0$a","srmPositionText","SingleMultiple","MysteryDouble1","MysteryDouble2","MysteryDouble3","MysteryDouble4","MysteryDouble5","MysteryDouble6","MysteryDouble7","MysteryQuaddie1","MysteryQuaddie2","MysteryQuaddie3","MysteryQuaddie4","MysteryQuaddie5","MysteryQuaddie6","MysteryQuaddie7","_getSelectionTitles","buildSelectionString","getSelectionTitles","_getSelectionTitles2","Mystery$3Combo","Mystery$10Combo","mysterySelectionTitle","SingleSingle","_leg$selections$","_leg$fixtureId","investmentLines","runnerCode","_getSingleTicketTitle","lines","runnerNameForBlackbook","eventNameLine2","numberOfGames","shortProductName","detailHeader","ticketLayoutType","ticketSequence","GeneralTicket","ticketType","isSingleRaceTicket","SkyPendingTicket","PendingTicketsPage","pageData","ticketID","ticketsById","PendingBetsDrawer","shouldRenderPendingBetsDrawer","DrawerWrapStyled","PendingBetsDrawerContent","_useAccountActivityDa","currentLocationRef","useShrinkSkyOnLocationChange","pageNumber","FullscreenPlayer","drawerWidthRem","fullscreenContainerRef","remMultiplier","determineShouldEnablePendingBetsDrawer","isDisplayWideEnoughForPendingBets","pendingBetsContainerRef","drawerWidth","pendingBetsDrawerRef","canRenderBetsDrawer","usePendingBetsOpenToggle","portrait","useFullscreenNativeInterop","fullscreenElRef","pendingBetsElRef","canRenderPendingBetsRef","isPendingBetsOpenRef","canRenderPendingBets","fullscreenEl","pendingBetsEl","startX","startY","moveX","moveY","moveAxis","moveSign","wasYActionSuccessful","wasXActionSuccessful","_moveAxis","_moveSign","moveXAbs","moveYAbs","hasMoveSatisfiedThreshold","signEval","currMoveSign","sign","movePosition","useSwipeActions","FullscreenPlayerWrapperStyled","borderBottomLeftRadius","SkyVideoPlayer","isVideoPlayerRunning","useNativeInterop","PlayIcon","TabRadioIcon","FloatingTabRadioButton","visibleRoutes","isRadioPlayingSelector","_useRadio","FloatingTabRadioButtonContainerStyled","RangeBoundaries","minDaysSinceLastStart","maxDaysSinceLastStart","minDaysSinceLastWin","maxDaysSinceLastWin","minStartsSinceLastSpell","maxStartsSinceLastSpell","minPercentage","maxPercentage","minFixedOddsPrice","maxFixedOddsPrice","getFilteredTracks","availableTracks","selectedTracks","tracks","selectedTrack","availableTrack","_tracks","StructuredSearchValueChanged","StructuredSearchResults","StructuredSearchSetState","StructuredSearchSetSelectedTracks","defaultStructuredSearchFieldState","contestTypeRace","contestTypeTrot","contestTypeDogs","dateToday","dateTomorrow","dateBeyondTomorrow","wonLastStart","placedLastStart","gearChange","careerPrizeMoney","careerWinPercentage","trackWinPercentage","distanceWinPercentage","trackdistanceWinPercentage","barrierNumberOneToFive","barrierNumberSixPlus","boxNumberOneToFour","boxNumberFivePlus","apprentice","favouriteLastStart","weightChangedUp","weightChangedDown","weightNotChanged","distanceChangedUp","distanceChangedDown","distanceNotChanged","winTrackConditionFirm","winTrackConditionGood","winTrackConditionHeavy","winTrackConditionSoft","winTrackConditionSynthetic","locationCountryAustralia","locationCountryNewZealand","locationCountryInternational","searchCriteria","searchResults","totalResultCount","aggregations","getIn","filterSelectedTracksTrackIds","CodeSelectionFilter","racesSelected","trotsSelected","dogsSelected","selectionChangedCallback","toggleButtonHandler","StructuredSearchContainerStyled","StructureSearchGroupHeader","StructureSearchGroupSubHeader","StructureSearchGroup","StructuredSearchTabListContainerStyled","TabLabelResultsStyled","CriteriaSubtitleLabelStyled","CriteriaFixedFooterStyled","ToggleBlockStyled","ToggleNoLabelBlockStyled","ToggleFirstBlockStyled","ToggleLabelStyled","ToggleSubLabelStyled","RangeInputContainerStyled","RangeInputBackgroundTrackStyled","RangeInputRenderThumbStyled","RangeInputRenderTooltipStyled","RangeInputDragIndicatorStyled","isDragged","RangeInput","minRange","maxRange","minChangedCallback","maxChangedCallback","isMaxInfinite","isCurrency","isPercentage","RangeInputComponent","changedCallback","newValues","Range","renderTrack","onTouchStart","getTrackBackground","renderThumb","inputTestThumbId","SearchOverlayStyled","SearchOverlayHeaderStyled","CloseButtonStyled","SearchResultsContainerStyled","chipsColors","hollow","filled","ChipBaseButtonStyled","ChipStyled","ChipContainerStyled","Chip","ChipProps","StructuredSearchLocationTrackModalHeaderTextStyled","StructuredSearchTrackModalMainContainerStyled","StructuredSearchResultComponentStyled","ChipWithRightIcon","CheckboxInResultStyled","CloseChipIcon","AddChipIcon","StructuredSearchResultPrimaryInfoStyled","StructuredSearchResultSecondaryInfoStyled","StructuredSearchResultInfoHeaderStyled","StructuredSearchFixedOddsLabelStyled","DriverStyled","StructuredSearchResultStyled","NoResultsStyled","StructuredSearchTextLabelFontSize","StructuredSearchTextLabelStyled","getTextFontSize","sizeString","Large","Small","StructuredSearchTextLabel","TRACKS","NOTRACKS","StructuredSearchTrackModal","_searchResults$get","modalTracks","setModalTracks","dataTid","structuredSearchState$","_selectedTracks$toJS","getModalTracks","doSave","isDuplicate","updatedTracks","StructuredSearchLocationTrackModalNoTracks","StructuredSearchLocation","searchCriteriaJs","aus","nz","onChangeCallback","mappedChips","displayableTracks","newSelectedTracks","removeTrack","isAustralian","StructuredSearchCriteria","selectTabIndex","sc","driverField","StructuredSearchSilkContainer","StructuredSearchSilkImage","StructuredLocationTimeStyled","StructuredRaceNumberStyled","StructuredSearchResultIconStyled","StructuredSearchLocationNameContainerStyled","StructuredSearchResultASTTimerSTyled","StructuredSearchLocationNameStyled","StructuredSearchResultPricesStyled","isSearchResultRace","isSearchResultAcceptor","isSearchResultSport","sport","isSearchResultFobEvent","fobEvent","isSearchResultFobProposition","fobProposition","ONE_DAY","getAstDetails","currentDateMilli","StructuredLocationTime","locationName","astDetails","raceNumberString","StructuredSearchResultComponent","_result$acceptor$fixe","_result$acceptor$fixe2","trainer","spacer","scratchedStatus","acceptorResult","getRedirectUrl","NoResults","mappedResults","TabListStyled","TabList","colorscheme","tabPadding","tabsRole","TabStyled","Tab","selectedClassName","CONTEST_TYPES","EVENT_DATES","BARRIER_NUMBERS","BOX_NUMBERS","ONE_TO_FOUR","ONE_TO_FIVE","FIVE_PLUS","SIX_PLUS","WEIGHT_CHANGE","DISTANCE_CHANGE","UP","DOWN","SAME","TODAY","TOMORROW","BEYOND","TIMEZONE_OFFSET","WIN_TRACK_CONDITIONS","WIN_TRACK_FIRM","WIN_TRACK_GOOD","WIN_TRACK_HEAVY","WIN_TRACK_SOFT","WIN_TRACK_SYNTHETIC","LOCATION_GROUPS","LOCATION_GROUP_AUSTRALIA","LOCATION_GROUP_NEW_ZEALAND","LOCATION_GROUP_INTERNATIONAL","TRACK_ID","buildQueryToken","buildUrl","queryTokens","urlString","structuredSearchData","contestTypeArray","dateArray","barrierArray","barrierNumber","boxArray","weightChangedArray","weightChanged","distanceChangedArray","distanceChanged","daysSinceLastWin","daysSinceLastStart","startsSinceLastSpell","fixedOddsPrice","winTrackConditionsArray","winTrackConditions","locationGroup","trackIds","trackId","constructor","_performStructuredSearch","statistics","hitCount","StructuredSearchStorageKey","StructuredSearchPage","selectedTabIndex","setSelectedTabIndex","componentDidMount","savedSearchCriteria","savedStorageFilter","rangeValues","initialiseSearchCriteriaFromLocalStorage","performStructuredSearch","selectedIndex","TabPanel","Drawer","_ref$shouldUseBodyScr","shouldUseBodyScrollLock","DrawerContent","isUnmounting","_ref2$maxWidth","_ref2$position","drawerElRef","drawer","controller","_isScrolling","_e$touches$","useSwipeClose","ToastContainerStyled","isHeaderVisible","_ref2$type","toastTypeStyles","ToastCloseIconStyled","ToastTextStyled","ToastSpinnerStyled","ToastComponent","itemsOnTop","itemsOnBottom","ToastMessage","_item$timeout","isClickable","animateStartPoint","endDelay","spinner","_ref$isHeaderVisible","SearchFieldStyled","SearchInputStyled","SearchClearButtonStyled","SearchFormContainerStyled","SearchField","performSearch","clearResults","previousSearches","searchFocused","textVal","setTextVal","inputField","invokeSearch","searchTerm","node","blur","focus","onKeyUp","candidates","term","repeatPreviousSearch","getPreviousSearches","SearchService","includeUnmatched","SearchMessageDisplayStyled","SearchTextLabelFontSize","SearchTextLabelStyled","SearchTextLabelLinkStyled","textDecorationLine","SearchTextLabel","InitialDisplay","Medium","SearchLoadingStyled","SearchLoading","SearchErrored","SearchResultsStyled","SearchResultPrimaryInfoStyled","SearchResultSecondaryInfoStyled","RaceDetailsStyled","RaceClassStyled","RaceDistanceStyled","SportsStyled","SearchResultPricesStyled","SearchResultInfoHeaderStyled","SearchFixedOddsLabelStyled","LocationTimeStyled","RaceNumberStyled","SearchResultIconStyled","SearchResultRaceStatusStyled","SearchResultASTTimerSTyled","SearchLocationNameStyled","ScratchedAcceptorStyled","HighlightedDisplay","HighlightDisplay","highlightKey","isMatch","LocationTime","isSport","statusJsx","astJsx","bottomRow","SearchSilkContainer","SearchSilkImage","SearchResultAcceptorComponent","isStartTimeRelevant","SearchResultRaceComponent","SearchResultSportComponent","SearchResultFobEventComponent","_fobEvent$result","SearchResultFobPropositionComponent","_fobProposition$resul","_fobProposition$price","_fobProposition$price2","_fobProposition$price3","_fobProposition$price4","bottomLeftDisplayContent","SearchResultComponentStyled","SearchResults","searchResultsComponents","SearchResultsComponent","_fobProposition$fobEv","SearchResultComponent","SearchResultsContainer","searchPerformed","SEARCH_PREVIOUS_TERM","Search","setIsLoading","setIsErrored","setSearchPerformed","_React$useState7","_React$useState8","setPerformSearch","_React$useState9","_React$useState10","setSearchResults","_React$useState11","_React$useState12","setSearchTerm","searchUnmatchedRacing","_React$useState13","getPreviousSearchesFromLocalStorage","_React$useState14","setPreviousSearches","getResults","_getResults","_doSearch","doSearch","updatePreviousSearchTerms","onPointerDown","clickedOnResults","hasClickedOnElement","_getFromLocalStorage","defaultStartupParameters","locale","playerId","oddsFormat","racingMode","offering","ctnStartupParameters","apiBaseUrl","apiStatisticsBaseUrl","apiStatisticsGraphqlUrl","apiLiveOccurrenceBaseUrl","apiLiveOccurrencePushUrl","apiRetailOperatorBaseUrl","apiAuthBaseUrl","pushUrl","apiSupportUrl","externalWidgetConfigUrl","featureTogglesBaseUrl","ctsStartupParameters","prodStartupParameters","logger","createLogger","kambiLog","LOCAL_STORAGE_LOGOUT_TOKEN","tryToLoginKambiPlayer","regulationId","wapiRequest","wapi","currentLogoutToken","previousLogoutToken","punterId","getWapi","LOGIN","deletePlayerSession","SignalLoggedInKambiPlayer","tryToLogoutKambiPlayer","LOGOUT","SignalLoggedOutKambiPlayer","_deletePlayerSession","_callee5","_context5","_retry","_callee6","_context6","waitForWapi","KambiWidget","clientSubscriptions","BetslipMaximizedChange","_response$data","isMaximized","maximized","UserData","sessionId","syncLog","_handleKambiLogin","handleKambiLogout","_handleKambiLogout","isKambiLoggedIn","_handleScriptLoading","userAccountStateRecord","shouldLoadBootstrapSA","cacheBust","subDomain","generateUrl","scriptName","hasSetInitialVisibilityState","toggleKambiVisiblity","setKambiClientVisibility","setKambiBetslipVisibility","CLIENT_SHOW","CLIENT_HIDE","_document$querySelect","BETSLIP_SHOW","BETSLIP_HIDE","hideOrShowAppHeader","appHeaderRef","scrollYCurrent","scrollYPrevious","updateStickyState","scrollDirection","distanceScrolled","usePendingTicketsCount","_pendingTicketsCount$","racingPendingCount","sportsPendingCount","doPendingBetsExceedMaxCount","isSportsOnlyPending","SetAccountDetails","InvalidateAccountDetails","accountDetails","_lastUpdate","useGetAccountDetails","shouldFetch","currentlyLoadingAccountRef","accountDetailsRes","balanceCleaned","ReverificationAlertStyled","ReverificationAlertIconStyled","ReverificationAlertMessageStyled","ReverificationAlert","reverificationState$","ReverificationAlertComponent","AccountDropDownWrapStyled","AccountInfoWrapStyled","AccountNameLabelStyled","AccountNumberLabelStyled","SeparatorStyled","DepositWithdrawSectionStyled","ItemContainerStyled","LogoutLinkStyled","clickTrackHandler","_clickableElement$inn","clickableElement","buttonLabel","AccountPromoWrapperStyled","AccountPromoButtonRowStyled","AccountPromoLabelStyled","AccountPromoButtonStyled","_ref$shouldDisable","shouldDisable","AccountPromoLinkStyled","AccountPromoCountStyled","WebkitTransform","AccountSuperPickBadgeStyled","AccountPromoSuperpicksWrapStyled","AccountPromoSuperpicksListStyled","AccountPromoSuperpicksItemStyled","AccountPromoSuperpicksButtonStyled","NSW_LEGISLATION_ERROR_ID","OffersPanel","_ref$bonusBetCount","bonusBetCount","superpicksWrapRef","isBonusSuperpicksExanded","setIsBonusSuperpicksExpanded","_useGetSpecialTokens","isLoadingSuperPicks","handleSuperPickNav","SpecialUrl","standardSuperPicks","IsBonusToken","bonusSuperPicks","isStandardSuperPickAvailable","isBonusSuperPicksAvailable","isNSWSuperPickError","ButtonRow","TokenId","Label","Count","BetsAvailable","_ref3$BetsAvailable","SuperpicksWrap","SuperpicksList","TokenName","_ref2$BetsAvailable","SuperpicksItem","SuperpicksButton","Badge","_ref$showPlusIcon","showPlusIcon","VisibilityButtonStyled","BalancesTableStyled","CashHeaderStyled","BonusBetHeaderStyled","BonusCashHeaderStyled","CashDataStyled","BonusDataStyled","BalanceSectionComponent","handleToggleBalanceVisibleClick","BalanceSection","getIsAppHeaderVisible","getIsBalanceVisible","getIsDropDownOpen","getIsAppHeaderStickyEnabled","getIsHamburgerMenuOpen","getShouldDisableAppHeaderRender","LOADING_TEXT","Wallet","_useGetAccountDetails","setAccountName","setInnerHeight","dragDistance","setDragDistance","accountDropDownRef","prevIsOpen","_usePendingTicketsCou","_ref$accountNumber","_ref$activeCampaignsC","activeCampaignsCount","_ref$blackBookAlertCo","blackBookAlertCount","refetchSpecialTokens","touchStartY","keyPressHandler","touchStartHandler","_e$touches","touchMoveHandler","_e$changedTouches$","touchEndHandler","_e$changedTouches$2","PrimaryAcctHolderName","updateInnerHeight","dropDownEl","DropDownWrap","InfoWrap","AccountDropDownBGStyled","_templateObject","_taggedTemplateLiteral","_ref$zIndex","defaultAccountDetails","isAuthorized","ChangePasswordTypeKey","ChangePasswordRepo","ChangePasswordContainerStyled","ChangePasswordTitleLabelStyled","defaultChangePasswordState","isChangePasswordSuccess","isChangeTemporaryPasswordSuccess","isCurrentPasswordVisible","isChangePasswordSubmitEnabled","ChangePasswordSubmit","ChangePasswordSucceeded","ChangeTemporaryPasswordSucceeded","ChangePasswordFailed","UpdateCurrentPassword","IsCurrentPasswordVisible","ResetForm","ChangePasswordStateFactory","hasNewPassword","hasConfirmPassword","hasCurrentPassword","scrollToTop","confirmPassword","existingPassword","isBiometricsEnabledByUser","isChangeTemporaryPassword","isNewPasswordValid","isNewAndConfirmPasswordSame","betAccountId","changeTemporaryPasswordDesktop","changePasswordSubmit","changePassword","ResetPassword","CurrentPassword","changePasswordState$","useBiometricsStatus","isBiometricsStatusReady","setIsBiometricsStatusReady","setIsBiometricsEnabled","getIsLoginShown","getLoginActions","getIsKeepMeLoggedIn","getIsBiometricsEnabledOnTempPasswordChange","ConnectChangePassword","ChangePasswordComponent","ChangePasswordViewObserve","changePasswordForm","ChangePasswordView","navigateToChangeTempPassword","REMEMBER_ACCOUNT_STORAGE_KEY","useLoginState","setWorkflow","setPassword","setErrorMessage","setAccountNumber","getRememberAccount","setRememberAccount","setIsBusy","logUserId","resetErrorMessage","handleCloseLogin","performLoginSuccessActions","shouldRememberAccount","userHasToggledBiometrics","handleLogin","authenticatingAccountNumber","_yield$attemptLogin","onAccountNumberChange","onPasswordChange","toggleKeepLoggedIn","toggleRememberAccount","SunAnimation","RayAnimation","Sun","animationIterationCount","Ray","slope","MoonAnimation","StarAnimation","Moon","Star1","animationDelay","Star2","Night","points","GreetingLabelStyled","GreetingContainer","GreetingComponent","currHour","Greeting","getHours","AccountDetailsSectionStyled","LoginSignUpSectionStyled","em","HamburgerMenuSectionHeaderStyled","ExternalLinkIconStyled","JustifiedLinkText","HamburgerMenuLink","attribs","_attribs$id","HamburgerMenuExternalLink","_attribs$id2","HamburgerMenu","isNewWithdrawFeatureActive","_ref2$accountName","_ref2$accountNumber","_ref2$activeCampaigns","_ref2$blackBookAlertC","HamburgerMenuStyled","BalancePill","renderContext","accountBalanceLastUpdated","accountState$","featuresState$","isAccountPushFeatureEnabled","accountBalanceTTL","superPicksLastUpdated","standardSuperPickCount","bonusSuperPickCount","canShowBonusCount","setCanShowBonusCount","_activeCampaigns$coun","bonusCountTimeoutId","balanceTimerId","campaignsCount","totalOffersCount","BalancePillComponent","cashBalance","bonusesCount","onWalletToggle","_accountDetails$toJS","hideDecimalsInCashBalance","hideDecimalsInBonusBalance","balanceToDisplay","BalanceContainerStyled","BalanceSectionDefaultAppHeaderStyled","BalanceMoneyStyled","BonusBalanceMoneyWrapperStyled","IconV2","BonusSectionStyled","BalanceSectionForBetSlipStyled","useIsNewBetSlipFeatureActive","_ref$displayLocation","displayLocation","prevCountRef","isBetSlip","prevCount","getBadgeAnimation","countAnimationClass","animationDirection","BetSlipButton","newBetSlipCount","setCount","betslipSubscription","actionCreator","effect","KambiPlaySessionIdRegistered","myBetsRoute","isPreviousPendingSportsOnly","getMyBetsRoute","MyBetsButtons","shouldDisplayBetSlip","shouldDisplayPendingBets","isPendingBetsFeatureActive","borderBottomRightRadius","AppHeader","prevPathname","shouldRenderBG","_useKambiVisible","isKambiVisible","setIsKambiVisible","isKambiBetslipMaximized","setIsKambiBetslipMaximized","BETSLIP_MAXIMIZED","isBetslipMaximizedState","_subscription","useKambiVisible","_useKambiVisible2","watchScrollEvent","useStickyOnScroll","shouldRenderBackButton","shouldLowerZIndex","paddingInline","RaceListHeaderStyled","RaceListHeaderDetails","RaceListCenteredHeaderStyled","RaceListContainerStyled","RaceListItemStyled","RaceTimeAndNumber","RaceListDetails","RaceTimeStyled","RaceListRaceNameStyled","RaceListClassTypeStyled","RaceListClassStyled","RaceListResultStyled","RaceListResultDistanceStyled","RaceListResultStatusStyled","RaceCondtitionIcon","QuaddieChip","RaceExtrasIconStyled","MeetingStatus","RaceStatusNumberStyledProps","Pending","WeatherTypes","Fine","Hot","Cloudy","Overcast","Rainy","Raining","Storm","Showery","Awful","Snowy","RaceListHeader","condition","AppearanceInheritingLink","RaceElements","_race$fixed","_race$fixed2","IsFixedOddsBettingOpen","raceStatusTestingID","toUrl","RaceListItemFixedOddsInfo","ResultDistance","resultString","getPrettyRaceStatus","isFixedOddsRaceSuspended","isFixedOddsRaceClosed","isFixedOddsRaceResulted","RaceListPage","_useGetParams","_location$state","selectiondate","useGetParams","_useRaceList","hasNoRaceData","isThoroughbredMeetingRaceInWA","RaceItemWrapperStyled","RaceEventItemContainerStyled","RaceItemStyled","RaceEventItemDateStyled","RaceItemTimerStyled","RaceEventDetailStyled","RaceEventGroupSeperatorStyled","RaceEventResultStatusStyled","RaceEventsItem","showLikeChallenge","eventRaceStatus","pageSpecifics","getDataFunction","getFeatureRaces","getChallengeAndRacingSpecials","getPageSpecifics","_getRaceEventData","specifics","_getChallengeAndRacingSpecials","raceEvents","groupedRaceEvents","eventStartDate","allEvents","codeFromRequest","eventDescription","racingStatusText","topGrouping","_x8","_x9","_getFeatureRaces","GroupedDate","RaceEventsContainerStyled","productsAndCodes","propositionsProductsAndCodes","noDataFoundDateTimeFormat","setData","searchDate","pageTitle","getRaceEventTitle","titleUrl","getTitleUrl","getRaceEventData","RaceEventsHeader","dateText","getNoDataFound","grouping","createRaceEventItem","getContent","WithdrawContainerStyled","WithdrawDetailStyled","WithdrawDetailNoBorderStyled","FormContainerStyled","BankDetailContainerStyled","BankDetailItemStyled","WithdrawLabelStyled","ButtonContainerStyled","getWithdrawable","postWithdraw","WithdrawLoading","navigateToAccount","trackWithdrawalError","WithdrawUnavailable","WithdrawSuccess","isRateMyAppEnabled","withdrawalAmount","transactionNumber","WithdrawFailure","WithdrawPage","withdrawalResponse","hasTrackedSuccessfulWithdrawalRef","submitEnabled","setSubmitEnabled","amountError","setAmountError","setWithdrawalAmount","withdrawResponse","setWithdrawResponse","isSubmitted","setIsSubmitted","fraction","percentage","isCRMAvailable","withdrawableBalance","bankName","bankBranchName","bankBsb","bankAccountNumber","bankAccountName","isBankAccountRegistered","BankAccountRegistration","noValidate","enableSubmit","minAmount","maxAmount","defaultResponse","onWithdrawSuccess","BankAccountContainerStyled","BankNameStyled","BankBranchStyled","BankBranchEmptyStyled","BankDetailDescriptionTermStyled","float","BankDetailDescriptionDetailsStyled","useBankDetailsQuery","_data$bankName","postUpdateBankAccount","_useBankDetailsQuery","branchName","readOnlyForm","setReadOnlyForm","entryForm","setEntryForm","isShowErrorOnSave","setIsShowErrorOnSave","errorBsb","setErrorBsb","errorAccountName","setErrorAccountName","errorAccountNumber","setErrorAccountNumber","bankDetailsIsLoading","bankDetailsIsError","bankDetailsData","_useBankDetailsFromBs","bankDetailsFromBsbData","bankDetailsFromBsbRefetch","bankDetailsFromBsbIsFetched","isFetched","previousEntryFormBsb","isBsbRefetch","isSubmitDisabled","getSuccessfulBackRoute","formattedBsb","isPendingWithdrawals","goBack","locationSearch","FeedbackFormStyled","getFeedbackSubjectsFromApi","getAccountContactDetails","handleFormSubmission","subject","setMessage","mapFormValuesToApiData","_contactDetails$Conta","_contactDetails$Conta2","Phone","Subject","ScreenHeight","ScreenWidth","PixelDepth","FeedbackForm","setSubject","_useFeedbackFormQuery","subjects","isErrorSubjectsApi","isLoadingSubjects","_useQuery2","isErrorContactDetails","isLoadingContactDetails","hasApiErrored","shouldDisableSubmission","useFeedbackFormQuery","subjectValue","ContactUsPage","shouldEnableFeedbackForm","IconContainer","isSuperPick","IconBackground","SpecialTileContainer","TitleContainer","TileTitle","DescriptionStyled","ButtonsContainerStyled","TermsAndConditionsStyled","TermsAndConditionsHeaderStyled","TermsAndConditionsTextStyled","betNowNavigator","multiEvent","sportSequence","tournamentSequence","SpecialTile","marketElementToScrollTo","isUnexpected","handleButtonToggle","TermsAndConditions","termsAndConditions","useRouteMatch","SpecialsTermsPage","SpecialsErrorNoticeBoxStyled","dangerouslySetInnerHTML","__html","SpecialsPage","Switch","Route","exact","SpecialsTiles","Redirect","getSpecials","ToggleSelectionForGame","ClearToteSportSelections","gameId","SelectionType","Draw","Away","newGame","getCurrentPools","getResultedPools","getPool","GameGroupStyled","InfoHeaderStyled","PoolNameStyled","InfoTitleStyled","GameHeaderStyled","TeamNameContainerStyled","TeamNameStyled","TippingPillStyled","DrawPillStyled","AbandonedPillStyled","ButtonDrawStyled","DisclaimerContainerStyled","ClosedGame","gameIndex","isDrawSupported","TippingBettingDrawer","createSelection","seq","nameSuffix","LoadingBars","DATE_TIME_FORMAT","Games","_pool$dividend","_pool$dividend2","scheduledCloseTime","hasDraw","releaseTime","isRefunded","formattedReleaseTime","grossJackpot","numberOfTipsRequired","gameSelections","GameSelections","isHomeSelected","isDrawSelected","isAwaySelected","Disclaimers","disclaimers","abbreviateName","disclaimer","MAX_CHARS_TO_DISPLAY","displayMaxChars","nameSplit","newNameFirstLine","newNameSecondLine","chars","TippingPoolHeader","ResultsDateStyled","SinglePoolStyled","RowContainerStyled","CloseTimeStyled","PoolTotalStyled","BoldedTabList","TippingMainContainerStyled","AbandonedStyled","getDisplayTime","timeUTC","SingleOpenPool","CurrentPoolList","DateNavigation","onDateChange","showCalendar","setShowCalendar","closeCalendar","SingleResultedPool","SHORT_DATE_FORMAT","ResultedPoolList","_data$sports","_queryFn","DateDisplay","_sport$pools","endDate","TippingPage","isShowingResults","navigateToResultsIfNotAlreadyThere","changeBlackbookAlertPreference","newPreferences","shouldRefetchBlackbook","saveTakeABreak","SaveTakeABreakRequest","fetchTakeABreakDetails","useTakeABreak","RaceDayAlertPreference","isEmailAlertActive","isSmsAlertActive","_useTakeABreak","isTakeABreakActive","inProgress","localStateOverride","setLocalStateOverride","handlePreferenceToggle","changedAlertType","currAlertPref","SendEmail","SendSms","newAlertPref","trackBlackbookAlertPreferencesUpdated","useIncomingIndicator","incomingIdRef","runnerRef","elementRect","createLoadBetDetails","firstLeg","_acceptorDetails$srmP","ticketLeg","eventSeq","selectActiveInvestment","selectKeypadActiveValue","selectIsBettingDisabled","selectWorkflowStatus","selectIsHostUserLoggedIn","selectVisibleBettingSection","useRealtimeFobPriceChanges","shouldEnable","subscriptionItems","workflowStatus","currentSubscriptionsRef","workflowStatusRef","getSubscriptionItemTopic","isSportsPriceChangedPushEvent","_item$details","getFobSportsPriceChangeTopic","handleProposeAllBetsSuccessful","_bet$legs","getErrorType","handleProposeAllBetsFailed","handleConfirmAllBetsSuccessful","betslipStateDataItems","featureFlags","_bet$legs2","trackMultiBetConfirmation","trackSingleBetConfirmation","handleConfirmAllBetsFailed","_bet$error","_bet$legs3","useToastOnClearBetSlipSuccess","stopListener","RunningSoonHeader","shouldAutoAddToBetslip","isBetBuildLoading","setIsBetBuildLoading","_runner$RacingTodayDe","ContestNumber","GroundDescription","PlaceDividend","RiderName","WinDividend","raceHashRoute","runnerStatus","getStatus","shouldRenderBarrier","RunnerHeaderStyled","getRiderAbbreviation","LatestNoteLine","removeRunnerFromBetslipLegacy","_getCodeAndType","displayAddToBetslipError","matchedItem","figure","inset","deleteRunnerFromBlackbook","toastBusyId","toastBusytimeoutId","invalidateQueriesOnSuccessfulDelete","removeRunnerFromBlackbookCache","oldData","_oldData$Entries","newEntries","Entries","ShareLoading","getFirebaseDynamicLinkFromNative","rawLink","trackBlackbookShare","handleBlackbookShareClick","buildLinkForShare","encodeURI","BlackbookEntryDetails","hasComments","RunnerCardStyled","SlimEntryExpandable","onExpand","incomingElRef","SlimEntryHeaderStyled","sortByStartTime","JockeyRunningSoonEntries","initialRunners","smartBetslipState","hasExpanded","setHasExpanded","keyForBlackbookEntry","placeholderData","_useQuery$data","firstRunner","rideCountText","LatestNoteSeq","RunnersWrapperStyled","betslipFobPropSeqs","_entry$RacingTodayDet","_entry$RiderName","JockeysRunningSoon","entriesGroupedByJockey","jockeyGroups","groupByJockeys","sortJockeyGroupByAlphabet","sortJockeyGroupByStartTime","sortJockeysAndGroup","_runners$","jockeys","jockeyId","getFirstJockeyStartTime","jockeyObj","RunningSoon","trackBlackbookEntryToggled","NoRunnersStyled","RunnersRunningSoon","sortedRunners","sortMap","openWithPrice","openWithNoPrice","notOpen","sortRunners","sortBy","EventSeq","useSmartBetSlip","includeTote","isSmartBetslipActive","isSmartBetslipFeatureActive","betslipToteIds","deriveReactStateFromBetSlip","matcher","isAnyOf","deriveReactStateFromLegacyBetslip","propSeqs","totes","ac","MultiToastContainerStyled","changed","MultiToastPriceContainerStyled","MultiToastPriceTitleStyled","MultiToastPriceAmountStyled","MultiToastPriceAmountPrefixStyled","MultiToastPrice","odometerReady","setOdometerReady","setStartAnim","MultiToast","setChanged","handleOnClick","SmartBetslipToast","multiReturnRef","hasRunFirstSubscriptionCBRef","multiBetslipItems","_getMultiBetslipItems","betslipItemsGroupedByRaceOrEvent","hasNoSameRaceBetslipItems","hasSufficientBetslipItems","isEveryRaceOpen","getMultiBetslipItems","newMultiReturn","SmartBetSlipMultiToastLegacy","isSmartBetslipSettingActive","RunnerListWithData","incoming","view","getEntryTabType","currentFilterType","setCurrentFilterType","filteredEntries","racingToday","runningSoonEntries","RacingToday","hasRunnersRacingToday","getEntriesRacingToday","allOther","getEntriesNotRacing","handleFilterClick","trackBlackbookChangeView","MozAppearance","MozUserSelect","WebkitAppearance","RunnerList","TransactionTabsStyled","TransactionTabStyled","TransactionTabActiveStyled","RacingTransactionTitleStyled","racingTabs","RacingSportsTabs","TransactionTabs","TabActive","getPendingSortOrder","getResultsSortOrder","getRebetTicketsCount","rebetTicketsCount","DATE_HEADER_DATA_SELECTOR","DateHeader","latestDateRef","isFirstDate","ticketDate","ticketDisplayDate","startOf","shouldHideDate","dateDataSelectorWithValue","DateHeaderLabelStyled","HeaderDate","previousDisplayDateRef","prevDate","shouldFindTimeDiff","isNewDateBefore","AccountActivityHeaderDateStyled","AccountActivityDateStyled","EVENT_START","BET_PLACED","MONTHS_FOR_HISTORY_SELECT","firstDate","setSelectedDate","onRefresh","rebetInsights","isReBetFeatureActive","setRebetTicketsCount","isRebetCountMax","hasRebetBadge","fetchRebetCount","useRebetBetCount","_useHeaderScrollEvent","fixedHeaderWrapperElRef","fixedHeaderElRef","displayDate","setDisplayDate","prevDisplayDateRef","headerContainerEl","fixedHeaderContainerEl","handleScroll","shouldFix","closestToHeader","MIN_SAFE_INTEGER","newDisplayDate","dateHeader","topPosition","useHeaderScrollEvents","isResultsTab","isTransactionsTab","HeaderContainerStyled","TabNavStyled","RebetCountBadgeStyled","isMaxCount","SortingBarStyled","SortButtonWrapperStyled","DateLabelStyled","DateWrapperStyled","SecondayHeaderIconStyled","SecondaryDateSelectStyled","monthNumber","_ref2$isMaxCount","TransactionCardStyled","TransactionStyled","PendingStatusStyled","TransactionRowStyled","TransactionRow","PendingWithdrawalDetailsStyled","PendingWithdrawalDetails","cancellationState","setCancellationState","transactionTimestamp","cancelWithdrawal","TransactionNumber","hoursDiff","cancelTransactionTimestamp","CompletedWithdrawalDetailsStyled","CompletedWithdrawalDetails","isSuccessfullyCompleted","Transaction","transaction","withdrawalCancelable","maskedCcNumber","bpayReferenceNumber","transactionSequence","tranTransSeq","DetailsSecondaryInfoStyled","dl","BlackbookButton","entryType","InnerButtonStyled","BlackbookJockey","runnerName","getJockeyNameFromRace","BlackbookButtons","BonusBetRowStyled","bonusAmount","BonusBet","Cost","investmentLine","betValue","totalValue","TableStyled","Formulas","formulaDetail","line","TippingOrFooto","TicketInvestment","ReBetButton","canAllowReBetForTicket","ReBetButtonLocal","pendingLegs","loadDetails","setLoading","_calcOdds","loadDetail","calcOdds","resultedCount","pendingCount","multiLeg","legStatus","betLegStatus","getBetLegStatus","shouldProvideLink","shouldRenderBlackbookNumber","selectionSubHeading","getStarterPrice","_leg$betType","_leg$return$split$","_leg$return","returnRate","legRaceNumber","_selectionDetails$0$s","expandedHeader","expandedHeaderSecondLine","_getSilk","_getImageUrlWithSizes","_getImageUrlWithSizes2","silkHeight","silkWidth","getSilk","subHeader","raceLink","linkPath","SelectionInfo","SpecialsStyled","shouldHideCost","powerPlaySpecials","isPowerPlay","otherSpecials","_special$insuranceRew","insuranceReward","Details","_getBettingInformatio","_ticket$specialInform","ticketDisplayContext","shouldHideStartTime","shouldDisplayNewStartTime","updatedEventStartDateTime","DetailsStyled","specialInformation","SecondaryInfo","getBettingInformationWithOverrides","borderSpacing","createImageUrlFromHtml","_createImageUrlFromHtml","_el$getBoundingClient","canvas","html2canvas","useCORS","allowTaint","ignoreElements","tagName","toDataURL","_handleShareBetClick","ticketStatus","fileBlob","previewEl","isImageOnlyShare","isCostShared","_toString","errorString","shareBetWithReactNative","shareBetWithBrowser","costShared","createShareBetAndPost","_createShareBetAndPost","betsToShare","_shareBetWithReactNative","_ref2$data","_yield$Promise$all","_yield$Promise$all2","_shareBetWithBrowser","_navigator$canShare","_navigator","_ref3$data","navigatorShareData","files","canShare","share","convertImageUrlToBlob","fetchObject","blob","setTemporaryWidthOfPreviewElement","useCreateImageForBrowser","previewImageElRef","previewImageDataRef","resetTempWidth","_setImageBlobOnRef","setImageBlobOnRef","SharePreviewOverlayHeaderStyled","SharePreviewContentWrapperStyled","SharePreviewContentStyled","fontVariantLigatures","SharePreview","setShouldHideCost","imageFileBob","isShareBetLinkFeatureActive","_useImageOutputDevToo","htmlEl","clickCountRef","isDevModeEnabled","setIsDevModeEnabled","outputImage","setOutputImage","useImageOutputDevTool","_useImageOutputDevToo2","devOutputClickHandler","DevOutputImage","ticketTypeLayout","shouldEnableLinkShare","handleShareBetClick","canUserShare","ShareBet","isShareBetFeatureActive","Blob","FooterButtons","launchSharePreview","ReplayVideoPlayer","onCloseTapped","onFinished","isFullScreen","onEnded","onVolumeChange","RaceReplayVideoPlayer","ticketId","Player","RaceReplayButton","onCloseClick","ReplayButtonLocal","onReady","replayInfo","buttonState","setButtonState","_ticket$legs$","promoTypeColorThemes","PromoBanner","promoType","promoTypeClass","SuperPick","isSpecial","Ticket","activeReplayInfo","setActiveReplayInfo","isReplayTicketFeatureActive","CenterContentStyled","Pages","Page","isFirstPage","transactionsById","Center","PullToRefreshContainer","isPulling","setIsPulling","pulledDistRef","spinnerRef","scrollY","clampedDistance","SpinnerContianer","timeSinceLastRefresh","AccountActivityMain","getCurrentMonth","clearAccountActivityCache","betslipBetPlacedSupscription","quickbetBetPlacedSubscription","firstId","getFirstDate","AccountActivityContainerStyled","getTicketsTransactionsLabel","_useParams$tab","isSportsFeatureActive","DetailsListStyled","HorizontalDivider","DataStyled","AdditionalLinksStyled","NoticeBoxInternationalStyled","DueMessageContainerStyled","DueMessageCountdownNumber","DueMessageCountdownDays","urgencyColors","high","low","RadialCountdownContainerStyled","RadialCountdownWrapStyled","RadialCountdownTextStyled","RadialCountdownArcStyled","RadialCountdownArcBackgroundStyled","fillArc","RadialCountdownArcFillStyled","urgency","RadialCountdown","progress","_ref$sizeInPx","Progress","circumference","PI","DueMessage","showCountdown","getDueMessageText","DueCountdown","ReverificationComplete","ReverificationCompleteMessage","ContactDetailsReverificationSuccess","contactDetailsState$","navigateToHistoryBack","reverificationCompleteRef","ProvideExtraPersonalIdMessage","popupState$","reverification","userAccount","isProcessing","ReverificationPopupMobi","shouldShowPopup","ReverificationPopupComponent","ReverificationPopupContents","ProvideExtraPersonalIdButton","AdditionalLinks","navigateToEditContactDetails","ConnectReverificationDetails","ContactDetailsRepo","ReverificationDetailsLoader","ReverificationDetailsView","NoticeBoxInternational","UpdateDetailsButton","hideKambi","hasPageRendered","KambiCenteredContainerStyled","KambiUnsupportedBrowserTextStyled","LinkButton","dateOptions","weekday","hour","minute","KambiRouteEffects","maintenancePayload","setMaintenancePayload","enterHashRef","isMaintenanceActive","navigate","setProperty","_document$getElementB2","shouldShowTransactionTabs","setShouldShowTransactionTabs","isBetHistory","useShowTransactionTabs","shouldShowSpinner","setShouldShowSpinner","_subscription$dispose","_subscription$dispose2","useShouldShowSpinner","shouldShowBrowserUnsupported","setShouldShowBrowserUnsupported","useShowBrowserUnsupported","KambiMaintenance","browserOrDeviceText","KambiClient","kambiDivElRef","kambiDivEl","SESSION_TOAST_ID","enableNewFrameworkLayout","hideHeader","enableLandingPageFeed","enableLandingPageLiveRightNow","enableLandingPageLiveRightNowAggregate","attachBetslipToBody","enablePreviouslySearchedTerms","enableFootballVisualisation","enableQuickBrowse","enableLiveStats","routeRoot","ignoredRoutes","enableBetslipDepositButton","enablePinnedBetslip","showFooterSettingsLink","betslipQuerySelectors","unpinned","homeUrl","loginUrl","lobbyUrl","enableDeposit","depositUrl","enableLiveBetting","liveBettingByPhoneOnlyEnabled","liveBettingPhoneNumber","liveBettingHumanReadablePhoneNumber","enableOddsFormatSelector","googleAnalyticsWebPropertyID","liveBettingRegulationString","enableAllSportsInNavpanel","accountLinks","footerLinks","betslipLinks","bethistoryLinks","enableNavigationPanel","notificationLog","isMobiSessionActive","handleKambiSessionLogin","kambiAccountState","getBalance","heartbeat","widgets","widgetId","widgetType","navPanel","NavigationSection","_HTMLElement","HTMLElement","hasLoadedScript","useKambiClient","bootstrapJurisdictionRef","Bowser","satisfies","chrome","safari","getStartupParameters","customerSettings","widgetSettings","customElements","define","handleScriptLoading","bootstrapJurisdiction","USER_DATA","setInitialVisibilityState","_clientSubscriptions$","handleClientSubscriptions","shouldTryLogout","handleKambiLogin","GlobalCss","isInIPad","_css","getPreferencesFromApi","MyPreferences","mutateDataRef","newPrefs","isMutateError","isLoadingMutate","mutateData","isEmailChecked","OptInPreferences","isSmsChecked","Sms","isPhoneChecked","isMailChecked","Mail","isAnyCommsChecked","Marketing","ContactInfo","MailingAddress","NextRaceDrawer","onNextRace","onGoToMeeting","useIsAuthenticated","isLoggedInInitialValue","MysteryBetType","MysteryQuickPickOptions","uniqueKey","displayOrder","productSeq","CustomMysteryBetTypes","defaultOptionNumber","optionNumber","DEFAULT_MYSTERY_QUICK_PICK","DEFAULT_MYSTERY_CUSTOM_BET_TYPE","DEFAULT_MYSTERY_CUSTOM_BET_COMBINATION","SetMysteryData","SetIsRaceClosed","SetSelectedQuickPick","SetSelectedCustomBetType","SetSelectedCustomBetCombination","SetSelectedQuickPickBetCount","SetSelectedCustomBetCount","SetIsBetConfirmed","SetBetError","SetGoToNextRace","SetGoToMeeting","currentData","selectedQuickPick","selectedCustomBetType","selectedCustomBetCombination","selectedQuickPickBetCount","selectedCustomBetCount","isBetConfirmed","goToNextRace","goToMeeting","_mysteryDto$DisabledQ","_mysteryDto$DisabledC","mysteryDto","isDefaultQuickPickAvailable","DisabledQuickPickOptions","isDefaultCustomBetTypeAvailable","DisabledCustomOptions","MysteryToggleButtonStyled","MysteryContainerStyled","MysteryQuickPicksStyled","_ref2$optionsPerRow","optionsPerRow","MeetingInformationContainerStyled","MeetingInformationSectionStyled","MeetingNameStyled","RaceNameStyled","MysteryBetContainerStyled","MysteryHeadingStyled","CustomBetButtonContainerStyled","MysteryComboButtonStyled","BetNumberButtonStyled","borderRightWidth","BettingDrawerSpacerStyled","FullScreenOverlayContainerStyled","overscrollBehaviorY","FullScreenContentsStyled","FullScreenTopSectionStyled","CustomizeSpendInputContainerStyled","infoText","CustomizeSpendInputStyled","BiggerTextStyled","BetAmountButtonsContainerStyled","StudioHeadingStyled","BetContainerStyled","BetLineContainerStyled","MysteryBetCloseButtonStyled","BET_BUTTON_VALUES","quickPickCount","customCount","selectedBetCount","setBetCount","ReviewSelectionsDrawer","canReviewSelections","onEditBet","onReviewSelections","BetAmountButtons","onAmountSelected","onClear","MysteryRaceDetailsHeader","mysteryData","betTypeText","Meeting","Race","ZERO_DOLLARS","getFlexi","spendPerBet","roundedValue","getBetTypeText","winStake","placeStake","getAsNumber","TRIFECTA_IN_ORDER","TRIFECTA_ALLWAYS","toDisplayMoney","ActiveInput","CustomizeSpend","onReviewDetails","setWinStake","setPlaceStake","setSpendPerBet","activeInput","setActiveInput","isAmountSelected","Spend","isSpendActive","winStakeNumber","placeStakeNumber","spendPerBetNumber","getTotalCost","MysteryBonusButtonStyled","BonusCashCampaign","toggleCampaign","setUseBonusCash","handleBonusHandler","ConfirmBetDrawer","hideNoticeBox","editTId","confirmTId","isConfirmDisabled","onConfirmBet","onDeposit","isAuthenticated","bonusBetToUse","isInsufficientFunds","warningText","isApplied","ProposedMysteryBet","ProposedWinPlaceMysteryBet","ProposedQuinellaMysteryBet","ProposedExactaMysteryBet","ProposedTrifectaMysteryBet","Combo","ProposedComboMysteryBet","ProposedFirst4MysteryBet","ProposedQuaddieMysteryBet","getAcceptorText","toNth","betLineIndex","previousAcceptors","hasDotsInsteadOfSlashes","ReviewMysteryDetails","_data$bets","_data$bets2","_commitData$bets","_data$bets3","_commitData$bets2","_data$bets4","_data$bets5","_data$bets6","customOption","isSingleBet","requestBody","confirmation","errorReason","commitData","isMutating","commitError","isCommitError","commitReset","errorText","setErrorText","shouldShowNextRaceDrawer","setShouldShowNextRaceDrawer","_response","errorBody","firstBet","flexiBetLines","totalBetAmountPaid","sum","bonusBetUsed","bonusBalanceAvailable","betPlacedText","isFlexi","flushSync","CustomizeBet","_mysteryData$QuaddieR","_selectedBetType$opti","isCustomizeSpendOpen","setIsCustomizeSpendOpen","isDetailsOpen","setIsDetailsOpen","selectedCombination","betTypes","QuaddieRaceNumbers","hasAnyDisabledOptions","_mysteryData$Disabled","shouldBettingDrawerBeOpen","hasBetCountBeenSelected","_document","_mysteryData$Disabled2","_mysteryData$QuaddieR2","_mysteryData$QuaddieR3","createMysterySelection","betFromRaceBettingPageQuickPick","quickPick","qp","openQuickBetMystery","MysteryQuickPicks","disabledQuickPicks","selectionCallback","quickPickOptions","sortQuickPicks","quickPicks","MysteryQuickPick","disabledQuickPick","QuickPick","selectedMysteryOption","selectedDisplayPrice","MysteryBetTabs","_currentData$Meeting","_currentData$Race","_currentData$Race2","_currentData$Meeting2","_currentData$Race3","API_PREFIX","getMysteryBetDetails","NEXT_RACE_PATH","MysteryBetPage","_data$Meeting","_data$Meeting3","isForSpecificRace","_useMysteryBetDetails","useMysteryBetDetails","RaceKeyForLiveUpdates","getTopics","_e$topic","_e$payload","_e$payload2","statusChangedPayload","_data$Meeting2","userAccountStateSubscription$","SignUpCompletePage","SignUpComplete","PresetCookieExpiry","ToolboxViewModel","selectedCookieName","customCookieName","cookieResultMessage","selectedExpiryPreset","cookieExpiryOptions","customExpirySelected","customCookieExpiry","cookieExpiry","lastKnownLocationText","dateLastKnownLocationUpdated","currentVenueLocation","currentVenueLocationUpdatedAt","ldFeatures","appCapability","firstLoad","segment","authStatus","updateFeatures","OneMonth","getPresetOptions","Custom","OneMinute","setMinutes","getMinutes","OneHour","setHours","OneDay","OneWeek","setMonth","SixMonths","OneYear","setFullYear","appCapabilityCookie","atob","getPushAuthStatus","expires","setCookieValue","updateSegmentDetails","getSuccessfulResultMessage","expiryAsString","toUTCString","toLocaleTimeString","Venue","IsGpsVenueLocationSet","GpsVenue","GpsLocation","segmentValue","VersionInfo","versionInfo","getVersionInfo","gitCommitShaShort","gitUsername","gitPipelineUrl","CookieManagement","LocalStorageManager","localStorageState","setLocalStorageState","getLocalStorageForState","handleLocalStorageDelete","storageKeys","LastPaymentMethod","savePaymentMethod","Sentry","sentTest","setSentTest","clearTestFlag","useDebounce","sendToSentry","toolboxElRef","cleanup","DevTools","RequireAuth","ContactDetailsContainer","ContactDetailsPreferredNameStyled","ContactDetailsItemStyled","ContactDetailsViewLabel","ContactDetailsViewItem","ContactDetailsTitleLabelStyled","ContactDetailsEditLabelStyled","ContactDetailsManualAddressButton","VerifyTextContainerStyled","ContactDetailsMobiWrapper","ConnectContactDetails","_betAccountQuery$data","_betAccountQuery$data2","betAccountQuery","ContactDetailsObserver","isIdVerified","ContactDetailsView","PopularCountryList","countries","popularCountries","popularOptions","CountrySelect","_useCountryList","AlphabeticalCountryList","SectionTitle","MedicareIconStyled","CheckboxContainer","DateSelectionLabelStyled","DateSelection","onChangeDay","callOnChange","isDayDisabled","onChangeMonth","onChangeYear","getDaySelectOptions","getYearSelectOptions","defaultSelectOptions","getUpdatedDaySelectOptions","selectOptions","numOfDays","monthVal","futureYear","MedicareSvg","validateMedicareFields","isMedicareGreenCard","isMedicareBlueOrYellowCard","GreenCardExpiryDate","monthFormatted","BlueOrYellowCardDate","medicareBlueYellowExpiry","greenExpiry","PastReverificationMessage","reverificationFailureRef","reverfication","AdditionalDetails","_record$reverfication","AdditionalDetailsComponent","validateFields","AgreeToVerifyAdditionalDetails","AddressAutosuggest","fetchSuggestions","AddressAutocomplete","inputId","_ref2$value","FailedSaveMessageContainer","FailedSaveMessage","showFailedMessage","defaultManualAddressState","isShown","streetNumberHasError","streetNameHasError","streetTypeHasError","suburbHasError","isPostalAddress","ShowManualAddressForm","ShowManualPostalAddressForm","CancelButtonClicked","ChangeFieldValue","ValidateManualAddressField","ManualAddressStateFactory","validateSingleField","getManualAddressMoniker","getManualAddress","suburbText","streeName","SuburbStatePostcodeAutosuggest","SuburbStatePostcodeAutocomplete","StreetTypeAutosuggest","StreetTypeAutocomplete","ManualAddressEntryFormStyled","ManualAddressEntryTitleStyled","ManualAddressEntry","ManualAddressEntryComponent","validateField","disableSaveButton","isSaveButtonToBeDisabled","changeUnitNumber","changeStreetNumber","changeStreetName","changeStreetType","changeSuburb","NameDateOfBirthChangedNotice","NameDateOfBirthChangedNoticeComponent","ContactDetailsEditMobiWrapper","navigateOnUpdateSuccess","navigateOnUnverified","ContactDetailsEditSetup","_this$props2","ContactDetailsEditObserver","ContactDetailsEditComponent","changeAddressResidential","changeAddressPostal","changeAddressPostalSame","changeNameDateOfBirthChanged","changeInputField","blurInputField","fieldValidationSucceeded","nameDateOfBirthChangedMessage","nameDateOfBirthChangedLabel","ReadonlyAddress","EditableAddress","CloseAccountContainerStyled","FieldSetStyled","closeAccountButtonText","CloseAccountView","onCloseAccountSubmit","confirmEnabled","onPopupClose","checkboxStates","remainingFunds","marketingMaterial","loggedOut","onFormSubmit","onCheckboxChange","_getContactDetailsFie","ContentBodyStyled","GeneralSettingStyled","BiometricsPageSubHeaderStyled","BiometricsPage","_useBiometricsStatus","isBiometricsToggleOn","BiometricsToggleWrapper","AccountListWrapperStyled","AccountListStyled","AccountListItemStyled","AccountLinkStyled","AccountButtonStyled","BonusBalanceStyled","BonusItemStyled","BonusBalanceTitleStyled","BonusBalanceValueStyled","AccountNumberBadgeStyled","_ref$isMaxCount","AccountSubHeading","DateContainer","ActivityStatementContainer","ActivityStatementText","ActivityStatementContactDetailsLink","ActivityEmailList","createActivityStatement","_createActivityStatement","ContactDetailsLink","_ref$children","NoEmailAddress","AccountHoldersTypeKey","AccountHoldersKey","AccountHolders","_submit$error","_submit$error2","selectedEmailAddresses","setSelectedEmailAddresses","setYear","accountHoldersQuery","validMonths","betAccountDetails","accountCreationDate","AccountCreationDate","years","submit","trackSuccess","trackFailure","CannotFetchData","availableEmailAddresses","_accountHolders$prima","_accountHolders$secon","emails","getEmailAddresses","defaultChecked","onUpdateSelectedEmailAddresses","_month$current$value","_month$current","currentMonth","canSubmit","isDateValid","trackSubmitted","invalidateAccountDetailsDebounced","bonusCash","ListWrapper","SubHeading","Item","BetOffersInternal","loadFailed","setLoadFailed","has_bonus_offer","BetOffers","BetOfferPage","Logout","BoldedInputBoxStyled","FieldHeaderStyled","ReadOnlyFieldStyled","PaddingStyled","CreditCardBlockStyled","CONFIRM_BET_LIMIT_URL","OPT_OUT_BET_LIMIT_URL","scrollToInfo","PrecommitmentBetLimit","_precommitmentDetails3","_precommitmentDetails4","_precommitmentDetails5","_precommitmentDetails6","hasDataFetchFailed","isEditPopupShowing","setIsEditPopupShowing","isRemovalPopupShowing","setIsRemovalPopupShowing","setPrecommitmentDetails","hasBetLimitBeenSuccessfullyChanged","setHasBetLimitBeenSuccessfullyChanged","isBetLimitPendingRemoval","_precommitmentDetails","_precommitmentDetails2","ProposedBetLimit","ActiveDate","Amount","canRemoveBetLimit","BetLimit","EditPopup","existingBetLimit","maxBetLimit","BetLimitRange","Max","minBetLimit","Min","coolingOffDate","CoolingOffDate","coolingOffPeriodDays","CoolingOffPeriodDays","hidePopup","RemovalPopup","newBetLimit","setNewBetLimit","hasAgreed","setHasAgreed","newBetLimitRef","editNewBetLimit","attemptedNewValue","trunc","mutation","BLOCK_CREDIT_CARD_URL","PrecommitmentCreditCardBlock","isPopupShowing","setIsPopupShowing","CardBlockPopup","BlockCreditCardDeposits","ProposedCreditCardReleaseDate","willUnblock","PrecommitmentInfo","coolingOffPeriod","PrecommitmentForm","PrecommitmentPage","DetailsWrapper","DetailsTextWrapper","justPostedAccountToTakeABreak","HeaderImageStyled","LinkListStyled","setUserHasAgreedToBreakTerms","takeABreakImage","isPostingAccountToTakeABreakBusy","onPostAccountToTakeABreakHandler","userSelectedBreakDuration","setUserSelectedBreakDuration","TakeABreakSelections","daysToBreak","_getTakeABreakDetails","_getTakeABreakDetails2","_getTakeABreakDetails3","userHasAgreedToBreakTerms","getTakeABreakDetails","setTakeABreakDetails","variables","inError","takeABreakIsActive","takeABreakIsNotActive","TakeABreakError","TakeABreakActive","TakeABreakForm","breakDuration","TakeABreakInfo","TakeABreakPage","VerificationBanner","isUnverified","isSuppressedRoute","showBanner","VerificationPage","wrapperId","hasBeenDisabled","notificationPopup","attachCloseHandlers","thisClass","off","$","hasClass","common","removeAttr","getPositionTimeOut","geoCodeWatchId","loadingOverlay","currentLocationRequestInProgress","newPosition","introNotification","canCentreScreen","geocoder","usersGeoLocation","currentGeoLocation","infowindow","iconShadow","currentLocationMarker","markerIconSize","markerAnchor","markerOrigin","canUpdateLocation","followingGPS","hasGoogleMapsBeenFetched","googleTabmarkers","googleMarkerIcons","sl1CategoryCode","sl2CategoryCode","sl3CategoryCode","slColorDict","sl1Purple","GOOGLE_MAPS_API_KEY","_initPage","TABLocatorWebInit","initLocator","monitorChangeLocationRequest","boxclick","addressTextBox","changeLocationToCurrentLocation","goButton","clearLocationWatch","maps","Geocoder","geocode","partialmatch","processGeocodeResult","keydown","keyCode","handleResize","addHandlers","geolocation","getCurrentPosition","geoLocation","updateLocationOnMap","LatLng","coords","watchPosition","handlePositionChange","monitorCurrentLocation","setMapHeight","_map","Size","Point","textBox","waterMarkClass","addClass","removeClass","setCurrentLocation","toRad","getMarkerImage","getCssClassForCategory","centreScreenOnMap","InfoWindow","addListener","MarkerImage","pinShadow","myOptions","panControl","zoom","minZoom","maxZoom","mapTypeControl","mapTypeControlOptions","MapTypeControlStyle","DROPDOWN_MENU","streetViewControl","navigationControl","mapTypeId","MapTypeId","ROADMAP","zoomControl","featureType","elementType","stylers","mapCanvas","addListenerOnce","Marker","dotIcon","anchor","XMLHttpRequest","onreadystatechange","readyState","send","downloadUrl","parseXmlFlieForLocations","latlng","setCenter","resizeGoogleMap","maxAllowedHeight","unbind","handleSuccessfulLocationFind","handleGetCurrentPositionError","clearWatch","pos","CMN","lat","lng","doc","markers","DOMParser","parseFromString","point","createMarker","showMarkerForCategory","iconColor","contentString","marker","mycategory","myname","setContent","geometry","dontGoToMap","anchorOffset","trigger","setVisible","getVisible","TABLocatorVM","animateInUp","LoginContainerStyled","fieldset","LoginFieldOptionsStyled","postDeliverAccountNumber","_res$query","_res$query2","AccountNumberRecovery","handleSignUp","handleReturnToLogin","generateDays","generateMonths","generateValidYears","currentStep","setCurrentStep","emailOrMobile","setEmailOrMobile","_React$useState15","_React$useState16","setFirstName","_React$useState17","_React$useState18","setLastName","_React$useState19","_React$useState20","dobDay","setDobDay","_React$useState21","_React$useState22","dobMonth","setDobMonth","_React$useState23","_React$useState24","dobYear","setDobYear","_React$useState25","_React$useState26","deliveryMethods","setDeliveryMethods","_React$useState27","_React$useState28","selectedDeliveryMethod","setSelectedDeliveryMethod","onInputChange","onSelectChange","handleNextClick","_res","createQuery","_err$response","_err$response2","getDeliveryMethod","getDeliveryMethodName","shouldDisplayBackButton","isFinalStep","AccountNumberFieldsetStyled","DateOfBirthStyled","DeliveryMethods","onDeliveryMethodChange","DeliveryMethodSent","RecoverFooter","isSignUpVisible","LoginMain","_AppVersion$split$","setIsPasswordVisible","setIsBiometricsToggleOn","shouldShowKeepMeLoggedIn","shouldDisableSubmit","handleEnterKey","LoginMainFooterStyled","Step1AccountNumberInput","handleRecoverAccountNumber","Step2SendVerification","Step3VerifyCode","validationCode","onValidationCodeChange","isValidationCode","_ref$isValidationCode","sendType","methodName","DeliveryMethodSentNoticeStyled","redactedValue","isSingle","DeliveryMethodsStyled","isChecked","postGenerateValidationCode","postValidateCode","_err$response$json","_err$response3","errorRes","isErrorResponse","codeIncorrect","codeExpired","postChangePassword","_err$response$json2","_err$response4","isPasswordChangeSuccessResponse","Step4SetNewPassword","currentValidationCodeRef","plainPasswordRef","isPasswordChangeSuccessful","setIsPasswordChangeSuccessful","setIsValid","passwordSubscription","handleChangePasswordClick","_ref3$key","_ref3$expires","plaintextPassword","WrappedComponentStyled","PasswordReset","initialAccountNumber","setWorkflowState","_usePasswordReset","setValidationCode","_currentValidationCod","_res2","expiries","providedCodes","nextClick","backClick","usePasswordReset","shouldDisableNext","RecoverFooterStyled","Login","LoginOverlay","loginContainerRef","_useLoginState","isAttemptingLogin","setIsAttemptingLogin","disposeBiometricsPrompt","SettingItem","_ref$desciption","desciption","rightComponent","bottomComponent","settingNameKebabCase","SettingItemWithCheckbox","prevIsEnabled","updateUserSettingsOnDataLayer","readOnly","PayoutNotification","setIsEnabled","checkAccountToken","_onToggleCreditAlerts","onToggleCreditAlerts","_checkAccountToken","pushAuthStatus","_updateUserSettingsOnDataLayer","appState","getPayoutNotificationEnabled","_getPayoutNotificationEnabled","useInitAnalyticsDataLayer","_updateAnalyticsDataLayer","updateAnalyticsDataLayer","DockedPlayer","setFullscreen","isOnSkyRacePageRef","isDockedPlayerOpen","currentChannel","setHeight","SecondaryHeader","_ref$isExpanded","BettingInfo","fixedOddsMarkets","MarketName","MarketCode","MysteryQuickPicksRaceBettingPageWrapper","isPanelExpanded","setPanelExpanded","HeaderComponent","defaultPath","RatingTacho","blueArcPath","orangeArcPath","arcPath","clampedRating","θ","endX","cos","endY","sin","MarketPropositionStyled","MarketPropositionIdSectionStyled","MarketPropositionInfoSectionStyled","MarketPropositionInfoStyled","MarketPropositionInfoSubSectionStyled","MarketPropositionHeaderStyled","isMatchedStarter","MarketPropositionActionSectionStyled","MarketPropositionSratchedStyled","MarketProposition","matchedStarter","IsAvailable","Market","setPanelExpandedState","marketDisplayName","isMatchedWithStarters","MarketContainerStyled","curState","MarketListStyled","betWithSelection","markets","_selection","selectedMarket","_raceData$MeetingInfo","_raceData$MeetingInfo2","_raceData$MeetingInfo3","_raceData$MeetingInfo4","_raceData$MeetingInfo5","matchedAcceptor","createBetSelection","clearFobMarketSelection","betWithStartingPrice","_raceData$MeetingInfo6","_raceData$MeetingInfo7","_raceData$MeetingInfo8","_raceData$MeetingInfo9","_raceData$MeetingInfo10","createStartingPriceBetSelection","_useFixedOddsMarkets","IsSpAvailable","isFixedOddsAvailable","isToteDisabled","useFixedOddsMarkets","sortMarkets","MoreBettingOptions","accum","getJurisdictionDescription","PoolTotalsItem","xlinkHref","PoolTotals","SpecialsInfo","unwrapObservable","allBindings","newVisibility","toggleDomNodeCssClass","BaseBetType","WinPlaceViewModel","_BaseBetType","isRegistered","FirstFourViewModel","TrifectaViewModel","registerComponentWithParams","componentName","resolver","privateContainer","toConstantValue","resolveWithParams","WinPlaceButtonsContainerStyled","WinPlaceSpacerSpanStyled","WinPlaceScratchedStyled","ToteSwapOptionBaseStyled","WinPlaceToteStyled","WinPlaceToteSwapOptionsStyled","InsuranceButton","_data$FixedOddsMarket","isFixedOddsScratched","isFixedOddsSuspended","SCR","SUS","InsuranceButtonComponent","_useAppSelector","StartingPriceButton","selectedRaceKey","matchedRace","StartingButtonComponent","useSmartBetslipRunner","fobWinPlaceSelectionButtonRef","toteWinPlaceSelectionButtonRef","thisToteId","getRaceStarter","runnerPropSeq","setRunnerPropSeq","runnerToteId","setRunnerToteId","handleSmartBetslipFobSelection","shouldToteDeselectionOverride","quickBetSelection","shouldAutoAdd","animationElement","handleFobAddToBetSlip","handleSmartBetslipToteSelection","shouldFobDeselectionOverride","isSameToteSelection","handleToteAddToBetSlip","_raceStarter$FixedOdd","hasRunnerFob","hasRunner","isRunnerInBetSlipFob","isRunnerInBetSlipTote","shouldUseSmartBetslip","shouldHighlightRunnerFobSelection","shouldHighlightRunnerToteSelection","WinPlaceButtons","makeFobSelection","shouldDisplayFixedScratched","shouldDisplayFixedSuspended","isFixedSuspended","isFixedFavourite","hasKnockoutSelection","isFixedSelected","fixedPriceWin","fixedPricePlace","shouldDisplayTote","isToteFavourite","isToteScratched","isToteSelected","totePriceWin","totePricePlace","_useSmartBetslipRunne","isFixedButtonSelected","isToteButtonSelected","SameRaceMultiButtonsContainerStyled","SameRaceMultiScratchedStyled","buttonTitles","SameRaceMultiButtons","makeFobLegSelection","srmSelectedLegs","SameRaceMultiErrorStyled","_prices$index","ButtonsSelection","ToteAndFob","SelectionViewModel","ReactElement","displayScratchedFixedOdds","displaySuspendedFixedOdds","displayFixedOdds","displayTote","fobSelected","toteSelected","setupWinAndPlace","setupSameRaceMulti","_this2$fixedPricePlac","_this2$totePricePlace","_this2$fobSelected","_this2$toteSelected","_this2$displayFixedOd","_this2$displayTote","_this2$displayScratch","_this2$displaySuspend","buttonsSelection","_this3$displayScratch","_this3$displaySuspend","selectionMade","_this$displayScratche","_this$displaySuspende","makeLegSelection","publishSelection","CheckedValue","CheckBoxSelectionContext","CheckBoxSelection","_checked","_lastChecked","_subscriptions","_modifierStateWatcher","_lastModifierState","MAX_COUNT","betModifierState","NumberToPosition","k","checkBoxChanged","transferAllwaysSelection","setValue","rovingBankerSelectedAndMaxReached","rovingBankerSelectedAndNotAtMax","withSelected","regularCount","indices","_range$map","_range$map2","_toArray","rest","CheckboxSelectionViewModel","rovingClass","boxedClass","radioClass","maxAtIndexZeroClass","ScratchedViewModel","ScratchedDeductionsViewModel","shouldDisplayDeductions","hasDeductions","TrifectaTopPanelViewModel","MySelectionsViewModel","WinPlaceSelectionsViewModel","winPlaceSelectionResultProcessor","_strings$","strings","appendStarterName","fob","ToteWinPlaceSelectionsViewModel","NoveltySelectionsViewModel","raw","selectionStringRaw","FirstFourTopPanelViewModel","ExactaTopPanelViewModel","QuinellaTopPanelViewModel","ExactaViewModel","QuinellaViewModel","VerticalArrowViewModel","arrowCss","ExpandPanelViewModel","panelElement","templateNodes","headerContent","panelContent","panelContainerCssClasses","panelCssClasses","panelName","shouldScrollTo","initialPanelState","nodeName","childNodes","containerClass","panelClass","loc","publishPanelStateChanged","ResultsColumnHeaderViewModel","shouldShowSp","_params$raceFinishers","AllUpPoolSelectionViewModel","newSelectedPool","TachoViewModel","BettingClosedViewModel","onScroll","elemHeight","bodyRect","elemPosY","SameRaceMultiViewModel","registration","registerComponent","useLegacyRaceCardIntegration","componentModelRef","raceToRaceNavigation$Ref","rqInvalidationSubscription","inactiveRacePageQueryPredicate","incomingData","newModel","isKoComponentBinded","isOnlyRaceNumberChange","msgBus","oldModel","RaceCardTicket","RaceTicketsAccordion","viewAllLink","totalTicketsCount","ticketCount","totalTicketCount","viewAllBetsLinkText","racePendingTicketsCacheQueryKey","racesWithBetsPlacedInThisSession","AccountTicketsForRace","_data$tickets","isRaceTicketsFeatureActive","shouldEnableRaceTickets","useCachedRacingPendingTicketsCount","shouldQueryForTickets","hasBetForRaceKey","getPendingTicketsForRaceFromApi","addBetForRaceKey","clearCachedRacingPendingTicketsCount","createBetType","lowerCasePoolName","isPoolForBetType","isPoolForRaceNumber","trackBetTypeChange","BetTypeSelector","timerRef","createBetTypeClickHandler","BetTypeSelectorButton","moreBettingOptionsEl","domObserver","percentageDiff","RaceCardMatched","_ref$shouldForceLoadi","shouldForceLoading","SkeletonLoaderContainerStyled","DockedSkyVideoPlayer","RaceInfoSlim","_currentRace$FixedOdd","isCurrentRaceScrolledOutOfView","RaceFilter","isRaceListViewOpen","filterBarElRef","makeOnFilterToggle","filterName","currentFilters","copiedCurrentFilters","trackFilterUpdate","setActiveClass","useIsBlackbookInRace","blackbookRunningSet","filteredEntriesSet","_entry$RacingTodayDet2","_entry$RacingTodayDet3","transformToRunningSet","getLatestRace","mapCodeToIcon","createUniqueSkyRaceId","SharedRaceSelection","isListViewDisplay","codeIconSize","wrapperClassName","raceNumberText","isInBlackbook","IconStatusBadge","ShowMoreSkyRacesButton","_useNextSkyRaces","RaceScrollView","setCurrentRace","_useNextToJumpReset","horizontalScrollerRef","setIsScrolling","nextToJumpEl","setNextToJumpEl","nextToJumpPosition","setNextToJumpPosition","currectRaceId","currentRaceIndex","nextToJumpRace","nextToJumpIndex","nextToJumpRaceId","shouldRenderResetButtons","onResetButtonClick","_nextToJumpEl$current","block","containerBoundingRect","boundingClientRect","useNextToJumpReset","RaceSelectionButton","isNextToJump","scrollerRef","handleIntersectionObserver","scrollButtonIntoView","buttonCenter","containerCenter","NoRacesMessage","RaceListView","shouldRenderListView","RaceListViewRender","raceListViewRef","makeOnRaceClickHandler","raceFilters","RaceFilterSkeletonLoader","RaceScrollViewSkeletonLoader","RaceInfoSkeletonLoader","filteredSkyRaces","filterRaces","filteredAndSortedRaces","RaceCardSkyWithData","isSwipeActive","swipeableElRef","resetTimestampPrevRef","isCurrentRaceAvailableInData","currentRaceIdx","isForwardDisabled","isBackDisabled","_useSwipeable","onSwipeBack","onSwipeForward","capturedArgsRef","isSwiping","setIsSwiping","isChangingRace","setIsChangingRace","isAnimating","hasThresholdExceeded","elWidth","_hasThresholdExceeded","resetIsAnimating","finishXSign","useSwipeable","swipeClassNames","isLocalRace","IsoCountryCode","transitionDelay","GoodThingsSliceLazy","GoodThingsSlice","EnhancedBetslipSetting","isSettingEnabled","isHapticsSupported","HapticFeedbackSetting","isHapticFeedbackEnabled","selectPresetDenominations","EditPresetTrayContent","hideTray","presetDenominations","initialInputState","inputTypeValues","setInputTypeValues","handleInputChange","prevValues","updatedValues","isSaveActive","_presetDenominations$","KeyPadStyled","gridColumnStart","gridColumnEnd","gridRowStart","gridRowEnd","KeypadDenominationsSetting","NewSportsSetting","NewBetSlipSetting","isEnhancedBetslipFeatureToggleActive","isHapticFeedbackFeatureActive","shouldRenderHapticsSetting","SettingsContainer","useActiveTab","_matchPath","homePageMatch","isExact","getActiveTabName","TabNavigation","PopupComponent","Popup","HostContextMobile","hasFeature","featureName","featureValue","createHostApi","ToggleFieldStyled","ShareBetContext","MultiLegClosed","MultiLegCheckbox","isShareDisplay","ToggleWithLabels","isLeftValueActive","leftValue","rightValue","MultiLegTypeToggle","isMultiItem","displayMode","marketNamePrefix","betTypeOverride","shouldDisplayCountdown","isFixedDisplay","getShouldFixedDisplay","poolTypeName","W","P","EW","Q","shouldShowPriceInSelectionInfo","isSingleRaceNoveltyBetType","noveltyPlacedMap","createNoveltyMultipleSelectionMap","multipleRaceSelectionMap","multipleSelectionMap","_selection$details$fi","currentPoolType","createMultipleRaceMultipleSelectionMap","_ref$displayMode","InlineAlert","_ref$hasIcon","hasIcon","_ref$isCenterAlign","isCenterAlign","alertTypeConfig","bgColor","BetSlipContext","InlineError","shouldHideLabel","_ref$display","investmentElementRef","activeValue","_useContext","registeredInvestmentInputsRef","useRegisterInvestmentInput","hasCapturedValuedRef","useCaptureValueOnActiveInput","_investmentElementRef","valueToRender","isDecimalActive","activeValueNumber","isInvalidInvestmentError","inputClassNames","getInputClassNames","scrollMargin","InvestmentsWrapperStyled","isStacked","isSuperPickEligible","calculateEstReturnForSinglesReceipt","betsSlipItem","calculateEstReturnSingleItemReceipt","totalInvestment","RadioButton","supportingText","PromoSelection","hasActiveSelection","setSelectionHeight","isPromoSelectorExpanded","renderPosition","descriptionSlots","selectionHeight","slot","slotNum","PromoSelector","SuperPicks","isItemInputActive","isSportsSelection","shouldHideWinPlacePrice","allUpCombinations","ComboStyled","ComboSummaryStyled","BetCardTitle","InvestmentSummary","hasStandardMultiInvestment","hasComboMultisInvestment","multiPotentialPayout","totalProjPay","ComboSummaryLine","comboKey","comboCount","hasMultipleInGroup","hasSelectedInGroup","MultiItems","hasValidMultiInvestment","groupedItems","currentGrouping","groupByEventOrRace","isBelowMinLegCount","isExceedingMaxLegCount","isSportsMulti","maxLegCount","MultiPriceKey","MultiContentStyled","groupId","ShareMyBetTray","isBetPlaced","shareMyBetRef","shouldShowStakeInfo","setShouldShowStakeInfo","handleShareClick","shareMyBetEl","handleShareBet","tabtouchHandImage","img","article","ShareMyBet","isShareMyBetTrayOpen","setIsShareMyBetTrayOpen","canShareBet","AllUpFormula","ItemMessage","ReceiptDetail","isBettingClosed","removeItemDispatcher","removeItemWithAnimationHandler","SingleItem","filterItemsForWorkflow","Singles","ReceiptNumber","ComboInvestment","comboFieldType","ComboMultis","hasEnoughMultiItems","hasAllowableMultiCountForCombos","shouldRenderMultiCombosInputs","keypadClickHandler","redux","listenerApi","useSyncActiveValueWithSelection","ontouchstart","handleKeyDown","usePhysicalKeyboardEntry","switchInputClickHandler","currentIndex","newIndex","registeredLength","safeIndex","handleSwitchInputClick","denominationKeys","numericKeys","calculateTotalStake","ClearBetSlipButton","isModalOpen","setIsModalOpen","textWrap","ButtonsSection","shouldShowClear","handleDepositClick","hostRoutes","handleReuseSelectionsClick","handleDoneClick","BetsPlacedSuccessToast","SummarySection","_React$useContext","_ref$isReceiptView","isReceiptView","_items","calculateTotalStakeReceipt","calculateReceiptReturn","shouldDisplayKeypad","toggleKeypad","keypadExpand","_useExpandToggle2","toggleSummary","summaryExpand","EmptyState","RacingButtonLink","TabsWrapperStyled","RefSharingContext","TabButton","_ref2$shouldFillSpace","shouldFillSpace","TabButtonWrapperStyled","TabButtons","singlesRef","multiRef","activeMultiItems","singleItemsForWorkflow","shouldRenderSinglesTab","handleTabClick","elRef","_containerRef$current","scrollToMulti","scrollToSingles","useListenForDesiredBettingSection","getRatioValue","ratioMap","BetSlip","scrollableContinerRef","_useTabSectionObserve","containerElRef","singlesElRef","multiElRef","singlesRatio","multiRatio","useTabSectionObserver","BetslipContainerStyled","badgeColor","HeaderPanel","isLargeWidth","currentworkflowStatus","betslipCount","HeaderPanelWrapperStyled","LowBalanceStatus","setShouldDisplay","TakeABreakStatus","takeABreakStatus","_takeABreakStatus$inP","InducementSync","buildBetSlipRequest","_postAllBetsToServer","queryType","_response2","getPlanSequence","base64Image","_yield$createShareBet","_link","createShareBetAndPostWithBetSlip","_createShareBetAndPostWithBetSlip","isBrowserShareSupported","showLoginHelper","BetSlipNew","BetSlipComponent","responseItem","useRefreshBalanceOnBetsPlaced","useAccountBalanceSync","listeners","useBetSlipAnalytics","BetSlipParentWrapperStyled","DepositLimitsContainerStyled","ViewTitleStyled","ViewValueStyled","EditButtonContainer","OrderedListStyled","OrderedListItemStyled","hasUnderline","ListItemSubtitleStyled","AmountInputStyled","ButtonBlockThemed","AccountHolderTabList","AccountHolderTab","TabLabel","NoLimit","NoAmount","DepositLimitsViewAccountHolder","preCommitmentDetails","MaxDepositAmount","MaxDepositFrequency","ProposedMaxDepositAmount","ProposedMaxDepositFrequency","ProposedOptOutDate","ProposedMaxDepositDate","isOptingOut","frequencyDisplay","amountDisplay","isLimitProposed","displayCurrentFrequency","displayCurrentAmount","HeaderMessage","OrderedList","OrderListItem","ViewTitle","ViewValue","_props$preCommitmentD","DepositLimitThemes","RadioDefaultTheme","PopupDefaultTheme","signUpTheme","desktopSignUpTheme","getDepositLimitTheme","desktopSignup","DepositLimitsView","_this$props$accountHo","selectedAccountHolderNumber","DepositLimitsContainer","DepositLimitsViewAccountHolderTabs","defaultTabIndex","defaultIndex","MIN_DEPOSIT_AMOUNT","MAX_DEPOSIT_AMOUNT","handleFormSubmit","isSubmitEnabled","saveDepositLimits","handleCancelClick","_this$state$precommit","MaxBetAmount","ProposedMaxBetAmount","ProposedMaxBetDate","OptInMarketingIndicator","UserCreditCardBlockedIndicator","ProposedUserCreditCardBlockedDate","BlockPayPalIndicator","ProposedPayPalReleaseDate","_this$state$maxDeposi","newMaxBetAmount","newOptInIndicator","newUserCreditCardBlockerIndicator","newBlockPayPaylIndicator","maxDeposit","OptInIndicator","MaxWeeklyDepositLimit","handleFrequencyChange","allowAmountEntry","isCoolingOffPeriodRequired","canProceedToSaveDepositLimits","handleAmountChange","amountEntry","validateAmount","newAmount","invalidMessage","amountValidationError","coolingOffPeriodRequired","evaluateCoolingOffPeriodRequired","oldFrequency","oldAmount","newFrequency","divisors","Daily","Weekly","Fortnightly","Monthly","handleConfirmCheckboxChange","confirmCheckboxState","closePopup","isSignup","_props$accountHolder","_this$state2","FieldSet","ListItemSubtitle","AmountInput","calculateCoolingOffPeriodEndDate","_state$maxDeposit","_props$mode","_props$saveSuccess","ConnectDepositLimits","DepositLimitsPage","finalAccountHolderNumber","finalSaveSuccess","DepositLimitsEditPage","depositLimitId","AppWithRoutes","handleHashChange","isColdStart","PopupLegacy","PersistGate","HashRouter","hashType","deferUpdates","AnalyticsDataLayer","analyticsDataLayer","dsn","beforeBreadcrumb","breadcrumb","hint","data_tid","attr","beforeSend","originalException","setContext","returnSubscriptions","initWebNativeComms","analyticsService","showFormSubscription","showFixedFlucsSubscription","showMarketMoversSubscription","showDoubleProvDivSubscription","showQuaddieProvDivSubScription","BettingV2CommandState$","getToteRaceEventTopic"],"sourceRoot":""}