Files
discord-decomp/modules/premium/powerups/native/GuildPowerupsModal.tsx
T
2026-11-01 12:12:55 +02:00

148 lines
6.9 KiB
TypeScript

// Metro module 11572 (f11573).
import { useRef, useEffect, useCallback } from "react";
import { ScrollView, View } from "react-native";
import { BoostInfoType, GuildPowerupType } from "../constants/GuildPowerupsConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useGameServerEnabled } from "../../game_server/GameServerExperiment";
import useLoadGuildPowerups from "../hooks/useLoadGuildPowerups";
import { useAutoDismissGuildPowerupsNotifications } from "../hooks/useGuildPowerupsNotifications";
import useShowGuildPowerupRollbackSheet from "./hooks/useShowGuildPowerupRollbackSheet";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import useAnalyticsLocations, { AnalyticsLocationProvider } from "../../../app_analytics/useAnalyticsLocations";
import { useBuildGuildPowerupsSections } from "../utils/powerupListing";
import openGuildPowerupsBottomSheet from "./utils/openGuildPowerupsBottomSheet";
import openGuildPowerupsMultiPerkBottomSheet from "./utils/openGuildPowerupsMultiPerkBottomSheet";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import useGuildPowerupsBoostCount from "../hooks/useGuildPowerupsBoostCount";
import { Header } from "../../../../_bundle/Module5150";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { GenericHeaderTitle } from "../../../main_tabs_v2/native/shared_components/HeaderShared";
import { getHeaderCloseButton } from "../../../../design/components/Navigator/native/NavigatorHeader.native";
import GuildPowerupsBoostInfo from "./GuildPowerupsBoostInfo";
import GuildPowerupsNotificationContainer from "./GuildPowerupsNotificationContainer";
import GuildPowerupsLevelsSection from "./GuildPowerupsLevelsSection";
import GuildPowerupsPerksSection from "./GuildPowerupsPerksSection";
import GuildPowerupsRecentActivitySection from "./GuildPowerupsRecentActivitySection";
import { GuildPowerupsBoostButton } from "./GuildPowerupsBoostButton";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
headerContainer: {
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_8
},
boostInfoContainer: {
flexDirection: "row",
justifyContent: "space-between",
borderWidth: 1,
borderStyle: "solid",
borderColor: Module712.colors.BORDER_SUBTLE,
marginBottom: Module712.space.PX_16
},
boostInfoSeparator: {
width: 1,
height: "100%",
backgroundColor: Module712.colors.BORDER_SUBTLE
},
scrollView: {
paddingBottom: Module712.space.PX_96
},
boostButtonContainer: {
paddingHorizontal: Module712.space.PX_16,
position: "absolute",
bottom: 0,
left: 0,
right: 0
}
});
export default function GuildPowerupsModal(props) {
const { guildId, analyticsLocation, autoOpenPerkId, autoOpenRequestId } = props;
const gameServerEnabled = useGameServerEnabled(guildId, "GuildPowerupsModal");
useLoadGuildPowerups(guildId);
useAutoDismissGuildPowerupsNotifications(guildId);
useShowGuildPowerupRollbackSheet(guildId, "GuildPowerupsModal", autoOpenPerkId != null);
const bottom = useSafeAreaInsets_native().bottom;
const styles = useStyles();
const analyticsLocations = useAnalyticsLocations.apply(void 0, [...analyticsLocation != null ? [analyticsLocation] : []]).analyticsLocations;
const buildGuildPowerupsSections = useBuildGuildPowerupsSections(guildId, gameServerEnabled);
const ref = useRef(void 0);
useEffect(() => {
if (autoOpenPerkId != null && autoOpenRequestId != null && ref.current !== autoOpenRequestId) {
for (const buildGuildPowerupsSection of buildGuildPowerupsSections) {
L15: {
done38: {
for (const listing of buildGuildPowerupsSection.listings) {
if (!(listing.type === "singlePerk" && listing.powerup.skuId === autoOpenPerkId)) {
if (listing.type !== "multiPerk") {
continue;
}
if (listing.group !== autoOpenPerkId && !listing.powerups.some((powerup) => powerup.skuId === autoOpenPerkId)) {
continue;
}
ref.current = autoOpenRequestId;
openGuildPowerupsMultiPerkBottomSheet({
guildId,
listing,
onDismiss: () => ModalActionCreators.pop()
});
break L15;
}
ref.current = autoOpenRequestId;
openGuildPowerupsBottomSheet({
guildId,
powerup: listing.powerup
});
break done38;
}
continue;
}
return void 0;
}
return void 0;
}
}
}, [autoOpenPerkId, autoOpenRequestId, guildId, buildGuildPowerupsSections]);
const callback = useCallback(() => {
ModalActionCreators.pop();
}, []);
const guildPowerupsBoostCount = useGuildPowerupsBoostCount(guildId);
const { available, spent, total } = guildPowerupsBoostCount;
return <AnalyticsLocationProvider value={analyticsLocations}>
<View style={styles.container}>
<View style={styles.headerContainer}>
<Header title={intl.string(GuildPowerups_messages.hjvcLO)} headerTitle={() => <GenericHeaderTitle title={intl.string(GuildPowerups_messages.hjvcLO)} />} headerTitleAlign="center" headerLeft={getHeaderCloseButton(callback)} />
</View>
<ScrollView contentContainerStyle={styles.scrollView}>
<View style={styles.boostInfoContainer}>
<GuildPowerupsBoostInfo count={available} type={BoostInfoType.AVAILABLE} />
<View style={styles.boostInfoSeparator} />
<GuildPowerupsBoostInfo count={spent} type={BoostInfoType.SPENT} />
<View style={styles.boostInfoSeparator} />
<GuildPowerupsBoostInfo count={total} type={BoostInfoType.TOTAL} />
</View>
<GuildPowerupsNotificationContainer guildId={guildId} />
{buildGuildPowerupsSections.map((buildGuildPowerupsSection) => {
const type = buildGuildPowerupsSection.type;
if (GuildPowerupType.LEVEL === type) {
return <GuildPowerupsLevelsSection key={buildGuildPowerupsSection.type} guildId={guildId} listings={buildGuildPowerupsSection.listings} />;
}
if (GuildPowerupType.PERK === type) {
return <GuildPowerupsPerksSection key={buildGuildPowerupsSection.type} guildId={guildId} listings={buildGuildPowerupsSection.listings} />;
}
return null;
})}
<GuildPowerupsRecentActivitySection guildId={guildId} />
</ScrollView>
<View style={[styles.boostButtonContainer, {
paddingBottom: bottom
}]}>
<GuildPowerupsBoostButton guildId={guildId} />
</View>
</View>
</AnalyticsLocationProvider>;
};