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

87 lines
4.1 KiB
TypeScript

// Metro module 9019 (f9020).
import { View } from "react-native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { getTextForDisclosure, ApplicationDisclosure } from "../../applications/disclosures";
import { GlobeEarthIcon } from "../../../design/components/Icon/native/redesign/generated/GlobeEarthIcon";
import { EmbedIcon } from "../../../design/components/Icon/native/redesign/generated/EmbedIcon";
import SnowflakeUtils from "../../../utils/SnowflakeUtils";
import { getSecurityMessage } from "../scopes";
import { LinkIcon } from "../../../design/components/Icon/native/redesign/generated/LinkIcon";
import { intl, t } from "../../../intl/index.native";
import { LockIcon } from "../../../design/components/Icon/native/redesign/generated/LockIcon";
import { getApplicationDetailsText } from "../Utils";
import { HammerIcon } from "../../../design/components/Icon/native/redesign/generated/HammerIcon";
import { ClockIcon } from "../../../design/components/Icon/native/redesign/generated/ClockIcon";
import { OAuth2Scopes } from "../../../_bundle/Module8174";
import { RobotIcon } from "../../../design/components/Icon/native/redesign/generated/RobotIcon";
import { ShieldIcon } from "../../../design/components/Icon/native/redesign/generated/ShieldIcon";
import { Text } from "../../../design/components/Text/native/Text";
let useStyles;
const ApplicationDetailsEntry = function ApplicationDetailsEntry(props) {
const { iconComponent, text } = props;
const styles = useStyles();
return <View style={styles.entry}>
{iconComponent != null ? iconComponent({
style: styles.entryIcon
}) : null}
<Text variant="text-sm/normal" color="text-default" style={styles.entryText}>{text}</Text>
</View>;
};
useStyles = createStyles({
applicationDetails: {
flexDirection: "column",
gap: 16
},
entry: {
flexDirection: "row",
alignItems: "center",
gap: 8
},
entryText: {
flex: 1
},
entryIcon: {
width: 16,
height: 16,
tintColor: Module712.colors.TEXT_MUTED
}
});
export default function ApplicationDetails(props) {
const { application, scopes: scopes2, redirectUri, approximateGuildCount, isEmbeddedFlow, disclosures: disclosures2, connectedAccount } = props;
const styles = useStyles();
const date = new Date(SnowflakeUtils.extractTimestamp(application.id));
const securityMessage = getSecurityMessage(scopes2);
let origin = null;
if (redirectUri != null && !isEmbeddedFlow) {
try {
origin = new URL(redirectUri).href.split("/").slice(0, 3).join("/");
} catch ($e) {
origin = redirectUri;
}
}
const r72 = [origin != null ? <ApplicationDetailsEntry iconComponent={LinkIcon} text={intl.format(t["5k5OKD"], {
origin
})} /> : null, <ApplicationDetailsEntry iconComponent={LockIcon} text={getApplicationDetailsText(application)} />, , , , , ,];
const r85 = connectedAccount != null ? <ApplicationDetailsEntry iconComponent={HammerIcon} text={intl.string(t["8qui3M"])} /> : null;
const date2 = date;
r72[2] = r85;
r72[3] = <ApplicationDetailsEntry iconComponent={ClockIcon} text={intl.formatToPlainString(t["+1bjc8"], {
date: date2
})} />;
r72[4] = scopes2.includes(OAuth2Scopes.BOT) ? approximateGuildCount != null ? <ApplicationDetailsEntry iconComponent={RobotIcon} text={intl.formatToPlainString(t.UHGHSP, {
guildCount: approximateGuildCount
})} /> : null : null;
r72[5] = <ApplicationDetailsEntry iconComponent={ShieldIcon} text={securityMessage} />;
r72[6] = disclosures2 != null ? disclosures2.map((item) => {
const textForDisclosure = getTextForDisclosure(item);
const props = ApplicationDisclosure.IP_LOCATION === item ? {
iconComponent: GlobeEarthIcon
} : ApplicationDisclosure.DISPLAYS_ADVERTISEMENTS === item ? {
iconComponent: EmbedIcon
} : null;
return props != null ? textForDisclosure != null ? <ApplicationDetailsEntry key={item.toFixed()} text={textForDisclosure} {...props} /> : null : null;
}) : null;
return <View style={styles.applicationDetails}>{r72}</View>;
};