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

82 lines
4.3 KiB
TypeScript

// Metro module 9062 (f9063).
import { useMemo } from "react";
import { View } from "react-native";
import PresenceStore from "../../../stores/PresenceStore";
import RelationshipStore from "../../../stores/RelationshipStore";
import UserStore from "../../../stores/UserStore";
import { DOT_UNICODE } from "../ActivityStatusConstants";
import { ActivityTypes } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../_bundle/Module589";
import useDiscoverableApplicationStream from "../../blocking/useDiscoverableApplicationStream";
import useUserVoiceActivity from "../useUserVoiceActivity";
import { useGameMentionsAsPlainText } from "../../game_mentions/hooks/useGameMentionsAsPlainText";
import ApplicationStreamActivityStatus from "./ApplicationStreamActivityStatus";
import isGameActivity from "../../activities/utils/isGameActivity";
import PresenceActivityStatus from "./PresenceActivityStatus";
import VoiceActivityStatus from "./VoiceActivityStatus";
import ActivityEmoji from "./ActivityEmoji";
import ActivityStatusText from "./ActivityStatusText";
const useStyles = createStyles({
container: {
flexDirection: "row",
alignItems: "center",
gap: 4
},
icon: {
marginTop: 1
},
emoji: {
marginRight: 0
}
});
export default function ActivityStatus(props) {
let r71;
let stateFromStores;
const { userId, guildId, iconStyle, textStyle, emojiSize = 14, maxFontSizeMultiplier, animate = true, hideEmoji = false } = props;
stateFromStores = void 0;
const styles = useStyles();
const stateFromStores2 = useStateFromStores([UserStore], () => UserStore.getUser(userId));
stateFromStores = useStateFromStores([PresenceStore], () => PresenceStore.getActivities(userId));
const discoverableApplicationStream = useDiscoverableApplicationStream(userId);
const voiceChannel = useUserVoiceActivity({
userId,
guildId
}).voiceChannel;
const memo = useMemo(() => {
const r3 = stateFromStores == null ? void 0 : stateFromStores.find((stateFromStore) => stateFromStore.type === ActivityTypes.CUSTOM_STATUS);
if (r3 == null) {
return null;
}
const state = r3.state;
let r4 = state == null ? void 0 : state.trim();
if (r4 == null) {
r4 = null;
}
return (r4 !== "" ? r4 : null) == null ? r3.emoji == null ? null : r3 : r3;
}, [stateFromStores]);
const gameMentionsAsPlainText = useGameMentionsAsPlainText(memo?.state);
if (useStateFromStores([RelationshipStore], () => RelationshipStore.isBlockedOrIgnored(userId))) {
return null;
}
const bot = stateFromStores2?.bot;
const state = memo?.state;
const hideIcon = bot === true;
const hideText = state != null;
if (discoverableApplicationStream != null) {
r71 = <ApplicationStreamActivityStatus game={stateFromStores == null ? void 0 : stateFromStores.find(isGameActivity)} iconStyle={[styles.icon, iconStyle]} textStyle={textStyle} maxFontSizeMultiplier={maxFontSizeMultiplier} hideIcon={hideIcon} hideText={hideText} />;
} else {
const activity = stateFromStores == null ? void 0 : stateFromStores.find(({ type }) => type !== ActivityTypes.CUSTOM_STATUS && type !== ActivityTypes.HANG_STATUS);
r71 = activity != null ? <PresenceActivityStatus activity={activity} iconStyle={[styles.icon, iconStyle]} textStyle={textStyle} maxFontSizeMultiplier={maxFontSizeMultiplier} hideIcon={hideIcon} hideText={hideText} /> : voiceChannel != null ? <VoiceActivityStatus channel={voiceChannel} iconStyle={[styles.icon, iconStyle]} textStyle={textStyle} maxFontSizeMultiplier={maxFontSizeMultiplier} hideIcon={hideIcon} hideText={hideText} /> : null;
}
const r96 = memo == null ? null : memo != null ? <>
{memo.emoji != null && !hideEmoji && <ActivityEmoji emoji={memo.emoji} size={emojiSize} animate={animate} style={styles.emoji} />}
{memo.state != null && <ActivityStatusText variant="text-xs/normal" style={textStyle} maxFontSizeMultiplier={maxFontSizeMultiplier}>{gameMentionsAsPlainText}</ActivityStatusText>}
</> : null;
return <View style={styles.container}>
{r71}
{r71 != null && r96 != null && <ActivityStatusText variant="text-xs/normal" style={textStyle} maxFontSizeMultiplier={maxFontSizeMultiplier} accessibilityElementsHidden importantForAccessibility="no-hide-descendants">{DOT_UNICODE}</ActivityStatusText>}
{r96}
</View>;
};