Files
discord-decomp/modules/skus/native/SKUPreview.tsx
T
2026-11-01 12:12:55 +02:00

171 lines
6.5 KiB
TypeScript

// Metro module 8669 (f8670).
import { useMemo } from "react";
import { View } from "react-native";
import { transformSKUToCollectiblesItem } from "../../collectibles/records/CollectiblesItemRecord";
import { SKUProductLines } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { DEFAULT_ITEM_SIZE } from "../../wishlists/native/WishlistItemCardBase";
import Module712 from "../../../_bundle/Module712";
import { isValidCollectiblesBundleItems } from "../../collectibles/utils/bundleUtils";
import { ItemsSortingHat } from "../../collectibles/hooks/useShopProductItems";
import BundleSampleV2 from "../../collectibles/native/BundleSampleV2";
import { CollectiblesItemType } from "../../../_bundle/Module1901";
import AvatarDecorationSampleV2 from "../../collectibles/native/AvatarDecorationSampleV2";
import ProfileEffectSampleV2 from "../../collectibles/native/ProfileEffectSampleV2";
import ProfileFrameSamplePreview from "../../collectibles/profile_frames/native/previews/ProfileFrameSamplePreview";
import NameplateCardPreview from "../../collectibles/nameplates/native/NameplateCardPreview";
import { useIsEligibleForSocialLayerStorefrontMobilePurchasing } from "../../slayer_storefront/experiments/SocialLayerStorefrontMobilePurchasingExperiment";
import SlayerStorefrontItemCard from "../../slayer_storefront/native/SlayerStorefrontItemCard";
import { useToken } from "../../../design/tokens/native/useToken";
import { ThemeAwareNitroWishlistingWumpusRive } from "../../../_bundle/Module3901";
import { assertNever } from "../../../utils/GlobalUtils";
let useStyles, targetSize, CollectiblesSKUPreview, SocialLayerStorefrontSKUPreview, PremiumSKUPreview;
const CollectiblesPreview = function CollectiblesPreview(props) {
const { collectiblesItemData, size = DEFAULT_ITEM_SIZE } = props;
let r22 = size;
if (typeof r22 === "number") {
r22 = {
width: size,
height: size
};
}
const styles = useStyles(r22.width, r22.height);
if (collectiblesItemData.type === "bundle") {
if (isValidCollectiblesBundleItems(collectiblesItemData.items)) {
const itemsSortingHat = new ItemsSortingHat(collectiblesItemData.items);
return <View style={styles.container}>
<View style={[styles.scaler, styles.bundleContainer]}>
<BundleSampleV2 deco={itemsSortingHat.firstAvatarDecoration} pfx={itemsSortingHat.firstProfileEffect} nameplate={itemsSortingHat.firstNameplate} size="small" previewAssets={collectiblesItemData.previewAssets} disableStaticBackground targetSize={targetSize} />
</View>
</View>;
}
return null;
}
const type = collectiblesItemData.item.type;
if (CollectiblesItemType.AVATAR_DECORATION === type) {
return <View style={styles.container}>
<View style={styles.scaler}>
<AvatarDecorationSampleV2 item={collectiblesItemData.item} size={100} />
</View>
</View>;
}
if (CollectiblesItemType.PROFILE_EFFECT === type) {
return <View style={styles.container}>
<View style={styles.scaler}>
<ProfileEffectSampleV2 item={collectiblesItemData.item} hideBackground />
</View>
</View>;
}
if (CollectiblesItemType.PROFILE_FRAME === type) {
return <View style={styles.container}>
<View style={[styles.scaler, styles.profileFrameContainer]}>
<ProfileFrameSamplePreview profileFrame={collectiblesItemData.item} previewWidth={DEFAULT_ITEM_SIZE - Module712.space.PX_48} previewHeight={DEFAULT_ITEM_SIZE} />
</View>
</View>;
}
if (CollectiblesItemType.NAMEPLATE === type) {
return <View style={styles.container}>
<View style={styles.scaler}>
<NameplateCardPreview item={collectiblesItemData.item} />
</View>
</View>;
}
return null;
};
CollectiblesSKUPreview = function CollectiblesSKUPreview(props) {
const { sku, size = DEFAULT_ITEM_SIZE } = props;
const memo = useMemo(() => transformSKUToCollectiblesItem(sku), [sku]);
return memo != null ? <CollectiblesPreview collectiblesItemData={memo} size={size} /> : null;
};
SocialLayerStorefrontSKUPreview = function SocialLayerStorefrontSKUPreview(props) {
const { sku: sku2, size = DEFAULT_ITEM_SIZE } = props;
let r11 = size;
if (typeof r11 === "number") {
r11 = {
width: size,
height: size
};
}
const styles = useStyles(r11.width, r11.height);
return useIsEligibleForSocialLayerStorefrontMobilePurchasing({
location: "sku_preview"
}) ? <SlayerStorefrontItemCard sku={sku2} containerStyle={styles.socialLayerStorefrontContainer} /> : null;
};
PremiumSKUPreview = function PremiumSKUPreview(props) {
let size = props.size;
if (size === void 0) {
size = DEFAULT_ITEM_SIZE;
}
let r12 = size;
if (typeof r12 === "number") {
r12 = {
width: size,
height: size
};
}
return <View style={useStyles(r12.width, r12.height).premiumRiveContainer}>
<ThemeAwareNitroWishlistingWumpusRive dataBinding={{
logoColor: useToken(Module712.colors.TEXT_DEFAULT)
}} />
</View>;
};
useStyles = createStyles((a0, a1) => ({
container: {
width: "100%",
height: "100%",
display: "flex",
justifyContent: "center",
alignItems: "center"
},
scaler: {
width: DEFAULT_ITEM_SIZE,
height: DEFAULT_ITEM_SIZE,
justifyContent: "center",
alignItems: "center",
transform: [{
scaleX: a0 / DEFAULT_ITEM_SIZE
}, {
scaleY: a1 / DEFAULT_ITEM_SIZE
}]
},
bundleContainer: {
paddingTop: 20
},
socialLayerStorefrontContainer: {
width: a0,
height: a1
},
profileFrameContainer: {
padding: Module712.space.PX_8
},
premiumRiveContainer: {
width: a0,
height: a1
}
}));
targetSize = {
width: DEFAULT_ITEM_SIZE,
height: DEFAULT_ITEM_SIZE
};
export default function SKUPreview(props) {
const { sku: sku2, size = DEFAULT_ITEM_SIZE } = props;
const productLine = sku2.productLine;
if (SKUProductLines.COLLECTIBLES === productLine) {
return <CollectiblesSKUPreview sku={sku2} size={size} />;
}
if (SKUProductLines.SOCIAL_LAYER_GAME_ITEM === productLine) {
return <SocialLayerStorefrontSKUPreview sku={sku2} size={size} />;
}
if (SKUProductLines.PREMIUM === productLine) {
return <PremiumSKUPreview size={size} />;
}
if (SKUProductLines.APPLICATION !== productLine && SKUProductLines.BOOST !== productLine && SKUProductLines.GUILD_ROLE !== productLine && SKUProductLines.GUILD_PRODUCT !== productLine) {
assertNever(sku2.productLine);
return void 0;
}
return null;
};
export { CollectiblesPreview };
export { SocialLayerStorefrontSKUPreview };
export { PremiumSKUPreview };