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

84 lines
3.6 KiB
TypeScript

// Metro module 11996 (f11997).
import { View } from "react-native";
import { ActivityTypes } from "../../../Constants";
import { jsx } from "react/jsx-runtime";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { HourglassIcon } from "../../../design/components/Icon/native/redesign/generated/HourglassIcon";
import isEmbeddedActivity from "../../activities/utils/isEmbeddedActivity";
import { AppsIcon } from "../../../design/components/Icon/native/redesign/generated/AppsIcon";
import { TvIcon } from "../../../design/components/Icon/native/redesign/generated/TvIcon";
import { MusicIcon } from "../../../design/components/Icon/native/redesign/generated/MusicIcon";
import { GameControllerIcon } from "../../../design/components/Icon/native/redesign/generated/GameControllerIcon";
import { useTimestampTickedNow } from "../../content_inventory/memberlist/useTimestampTickedNow";
import shouldShowActivityTimeBar from "../utils/shouldShowActivityTimeBar";
import Module712 from "../../../_bundle/Module712";
import { ActiveTimestamp } from "../../icymi/native/content_inventory/Badges";
import { getRichGameStateBadgeText, getEpisodeBadgeText } from "../../content_inventory/utils";
import { GroupIcon } from "../../../design/components/Icon/native/redesign/generated/GroupIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { TopicsIcon } from "../../../design/components/Icon/native/redesign/generated/TopicsIcon";
const useStyles = createStyles({
container: {
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: 4
},
bold: {
fontWeight: "bold"
}
});
export function TimestampBadge(props) {
const activity = props.activity;
const styles = useStyles();
const now = useTimestampTickedNow().now;
let start = activity.timestamps?.start;
if (start == null) {
start = activity.created_at;
}
if (start != null && !shouldShowActivityTimeBar(activity)) {
const end = activity.timestamps?.end;
let isCountDown = activity.timestamps?.isCountDown;
if (isCountDown == null) {
isCountDown = false;
}
let r30 = isCountDown && end != null && end > now;
if (r30 === void 0) {
r30 = false;
}
return <View style={styles.container}>
{jsx(r30 ? HourglassIcon : isEmbeddedActivity(activity) ? AppsIcon : activity.type === ActivityTypes.WATCHING ? TvIcon : activity.type === ActivityTypes.LISTENING ? MusicIcon : GameControllerIcon, {
size: "xxs",
color: Module712.colors.TEXT_FEEDBACK_POSITIVE
})}
<ActiveTimestamp entry={{
start,
end,
isCountDown
}} style={styles.bold} />
</View>;
}
return null;
}
export function PartyBadge(props) {
const activity = props.activity;
const styles = useStyles();
if (!isEmbeddedActivity(activity) && activity.party != null) {
const richGameStateBadgeText = getRichGameStateBadgeText(activity.state, activity.party);
return richGameStateBadgeText == null ? null : <View style={styles.container}>
<GroupIcon size="xxs" color={Module712.colors.TEXT_MUTED} />
<Text variant="text-sm/medium" color="text-muted">{richGameStateBadgeText}</Text>
</View>;
}
return null;
}
export function EpisodeBadge(props) {
const activity = props.activity;
const styles = useStyles();
const episodeBadgeText = getEpisodeBadgeText(activity.assets?.large_text);
return episodeBadgeText == null ? null : <View style={styles.container}>
<TopicsIcon size="xxs" color={Module712.colors.TEXT_MUTED} />
<Text variant="text-sm/medium" color="text-muted">{episodeBadgeText}</Text>
</View>;
}