167 lines
8.1 KiB
TypeScript
167 lines
8.1 KiB
TypeScript
// Metro module 15768 (f15769).
|
|
import { useCallback } from "react";
|
|
import { View } from "react-native";
|
|
import ApplicationStore from "../../applications/ApplicationStore";
|
|
import ConnectedAccountsStore from "../../../stores/ConnectedAccountsStore";
|
|
import { ContentDismissActionType } from "../../dismissible_content/DismissibleContentConstants";
|
|
import { createStyles } from "../../../design/components/Styles/native/createStyles";
|
|
import Module712 from "../../../_bundle/Module712";
|
|
import { useThemeContext } from "../../../_bundle/Module3901";
|
|
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
|
|
import { useStateFromStores, useStateFromStoresObject } from "../../../_bundle/Module589";
|
|
import Platforms from "../../../lib/Platforms";
|
|
import useStartAuthorize from "./useStartAuthorize";
|
|
import useAnalyticsLocations from "../../app_analytics/useAnalyticsLocations";
|
|
import AnalyticsLocation from "../../app_analytics/AnalyticsLocation";
|
|
import { claimIncentivizedAccountLinkingReward } from "../AccountLinkManager";
|
|
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
|
|
import { BottomSheetTitleHeader } from "../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
|
|
import { BottomSheet } from "../../../design/components/Sheet/native/BottomSheet.native";
|
|
import { Stack } from "../../../design/components/Stack/native/Stack.native";
|
|
import { UnionIcon } from "../../local_app_detection/native/RobloxConnectionCoachmark";
|
|
import { Text } from "../../../design/components/Text/native/Text";
|
|
import { intl, t } from "../../../intl/index.native";
|
|
import ApplicationAccountLinking_messages from "../ApplicationAccountLinking.messages";
|
|
import { OrbsIcon } from "../../../design/components/Icon/native/redesign/generated/OrbsIcon";
|
|
import { Button } from "../../../design/components/Button/native/Button.native";
|
|
import { WindowLaunchIcon } from "../../../design/components/Icon/native/redesign/generated/WindowLaunchIcon";
|
|
import * as _themes from "../../../design/utils/shared/themes";
|
|
import { makeSource } from "../../../utils/AvatarUtils";
|
|
import Icon, { IconSizes } from "../../../design/void/Icon/native/Icon";
|
|
import GameIcon, { GameIconSizes } from "../../game_detection/native/GameIcon";
|
|
import { useGetOrFetchApplication } from "../../applications/useGetOrFetchApplications";
|
|
let useStyles, ApplicationIcon;
|
|
const ConnectionIcon = function ConnectionIcon(props) {
|
|
const { platform: platform2, theme } = props;
|
|
const styles = useStyles();
|
|
const isThemeDark = _themes.isThemeDark(theme);
|
|
const icon = platform2.icon;
|
|
return <View style={styles.iconContainer}>
|
|
<Icon size={IconSizes.CUSTOM} source={makeSource(isThemeDark ? icon.darkPNG : icon.lightPNG)} disableColor style={styles.connectionIcon} />
|
|
</View>;
|
|
};
|
|
ApplicationIcon = function ApplicationIcon(props) {
|
|
const application = props.application;
|
|
return <View style={useStyles().iconContainer}>
|
|
{application != null ? <GameIcon game={application} size={GameIconSizes.NORMAL} /> : null}
|
|
</View>;
|
|
};
|
|
useStyles = createStyles({
|
|
iconContainer: {
|
|
width: 56,
|
|
height: 56,
|
|
alignItems: "center",
|
|
justifyContent: "center"
|
|
},
|
|
content: {
|
|
paddingHorizontal: Module712.space.PX_16
|
|
},
|
|
text: {
|
|
textAlign: "center"
|
|
},
|
|
connectionIcon: {
|
|
height: 48,
|
|
width: 48
|
|
}
|
|
});
|
|
export default function ConnectionDeprecationBottomSheet(props) {
|
|
let replacedBy, startAuthorization, analyticsLocations, callback;
|
|
const platformTypes = props.platformTypes;
|
|
let applicationName = props.applicationName;
|
|
const markAsDismissed = props.markAsDismissed;
|
|
replacedBy = void 0;
|
|
startAuthorization = void 0;
|
|
analyticsLocations = void 0;
|
|
callback = void 0;
|
|
const styles = useStyles();
|
|
const theme = useThemeContext().theme;
|
|
const bottom = useSafeAreaInsets_native().bottom;
|
|
const stateFromStores2 = useStateFromStores([ConnectedAccountsStore], () => ConnectedAccountsStore.getAccounts().find((item) => platformTypes.includes(item.type))?.type);
|
|
const platform2 = stateFromStores2 != null ? Platforms.get(stateFromStores2) : null;
|
|
replacedBy = platform2 == null ? void 0 : platform2.migrationData?.replacedBy;
|
|
const stateFromStores = useStateFromStores([ApplicationStore], () => ApplicationStore.getApplication(replacedBy));
|
|
startAuthorization = useStartAuthorize(stateFromStores).startAuthorization;
|
|
analyticsLocations = useAnalyticsLocations(AnalyticsLocation.ACTION_SHEET).analyticsLocations;
|
|
callback = useCallback(() => {
|
|
claimIncentivizedAccountLinkingReward({
|
|
applicationId: replacedBy,
|
|
onSuccess: () => {
|
|
ActionSheetActionCreators.openLazy(import("./IncentivizedAccountLinkConfirmationBottomSheet"), "IncentivizedAccountLinkConfirmationBottomSheet");
|
|
}
|
|
});
|
|
}, [replacedBy]);
|
|
const callback2 = useCallback(() => {
|
|
ActionSheetActionCreators.hideActionSheet();
|
|
if (markAsDismissed != null) {
|
|
markAsDismissed(ContentDismissActionType.PRIMARY);
|
|
}
|
|
startAuthorization({
|
|
analyticsLocations,
|
|
onSuccess: callback
|
|
});
|
|
}, [analyticsLocations, startAuthorization, markAsDismissed, callback]);
|
|
if (platform2 != null && stateFromStores != null) {
|
|
if (applicationName == null) {
|
|
applicationName = stateFromStores.name;
|
|
}
|
|
return <BottomSheet startExpanded contentStyles={styles.content} header={<BottomSheetTitleHeader title={null} />} onDismiss={() => markAsDismissed(ContentDismissActionType.DISMISS)}>
|
|
<Stack spacing={24} style={{
|
|
paddingBottom: bottom
|
|
}}>
|
|
<Stack justify="center" align="center" direction="horizontal">
|
|
<ConnectionIcon theme={theme} platform={platform2} />
|
|
<UnionIcon theme={theme} />
|
|
<ApplicationIcon application={stateFromStores} />
|
|
</Stack>
|
|
<Stack justify="center">
|
|
<Text variant="heading-xl/bold" style={styles.text}>
|
|
{intl.string(ApplicationAccountLinking_messages.vycLU2)}
|
|
</Text>
|
|
<Text variant="text-md/medium" style={styles.text}>
|
|
{intl.format(ApplicationAccountLinking_messages.DfSSdL, {
|
|
connectionName: platform2.name,
|
|
applicationName,
|
|
orbCount: 200,
|
|
orbsIconHook: () => <OrbsIcon size="xs" color={Module712.colors.TEXT_STRONG} />
|
|
})}
|
|
</Text>
|
|
</Stack>
|
|
<Stack>
|
|
<Button text={intl.string(ApplicationAccountLinking_messages.ZeOhh9)} icon={<WindowLaunchIcon size="sm" color={Module712.colors.WHITE} />} iconPosition="end" size="lg" onPress={callback2} />
|
|
<Button text={intl.string(t.TulDPl)} variant="secondary" size="lg" onPress={function onPress() {
|
|
ActionSheetActionCreators.hideActionSheet();
|
|
if (markAsDismissed != null) {
|
|
markAsDismissed(ContentDismissActionType.DISMISS);
|
|
}
|
|
}} />
|
|
</Stack>
|
|
</Stack>
|
|
</BottomSheet>;
|
|
}
|
|
return false;
|
|
};
|
|
export function useShouldShowConnectionDeprecationBottomSheet({ deprecatedPlatformTypes }) {
|
|
const stateFromStoresObject = useStateFromStoresObject([ConnectedAccountsStore], () => ({
|
|
fetchingConnections: ConnectedAccountsStore.isFetching(),
|
|
matchingPlatform: ConnectedAccountsStore.getAccounts().map((item) => Platforms.get(item.type)).find((item) => {
|
|
const migrationData = item.migrationData;
|
|
return (migrationData == null ? void 0 : migrationData.getMigrationExperimentEnabled("ConnectionDeprecationBottomSheet")) && deprecatedPlatformTypes.includes(item.type);
|
|
})
|
|
}));
|
|
let fetchingConnections = stateFromStoresObject.fetchingConnections;
|
|
const matchingPlatform = stateFromStoresObject.matchingPlatform;
|
|
const getOrFetchApplication = useGetOrFetchApplication(matchingPlatform == null ? void 0 : matchingPlatform.migrationData?.replacedBy);
|
|
const startAuthorize = useStartAuthorize(getOrFetchApplication);
|
|
const { hasAlreadyLinked, canStartAuthorization, fetched } = startAuthorize;
|
|
if (!fetchingConnections) {
|
|
fetchingConnections = !fetched;
|
|
}
|
|
if (!fetchingConnections) {
|
|
fetchingConnections = !canStartAuthorization;
|
|
}
|
|
if (!fetchingConnections) {
|
|
fetchingConnections = getOrFetchApplication == null;
|
|
}
|
|
return fetchingConnections ? !fetchingConnections : !hasAlreadyLinked;
|
|
}
|