128 lines
5.5 KiB
TypeScript
128 lines
5.5 KiB
TypeScript
// Metro module 10191 (f10192).
|
|
import * as Module19 from "react";
|
|
import { useMemo, useCallback } from "react";
|
|
import { View } from "react-native";
|
|
import { createChannelRecordFromInvite } from "../../../records/ChannelRecord";
|
|
import { Routes } from "../../../Constants";
|
|
import { createStyles } from "../../../design/components/Styles/native/createStyles";
|
|
import { useGetOrFetchApplication } from "../../applications/useGetOrFetchApplications";
|
|
import { useCanUnlinkLobbyChannel } from "../../lobbies/LobbyUtils";
|
|
import useShowUnlinkChannelAlert from "../../integration_settings/native/useShowUnlinkChannelAlert";
|
|
import AlertActionCreators from "../../../actions/native/AlertActionCreators";
|
|
import { intl, t } from "../../../intl/index.native";
|
|
import { ArrowSmallRightIcon } from "../../../design/components/Icon/native/redesign/generated/ArrowSmallRightIcon";
|
|
import { transitionTo } from "../../routing/router_utils";
|
|
import InstantInviteIcons from "./InstantInviteIcons";
|
|
import { Card } from "../../../design/components/Card/native/Card.native";
|
|
import { Stack } from "../../../design/components/Stack/native/Stack.native";
|
|
import GameIcon, { GameIconSizes } from "../../game_detection/native/GameIcon";
|
|
import { Text } from "../../../design/components/Text/native/Text";
|
|
import { ContextMenu } from "../../../design/components/ContextMenu/native/ContextMenu.native";
|
|
import { IconButton } from "../../../design/components/Button/native/IconButton.native";
|
|
import { InstantInviteDetails } from "./InstantInviteCode";
|
|
import DetailedGuildIdentityUserRow from "../../guild_settings/native/DetailedGuildIdentityUserRow";
|
|
import { useInviteActions } from "./InstantInviteUtils";
|
|
import InviteRolesDisplay from "../../instant_invite/native/InviteRolesDisplay";
|
|
import InstantInviteUsesLabel from "./InstantInviteUsesLabel";
|
|
const useStyles = createStyles({
|
|
creatorWrapper: {
|
|
marginLeft: -16,
|
|
marginBottom: -16,
|
|
marginTop: 8,
|
|
flex: 1
|
|
},
|
|
gameWrapper: {
|
|
flex: 1,
|
|
flexDirection: "row",
|
|
alignItems: "center",
|
|
gap: 8
|
|
},
|
|
gameText: {
|
|
flex: 1
|
|
}
|
|
});
|
|
const r38 = Module19.memo(function({ invite, onInviteRevoked }) {
|
|
const styles = useStyles();
|
|
const { uses, maxUses } = invite;
|
|
const id = invite.guild?.id;
|
|
const memo2 = useMemo(() => createChannelRecordFromInvite(invite.channel), [invite]);
|
|
const inviteActions = useInviteActions({
|
|
invite,
|
|
onInviteRevoked
|
|
});
|
|
const memo = useMemo(() => invite.roles.map((role) => role.id), [invite.roles]);
|
|
let r36 = memo.length > 0 && id != null;
|
|
const r57 = [<Stack direction="horizontal" justify="space-between">
|
|
<Text variant="text-lg/bold" tabularNumbers>{invite.code}</Text>
|
|
<ContextMenu items={inviteActions}>
|
|
{({ ref, ...props }) => <IconButton size="sm" variant="secondary" icon={InstantInviteIcons.more} accessibilityLabel={intl.string(t.DEoVWZ)} ref={ref} {...props} />}
|
|
</ContextMenu>
|
|
</Stack>, <InstantInviteDetails channel={memo2} expiresAt={invite.getExpiresAt()} />, , ,];
|
|
if (r36) {
|
|
r36 = <InviteRolesDisplay roleIds={memo} guildId={id} />;
|
|
}
|
|
r57[2] = r36;
|
|
r57[3] = <Stack direction="horizontal" align="flex-end">
|
|
<View style={styles.creatorWrapper}>
|
|
{invite.inviter?.id != null ? <DetailedGuildIdentityUserRow start end userId={invite.inviter?.id} guildId={id} /> : null}
|
|
</View>
|
|
<InstantInviteUsesLabel uses={uses} maxUses={maxUses} />
|
|
</Stack>;
|
|
return <Card>{r57}</Card>;
|
|
});
|
|
export default r38;
|
|
export function LinkedChannelInvite(props) {
|
|
const channel = props.channel;
|
|
const styles = useStyles();
|
|
const linked_by = channel.linkedLobby?.linked_by;
|
|
const getOrFetchApplication = useGetOrFetchApplication(channel.linkedLobby?.application_id);
|
|
const canUnlinkLobbyChannel = useCanUnlinkLobbyChannel(channel);
|
|
const id = channel.id;
|
|
let r35 = getOrFetchApplication?.name;
|
|
if (r35 == null) {
|
|
r35 = "";
|
|
}
|
|
const showUnlinkChannelAlert = useShowUnlinkChannelAlert(id, r35);
|
|
let c17756_2 = showUnlinkChannelAlert;
|
|
const callback = useCallback(() => {
|
|
if (canUnlinkLobbyChannel) {
|
|
c17756_2();
|
|
} else {
|
|
AlertActionCreators.show({
|
|
title: intl.string(t.JmUENg),
|
|
body: intl.string(t.SrvsML)
|
|
});
|
|
}
|
|
}, [canUnlinkLobbyChannel, showUnlinkChannelAlert]);
|
|
return <Card>
|
|
<Stack direction="horizontal" justify="space-between">
|
|
<View style={styles.gameWrapper}>
|
|
<GameIcon game={getOrFetchApplication} size={GameIconSizes.SIZE_24} />
|
|
<Text ellipsizeMode="tail" lineClamp={1} variant="text-lg/bold" style={styles.gameText}>
|
|
{getOrFetchApplication?.name}
|
|
</Text>
|
|
</View>
|
|
<ContextMenu items={useMemo(() => [{
|
|
label: intl.string(t.aW2YlJ),
|
|
IconComponent: ArrowSmallRightIcon,
|
|
action: () => {
|
|
transitionTo(Routes.CHANNEL(channel.guild_id, channel.id));
|
|
}
|
|
}, {
|
|
label: intl.string(t.JmUENg),
|
|
iconSource: InstantInviteIcons.revoke,
|
|
variant: "destructive",
|
|
action: callback
|
|
}], [channel.guild_id, channel.id, callback])}>
|
|
{({ ref, ...props }) => <IconButton size="sm" variant="secondary" icon={InstantInviteIcons.more} accessibilityLabel={intl.string(t.DEoVWZ)} ref={ref} {...props} />}
|
|
</ContextMenu>
|
|
</Stack>
|
|
<InstantInviteDetails channel={channel} />
|
|
<Stack direction="horizontal" align="flex-end">
|
|
<View style={styles.creatorWrapper}>
|
|
{linked_by != null ? <DetailedGuildIdentityUserRow start end userId={linked_by} guildId={channel.guild_id} /> : null}
|
|
</View>
|
|
</Stack>
|
|
</Card>;
|
|
}
|