This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,222 @@
// Metro module 8722 (f8723).
import SKUStore from "../../stores/game_store/SKUStore";
import { Endpoints } from "../../Constants";
import Logger from "../debug/Logger";
import Dispatcher from "../../Dispatcher";
import { HTTP } from "../../_bundle/sendRequest";
import { BillingError } from "../../errors/index";
import { isTestModeForApplication } from "../game_store/TestModeUtils";
import SentryUtils_native from "../../utils/SentryUtils.native";
function $mk115332($env) {
return () => {
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_REDEEM_START",
skuId: $env[0]
});
};
}
let c5686_6;
let env5686 = {};
export async function fetchVirtualCurrencyBalance() {
let body;
let c26275_0, c26275_1, c26275_2;
let c26275_3 = 0;
const r11 = env5686;
try {
let env29973;
c26275_1 = r11;
const r27 = env29973 = {
$parent: r11
};
c26275_0 = r27;
env29973[0] = void 0;
env29973[1] = void 0;
env29973[2] = void 0;
Dispatcher.wait(() => {
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_BALANCE_FETCH"
});
});
c26275_3 = 1;
env29973[0] = await HTTP.get({
url: Endpoints.VIRTUAL_CURRENCY_USER_BALANCE,
rejectWithError: false
});
env29973[1] = env29973[0].body.balance;
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_BALANCE_FETCH_SUCCESS",
balance: env29973[1]
});
body = env29973[0].body;
c26275_3 = 0;
} catch ($e) {
const r25 = $e;
let r8 = r25;
c26275_2 = r25;
if (c26275_3 !== 0) {
while (true) {
try {
const r79 = c26275_2;
c26275_3 = 0;
env29973[3] = r79;
env29973[2] = env29973[3] instanceof BillingError ? env29973[3] : new BillingError(env29973[3]);
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_BALANCE_FETCH_FAIL",
error: env29973[2]
});
} catch (r75) {
r8 = r75;
c26275_2 = r75;
if (c26275_3 === 0) {
break;
}
continue;
}
return void 0;
}
}
throw r8;
}
return body;
}
c5686_6 = new Logger("VirtualCurrencyActionCreators");
export async function redeemVirtualCurrencyForSKU(c26276_0) {
let r176;
let c26276_1, c26276_2, c26276_3;
let c26276_4 = 0;
const r13 = env5686;
L29: {
try {
let env29974;
c26276_2 = r13;
const r36 = env29974 = {
$parent: r13
};
c26276_1 = r36;
env29974[0] = void 0;
env29974[1] = void 0;
env29974[2] = void 0;
env29974[3] = void 0;
env29974[4] = void 0;
env29974[5] = void 0;
env29974[0] = c26276_0.skuId;
env29974[1] = c26276_0.loadId;
env29974[2] = c26276_0.onRedeemStart;
env29974[3] = c26276_0.onRedeemSucceed;
env29974[4] = c26276_0.onRedeemFail;
const shouldRefetchBalance = c26276_0.shouldRefetchBalance;
if (shouldRefetchBalance !== void 0) {
env29974[5] = shouldRefetchBalance;
env29974[6] = void 0;
env29974[7] = void 0;
env29974[8] = void 0;
env29974[9] = void 0;
env29974[10] = void 0;
env29974[11] = void 0;
env29974[12] = void 0;
env29974[13] = void 0;
} else {
env29974[5] = true;
env29974[6] = void 0;
env29974[7] = void 0;
env29974[8] = void 0;
env29974[9] = void 0;
env29974[10] = void 0;
env29974[11] = void 0;
env29974[12] = void 0;
env29974[13] = void 0;
}
await void 0;
Dispatcher.wait($mk115332(c26276_1));
const r71 = env29974[2];
if (r71 != null) {
r71();
}
c26276_4 = 1;
env29974[6] = SKUStore.get(env29974[0]);
env29974[7] = env29974[6]?.applicationId;
env29974[8] = env29974[7] != null && isTestModeForApplication(env29974[7]);
env29974[9] = {
checkout_session_id: env29974[1]
};
if (env29974[8]) {
env29974[9].test_mode = true;
}
const r115 = await HTTP.post({
url: Endpoints.VIRTUAL_CURRENCY_SKU_REDEEM(env29974[0]),
body: env29974[9],
rejectWithError: false
});
const r125 = "Could not read entitlements from Virtual Currency redemption response. Response: ";
env29974[10] = r115.body;
if (env29974[10] != null && Array.isArray(env29974[10])) {
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_REDEEM_SUCCESS",
skuId: env29974[0],
entitlements: env29974[10]
});
if (env29974[5]) {
(0, fetchVirtualCurrencyBalance)();
}
const r171 = env29974[3];
if (r171 != null) {
r171(env29974[10]);
}
r176 = env29974[10];
c26276_4 = 0;
break L29;
}
env29974[11] = r125;
env29974[12] = new Error(env29974[11], env29974[10]);
c5686_6.error(env29974[11], env29974[10]);
SentryUtils_native.captureException(env29974[12], {
tags: {
app_context: "virtual_currency"
}
});
throw env29974[12];
} catch ($e) {
const r34 = $e;
let r8 = r34;
c26276_3 = r34;
if (c26276_4 !== 0) {
while (true) {
try {
const r188 = c26276_3;
c26276_4 = 0;
env29974[14] = r188;
env29974[13] = env29974[14] instanceof BillingError ? env29974[14] : new BillingError(env29974[14]);
Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_REDEEM_FAIL",
skuId: env29974[0],
error: env29974[13]
});
if (env29974[5]) {
(0, fetchVirtualCurrencyBalance)();
}
const r222 = env29974[4];
if (r222 != null) {
r222(env29974[13]);
}
} catch (r184) {
r8 = r184;
c26276_3 = r184;
if (c26276_4 === 0) {
break;
}
continue;
}
return void 0;
}
}
throw r8;
}
}
return r176;
}
export function setBalancePillOverlay(a0) {
return Dispatcher.dispatch({
type: "VIRTUAL_CURRENCY_SET_BALANCE_PILL_OVERLAY",
balancePillOverlay: a0
});
}
@@ -0,0 +1,26 @@
// Metro module 9473 (f9474).
import { COLLECTIBLES_APPLICATION_ID } from "../../Constants";
import { EXTERNAL_PRODUCT_SKU_IDS } from "../collectibles/CollectiblesShopConstants";
import { ContentDismissActionType, DismissibleContentGroupName } from "../dismissible_content/DismissibleContentConstants";
import { PREMIUM_SUBSCRIPTION_APPLICATION } from "../premium/PremiumConstants";
import { UNSAFE_isDismissibleContentDismissed, UNSAFE_markDismissibleContentAsDismissed } from "../dismissible_content/DismissibleContentUnsafeUtils";
import { DismissibleContent } from "../../_bundle/Module1358";
export function get1PShopApplicationIdForSKU(a0) {
return a0 === EXTERNAL_PRODUCT_SKU_IDS.FRACTIONAL_PREMIUM ? PREMIUM_SUBSCRIPTION_APPLICATION : COLLECTIBLES_APPLICATION_ID;
}
export function dismissOrbsOnboardingExperience() {
if (!UNSAFE_isDismissibleContentDismissed(DismissibleContent.VIRTUAL_CURRENCY_ONBOARDING_ANNOUNCEMENT_MODAL)) {
UNSAFE_markDismissibleContentAsDismissed(DismissibleContent.VIRTUAL_CURRENCY_ONBOARDING_ANNOUNCEMENT_MODAL, {
dismissAction: ContentDismissActionType.INDIRECT_ACTION,
groupName: DismissibleContentGroupName.VIRTUAL_CURRENCY_ONBOARDING
});
UNSAFE_markDismissibleContentAsDismissed(DismissibleContent.VIRTUAL_CURRENCY_DISCOVERY_ONBOARDING_COACHMARK, {
dismissAction: ContentDismissActionType.INDIRECT_ACTION,
groupName: DismissibleContentGroupName.VIRTUAL_CURRENCY_ONBOARDING
});
UNSAFE_markDismissibleContentAsDismissed(DismissibleContent.VIRTUAL_CURRENCY_SHOP_ONBOARDING_COACHMARK, {
dismissAction: ContentDismissActionType.INDIRECT_ACTION,
groupName: DismissibleContentGroupName.VIRTUAL_CURRENCY_ONBOARDING
});
}
}
@@ -0,0 +1,126 @@
// Metro module 11903 (f11904).
import { useCallback, useContext, useMemo, createContext } from "react";
import UserStore from "../../../stores/UserStore";
import SKUStore from "../../../stores/game_store/SKUStore";
import { v4 } from "../../../_bundle/Module514";
import { useStateFromStores } from "../../../_bundle/Module589";
import PremiumUtils from "../../../utils/PremiumUtils";
import { get1PShopApplicationIdForSKU } from "../VirtualCurrencyUtils";
import { useSKUOrbPrice } from "../../storefront/StorefrontUtils";
import { useFetchCollectiblesProduct } from "../../collectibles/hooks/useFetchCollectiblesProduct";
import { getProductOrbPrice } from "../../collectibles/utils/CollectiblesProductUtils";
import { captureBillingMessage } from "../../../utils/BillingUtils";
import { useRedeemVirtualCurrency } from "../hooks/useRedeemVirtualCurrency";
let context;
const useOrbCheckoutModalContextProvider = function useOrbCheckoutModalContextProvider({ skuId, loadId, onCheckoutSuccess, onSignFailure, order }) {
let sKUOrbPrice, product, redeemVirtualCurrency;
sKUOrbPrice = void 0;
product = void 0;
redeemVirtualCurrency = void 0;
const stateFromStores = useStateFromStores([UserStore], () => PremiumUtils.canUseShopDiscounts(UserStore.getCurrentUser()));
const stateFromStores2 = useStateFromStores([SKUStore], () => SKUStore.get(skuId), [skuId]);
const skuProductLine = stateFromStores2 != null ? stateFromStores2.productLine : null;
let skuApplicationId = stateFromStores2?.applicationId;
if (skuApplicationId == null) {
skuApplicationId = get1PShopApplicationIdForSKU(skuId);
}
sKUOrbPrice = useSKUOrbPrice({
sku: stateFromStores2
});
product = useFetchCollectiblesProduct(skuId).product;
const memo = useMemo(() => {
if (sKUOrbPrice != null) {
return {
orbPriceAmount: sKUOrbPrice.amount
};
}
if (product != null) {
const productOrbPrice = getProductOrbPrice({
product,
hasShopDiscount: stateFromStores
});
return {
orbPriceAmount: productOrbPrice !== null ? productOrbPrice.amount : null
};
}
return null;
}, [sKUOrbPrice, product, stateFromStores]);
if (memo?.orbPriceAmount == null) {
captureBillingMessage("Orb price not found for product", {
tags: {
sku_id: skuId
}
});
}
const redeemVirtualCurrency2 = useRedeemVirtualCurrency({
skuId,
loadId,
order,
onSignFailure
});
redeemVirtualCurrency = redeemVirtualCurrency2.redeemVirtualCurrency;
const { isSubmitting, error } = redeemVirtualCurrency2;
return {
skuId,
skuProductLine,
skuApplicationId,
loadId,
orbProductContext: memo,
onRedeemVirtualCurrency: useCallback((c27205_0) => {
redeemVirtualCurrency(skuId, loadId, (a0) => {
if (onCheckoutSuccess != null) {
onCheckoutSuccess({
entitlements: a0,
skuId
});
}
c27205_0(a0);
});
}, [skuId, loadId, redeemVirtualCurrency, onCheckoutSuccess]),
isRedeeming: isSubmitting,
orbRedemptionError: error
};
};
context = createContext({
skuId: "123",
skuProductLine: null,
skuApplicationId: void 0,
loadId: v4(),
analyticsLocations: [],
analyticsSourceLocation: void 0,
isRedeeming: false,
orbRedemptionError: null,
orbProductContext: null,
onRedeemVirtualCurrency: () => {}
});
export { useOrbCheckoutModalContextProvider };
export function OrbCheckoutModalContextProvider(a0) {
const { skuId: skuId2, loadId: loadId2, analyticsSourceLocation } = a0;
let analyticsLocations = a0.analyticsLocations;
const { onCheckoutSuccess: onCheckoutSuccess2, children } = a0;
const orbCheckoutModalContextProvider = useOrbCheckoutModalContextProvider({
skuId: skuId2,
loadId: loadId2,
onCheckoutSuccess: onCheckoutSuccess2
});
const { orbProductContext, onRedeemVirtualCurrency: onRedeemVirtualCurrency2, isRedeeming, orbRedemptionError, skuProductLine, skuApplicationId } = orbCheckoutModalContextProvider;
const Provider = context.Provider;
if (analyticsLocations == null) {
analyticsLocations = [];
}
return <Provider value={{
skuId: skuId2,
skuProductLine,
skuApplicationId,
loadId: loadId2,
analyticsLocations,
analyticsSourceLocation,
orbProductContext,
onRedeemVirtualCurrency: onRedeemVirtualCurrency2,
isRedeeming,
orbRedemptionError
}}>{children}</Provider>;
}
export function useOrbCheckoutModalContext() {
return useContext(context);
}
@@ -0,0 +1,46 @@
// Metro module 5676 (f5677).
import { CurrencyCodes, MarketingURLs, PriceSetAssignmentPurchaseTypes } from "../../../Constants";
import { EXTERNAL_PRODUCT_SKU_IDS } from "../../collectibles/CollectiblesShopConstants";
import { ConstraintReasonCode } from "../../payments/OrderConstants";
import { intl, t } from "../../../intl/index.native";
import { OrderSigningFailedWithConstraintsError, OrderProcessingPendingError } from "../../payments/OrderActionCreators";
import { ErrorCodes } from "../../../errors/BillingError";
export function getOrbPriceFromPrices(a0, a1) {
const r13 = a1 && a0[PriceSetAssignmentPurchaseTypes.PREMIUM_TIER_2] != null ? a0[PriceSetAssignmentPurchaseTypes.PREMIUM_TIER_2] : a0[PriceSetAssignmentPurchaseTypes.DEFAULT];
const r4 = r13 == null;
let r16 = void 0;
if (!r4) {
const countryPrices = r13.countryPrices;
const r18 = countryPrices == null;
r16 = void 0;
if (!r18) {
const prices = countryPrices.prices;
r16 = prices == null ? void 0 : prices.slice(0, 2);
}
}
if (r16 == null) {
r16 = [];
}
let r24 = r16.find((item) => item.currency === CurrencyCodes.DISCORD_ORB);
if (r24 == null) {
r24 = null;
}
return r24;
}
export function getOrbCheckoutDisclaimerMessage(a0) {
const r26 = intl.format(t["5qdUrO"], {
buyButtonLabel: intl.string(t["zLch/S"]),
paidServiceTermURL: MarketingURLs.PAID_TERMS,
virtualGoodsURL: MarketingURLs.PAID_TERMS_VIRTUAL_GOODS
});
let r35 = intl.string(t["Sxed/G"]);
if (a0 === EXTERNAL_PRODUCT_SKU_IDS.ORB_PROFILE_BADGE) {
r35 = intl.string(t.APcKRo);
} else if (a0 === EXTERNAL_PRODUCT_SKU_IDS.FRACTIONAL_PREMIUM) {
r35 = intl.string(t.FhJ74j);
}
return [r26, " ", r35];
}
export function resolveOrbCheckoutErrorMessage(a0, a1) {
return a0 == null ? null : a0 instanceof OrderSigningFailedWithConstraintsError && a1 != null ? ConstraintReasonCode.INSUFFICIENT_ORB_BALANCE === a1 ? intl.string(t.keFvXM) : ConstraintReasonCode.SKU_ALREADY_OWNED === a1 ? intl.string(t.m371Mx) : ConstraintReasonCode.BUNDLE_PARTIALLY_OWNED === a1 ? intl.string(t.v9oC0p) : intl.string(t.fqJZ11) : a0 instanceof OrderProcessingPendingError ? intl.string(t["2BmwgV"]) : a0.code === ErrorCodes.VIRTUAL_CURRENCY_INSUFFICIENT_BALANCE ? intl.string(t.keFvXM) : a0.code === ErrorCodes.ALREADY_PURCHASED ? intl.string(t.m371Mx) : a0.code === ErrorCodes.BILLING_ORDER_NOT_SIGNABLE ? intl.string(t.ZHgEG7) : intl.string(t.fqJZ11);
}
@@ -0,0 +1,184 @@
// Metro module 11902 (f11903).
import * as Module19 from "react";
import { useCallback, useEffect, useMemo, useRef } from "react";
import { AnalyticEvents, CurrencyCodes } from "../../../../Constants";
import { InternalPaymentGateways } from "../../../../_bundle/Module505";
import { useOrbCheckoutModalContext, OrbCheckoutModalContextProvider } from "../OrbCheckoutModalContext";
import { useFetchCollectiblesProduct } from "../../../collectibles/hooks/useFetchCollectiblesProduct";
import { Stack } from "../../../../design/components/Stack/native/Stack.native";
import { OrbCheckoutErrorCard, OrbCheckoutOrderSummary, OrbCheckoutPaymentSourceDetails, OrbCheckoutLegalFinePrint, OrbCheckoutPurchaseButton } from "./OrbCheckoutModalComponents";
import { get1PShopApplicationIdForSKU } from "../../VirtualCurrencyUtils";
import { trackPaymentFlowStartedAnalyticsAndCTP } from "../../../experiments/trigger_points/PaymentFlowStartedTriggerPoint";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { useVirtualCurrencyBalance } from "../../hooks/useVirtualCurrencyBalance";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import { ModalScreen } from "../../../../design/components/Modal/native/ModalScreen.native";
import { ModalContent } from "../../../../design/components/Modal/native/ModalContent.native";
import { ModalFooter } from "../../../../design/components/Modal/native/ModalFooter.native";
import Module38 from "../../../../_bundle/Module38";
import { v4 } from "../../../../_bundle/Module514";
import { intl, t } from "../../../../intl/index.native";
import { getHeaderTextButton } from "../../../../design/components/Navigator/native/NavigatorHeader.native";
import * as _Modal_native from "../../../../design/components/Modal/native/Modal.native";
import { HermesBuiltin } from "../../../../_hermes/prelude";
let c8157_13, OrbCheckoutModalFooter, OrbCheckoutModalScreen;
const OrbCheckoutModalContent = function OrbCheckoutModalContent(props) {
const orbBalance = props.orbBalance;
const orbCheckoutModalContext = useOrbCheckoutModalContext();
const { skuId: skuId3, orbRedemptionError: orbRedemptionError2 } = orbCheckoutModalContext;
let product = useFetchCollectiblesProduct(skuId3).product;
const r29 = [orbRedemptionError2 != null && <OrbCheckoutErrorCard error={orbRedemptionError2.message} />, , ,];
if (product == null) {
product = null;
}
r29[1] = <OrbCheckoutOrderSummary product={product} />;
r29[2] = <OrbCheckoutPaymentSourceDetails orbBalance={orbBalance} />;
return <Stack>{r29}</Stack>;
};
OrbCheckoutModalFooter = function OrbCheckoutModalFooter(props) {
return <Stack>
<OrbCheckoutLegalFinePrint />
<OrbCheckoutPurchaseButton onPress={props.onPress} />
</Stack>;
};
c8157_13 = {
MAIN: "MAIN"
};
OrbCheckoutModalScreen = (props) => {
let callback, virtualCurrencyBalance, ref;
const startTime2 = props.startTime;
callback = void 0;
virtualCurrencyBalance = void 0;
ref = void 0;
const orbCheckoutModalContext = useOrbCheckoutModalContext();
const { onRedeemVirtualCurrency, orbRedemptionError } = orbCheckoutModalContext;
const startTime = startTime2;
const orbCheckoutModalContext2 = useOrbCheckoutModalContext();
const { skuId, loadId, analyticsLocations, orbProductContext } = orbCheckoutModalContext2;
const memo = useMemo(() => {
const r2 = {
load_id: loadId,
application_id: get1PShopApplicationIdForSKU(skuId),
location_stack: analyticsLocations,
sku_id: skuId,
currency: CurrencyCodes.DISCORD_ORB,
payment_gateway: InternalPaymentGateways.VIRTUAL_CURRENCY
};
let r21 = orbProductContext != null;
if (r21) {
let orbPriceAmount = orbProductContext.orbPriceAmount;
if (orbPriceAmount == null) {
orbPriceAmount = void 0;
}
let orbPriceAmount2 = orbProductContext.orbPriceAmount;
if (orbPriceAmount2 == null) {
orbPriceAmount2 = void 0;
}
r21 = {
price: orbPriceAmount,
regular_price: orbPriceAmount2
};
}
HermesBuiltin.copyDataProperties(r2, r21);
return r2;
}, [loadId, skuId, analyticsLocations, orbProductContext]);
callback = useCallback((a0, a1) => {
const duration_ms = Date.now() - startTime;
if (a0 === AnalyticEvents.PAYMENT_FLOW_STARTED) {
trackPaymentFlowStartedAnalyticsAndCTP({
...memo,
has_saved_payment_source: false,
continue_session_initial_step: null
});
} else if (a0 === AnalyticEvents.PAYMENT_FLOW_COMPLETED) {
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_COMPLETED, {
...memo,
duration_ms
});
} else if (a0 === AnalyticEvents.PAYMENT_FLOW_SUCCEEDED) {
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_SUCCEEDED, {
...memo,
duration_ms
});
} else if (a0 === AnalyticEvents.PAYMENT_FLOW_CANCELED) {
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_CANCELED, {
...memo,
duration_ms
});
} else {
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_FAILED, {
...memo,
duration_ms,
...a1 != null ? {
payment_error_code: a1.code,
error_message: a1.message
} : {}
});
}
}, [startTime, memo]);
virtualCurrencyBalance = useVirtualCurrencyBalance();
ref = useRef(virtualCurrencyBalance);
useEffect(() => {
callback(AnalyticEvents.PAYMENT_FLOW_STARTED);
}, [callback]);
useEffect(() => {
if (orbRedemptionError != null && ref.current !== null) {
callback(AnalyticEvents.PAYMENT_FLOW_FAILED, orbRedemptionError);
ref.current = null;
}
}, [orbRedemptionError, callback]);
let current3 = ref.current;
if (current3 == null) {
current3 = virtualCurrencyBalance;
}
return <ModalScreen>
<ModalContent>
<OrbCheckoutModalContent orbBalance={current3} />
</ModalContent>
<ModalFooter>
<OrbCheckoutModalFooter onPress={useCallback(() => {
callback(AnalyticEvents.PAYMENT_FLOW_COMPLETED);
ref.current = virtualCurrencyBalance;
onRedeemVirtualCurrency(() => {
callback(AnalyticEvents.PAYMENT_FLOW_SUCCEEDED);
ModalActionCreators.pop();
});
}, [callback, virtualCurrencyBalance, onRedeemVirtualCurrency])} />
</ModalFooter>
</ModalScreen>;
};
export default ({ skuId: skuId2, onCheckoutSuccess, analyticsLocations: analyticsLocations2 }) => {
Module38(skuId2 != null, "SKU ID is required");
const current = Module19.useRef(v4()).current;
const current2 = Module19.useRef(Date.now()).current;
Module19.useEffect(() => {
AnalyticsUtils.track(AnalyticEvents.OPEN_MODAL, {
type: "Orb Checkout Modal",
location_stack: analyticsLocations2,
sku_id: skuId2
});
}, [analyticsLocations2, skuId2]);
const callback2 = Module19.useCallback(() => {
const r8 = Date.now();
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_CANCELED, {
load_id: current,
application_id: get1PShopApplicationIdForSKU(skuId2),
location_stack: analyticsLocations2,
payment_gateway: InternalPaymentGateways.VIRTUAL_CURRENCY,
sku_id: skuId2,
currency: CurrencyCodes.DISCORD_ORB,
duration_ms: r8 - current2
});
ModalActionCreators.pop();
}, [skuId2, current, analyticsLocations2, current2]);
const screens = {};
screens[c8157_13.MAIN] = {
title: intl.string(t.q9EGps),
headerShown: true,
headerLeft: getHeaderTextButton(intl.string(t["ETE/oC"]), callback2),
render: () => <OrbCheckoutModalContextProvider skuId={skuId2} loadId={current} onCheckoutSuccess={onCheckoutSuccess} analyticsLocations={analyticsLocations2}>
<OrbCheckoutModalScreen startTime={current2} />
</OrbCheckoutModalContextProvider>
};
return <_Modal_native.Modal screens={screens} initialRouteName={c8157_13.MAIN} headerTitleAlign="center" />;
};
@@ -0,0 +1,127 @@
// Metro module 11904 (f11905).
import { useMemo } from "react";
import { ActivityIndicator, View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { Stack } from "../../../../design/components/Stack/native/Stack.native";
import { CircleErrorIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleErrorIcon";
import { Text } from "../../../../design/components/Text/native/Text";
import CollectiblesShopCheckoutDetails from "../../../collectibles/native/CollectiblesShopCheckoutDetails";
import { intl, t } from "../../../../intl/index.native";
import OrbCheckoutAmountTag from "../../native/OrbCheckoutAmountTag";
import { useOrbCheckoutModalContext } from "../OrbCheckoutModalContext";
import { getOrbCheckoutDisclaimerMessage } from "../OrbCheckoutUtils";
import useTheme from "../../../../hooks/useTheme";
import { useVirtualCurrencyBalance } from "../../hooks/useVirtualCurrencyBalance";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { isThemeDark } from "../../../../design/shared";
import { OrbsIcon } from "../../../../design/components/Icon/native/redesign/generated/OrbsIcon";
const useStyles = createStyles({
topRowWrapper: {
width: "100%",
marginBottom: 10
},
rowWrapper: {
width: "100%",
marginVertical: 10
},
rowDetailsContainer: {
borderRadius: Module712.radii.lg,
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE,
padding: Module712.space.PX_16
},
orbPaymentSourceDetails: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center"
},
sectionTitle: {
marginBottom: Module712.space.PX_8
},
spinner: {
paddingVertical: Module712.space.PX_16,
alignItems: "center"
},
disclaimer: {
opacity: 0.5
},
errorCard: {
borderRadius: Module712.radii.sm,
padding: Module712.space.PX_12,
backgroundColor: Module712.colors.BACKGROUND_FEEDBACK_CRITICAL
}
});
export function OrbCheckoutErrorCard(props) {
const error = props.error;
return <View style={useStyles().errorCard}>
<Stack direction="horizontal" spacing={8} align="flex-start">
<CircleErrorIcon size="sm" color="mobile-text-heading-primary" />
<Text variant="text-sm/medium" color="mobile-text-heading-primary">{error}</Text>
</Stack>
</View>;
}
export function OrbCheckoutOrderSummary(props) {
const product = props.product;
const styles = useStyles();
const r18 = product == null ? <View style={[styles.rowDetailsContainer, styles.spinner]}>
<ActivityIndicator size="small" />
</View> : <CollectiblesShopCheckoutDetails product={product} useOrbPrice />;
return <View style={styles.topRowWrapper}>
<Text variant="heading-sm/bold" color="mobile-text-heading-primary" style={styles.sectionTitle}>
{intl.string(t.hws7bC)}
</Text>
{r18}
</View>;
}
export function OrbCheckoutPaymentSourceDetails(props) {
const orbBalance = props.orbBalance;
const styles = useStyles();
return <View style={styles.rowWrapper}>
<Text variant="heading-sm/bold" color="mobile-text-heading-primary" style={styles.sectionTitle}>
{intl.string(t["zLch/S"])}
</Text>
<View style={[styles.rowDetailsContainer, styles.orbPaymentSourceDetails]}>
<Text variant="text-md/medium" color="mobile-text-heading-primary">
{intl.string(t.y0WGqP)}
</Text>
<OrbCheckoutAmountTag orbAmount={orbBalance} />
</View>
</View>;
}
export function OrbCheckoutLegalFinePrint() {
const styles = useStyles();
const skuId = useOrbCheckoutModalContext().skuId;
return <Text style={styles.disclaimer} variant="text-xxs/normal" color="interactive-text-active">
{useMemo(() => getOrbCheckoutDisclaimerMessage(skuId), [skuId])}
</Text>;
}
export function OrbCheckoutPurchaseButton(props) {
const onPress = props.onPress;
const theme = useTheme();
const orbCheckoutModalContext = useOrbCheckoutModalContext();
let isRedeeming = orbCheckoutModalContext.isRedeeming;
const orbProductContext = orbCheckoutModalContext.orbProductContext;
const virtualCurrencyBalance = useVirtualCurrencyBalance();
const orbPriceAmount = orbProductContext?.orbPriceAmount;
const props2 = {
variant: isThemeDark(theme) ? "primary-overlay" : "primary",
size: "lg",
text: intl.string(t["zLch/S"]),
icon: <OrbsIcon size="md" color={isThemeDark(theme) ? "control-overlay-primary-text-default" : "control-primary-text-default"} />,
iconPosition: "start",
loading: isRedeeming,
onPress,
disabled: null
};
if (!isRedeeming) {
isRedeeming = orbPriceAmount == null;
}
if (!isRedeeming) {
isRedeeming = virtualCurrencyBalance == null;
}
if (!isRedeeming) {
isRedeeming = virtualCurrencyBalance < orbPriceAmount;
}
props2.disabled = isRedeeming;
return <Button {...props2} />;
}
@@ -0,0 +1,15 @@
// Metro module 8724 (f8725).
import { createApexExperiment } from "../../experiments/apex/index";
const apexExperiment = createApexExperiment({
name: "2025-12-orb-redemption-thru-orders",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export default apexExperiment;
+9
View File
@@ -0,0 +1,9 @@
// Metro module 8719 (f8720).
import * as _useFetchVirtualCurrencyBalance from "./useFetchVirtualCurrencyBalance";
import * as _useRedeemVirtualCurrency from "./useRedeemVirtualCurrency";
for (const key in _useFetchVirtualCurrencyBalance) {
exports[key] = _useFetchVirtualCurrencyBalance[key];
}
for (const key2 in _useRedeemVirtualCurrency) {
exports[key2] = _useRedeemVirtualCurrency[key2];
}
@@ -0,0 +1,68 @@
// Metro module 9806 (f9807).
import { useState, useRef, useCallback, useEffect } from "react";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import usePrevious from "../../../../hooks/usePrevious";
export function useVirtualCurrencyBalanceAnimationData({ initialRenderedBalance, balance }) {
let state, setState, ref, ref2, setState2, state2, setState3, c17502_10, callback;
state = void 0;
setState = void 0;
ref = void 0;
ref2 = void 0;
setState2 = void 0;
state2 = void 0;
setState3 = void 0;
c17502_10 = void 0;
callback = void 0;
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
[state, setState] = useState(null);
ref = useRef(null);
ref2 = useRef(null);
let showInitialRenderedBalance;
[showInitialRenderedBalance, setState2] = useState(initialRenderedBalance != null);
[state2, setState3] = useState(initialRenderedBalance == null);
const previous = usePrevious(balance);
c17502_10 = previous;
const callback2 = useCallback(() => {}, []);
const callback3 = useCallback(() => {
ref.current = null;
setState(null);
}, []);
callback = useCallback((a0) => {
if (a0 !== 0) {
ref.current = a0 > 0 ? "earn" : "spend";
if (state === ref.current) {
const current = ref2.current;
if (current != null) {
current.play();
}
} else {
setState(ref.current);
}
}
}, [state]);
useEffect(() => {
if (initialRenderedBalance != null && balance !== null && !state2) {
let c26541_0 = setTimeout(() => {
if (!stateFromStores) {
callback(balance - initialRenderedBalance);
}
setState2(false);
setState3(true);
}, 1250);
return () => clearTimeout(c26541_0);
}
}, [initialRenderedBalance, balance, state2, stateFromStores, callback]);
useEffect(() => {
if (balance !== null && c17502_10 !== null && balance !== c17502_10 && state2 && !stateFromStores) {
callback(balance - c17502_10);
}
}, [balance, previous, state, state2, stateFromStores, callback]);
return {
onValueChange: callback2,
onValueReached: callback3,
showInitialRenderedBalance,
currentAnimationType: state,
lottieRef: ref2
};
}
@@ -0,0 +1,12 @@
// Metro module 12285 (f12286).
import { isMetaQuest } from "../../../device/MetaQuestUtils.android";
export function isVirtualCurrencyEnabled() {
return {
enabled: !isMetaQuest()
};
}
export function useVirtualCurrencyMobileEnabled() {
return {
enabled: !isMetaQuest()
};
}
@@ -0,0 +1,26 @@
// Metro module 8720 (f8721).
import { useEffect } from "react";
import VirtualCurrencyStore from "../stores/VirtualCurrencyStore";
import { useStateFromStoresObject } from "../../../_bundle/Module589";
import { fetchVirtualCurrencyBalance } from "../VirtualCurrencyActionCreators";
export function useFetchVirtualCurrencyBalance(a0) {
let balance, error;
const stateFromStoresObject = useStateFromStoresObject([VirtualCurrencyStore], () => ({
balance: VirtualCurrencyStore.balance,
isFetching: VirtualCurrencyStore.isFetchingBalance,
error: VirtualCurrencyStore.fetchBalanceError
}));
balance = stateFromStoresObject.balance;
const isFetching = stateFromStoresObject.isFetching;
error = stateFromStoresObject.error;
useEffect(() => {
if (!(a0?.disableFetch || balance !== null || error !== null || VirtualCurrencyStore.isFetchingBalance)) {
fetchVirtualCurrencyBalance();
}
}, [balance, error, a0?.disableFetch]);
return {
balance,
isFetching,
error
};
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,22 @@
// Metro module 11905 (f11906).
import VirtualCurrencyStore from "../stores/VirtualCurrencyStore";
import { useStateFromStores } from "../../../_bundle/Module589";
export function useVirtualCurrencyBalance() {
return useStateFromStores([VirtualCurrencyStore], () => VirtualCurrencyStore.balance);
}
export function useHasEnoughVirtualCurrency(c19261_0) {
return useStateFromStores([VirtualCurrencyStore], () => {
let r1 = c19261_0 != null;
if (r1) {
let balance = VirtualCurrencyStore.balance;
if (balance == null) {
balance = 0;
}
r1 = balance >= c19261_0;
}
return r1;
});
}
export function getVirtualCurrencyBalance() {
return VirtualCurrencyStore.getCurrentBalance();
}
@@ -0,0 +1,120 @@
// Metro module 9813 (f9814).
import { useCallback, useEffect, useRef, useState, useContext } from "react";
import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useSharedValue, useAnimatedStyle } from "../../reanimated/ReanimatedRexport";
import { AccessibilityPreferencesContext } from "../../../_bundle/Module3908";
import { withSpring } from "../../../design/animation/reanimated/spring/spring";
import { getDesiredAnimationConfigs, EXPECTED_ORB_LOTTIE_ANIMATION_DURATION_MS } from "../shared/AnimationUtils";
import { Text } from "../../../design/components/Text/native/Text";
const __initData = {
code: "function BalanceCounterTsx1(){const{runOnJS,setIsAnimating}=this.__closure;runOnJS(setIsAnimating)(false);}"
};
const __initData2 = {
code: "function BalanceCounterTsx2(){const{isAnimating,animatedValue,runOnJS,setDisplayValue,setMaxDigits}=this.__closure;if(isAnimating){const roundedValue=Math.round(animatedValue.get());runOnJS(setDisplayValue)(roundedValue);runOnJS(setMaxDigits)(roundedValue.toString().length);}return{};}"
};
export const BalanceCounter = (props) => {
let ref, sharedValue, ref2, enabled, setState, setState2, state, setState3, callback;
const { value, onValueChange, onValueReached, style } = props;
ref = void 0;
sharedValue = void 0;
ref2 = void 0;
enabled = void 0;
setState = void 0;
setState2 = void 0;
state = void 0;
setState3 = void 0;
callback = void 0;
const clearAnimationTimeout2 = function clearAnimationTimeout() {
if (ref2.current != null) {
clearTimeout(ref2.current);
ref2.current = null;
}
setState3(false);
};
ref = useRef(null);
sharedValue = useSharedValue(0);
ref2 = useRef(null);
enabled = useContext(AccessibilityPreferencesContext).reducedMotion.enabled;
let state2;
[state2, setState] = useState(0);
let state3;
[state3, setState2] = useState(1);
[state, setState3] = useState(false);
callback = useCallback((a0, a1, a2) => {
setState3(true);
const set = a0.set;
const r8 = {
duration: a2,
damping: 15,
stiffness: 150,
mass: 1
};
const l = function l() {
_ReanimatedRexport.runOnJS(setState3)(false);
};
l.__closure = {
runOnJS: _ReanimatedRexport.runOnJS,
setIsAnimating: setState3
};
l.__workletHash = 16153226572520;
l.__initData = __initData;
set.call(a0, withSpring(a1, r8, "respect-motion-settings", l));
}, []);
useEffect(() => {
L5: {
if (value !== null) {
if (ref.current !== null && !enabled) {
if (value !== ref.current) {
const r9 = value - ref.current;
onValueChange(r9);
ref.current = value;
const desiredAnimationConfigs = getDesiredAnimationConfigs(r9, EXPECTED_ORB_LOTTIE_ANIMATION_DURATION_MS);
const { duration, delay } = desiredAnimationConfigs;
if (ref2.current != null) {
clearTimeout(ref2.current);
ref2.current = null;
}
setState3(false);
ref2.current = setTimeout(() => {
callback(sharedValue, value, duration);
ref2.current = null;
}, delay);
return clearAnimationTimeout2;
}
setState(value);
break L5;
}
setState(value);
sharedValue.set(value);
ref.current = value;
return void 0;
}
}
}, [value, onValueChange, onValueReached, sharedValue, callback, enabled]);
const F = function F() {
if (state) {
const r11 = Math.round(sharedValue.get());
_ReanimatedRexport.runOnJS(setState)(r11);
_ReanimatedRexport.runOnJS(setState2)(r11.toString().length);
}
return {};
};
F.__closure = {
isAnimating: state,
animatedValue: sharedValue,
runOnJS: _ReanimatedRexport.runOnJS,
setDisplayValue: setState,
setMaxDigits: setState2
};
F.__workletHash = 4408542396979;
F.__initData = __initData2;
const animatedStyle = useAnimatedStyle(F);
return value !== null ? <ReanimatedRexport.View style={[animatedStyle, {
minWidth: 7 * state3
}]}>
<Text variant="text-sm/semibold" style={style} maxFontSizeMultiplier={2}>
{state2.toFixed(0)}
</Text>
</ReanimatedRexport.View> : null;
};
export default BalanceCounter;
@@ -0,0 +1,199 @@
// Metro module 9816 (f9817).
import { useRef, useCallback, useContext, useMemo, useEffect } from "react";
import { TouchableOpacity, View } from "react-native";
import { AnalyticEvents, Fonts, HelpdeskArticles } from "../../../Constants";
import { ContentDismissActionType } from "../../dismissible_content/DismissibleContentConstants";
import * as _Module9817 from "../../../_bundle/Module9817";
import * as _Module9818 from "../../../_bundle/Module9818";
import * as _Module9819 from "../../../_bundle/Module9819";
import { intl, t } from "../../../intl/index.native";
import openURL from "../../../lib/openURL";
import HelpdeskUtils from "../../../utils/HelpdeskUtils";
import { AccessibilityPreferencesContext } from "../../../_bundle/Module3908";
import { useToken } from "../../../design/tokens/native/useToken";
import Module712 from "../../../_bundle/Module712";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { UNSAFE_isDismissibleContentDismissed, UNSAFE_markDismissibleContentAsDismissed } from "../../dismissible_content/DismissibleContentUnsafeUtils";
import { DismissibleContent } from "../../../_bundle/Module1358";
import { ThemeContextProvider } from "../../../_bundle/Module3901";
import { BottomSheet } from "../../../design/components/Sheet/native/BottomSheet.native";
import FastImage from "../../../components_native/common/FastImage";
import { VideoComponent } from "../../../components_native/common/Video";
import { ActionSheetHeaderBar } from "../../../design/components/Sheet/native/ActionSheetHeaderBar.native";
import { CircleQuestionIcon } from "../../../design/components/Icon/native/redesign/generated/CircleQuestionIcon";
import { OrbsIcon } from "../../../design/components/Icon/native/redesign/generated/OrbsIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { Button } from "../../../design/components/Button/native/Button.native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { isAndroid } from "../../../utils/PlatformUtils";
const useStyles = createStyles((a0) => ({
actions: {
flex: 1,
flexDirection: "column",
gap: Module712.space.PX_12,
minWidth: "100%",
paddingTop: Module712.space.PX_12,
paddingHorizontal: Module712.space.PX_16
},
balanceHeader: {
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
gap: Module712.space.PX_8,
flexWrap: "wrap"
},
balanceText: {
color: a0,
fontSize: 36,
lineHeight: isAndroid() ? 36 : 44,
textAlignVertical: "center"
},
content: {
width: "100%",
height: "100%",
alignItems: "center",
flex: 1,
marginBottom: Module712.space.PX_16
},
header: {
width: "100%",
paddingTop: Module712.space.PX_12,
paddingBottom: Module712.space.PX_16,
alignItems: "center",
position: "relative",
flexDirection: "column"
},
infoIconBackground: {
width: 32,
height: 32,
backgroundColor: Module712.colors.REDESIGN_BUTTON_TERTIARY_BACKGROUND,
borderRadius: Module712.radii.round,
justifyContent: "center",
alignItems: "center"
},
infoIconContainer: {
position: "absolute",
left: Module712.space.PX_16,
top: Module712.space.PX_16,
zIndex: 10
},
promotionalBackground: {
position: "absolute",
top: 0,
left: 0,
right: 0,
borderRadius: Module712.radii.xl,
bottom: -100
},
promotionalBackgroundContainer: {
flex: 1,
height: 428
},
promotionalBannerAsset: {
width: "100%",
height: "100%"
},
promotionalBannerContainer: {
width: "100%",
height: 144,
gap: Module712.space.PX_12,
marginBottom: Module712.space.PX_64
},
promotionalBannerText: {
color: a0,
fontFamily: Fonts.PRIMARY_BOLD,
fontWeight: "600",
fontSize: 16,
lineHeight: 20,
textAlign: "center"
}
}));
export default (a0) => {
let balance2 = a0.balance;
const balance = balance2;
let themeOverride = a0.themeOverride;
const { primaryButtonConfig, secondaryButtonConfig, source } = a0;
const ref = useRef(null);
const callback = useCallback(() => {
openURL(HelpdeskUtils.getArticleURL(HelpdeskArticles.ORBS_FAQ));
}, []);
const enabled = useContext(AccessibilityPreferencesContext).reducedMotion.enabled;
const memo = useMemo(() => {
let r3 = balance;
if (balance == null) {
r3 = 0;
}
return r3 > 4100 ? {
backgroundVideo: _Module9817.default,
backgroundImage: _Module9818.default,
bannerImage: _Module9819.default,
bannerText: intl.string(t.LaMEFL)
} : null;
}, [balance]);
if (themeOverride === void 0 && memo != null) {
themeOverride = "dark";
}
const token = useToken(Module712.colors.MOBILE_TEXT_HEADING_PRIMARY, themeOverride);
const styles = useStyles(token);
useEffect(() => {
AnalyticsUtils.track(AnalyticEvents.ORB_BALANCE_ACTION_SHEET_ACTION, {
type: "VIEW",
source,
balance
});
if (!UNSAFE_isDismissibleContentDismissed(DismissibleContent.VIRTUAL_CURRENCY_MOBILE_ONBOARDING_PILL)) {
UNSAFE_markDismissibleContentAsDismissed(DismissibleContent.VIRTUAL_CURRENCY_MOBILE_ONBOARDING_PILL, {
dismissAction: ContentDismissActionType.AUTO_DISMISS
});
}
}, []);
const style = [styles.content, memo != null && memo.backgroundVideo != null && memo.backgroundImage != null && styles.promotionalBackgroundContainer];
const r85 = [memo != null && memo.backgroundVideo != null && memo.backgroundImage != null && (enabled ? <FastImage source={{
uri: memo.backgroundImage
}} style={styles.promotionalBackground} resizeMode="cover" /> : <VideoComponent source={{
uri: memo.backgroundVideo
}} poster={memo.backgroundImage} style={styles.promotionalBackground} muted disableFocus pauseWhileAppInactive paused={enabled} posterResizeMode="cover" resizeMode="cover" preventsDisplaySleepDuringVideoPlayback={false} />), <ActionSheetHeaderBar onPress={() => {
const current = ref.current;
if (current != null) {
current.closeActionSheet();
}
}} />, <View style={styles.infoIconContainer}>
<TouchableOpacity onPress={callback} accessibilityRole="link" accessibilityLabel={intl.string(t.B1oJtQ)}>
<View style={styles.infoIconBackground}>
<CircleQuestionIcon size="sm" color={Module712.colors.INTERACTIVE_TEXT_DEFAULT} />
</View>
</TouchableOpacity>
</View>, , , ,];
const r128 = [<OrbsIcon size="lg" color={token} />, ,];
const props = {
variant: "display-md",
style: styles.balanceText,
accessibilityLabel: intl.formatToPlainString(t.W4DfeF, {
orbAmount: balance == null ? 0 : balance
}),
children: null
};
if (balance == null) {
balance2 = 0;
}
props.children = balance2;
r128[1] = <Text {...props} />;
r85[3] = <View style={styles.header}>
<View style={styles.balanceHeader}>{r128}</View>
</View>;
r85[4] = memo != null && memo.bannerImage != null && <View style={styles.promotionalBannerContainer}>
<FastImage source={{
uri: memo.bannerImage
}} style={styles.promotionalBannerAsset} resizeMode="contain" />
{memo.bannerText != null && memo.bannerText !== "" && <Text variant="heading-xl/medium" style={styles.promotionalBannerText}>{memo.bannerText}</Text>}
</View>;
r85[5] = <View style={styles.actions}>
<Button text={primaryButtonConfig.buttonText} variant="primary" size="lg" onPress={primaryButtonConfig.onButtonPress} />
<Button text={secondaryButtonConfig.buttonText} variant="tertiary" size="lg" onPress={secondaryButtonConfig.onButtonPress} />
</View>;
return <ThemeContextProvider theme={themeOverride}>
<BottomSheet ref={ref} startExpanded handleComponent={() => <View />} handleDisabled={false}>
<View style={style}>{r85}</View>
</BottomSheet>
</ThemeContextProvider>;
};
@@ -0,0 +1,154 @@
// Metro module 14796 (f14797).
import { useCallback } from "react";
import { View } from "react-native";
import { AnalyticEvents } from "../../../Constants";
import { CollectiblesMobileShopScreen } from "../../collectibles/CollectiblesShopConstants";
import { ContentDismissActionType, DismissibleContentGroupName } from "../../dismissible_content/DismissibleContentConstants";
import { RewardFilterTypes } from "../../quests/QuestConstants";
import MobileVisualRefreshExperiment from "../../themes/experiments/MobileVisualRefreshExperiment";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import SelectedDismissibleContent from "../../dismissible_content/native/SelectedDismissibleContent";
import { DismissibleContent } from "../../../_bundle/Module1358";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { openQuestHome } from "../../quests/native/QuestUtils.native";
import { QuestContent } from "../../quests/QuestTypes";
import OrbOnboardingPill from "./OrbOnboardingPill";
import { useFetchVirtualCurrencyBalance } from "../hooks/index";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import AnalyticsLocation from "../../app_analytics/AnalyticsLocation";
import { openCollectiblesShopMobile } from "../../collectibles/CollectiblesActionCreators";
import BalanceWidgetPillButton from "./BalanceWidgetPillButton";
import { UNSAFE_isDismissibleContentDismissed } from "../../dismissible_content/DismissibleContentUnsafeUtils";
import { Ellipsis } from "../../../design/components/Button/native/ButtonEllipsis.native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
let OrbsOnboardingMenuDismissibleContent, BalanceWidgetMenu, useStyles;
const BalanceWidget = function BalanceWidget(props) {
const { onPress: onPress2, style: style2, accessibilityLabel, accessibilityState, children: children2 } = props;
const styles = useStyles(MobileVisualRefreshExperiment("BalanceWidgetMenu"));
return <PressableOpacity onPress={onPress2} style={[styles.pressable, style2]} accessible accessibilityRole="button" accessibilityLabel={accessibilityLabel} accessibilityState={accessibilityState} activeOpacity={0.8}>
<Text variant="text-sm/semibold" color="text-default" style={styles.label}>
{intl.string(t.gGtZpz)}
</Text>
<View style={styles.pill}>{children2}</View>
</PressableOpacity>;
};
OrbsOnboardingMenuDismissibleContent = function OrbsOnboardingMenuDismissibleContent(props) {
const style = props.style;
return <SelectedDismissibleContent contentTypes={[DismissibleContent.VIRTUAL_CURRENCY_MOBILE_ONBOARDING_PILL]} groupName={DismissibleContentGroupName.VIRTUAL_CURRENCY_MOBILE_ONBOARDING}>
{({ visibleContent, markAsDismissed }) => {
if (visibleContent === DismissibleContent.VIRTUAL_CURRENCY_MOBILE_ONBOARDING_PILL) {
const handleOnboardingPress = () => {
markAsDismissed(ContentDismissActionType.TAKE_ACTION);
AnalyticsUtils.track(AnalyticEvents.USER_PROFILE_ACTION, {
profile_action: "ORBS_BALANCE_PRESSED"
});
openQuestHome({
filter: RewardFilterTypes.VIRTUAL_CURRENCY,
fromContent: QuestContent.MOBILE_ORBS_ONBOARDING_DC
});
};
return <BalanceWidget onPress={handleOnboardingPress} style={style} accessibilityLabel={intl.string(t.Kt2QDh)}>
<OrbOnboardingPill onPress={handleOnboardingPress} accessible={false} />
</BalanceWidget>;
}
return null;
}}
</SelectedDismissibleContent>;
};
BalanceWidgetMenu = function BalanceWidgetMenu(props) {
const style2 = props.style;
const balance = useFetchVirtualCurrencyBalance().balance;
const callback = useCallback(() => {
AnalyticsUtils.track(AnalyticEvents.USER_PROFILE_ACTION, {
profile_action: "ORBS_BALANCE_PRESSED"
});
ActionSheetActionCreators.openLazy(() => import("./BalanceWidgetActionSheet").then((result) => result.default), "BalanceWidgetMenu", {
balance,
primaryButtonConfig: {
buttonText: intl.string(t.WrzJBf),
onButtonPress: () => {
AnalyticsUtils.track(AnalyticEvents.ORB_BALANCE_ACTION_SHEET_ACTION, {
type: "GO_TO_SHOP",
source: AnalyticsLocation.YOU_SCREEN,
balance
});
ActionSheetActionCreators.hideActionSheet();
openCollectiblesShopMobile({
analyticsLocations: [AnalyticsLocation.COLLECTIBLES_SHOP],
analyticsSource: AnalyticsLocation.COLLECTIBLES_SHOP,
screen: CollectiblesMobileShopScreen.ORBS
});
}
},
secondaryButtonConfig: {
buttonText: intl.string(t.SymzJC),
onButtonPress: () => {
AnalyticsUtils.track(AnalyticEvents.ORB_BALANCE_ACTION_SHEET_ACTION, {
type: "GO_TO_QUEST_HOME",
source: AnalyticsLocation.YOU_SCREEN,
balance
});
ActionSheetActionCreators.hideActionSheet();
openQuestHome({
mergeExistingRoutes: true,
filter: RewardFilterTypes.VIRTUAL_CURRENCY,
fromContent: QuestContent.ORBS_BALANCE_MENU
});
}
},
source: AnalyticsLocation.YOU_SCREEN
});
}, [balance]);
const zPaLL9 = t.zPaLL9;
let balance2 = balance == null ? void 0 : balance.toString();
if (balance2 == null) {
balance2 = "";
}
return <BalanceWidget onPress={callback} style={style2} accessibilityLabel={intl.formatToPlainString(zPaLL9, {
balance: balance2
})}>
<BalanceWidgetPillButton balance={balance} onPress={callback} accessible={false} />
</BalanceWidget>;
};
useStyles = createStyles((a0) => ({
pressable: {
flex: 1,
flexDirection: "row",
alignItems: "center",
flexWrap: "wrap",
gap: Module712.space.PX_8,
...a0 ? {
paddingHorizontal: Module712.space.PX_8,
paddingVertical: Module712.space.PX_8
} : {
padding: 16
},
borderRadius: a0 ? Module712.radii.md : Module712.radii.lg
},
label: {
flex: 1
},
pill: {
alignItems: "center"
},
loadingContainer: {
height: 36,
justifyContent: "center"
}
}));
export default function BalanceWidgetMenuWrapper(props) {
const styles = useStyles(MobileVisualRefreshExperiment("BalanceWidgetMenu"));
const balance2 = useFetchVirtualCurrencyBalance().balance;
const r30 = UNSAFE_isDismissibleContentDismissed(DismissibleContent.VIRTUAL_CURRENCY_MOBILE_ONBOARDING_PILL);
return balance2 == null ? <BalanceWidget onPress={() => {}} style={props.style} accessibilityLabel={intl.string(t.cKwv4k)} accessibilityState={{
busy: true
}}>
<View style={styles.loadingContainer}>
<Ellipsis variant="primary" size="sm" />
</View>
</BalanceWidget> : !(balance2 > 0) && !r30 ? <OrbsOnboardingMenuDismissibleContent {...props} /> : <BalanceWidgetMenu {...props} />;
};
export { OrbsOnboardingMenuDismissibleContent };
@@ -0,0 +1,73 @@
// Metro module 9805 (f9806).
import { View } from "react-native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { SMALL_BUTTON_HEIGHT } from "../../../design/components/Button/native/ButtonConstants.native";
import Module712 from "../../../_bundle/Module712";
import { isAndroid } from "../../../utils/PlatformUtils";
import { useVirtualCurrencyBalanceAnimationData } from "../hooks/native/useVirtualCurrencyBalanceAnimationData";
import { intl, t } from "../../../intl/index.native";
import { OrbLottieAnimation } from "./OrbLottieAnimation";
import { BalanceCounter } from "./BalanceCounter";
import { EXPECTED_ORB_LOTTIE_ANIMATION_DURATION_MS } from "../shared/AnimationUtils";
let useStyles;
const lineHeight = isAndroid() ? 14 : void 0;
export function BalanceWidgetPill(props) {
let initialRenderedBalance = props.initialRenderedBalance;
if (initialRenderedBalance === void 0) {
initialRenderedBalance = null;
}
let balance = props.balance;
const busy = initialRenderedBalance === null && balance === null;
const virtualCurrencyBalanceAnimationData = useVirtualCurrencyBalanceAnimationData({
initialRenderedBalance,
balance
});
const { onValueChange, onValueReached, showInitialRenderedBalance, currentAnimationType, lottieRef } = virtualCurrencyBalanceAnimationData;
const styles = useStyles();
const accessibilityLabel = busy ? intl.string(t.y0WGqP) : intl.formatToPlainString(t.zPaLL9, {
balance
});
const r50 = [<View style={styles.orbsLottieContainer}>
<OrbLottieAnimation ref={lottieRef} animationType={currentAnimationType} />
</View>, ,];
if (showInitialRenderedBalance) {
balance = initialRenderedBalance;
}
r50[1] = <View style={styles.balanceCounterContainer}>
<BalanceCounter value={balance} onValueChange={onValueChange} onValueReached={onValueReached} targetTotalCounterTime={EXPECTED_ORB_LOTTIE_ANIMATION_DURATION_MS} style={styles.balanceText} />
</View>;
return <View style={styles.container} accessibilityLabel={accessibilityLabel} accessibilityState={{
busy
}} accessible>{r50}</View>;
}
useStyles = createStyles({
container: {
minHeight: SMALL_BUTTON_HEIGHT,
borderRadius: Module712.radii.round,
justifyContent: "center",
alignItems: "center",
flexDirection: "row",
paddingHorizontal: Module712.space.PX_12,
paddingVertical: Module712.space.PX_4,
backgroundColor: Module712.colors.CONTROL_OVERLAY_SECONDARY_BACKGROUND_DEFAULT,
gap: 4
},
orbsLottieContainer: {
position: "relative",
height: 18,
width: 18,
justifyContent: "center",
alignItems: "center"
},
balanceCounterContainer: {
justifyContent: "center",
alignItems: "flex-end"
},
balanceText: {
color: Module712.colors.CONTROL_OVERLAY_SECONDARY_TEXT_DEFAULT,
textAlign: "right",
lineHeight
}
});
BalanceWidgetPill.displayName = "BalanceWidgetPill";
export default BalanceWidgetPill;
@@ -0,0 +1,18 @@
// Metro module 9815 (f9816).
import { Button } from "../../../design/components/Button/native/Button.native";
import Module8706 from "../../../_bundle/Module8706";
import { intl, t } from "../../../intl/index.native";
export function BalanceWidgetPillButton(props) {
const { balance, onPress, variant = "tertiary", accessible = true } = props;
let text = balance == null ? void 0 : balance.toString();
if (text == null) {
text = "";
}
const importantForAccessibility = accessible ? "auto" : "no";
const disabled = balance === null;
return <Button variant={variant} onPress={onPress} size="sm" text={text} icon={Module8706} accessible={accessible} accessibilityElementsHidden={!accessible} importantForAccessibility={importantForAccessibility} accessibilityLabel={disabled ? intl.string(t.y0WGqP) : intl.formatToPlainString(t.zPaLL9, {
balance: balance.toString()
})} disabled={disabled} loading={disabled} />;
}
BalanceWidgetPillButton.displayName = "BalanceWidgetPillButton";
export default BalanceWidgetPillButton;
@@ -0,0 +1,30 @@
// Metro module 11886 (f11887).
import { View } from "react-native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { OrbsIcon } from "../../../design/components/Icon/native/redesign/generated/OrbsIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
const useStyles = createStyles({
orbAmountTag: {
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_4
},
orbsIcon: {
width: 14,
height: 14
}
});
export default function OrbCheckoutAmountTag(props) {
const orbAmount = props.orbAmount;
const styles = useStyles();
return <View style={styles.orbAmountTag}>
<OrbsIcon size="custom" color="icon-strong" style={styles.orbsIcon} />
<Text variant="text-md/semibold" accessibilityLabel={orbAmount == null ? intl.string(t.pfChQr) : intl.formatToPlainString(t.W4DfeF, {
orbAmount
})}>
{orbAmount == null ? "--" : orbAmount}
</Text>
</View>;
};
@@ -0,0 +1,40 @@
// Metro module 14798 (f14799).
import { useState, useCallback } from "react";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import ToastActionCreators from "../../toast/native/ToastActionCreators";
import { Card } from "../../../design/components/Card/native/Card.native";
import { Text } from "../../../design/components/Text/native/Text";
import { TextInput } from "../../../design/components/TextInput/native/TextInput.native";
import { Button } from "../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
textInput: {
marginBottom: 16
},
title: {
marginBottom: 8
}
});
export default function OrbCheckoutMenu() {
const styles = useStyles();
const [state, setState] = useState("1409898407849365565");
return <Card>
<Text style={styles.title} variant="text-md/bold">Redeem SKU for Orbs</Text>
<TextInput containerStyle={styles.textInput} label="SKU ID" value={state} onChange={(event) => setState(event)} isClearable />
<Text style={styles.title} variant="text-md/bold">Checkout will open with the orb price of the product, if it exists</Text>
<Button text="Open Orbs Checkout" variant="primary" onPress={useCallback(() => {
if (state != null) {
ModalActionCreators.pushLazy(import("../checkout/native/OrbCheckoutModal"), {
skuId: state,
analyticsLocations: [],
onCheckoutSuccess: () => {
ToastActionCreators.open({
key: "ORB_CHECKOUT_SUCCESS",
content: "Successfully redeemed item with Orbs"
});
}
});
}
}, [state])} disabled={state == null} />
</Card>;
};
@@ -0,0 +1,28 @@
// Metro module 9807 (f9808).
import { useEffect, useRef, forwardRef, useImperativeHandle } from "react";
import { useTheme } from "../../../hooks/useTheme";
import * as _shared from "../../../design/shared";
import { SpendEarnOrbsLightThemeLottie } from "../../../design/components/LottieIcon/native/generated/SpendEarnOrbsLightThemeLottie";
import { SpendEarnOrbsLottie } from "../../../design/components/LottieIcon/native/generated/SpendEarnOrbsLottie";
const r23 = forwardRef(({ animationType }, a1) => {
const isThemeLight = _shared.isThemeLight(useTheme());
const ref = useRef(null);
useEffect(() => {
if (animationType !== null) {
const current = ref.current;
if (current != null) {
current.play();
}
}
}, [animationType]);
useImperativeHandle(a1, () => ({
play: () => {
const current = ref.current;
return current == null ? void 0 : current.play();
}
}));
return isThemeLight ? <SpendEarnOrbsLightThemeLottie ref={ref} size="custom" width={60} height={60} opacity={0.8} animation={animationType != null ? animationType : "spend"} useLottieDefaultColors /> : <SpendEarnOrbsLottie ref={ref} size="custom" width={60} height={60} opacity={0.8} animation={animationType != null ? animationType : "spend"} useLottieDefaultColors />;
});
r23.displayName = "OrbsLottieAnimation";
export default r23;
export { r23 as OrbLottieAnimation };
@@ -0,0 +1,33 @@
// Metro module 14797 (f14798).
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import { OrbsIcon } from "../../../design/components/Icon/native/redesign/generated/OrbsIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
let useStyles;
export function OrbOnboardingPill(props) {
const { onPress, accessible = true } = props;
return <PressableOpacity onPress={onPress} style={useStyles().container} accessibilityRole="button" activeOpacity={0.8} accessible={accessible} accessibilityElementsHidden={!accessible} importantForAccessibility={accessible ? "auto" : "no"}>
<OrbsIcon size="sm" />
<Text variant="text-sm/semibold" color="redesign-button-tertiary-text">
{intl.string(t["9JpRfC"])}
</Text>
</PressableOpacity>;
}
OrbOnboardingPill.displayName = "OrbOnboardingPill";
useStyles = createStyles({
container: {
height: 36,
borderRadius: Module712.radii.round,
justifyContent: "center",
alignItems: "center",
flexDirection: "row",
paddingHorizontal: Module712.space.PX_12,
paddingVertical: Module712.space.PX_4,
backgroundColor: Module712.colors.REDESIGN_BUTTON_TERTIARY_BACKGROUND,
flexShrink: 0,
gap: 4
}
});
export default OrbOnboardingPill;
@@ -0,0 +1,9 @@
// Metro module 9804 (f9805).
import { BalanceWidgetPill } from "./BalanceWidgetPill";
import { BalanceWidgetPillButton } from "./BalanceWidgetPillButton";
import { BalanceCounter } from "./BalanceCounter";
import BalanceWidgetActionSheet from "./BalanceWidgetActionSheet";
exports.BalanceWidgetPill = BalanceWidgetPill;
exports.BalanceWidgetPillButton = BalanceWidgetPillButton;
exports.BalanceCounter = BalanceCounter;
exports.BalanceWidgetActionSheet = BalanceWidgetActionSheet;
@@ -0,0 +1,15 @@
// Metro module 9814 (f9815).
let c6514_0 = {
EARN: 0.25,
SPEND: 0.3
};
export const EXPECTED_ORB_LOTTIE_ANIMATION_DURATION_MS = 3000;
export { c6514_0 as ORB_LOTTIE_COUNTER_ANIMATION_FACTORS };
export function getDesiredAnimationConfigs(a0, a1) {
const r0 = a0 > 0;
const duration = a1 * c6514_0[r0 ? "EARN" : "SPEND"];
return {
duration,
delay: r0 ? a1 - duration : 0
};
}
@@ -0,0 +1,190 @@
// Metro module 8721 (f8722).
import Module589 from "../../../_bundle/Module589";
import Dispatcher from "../../../Dispatcher";
import { HermesBuiltin, $callWithNewTarget } from "../../../_hermes/prelude";
function $mk81205($env) {
return (a0) => $env[0].handleRedeemVirtualCurrencyStart(a0);
}
function $mk81206($env) {
return (a0) => $env[0].handleRedeemVirtualCurrencySuccess(a0);
}
function $mk81207($env) {
return (a0) => $env[0].handleRedeemVirtualCurrencyFail(a0);
}
function $mk81208($env) {
return (a0) => $env[0].handleBalanceFetch(a0);
}
function $mk81209($env) {
return (a0) => $env[0].handleBalanceFetchSuccess(a0);
}
function $mk81210($env) {
return (a0) => $env[0].handleBalanceFetchFail(a0);
}
function $mk81211($env) {
return (a0) => $env[0].handleBalanceUpdate(a0);
}
function $mk81212($env) {
return (a0) => $env[0].handleOnboardingModalOpen(a0);
}
function $mk81213($env) {
return (a0) => $env[0].handleOnboardingModalReset(a0);
}
function $mk81214($env) {
return () => $env[0].handleBalanceStateReset();
}
function $mk81215($env) {
return (a0) => {
$env[0].setBalancePillOverlay(a0.balancePillOverlay);
};
}
let c5685_0;
let env5685;
class VirtualCurrencyStore extends Module589.Store {
static displayName = "VirtualCurrencyStore";
constructor() {
let env16743;
const r3 = env16743 = {};
env16743[0] = void 0;
const r16 = {
VIRTUAL_CURRENCY_REDEEM_START: $mk81205(r3),
VIRTUAL_CURRENCY_REDEEM_SUCCESS: $mk81206(r3),
VIRTUAL_CURRENCY_REDEEM_FAIL: $mk81207(r3),
VIRTUAL_CURRENCY_BALANCE_FETCH: $mk81208(r3),
VIRTUAL_CURRENCY_BALANCE_FETCH_SUCCESS: $mk81209(r3),
VIRTUAL_CURRENCY_BALANCE_FETCH_FAIL: $mk81210(r3),
VIRTUAL_CURRENCY_BALANCE_UPDATE: $mk81211(r3),
VIRTUAL_CURRENCY_ONBOARDING_MODAL_OPEN: $mk81212(r3),
VIRTUAL_CURRENCY_ONBOARDING_MODAL_RESET: $mk81213(r3),
LOGIN_SUCCESS: $mk81214(r3),
VIRTUAL_CURRENCY_SET_BALANCE_PILL_OVERLAY: $mk81215(r3)
};
super(Dispatcher, r16);
env16743[0] = this;
this._entitlements = null;
this._redeemingSkuId = null;
this._isRedeemingVirtualCurrency = false;
this._redeemVirtualCurrencyError = null;
this._balance = null;
this._fetchBalanceError = null;
this._isFetchingBalance = false;
this._onboardingModalOpenedPrior = false;
this._balancePillOverlay = false;
}
get redeemError() {
return this._redeemVirtualCurrencyError;
}
get isRedeeming() {
return this._isRedeemingVirtualCurrency;
}
get redeemingSkuId() {
return this._redeemingSkuId;
}
get entitlements() {
return this._entitlements;
}
get balance() {
return this._balance;
}
get fetchBalanceError() {
return this._fetchBalanceError;
}
get isFetchingBalance() {
return this._isFetchingBalance;
}
get onboardingModalOpenedPrior() {
return this._onboardingModalOpenedPrior;
}
get balancePillOverlay() {
return this._balancePillOverlay;
}
setBalancePillOverlay(a0) {
this._balancePillOverlay = a0;
}
getCurrentBalance() {
return this.balance;
}
handleBalanceStateReset() {
this._balance = null;
this._fetchBalanceError = null;
this._isFetchingBalance = false;
}
handleBalanceFetch(a0) {
if (a0 == null) {
HermesBuiltin.throwTypeError("Cannot destructure 'undefined' or 'null'.");
throw new Error("unreachable");
}
this._isFetchingBalance = true;
this._fetchBalanceError = null;
}
handleBalanceFetchSuccess({ balance: balance2 }) {
this._isFetchingBalance = false;
this._balance = balance2;
}
handleBalanceFetchFail({ error }) {
this._isFetchingBalance = false;
this._fetchBalanceError = error;
}
handleBalanceUpdate(a0) {
this._balance = a0.balance;
}
handleRedeemVirtualCurrencyStart({ skuId }) {
this._entitlements = null;
this._redeemingSkuId = skuId;
this._redeemVirtualCurrencyError = null;
this._isRedeemingVirtualCurrency = true;
}
handleRedeemVirtualCurrencySuccess(a0) {
this._entitlements = a0.entitlements;
this._redeemingSkuId = null;
this._isRedeemingVirtualCurrency = false;
}
handleRedeemVirtualCurrencyFail({ error }) {
this._entitlements = null;
this._redeemVirtualCurrencyError = error;
this._redeemingSkuId = null;
this._isRedeemingVirtualCurrency = false;
}
handleOnboardingModalOpen(a0) {
if (a0 == null) {
HermesBuiltin.throwTypeError("Cannot destructure 'undefined' or 'null'.");
throw new Error("unreachable");
}
this._onboardingModalOpenedPrior = true;
}
handleOnboardingModalReset(a0) {
if (a0 == null) {
HermesBuiltin.throwTypeError("Cannot destructure 'undefined' or 'null'.");
throw new Error("unreachable");
}
this._onboardingModalOpenedPrior = false;
}
}
const r66 = env5685 = {};
c5685_0 = void 0;
const prototypeOf = Object.getPrototypeOf(VirtualCurrencyStore);
const r71 = {
VIRTUAL_CURRENCY_REDEEM_START: $mk81205(r66),
VIRTUAL_CURRENCY_REDEEM_SUCCESS: $mk81206(r66),
VIRTUAL_CURRENCY_REDEEM_FAIL: $mk81207(r66),
VIRTUAL_CURRENCY_BALANCE_FETCH: $mk81208(r66),
VIRTUAL_CURRENCY_BALANCE_FETCH_SUCCESS: $mk81209(r66),
VIRTUAL_CURRENCY_BALANCE_FETCH_FAIL: $mk81210(r66),
VIRTUAL_CURRENCY_BALANCE_UPDATE: $mk81211(r66),
VIRTUAL_CURRENCY_ONBOARDING_MODAL_OPEN: $mk81212(r66),
VIRTUAL_CURRENCY_ONBOARDING_MODAL_RESET: $mk81213(r66),
LOGIN_SUCCESS: $mk81214(r66),
VIRTUAL_CURRENCY_SET_BALANCE_PILL_OVERLAY: $mk81215(r66)
};
const r82 = Object.create(VirtualCurrencyStore.prototype);
const r83 = $callWithNewTarget(prototypeOf, r82, VirtualCurrencyStore, Dispatcher, r71);
c5685_0 = r83 instanceof Object ? r83 : r82;
c5685_0._entitlements = null;
c5685_0._redeemingSkuId = null;
c5685_0._isRedeemingVirtualCurrency = false;
c5685_0._redeemVirtualCurrencyError = null;
c5685_0._balance = null;
c5685_0._fetchBalanceError = null;
c5685_0._isFetchingBalance = false;
c5685_0._onboardingModalOpenedPrior = false;
c5685_0._balancePillOverlay = false;
export default c5685_0;
+11
View File
@@ -0,0 +1,11 @@
// Metro module 8717 (f8718).
const r9 = {
DEFAULT: "DEFAULT",
HIGHLIGHTED: "HIGHLIGHTED",
SELECTED: "SELECTED"
};
const r13 = {
ORB_PROFILE_BADGE: "orb_profile_badge"
};
export { r9 as BalanceWidgetMode };
export { r13 as OrbBadges };