This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,15 @@
// Metro module 13099 (f13100).
import PermissionStore from "../../../stores/PermissionStore";
import { Permissions } from "../../../Constants";
import { useStateFromStoresObject } from "../../../_bundle/Module589";
export function useGuildActionSheetPermissions(a0) {
return useStateFromStoresObject([PermissionStore], () => a0 == null ? {
canAccessSettings: false,
canEditNickname: false,
canManageChannels: false
} : {
canAccessSettings: PermissionStore.canAccessGuildSettings(a0),
canEditNickname: PermissionStore.can(Permissions.CHANGE_NICKNAME, a0) || PermissionStore.can(Permissions.MANAGE_NICKNAMES, a0),
canManageChannels: PermissionStore.can(Permissions.MANAGE_CHANNELS, a0)
}, [a0]);
}
@@ -0,0 +1,66 @@
// Metro module 13109 (f13110).
import ChannelMemberStore from "../../../stores/ChannelMemberStore";
import ChannelStore from "../../../stores/ChannelStore";
import GuildMemberCountStore from "../../../stores/GuildMemberCountStore";
import UserStore from "../../../stores/UserStore";
import VoiceStateStore from "../../../stores/VoiceStateStore";
import Module589 from "../../../_bundle/Module589";
import Dispatcher from "../../../Dispatcher";
let c9066_5 = {};
let c9066_6 = c9066_5;
class GuildHeaderCountsStore extends Module589.PersistedStore {
static displayName = "GuildHeaderCountsStore";
static persistKey = "GuildHeaderCountsStore";
initialize(r2 = c9066_5) {
this.waitFor(GuildMemberCountStore, ChannelMemberStore, UserStore, ChannelStore, VoiceStateStore, ChannelMemberStore);
if (r2 == null) {
r2 = c9066_5;
}
c9066_6 = r2;
}
getState() {
return c9066_6;
}
getActiveChannelsCount(a0) {
return c9066_6[a0]?.activeChannelsCount;
}
getOnlineCount(a0) {
return c9066_6[a0]?.onlineCount;
}
getMemberCount(a0) {
return c9066_6[a0]?.memberCount;
}
}
const guildHeaderCountsStore = new GuildHeaderCountsStore(Dispatcher, {
GUILD_HEADER_MEMBER_COUNT: function handleMemberCount({ guildId, count }) {
if (c9066_6[guildId] == null) {
c9066_6[guildId] = {
activeChannelsCount: void 0,
onlineCount: void 0,
memberCount: void 0
};
}
c9066_6[guildId].memberCount = count;
},
GUILD_HEADER_ONLINE_COUNT: function handleOnlineCount({ guildId, count }) {
if (c9066_6[guildId] == null) {
c9066_6[guildId] = {
activeChannelsCount: void 0,
onlineCount: void 0,
memberCount: void 0
};
}
c9066_6[guildId].onlineCount = count;
},
GUILD_HEADER_ACTIVE_CHANNELS_COUNT: function handleActiveChannelsCount({ guildId, count }) {
if (c9066_6[guildId] == null) {
c9066_6[guildId] = {
activeChannelsCount: void 0,
onlineCount: void 0,
memberCount: void 0
};
}
c9066_6[guildId].activeChannelsCount = count;
}
});
export default guildHeaderCountsStore;
@@ -0,0 +1,51 @@
// Metro module 13110 (f13111).
import { memo } from "react";
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { useBottomSheetRef } from "../../../../design/components/Sheet/native/useBottomSheetRef";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
import { isAndroid } from "../../../../utils/PlatformUtils";
import GuildActionSheetHeader from "./GuildActionSheetHeader";
import GuildActionSheetTabItems from "./GuildActionSheetTabItems";
import { GuildUnreadAction, GuildActionSheetPrimaryActions, GuildActionSheetSecondaryActions, GuildDeveloperOptionAction } from "./GuildActionSheetActions";
import GuildActionSheetProgress from "./GuildActionSheetProgress";
import GuildActionSheetEmojiSection from "./GuildActionSheetEmojiSection";
import { ActionSheetHeaderBar } from "../../../../design/components/Sheet/native/ActionSheetHeaderBar.native";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
},
actions: {
paddingHorizontal: 16,
gap: 24
}
});
const r35 = memo(function GuildActionSheet(props) {
const { guild, expanded = false } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const bottomSheetRef2 = useBottomSheetRef();
const { bottomSheetRef, bottomSheetClose } = bottomSheetRef2;
return <BottomSheet ref={bottomSheetRef} handleDisabled showGradient scrollable startExpanded={expanded}>
<BottomSheetScrollView scrollsToTop={false} style={styles.container} contentContainerStyle={{
paddingBottom: bottom + (isAndroid() ? 16 : 0)
}}>
<GuildActionSheetHeader guild={guild} />
<GuildActionSheetTabItems guild={guild} />
<View style={styles.actions}>
<GuildUnreadAction guild={guild} />
<GuildActionSheetProgress guild={guild} />
<GuildActionSheetPrimaryActions guild={guild} />
<GuildActionSheetSecondaryActions guild={guild} />
<GuildDeveloperOptionAction guild={guild} />
<GuildActionSheetEmojiSection guildId={guild.id} />
</View>
<ActionSheetHeaderBar variant="floating" onPress={bottomSheetClose} />
</BottomSheetScrollView>
</BottomSheet>;
});
export default r35;
@@ -0,0 +1,392 @@
// Metro module 13048 (f13049).
import { useCallback, Fragment, lazy } from "react";
import { View } from "react-native";
import NewChannelsStore from "../../../recent_channels/NewChannelsStore";
import UserSettingsProtoStore from "../../../user_settings/UserSettingsProtoStore";
import { getGuildIconURL, isGuildOwner } from "../../../../records/GuildRecord";
import GuildReadStateStore from "../../../../stores/GuildReadStateStore";
import GuildRoleStore from "../../../../stores/GuildRoleStore";
import ReadStateStore from "../../../../stores/ReadStateStore";
import UserGuildSettingsStore from "../../../../stores/UserGuildSettingsStore";
import UserStore from "../../../../stores/UserStore";
import { AVATAR_MAX_SIZE, AnalyticsSections, ChannelTypes, GuildFeatures, Fonts } from "../../../../Constants";
import { CHANNELS_AND_ROLES_MODAL_KEY } from "../../../guild_onboarding/native/GuildOnboardingConstants";
import { GuildTagBadgeSize } from "../../../guild_tag/GuildTagConstants";
import { ReadStateTypes } from "../../../read_states/ReadStateConstants";
import { jsx } from "react/jsx-runtime";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { ActionSheetSwitchRow, ActionSheetRow } from "../../../../design/components/Sheet/native/ActionSheetRow.native";
import { intl, t } from "../../../../intl/index.native";
import ChannelCollapseActionCreators from "../../../../actions/ChannelCollapseActionCreators";
import useGuildOnboardingAvailable from "../../../guild_onboarding/useGuildOnboardingAvailable";
import { useIsDismissibleContentDismissed_UNSAFE } from "../../../dismissible_content/DismissibleContentUnsafeUtils";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { MAX_NEW_CHANNELS_TO_SHOW } from "../../../guild_sidebar/ChannelListState";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import { NewBadge } from "../../../channel_list_v2/native/components/index";
import NicknameUtils from "../../../../utils/NicknameUtils";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import useOpenProfileSettings from "../../../profile_customization/useOpenProfileSettings";
import { Avatar, AvatarSizes } from "../../../../design/void/native";
import DiscordTag from "../../../user_profile/native/DiscordTag";
import useIsServerThemeAvailableForGuild from "../../../premium/powerups/hooks/useIsServerThemeAvailableForGuild";
import { GuildThemeSourcePreference } from "../../../../_bundle/Module1306";
import { setGuildThemeSourcePreferenceOverride } from "../../../user_settings/UserSettingsProtoActionCreators";
import * as _GuildSettingsServerTagUtils from "../../../guild_settings/GuildSettingsServerTagUtils";
import { getGuildTagBadgeUrl } from "../../../guild_tag/GuildTagUtils";
import { BaseGuildTagChiplet } from "../../../guild_tag/native/GuildTag";
import { Text } from "../../../../design/components/Text/native/Text";
import { RestrictedGuildIds, DeveloperMode } from "../../../user_settings/UserSettings";
import { getSanitizedRestrictedGuilds } from "../../../../utils/UserSettingsUtils";
import NotificationSettingsModalActionCreators from "../../../../actions/NotificationSettingsModalActionCreators";
import { useShouldUseNewNotificationSystem } from "../../../notifications/NotificationUtils";
import { NotificationLabels } from "../../../../utils/NotificationSettingsUtils";
import markGuildsAsRead from "../../../guild/markGuildsAsRead";
import { useGuildActionSheetPermissions } from "../GuildActionSheetUtils";
import useCanCreateAnEvent from "../../../guild_scheduled_events/useCanCreateAnEvent";
import { isVerifiedRolesChannelVisible } from "../../../connections/ConnectionsUtils";
import CreateChannelModalActionCreators from "../../../../actions/native/CreateChannelModalActionCreators";
import { openCreateOrEditGuildEventModal } from "../../../guild_scheduled_events/native/GuildScheduledEventModalActionCreators";
import { openGuildRoleConnectionsModal } from "../../../connections/native/GuildRoleConnectionsModalActionCreators";
import { openAlert } from "../../../../design/components/AlertModal/native/useAlertStore.native";
import Module38 from "../../../../_bundle/Module38";
import { useMessageRequestPrivacyOption } from "../../../message_request/native/hooks/useMessageRequestPrivacyOption";
import { useCanReportRaid } from "../../../guild_antiraid/GuildAntiRaidPermissionsUtils";
import { useGuildIncidentsState } from "../../../guild_antiraid/GuildAntiRaidHooks";
import { useOptInEnabledForGuild } from "../../../opt_in_channels/isOptInEnabled";
import { toggleShowAllChannels } from "../../../opt_in_channels/OptInOnboardingUtils";
import { openReportRaidModal } from "../../../guild_antiraid/GuildAntiRaidModalActionCreators.native";
import { showReportModalForGuild } from "../../../in_app_reports/ReportModals";
import { GuildIncidentActionSources } from "../../../guild_antiraid/GuildAntiRaidTypes";
import TidaWebformExperiment from "../../../guild/TidaWebformExperiment";
import { copy } from "../../../../utils/ClipboardUtils.native";
import { presentIdCopied, presentLinkCopied } from "../../../toast/native/ToastUtils";
import AvatarUtils from "../../../../utils/AvatarUtils";
let useStyles, BrowseChannelsOption, ChangeIdentityOption, GuildThemePreferenceOption, ServerTagOption, RestrictedGuildPrivacyOption, NotificationAction, $mk90767 = function() {
return () => import("./LeaveServerAlert");
};
const HideMutedChannelsOption = function HideMutedChannelsOption(props) {
const guild = props.guild;
const stateFromStores2 = useStateFromStores([UserGuildSettingsStore], () => UserGuildSettingsStore.isGuildCollapsed(guild.id));
return <ActionSheetSwitchRow label={intl.string(t.UwOLJO)} value={stateFromStores2} onValueChange={() => ChannelCollapseActionCreators.toggleCollapseGuild(guild.id)} />;
};
BrowseChannelsOption = function BrowseChannelsOption(props) {
const guild2 = props.guild;
const guildOnboardingAvailable = useGuildOnboardingAvailable(guild2);
const isDismissibleContentDismissed_UNSAFE = useIsDismissibleContentDismissed_UNSAFE(DismissibleContent.CHANNEL_BROWSER_NEW_BADGE_NUX);
const stateFromStores2 = useStateFromStores([ReadStateStore], () => ReadStateStore.hasUnread(guild2.id, ReadStateTypes.GUILD_ONBOARDING_QUESTION));
const stateFromStores3 = useStateFromStores([NewChannelsStore], () => NewChannelsStore.getNewChannelIds(guild2.id).size > MAX_NEW_CHANNELS_TO_SHOW);
const callback2 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
ModalActionCreators.pushLazy(import("../../../guild_onboarding/native/ChannelsAndRolesModal"), {
guildId: guild2.id
}, CHANNELS_AND_ROLES_MODAL_KEY);
}, [guild2.id]);
return guild2.features.has(GuildFeatures.COMMUNITY) ? <ActionSheetRow trailing={isDismissibleContentDismissed_UNSAFE && !stateFromStores2 ? stateFromStores3 ? <NewBadge /> : null : <NewBadge />} onPress={callback2} label={guildOnboardingAvailable ? intl.string(t.h9mGOP) : intl.string(t.et6wav)} /> : null;
};
ChangeIdentityOption = function ChangeIdentityOption(props) {
const { guild: guild12, user } = props;
const styles = useStyles();
const nickname = NicknameUtils.getNickname(guild12.id, void 0, user);
let c20359_0 = useOpenProfileSettings({
guild: guild12,
analyticsLocations: useAnalyticsLocations(AnalyticsLocation.GUILD_SETTINGS).analyticsLocations
});
return <ActionSheetRow label={intl.string(guild12.features.has(GuildFeatures.HUB) ? t["+MWrWt"] : t["PKQB/H"])} subLabel={user != null ? user.hasAvatarForGuild(guild12.id) ? <View style={styles.identitySublabel}>
<Avatar size={AvatarSizes.SIZE_16} style={styles.guildServerAvatar} user={user} guildId={guild12.id} />
<DiscordTag user={user} nick={nickname} usernameStyle={styles.identityName} discriminatorStyle={styles.identityName} nicknameStyle={styles.identityName} />
</View> : nickname : nickname} onPress={function onPress() {
ActionSheetActionCreators.hideActionSheet();
c20359_0();
}} />;
};
GuildThemePreferenceOption = function GuildThemePreferenceOption(props) {
const guild3 = props.guild;
const isServerThemeAvailableForGuild = useIsServerThemeAvailableForGuild(guild3.id, "GuildActionSheetActions");
const stateFromStores2 = useStateFromStores([UserSettingsProtoStore], () => UserSettingsProtoStore.resolveGuildThemeSourcePreference(guild3.id), [guild3.id]);
const callback2 = useCallback((a0) => {
setGuildThemeSourcePreferenceOverride(guild3.id, a0 ? GuildThemeSourcePreference.GUILD : GuildThemeSourcePreference.PERSONAL);
}, [guild3.id]);
return isServerThemeAvailableForGuild ? <ActionSheetSwitchRow label={intl.string(t.CFzDOG)} value={stateFromStores2 === GuildThemeSourcePreference.GUILD} onValueChange={callback2} /> : null;
};
ServerTagOption = function ServerTagOption(props) {
const guild4 = props.guild;
const styles = useStyles();
const canViewMobileServerTag = _GuildSettingsServerTagUtils.canViewMobileServerTag(guild4.id);
const callback2 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
ActionSheetActionCreators.openLazy(import("../../../guild_settings/native/ServerTagPreviewActionSheet"), `ServerTagPreviewActionSheet:${guild4.id}`, {
guildId: guild4.id
});
}, [guild4.id]);
if (canViewMobileServerTag) {
const guildTagBadgeUrl = getGuildTagBadgeUrl(guild4.id, guild4.profile?.badge, GuildTagBadgeSize.SIZE_16);
let guildTag = guild4.profile?.tag;
if (guildTag == null) {
guildTag = void 0;
}
return <ActionSheetRow label={<View style={styles.serverTagLabel}>
<View accessibilityElementsHidden importantForAccessibility="no-hide-descendants">
<BaseGuildTagChiplet guildTag={guildTag} guildBadge={guildTagBadgeUrl} badgeSize={GuildTagBadgeSize.SIZE_16} />
</View>
<Text variant="heading-md/semibold" color="mobile-text-heading-primary">
{intl.string(t["2QmKZ2"])}
</Text>
</View>} onPress={callback2} />;
}
return null;
};
RestrictedGuildPrivacyOption = function RestrictedGuildPrivacyOption(props) {
const guild5 = props.guild;
const r6 = RestrictedGuildIds.useSetting().includes(guild5.id);
return <ActionSheetSwitchRow label={intl.string(t.KXNTgb)} subLabel={guild5.features.has(GuildFeatures.HUB) ? intl.string(t["2YwzGs"]) : intl.string(t.jMFSQV)} value={!r6} onValueChange={function onValueChange(value) {
const sanitizedRestrictedGuilds = getSanitizedRestrictedGuilds();
if (value) {
sanitizedRestrictedGuilds.delete(guild5.id);
} else {
sanitizedRestrictedGuilds.add(guild5.id);
}
RestrictedGuildIds.updateSetting(Array.from(sanitizedRestrictedGuilds));
}} />;
};
NotificationAction = function NotificationAction(props) {
const guild6 = props.guild;
return <ActionSheetRow label={intl.string(t.HcoRu0)} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
NotificationSettingsModalActionCreators.open(guild6.id);
}} />;
};
useStyles = createStyles({
guildServerAvatar: {
marginRight: 4
},
identityName: {
color: Module712.colors.INTERACTIVE_TEXT_DEFAULT,
fontFamily: Fonts.PRIMARY_MEDIUM,
fontSize: 12
},
identitySublabel: {
flexDirection: "row"
},
serverTagLabel: {
flexDirection: "row",
alignItems: "center",
columnGap: Module712.space.PX_8
}
});
export { RestrictedGuildPrivacyOption };
export { NotificationAction };
export function GuildUnreadAction(props) {
let callback, stateFromStores;
const guild7 = props.guild;
callback = void 0;
stateFromStores = void 0;
const stateFromStores2 = useStateFromStores([GuildReadStateStore], () => GuildReadStateStore.getGuildHasUnreadIgnoreMuted(guild7.id), [guild7]);
let r25 = useShouldUseNewNotificationSystem("GuildUnreadAction");
callback = useCallback(() => {
NotificationSettingsModalActionCreators.updateGuildNotificationSettings(guild7.id, {
muted: false
}, NotificationLabels.Unmuted);
}, [guild7.id]);
stateFromStores = useStateFromStores([UserGuildSettingsStore], () => UserGuildSettingsStore.isMuted(guild7.id));
const Group = ActionSheetRow.Group;
const children = [<ActionSheetRow label={intl.string(t.e6RscS)} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
markGuildsAsRead([guild7.id], AnalyticsSections.GUILD_POPOUT);
}} disabled={!stateFromStores2} />, , ,];
if (r25) {
r25 = <ActionSheetRow label={stateFromStores ? intl.string(t.De0BTC) : intl.string(t.vRzp7P)} onPress={() => {
if (stateFromStores) {
callback();
} else {
ActionSheetActionCreators.hideActionSheet();
ActionSheetActionCreators.openLazy(import("../../../main_tabs_v2/native/sidebar/details/screens/MuteSettingsActionSheet"), `muteSettings${guild7.id}`, {
guildId: guild7.id
});
}
}} />;
}
children[1] = r25;
children[2] = guild7.features.has(GuildFeatures.COMMUNITY) ? <BrowseChannelsOption guild={guild7} /> : null;
return <Group hasIcons={false}>{children}</Group>;
}
export function GuildActionSheetPrimaryActions(props) {
const guild8 = props.guild;
const canManageChannels = useGuildActionSheetPermissions(guild8).canManageChannels;
const canCreateAnEvent = useCanCreateAnEvent(guild8.id);
const stateFromStores2 = useStateFromStores([GuildRoleStore], () => isVerifiedRolesChannelVisible(GuildRoleStore.getSortedRoles(guild8.id)));
const r29 = [];
if (canManageChannels) {
r29.push(<ActionSheetRow label={intl.string(t["fUYU+j"])} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
CreateChannelModalActionCreators.open(null, guild8.id, null, null);
}} />);
r29.push(<ActionSheetRow label={intl.string(t["ISN+NM"])} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
CreateChannelModalActionCreators.open(ChannelTypes.GUILD_CATEGORY, guild8.id, null, null);
}} />);
}
if (canCreateAnEvent) {
r29.push(<ActionSheetRow label={intl.string(t["60lJ0C"])} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
openCreateOrEditGuildEventModal(guild8, {});
}} />);
}
if (stateFromStores2) {
r29.push(<ActionSheetRow label={intl.string(t.ghtnss)} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
openGuildRoleConnectionsModal({
guildId: guild8.id,
onClose: () => {}
});
}} />);
}
return r29.length !== 0 ? <ActionSheetRow.Group hasIcons={false}>
{r29.map((item, index) => <Fragment key={index}>
{item}
</Fragment>)}
</ActionSheetRow.Group> : null;
}
export function handleLeaveServer(a0) {
ActionSheetActionCreators.hideActionSheet();
openAlert("guild-action-sheet-leave-server", jsx(lazy($mk90767()), {
guild: a0
}));
}
export function GuildActionSheetDirectoryActions(props) {
const guild9 = props.guild;
const currentUser = UserStore.getCurrentUser();
Module38(currentUser != null, "GuildActionSheetDirectoryActions: user cannot be undefined");
const r9 = [];
const isGuildOwner2 = isGuildOwner(guild9, currentUser);
r9.push(<NotificationAction guild={guild9} />);
r9.push(<ChangeIdentityOption guild={guild9} user={currentUser} />);
r9.push(<RestrictedGuildPrivacyOption guild={guild9} />);
const messageRequestPrivacyOption = useMessageRequestPrivacyOption({
guild: guild9
});
if (messageRequestPrivacyOption != null) {
r9.push(messageRequestPrivacyOption);
}
if (!isGuildOwner2) {
r9.push(<ActionSheetRow label={guild9.features.has(GuildFeatures.HUB) ? intl.string(t.Dv8gFT) : intl.string(t.J2TBi3)} variant="danger" onPress={() => {
ActionSheetActionCreators.hideActionSheet();
openAlert("guild-action-sheet-leave-server", jsx(lazy($mk90767()), {
guild: guild9
}));
}} />);
}
return r9.length !== 0 ? <ActionSheetRow.Group hasIcons={false}>
{r9.map((item, index) => <Fragment key={index}>
{item}
</Fragment>)}
</ActionSheetRow.Group> : null;
}
export function GuildActionSheetSecondaryActions(props) {
const guild10 = props.guild;
const currentUser = UserStore.getCurrentUser();
const isGuildOwner2 = isGuildOwner(guild10, currentUser);
const canReportRaid = useCanReportRaid(guild10);
const guildIncidentsState = useGuildIncidentsState(guild10.id);
const { shouldShowIncidentActions, isUnderLockdown } = guildIncidentsState;
const r9 = [];
const optInEnabledForGuild = useOptInEnabledForGuild(guild10.id);
r9.push(<ChangeIdentityOption guild={guild10} user={currentUser} />);
r9.push(<GuildThemePreferenceOption guild={guild10} />);
r9.push(<ServerTagOption guild={guild10} />);
if (guild10.features.has(GuildFeatures.COMMUNITY)) {
r9.push(<ActionSheetSwitchRow label={intl.string(t.FB2ZZV)} value={!optInEnabledForGuild} onValueChange={() => toggleShowAllChannels(guild10.id)} />);
}
r9.push(<HideMutedChannelsOption guild={guild10} />);
r9.push(<RestrictedGuildPrivacyOption guild={guild10} />);
const messageRequestPrivacyOption = useMessageRequestPrivacyOption({
guild: guild10
});
if (messageRequestPrivacyOption != null) {
r9.push(messageRequestPrivacyOption);
}
if (canReportRaid) {
r9.push(<ActionSheetRow label={intl.string(t.cswId3)} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
openReportRaidModal(guild10.id);
}} />);
}
r9.push(<ActionSheetRow label={intl.string(t.Aen9eh)} onPress={() => {
ActionSheetActionCreators.hideActionSheet();
showReportModalForGuild(guild10);
}} />);
if (shouldShowIncidentActions) {
r9.push(<ActionSheetRow label={isUnderLockdown ? intl.string(t["+tSVi3"]) : intl.string(t.EPlEdu)} variant="danger" onPress={() => {
ActionSheetActionCreators.hideActionSheet();
const analyticsData = {
source: GuildIncidentActionSources.GUILD_PROFILE
};
ActionSheetActionCreators.openLazy(import("../../../guild_antiraid/native/GuildIncidentActionsActionSheet"), "GuildIncidentActionsActionSheet", {
guild: guild10,
analyticsData
});
}} />);
}
if (!isGuildOwner2) {
r9.push(<ActionSheetRow label={guild10.features.has(GuildFeatures.HUB) ? intl.string(t.Dv8gFT) : intl.string(t.J2TBi3)} variant="danger" onPress={() => {
ActionSheetActionCreators.hideActionSheet();
openAlert("guild-action-sheet-leave-server", jsx(lazy($mk90767()), {
guild: guild10
}));
}} />);
}
return r9.length !== 0 ? <ActionSheetRow.Group hasIcons={false}>
{r9.map((item, index) => <Fragment key={index}>
{item}
</Fragment>)}
</ActionSheetRow.Group> : null;
}
export function GuildDeveloperOptionAction(props) {
const guild11 = props.guild;
const setting = DeveloperMode.useSetting();
const tidaWebformEnabled = TidaWebformExperiment.useExperiment({
location: "GuildDeveloperOptionAction"
}, {
autoTrackExposure: false
}).tidaWebformEnabled;
if (setting) {
const r25 = [];
r25.push(<ActionSheetRow label={intl.string(t["94lLD7"])} onPress={() => {
copy(guild11.id);
presentIdCopied();
}} />);
if (tidaWebformEnabled) {
if (guild11.icon != null) {
r25.push(<ActionSheetRow label={intl.string(t["7H30wR"])} onPress={() => {
const guildIconURL = getGuildIconURL(guild11, AVATAR_MAX_SIZE, true);
if (guildIconURL != null) {
copy(guildIconURL);
presentLinkCopied();
}
}} />);
}
if (guild11.banner != null) {
r25.push(<ActionSheetRow label={intl.string(t["2FoUnk"])} onPress={() => {
const guildBannerURL = AvatarUtils.getGuildBannerURL({
id: guild11.id,
banner: guild11.banner
}, true);
if (guildBannerURL != null) {
copy(guildBannerURL);
presentLinkCopied();
}
}} />);
}
}
return <ActionSheetRow.Group hasIcons={false} title={intl.string(t.ObIb1Q)}>
{r25.map((item, index) => <Fragment key={index}>
{item}
</Fragment>)}
</ActionSheetRow.Group>;
}
return null;
}
@@ -0,0 +1,34 @@
// Metro module 13104 (f13105).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
import GuildActionSheetHeader from "./GuildActionSheetHeader";
import { GuildActionSheetDirectoryActions, GuildDeveloperOptionAction } from "./GuildActionSheetActions";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
},
actions: {
paddingHorizontal: 16,
gap: 24
}
});
export default function GuildActionSheetDirectory(props) {
const { guild, expanded = false } = props;
const styles = useStyles();
return <BottomSheet scrollable startExpanded={expanded}>
<BottomSheetScrollView scrollsToTop={false} style={styles.container} contentContainerStyle={{
paddingBottom: useSafeAreaInsets_native().bottom
}}>
<GuildActionSheetHeader guild={guild} />
<View style={styles.actions}>
<GuildActionSheetDirectoryActions guild={guild} />
<GuildDeveloperOptionAction guild={guild} />
</View>
</BottomSheetScrollView>
</BottomSheet>;
};
@@ -0,0 +1,160 @@
// Metro module 13115 (f13116).
import { useState, useCallback } from "react";
import { View } from "react-native";
import EmojiStore from "../../../emojis/EmojiStore";
import ThemeStore from "../../../user_settings/ThemeStore";
import UserStore from "../../../../stores/UserStore";
import { AnalyticsSections, UpsellTypes, Fonts } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStoresArray, useStateFromStores } from "../../../../_bundle/Module589";
import useWindowDimensions_native from "../../../screen/useWindowDimensions.native";
import { useToken } from "../../../../design/tokens/native/useToken";
import PremiumUtils from "../../../../utils/PremiumUtils";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import PremiumUpsellUtils from "../../../../utils/native/PremiumUpsellUtils";
import { isThemeDark } from "../../../../design/shared";
import { RowGroup } from "../../../../design/components/RowGroup/native/RowGroup.native";
import { intl, t } from "../../../../intl/index.native";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import { Icon, LegacyText } from "../../../../design/void/native";
import Module9390 from "../../../../_bundle/Module9390";
import { triggerHapticFeedback } from "../../../haptics/HapticUtils.native";
import HapticFeedbackTypes from "../../../haptics/HapticFeedbackTypes";
import { presentEmoji } from "../../../toast/native/ToastUtils";
import FastImage from "../../../../components_native/common/FastImage";
import Module5207 from "../../../../_bundle/Module5207";
import Module5208 from "../../../../_bundle/Module5208";
import AvatarUtils from "../../../../utils/AvatarUtils";
const useStyles = createStyles({
header: {
flexDirection: "row",
alignItems: "center",
flexWrap: "wrap"
},
dotSeparator: {
width: 4,
height: 4,
borderRadius: Module712.radii.xs,
marginRight: 8,
marginLeft: 8,
backgroundColor: Module712.colors.TEXT_SUBTLE
},
premiumTitle: {
color: Module712.unsafe_rawColors.PREMIUM_TIER_2_PURPLE,
marginLeft: 4,
fontFamily: Fonts.PRIMARY_BOLD,
fontSize: 12
},
emojiContainer: {
flexDirection: "row",
flexWrap: "wrap",
alignItems: "center",
padding: 4
},
emoji: {
width: 24,
height: 24
},
emojiCount: {
color: Module712.colors.TEXT_SUBTLE,
fontSize: 12,
fontFamily: Fonts.PRIMARY_BOLD,
textAlign: "center",
textAlignVertical: "center"
}
});
export default function GuildActionSheetEmojiSection(props) {
let r1, length;
let stateFromStores, margin, analyticsLocations, callback;
const guildId = props.guildId;
stateFromStores = void 0;
margin = void 0;
analyticsLocations = void 0;
callback = void 0;
const styles = useStyles();
const [state, setState] = useState(false);
const stateFromStoresArray = useStateFromStoresArray([EmojiStore], () => EmojiStore.getGuildEmoji(guildId), [guildId]);
const width = useWindowDimensions_native().width;
const token = useToken(Module712.modules.mobile.TABLE_ROW_PADDING);
stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser(), []);
const canUseEmojisEverywhere = PremiumUtils.canUseEmojisEverywhere(stateFromStores);
const r67 = canUseEmojisEverywhere ? !canUseEmojisEverywhere : !PremiumUtils.isPremium(stateFromStores);
const r2 = width - (26 + 2 * token);
const r77 = Math.floor(r2 / 32);
const r82 = (r2 - 24 * r77) / (2 * r77);
margin = 4 <= r82 ? r82 < 12 ? r82 : 4 : 4;
if (state) {
length = stateFromStoresArray.length;
r1 = 0;
} else {
length = 2 * r77;
r1 = stateFromStoresArray.length - length;
}
let r88 = length;
let r24 = r1;
if (0 < r24) {
r88 = length - 1;
r24 = Math.min(r1 + 1, 99);
}
const r95 = stateFromStoresArray.slice(0, r88);
analyticsLocations = useAnalyticsLocations(AnalyticsLocation.EMOJI_PICKER).analyticsLocations;
callback = useCallback((a0, a1) => {
if (!(a1 == null || PremiumUtils.canUseEmojisEverywhere(a1))) {
ActionSheetActionCreators.hideActionSheet(`GuildProfile:${a0}`);
PremiumUpsellUtils.handleShowUpsellAlert({
initialUpsellKey: UpsellTypes.GLOBAL_EMOJI,
analyticsLocation: {
section: AnalyticsSections.EMOJI_PICKER_POPOUT
},
analyticsLocations
});
}
}, [analyticsLocations]);
const color = isThemeDark(ThemeStore.theme) ? Module712.unsafe_rawColors.PREMIUM_TIER_2_PURPLE : Module712.unsafe_rawColors.PREMIUM_TIER_2_PURPLE_FOR_GRADIENTS;
return r95.length > 0 ? <RowGroup title={intl.string(t.Q60n1E)} trailing={r67 ? <PressableOpacity accessibilityRole="button" onPress={() => callback(guildId, stateFromStores)}>
<View style={styles.header}>
<View style={styles.dotSeparator} />
<Icon source={Module9390} color={color} size={Icon.Sizes.SMALL} />
<LegacyText style={[styles.premiumTitle, {
color
}]}>
{intl.string(t.p1j56s)}
</LegacyText>
</View>
</PressableOpacity> : null}>
<View style={styles.emojiContainer}>
{r95.map((item) => {
return <PressableOpacity key={item.id} accessibilityRole="image" accessibilityLabel={item.name} onPress={() => {
triggerHapticFeedback(HapticFeedbackTypes.IMPACT_LIGHT);
presentEmoji(item);
if (!state) {
setState(true);
}
}}>
<FastImage resizeMode="contain" style={[styles.emoji, {
margin
}]} placeholder={isThemeDark(ThemeStore.theme) ? Module5207 : Module5208} source={{
uri: AvatarUtils.getEmojiURL({
id: item.id,
animated: item.animated,
size: 48
})
}} />
</PressableOpacity>;
})}
{r24 > 0 ? <PressableOpacity key={-1} accessibilityRole="button" accessibilityLabel={intl.string(t["UKOtz+"])} onPress={() => {
triggerHapticFeedback(HapticFeedbackTypes.IMPACT_LIGHT);
setState(true);
}}>
<LegacyText style={[styles.emoji, styles.emojiCount, {
margin
}]}>
{`+${r24}`}
</LegacyText>
</PressableOpacity> : null}
</View>
</RowGroup> : null;
};
@@ -0,0 +1,217 @@
// Metro module 13105 (f13106).
import { useEffect, useMemo } from "react";
import { Image as Image2, View } from "react-native";
import GuildPopoutStore from "../../../guild_profile/GuildPopoutStore";
import GuildStore from "../../../../stores/GuildStore";
import GuildSubscriptionsStore from "../../../../stores/GuildSubscriptionsStore";
import { GuildFeatures } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { isAndroid } from "../../../../_bundle/Module501";
import { intl, t } from "../../../../intl/index.native";
import Module8468 from "../../../../_bundle/Module8468";
import { GuildVisibility, getGuildTraits } from "../../../guild_badge/GuildTraits";
import * as _GlobeEarthIcon from "../../../../design/components/Icon/native/redesign/generated/GlobeEarthIcon";
import Module8471 from "../../../../_bundle/Module8471";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import { Icon } from "../../../../design/void/native";
import { Text } from "../../../../design/components/Text/native/Text";
import useIsWindowLarge from "../../../screen/native/useIsWindowLarge";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { isGuildRecord } from "../../../../utils/GuildRecordUtils";
import { fetchGuildForPopout } from "../../../guild_profile/GuildPopoutActionCreators";
import { useGuildHeaderCounts } from "../useGuildHeaderCounts";
import useWindowDimensions_native from "../../../screen/useWindowDimensions.native";
import GuildIcon, { GuildIconSizes } from "../../../guild/native/GuildIcon";
import AvatarUtils from "../../../../utils/AvatarUtils";
import { getDevicePixelRatio } from "../../../image_upload/ImageLoaderUtils";
import { useClientThemesOverride } from "../../../client_themes/native/ClientThemesOverrides";
import { useToken } from "../../../../design/tokens/native/useToken";
import FastImage from "../../../../components_native/common/FastImage";
import GuildBadgeV2 from "../../../guild/native/GuildBadgeV2";
import GuildActionSheetMemberCount from "./GuildActionSheetMemberCount";
let useStyles;
const CommunityPill = function CommunityPill(props) {
let GlobeEarthIcon;
const guildVisibility = props.guildVisibility;
GlobeEarthIcon = void 0;
const styles2 = useStyles();
let content = intl.string(t.TME4LJ);
let source = Module8468;
if (guildVisibility === GuildVisibility.PUBLIC) {
content = intl.string(t.op2cJ6);
GlobeEarthIcon = _GlobeEarthIcon.GlobeEarthIcon;
source = Module8471;
}
return <PressableOpacity style={styles2.communityPill} accessibilityRole="button" onPress={() => {
ToastActionCreators.open({
key: "SERVER_BADGE_DESCRIPTION_INVITE_ONLY",
content,
IconComponent: GlobeEarthIcon
});
}}>
<Icon style={styles2.communityPillIcon} source={source} disableColor />
<Text variant="text-xs/medium" color="text-default" style={styles2.communityPillText}>
{intl.string(t.K7iRig)}
</Text>
</PressableOpacity>;
};
useStyles = createStyles({
content: {
padding: 16
},
avatar: {
borderRadius: 14.117647058823529,
height: 60,
width: 60
},
headerContainer: {
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
},
avatarBackground: {
height: 68,
width: 68,
marginBottom: 12,
marginLeft: -4,
padding: 4,
borderRadius: 16,
alignContent: "center",
justifyContent: "center",
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
},
description: {
marginTop: 8
},
memberInfo: {
marginTop: 16,
flexDirection: "row",
alignItems: "center",
flexWrap: "wrap",
gap: 16
},
nameRow: {
flexDirection: "row",
alignItems: "center",
marginTop: 8
},
communityPill: {
flexDirection: "row",
alignItems: "center",
backgroundColor: Module712.colors.INTERACTIVE_BACKGROUND_HOVER,
paddingTop: 4,
paddingRight: 8,
paddingBottom: 4,
paddingLeft: 6,
borderRadius: Module712.radii.round
},
communityPillIcon: {
width: 16,
height: 16,
marginRight: 6
},
communityPillText: {
lineHeight: isAndroid() ? 14 : void 0
},
guildBanner: {
position: "absolute",
left: "50%",
top: 0
}
});
export default function GuildActionSheetHeader(props) {
let r90, source;
let width, height;
const guild = props.guild;
width = void 0;
height = void 0;
const styles = useStyles();
const isWindowLarge = useIsWindowLarge();
const stateFromStores = useStateFromStores([GuildSubscriptionsStore], () => GuildSubscriptionsStore.isSubscribedToAnyGuildChannel(guild.id));
useEffect(() => {
if (stateFromStores ? !stateFromStores : isGuildRecord(guild)) {
fetchGuildForPopout(guild.id);
}
}, [guild, stateFromStores]);
let guild2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guild.id));
const stateFromStores2 = useStateFromStores([GuildPopoutStore], () => GuildPopoutStore.getGuild(guild.id));
if (guild2 == null) {
guild2 = stateFromStores2;
}
if (guild2 == null) {
guild2 = guild;
}
const guildHeaderCounts = useGuildHeaderCounts(guild2.id);
let r55 = void 0;
let r56 = void 0;
if (stateFromStores) {
r56 = guildHeaderCounts.onlineCount;
r55 = guildHeaderCounts.memberCount;
}
let count = r55;
let count2 = r56;
if (stateFromStores2 != null) {
const r57 = r56 == null ? stateFromStores2.presenceCount : r56;
count = r55 == null ? stateFromStores2.memberCount : r55;
count2 = r57;
}
width = useWindowDimensions_native().width;
if (isGuildRecord(guild2)) {
const r26 = guild2.features.has(GuildFeatures.ANIMATED_BANNER);
const r108 = <View style={styles.avatarBackground} accessibilityElementsHidden importantForAccessibility="no-hide-descendants" accessibilityRole="none">
<GuildIcon style={styles.avatar} guild={guild2} size={GuildIconSizes.XLARGE} animate />
</View>;
source = guild2.banner == null ? null : isWindowLarge ? null : AvatarUtils.getGuildBannerSource({
id: guild2.id,
banner: guild2.banner
}, r26);
r90 = r108;
} else {
const r78 = <Image2 style={styles.avatar} source={AvatarUtils.getGuildIconSource({
id: guild2.id,
icon: guild2.icon,
canAnimate: true,
size: 68
})} />;
source = guild2.splash == null ? null : isWindowLarge ? null : AvatarUtils.getGuildSplashSource({
id: guild2.id,
splash: guild2.splash,
size: width * getDevicePixelRatio()
});
r90 = r78;
}
const { name, description } = guild2;
const guildTraits = getGuildTraits(guild2);
const clientThemesOverride = useClientThemesOverride();
height = 0.56 * width;
const memo = useMemo(() => ({
...styles.guildBanner,
width,
height,
marginLeft: -width / 2
}), [styles.guildBanner, width, height]);
const token = useToken(Module712.modules.mobile.CHANNEL_LIST_TITLE_TEXT_STYLE);
const r152 = [source != null && <FastImage style={memo} source={source} />, ,];
const style = [styles.content, {
marginTop: source != null ? height - 48 : 0
}];
r152[1] = <View style={style}>
{r90}
<View style={styles.nameRow}>
<GuildBadgeV2 guild={guild2} />
<Text lineClamp={2} accessibilityRole="header" variant={token} color="mobile-text-heading-primary">{name}</Text>
</View>
{description != null ? <Text style={styles.description} variant="text-sm/medium" color="text-default">{description}</Text> : null}
<View style={styles.memberInfo}>
{guildTraits.community ? <CommunityPill guildVisibility={guildTraits.visibility} /> : null}
<View style={{
gap: 15,
flexDirection: "row"
}}>
{count2 != null && <GuildActionSheetMemberCount type="online" count={count2} />}
{count != null && <GuildActionSheetMemberCount type="total" count={count} />}
</View>
</View>
</View>;
return <View style={[styles.headerContainer, clientThemesOverride]}>{r152}</View>;
};
@@ -0,0 +1,61 @@
// Metro module 10146 (f10147).
import { memo } from "react";
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { isAndroid } from "../../../../_bundle/Module501";
import MobileVisualRefreshExperiment from "../../../themes/experiments/MobileVisualRefreshExperiment";
import { intl, t } from "../../../../intl/index.native";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
wrapper: {
flexDirection: "row",
alignItems: "center"
},
dot: {
width: 8,
height: 8,
borderRadius: Module712.radii.sm
},
dotContainer: {
alignItems: "center",
justifyContent: "center",
marginRight: 4
},
onlineDot: {
backgroundColor: Module712.colors.TEXT_STATUS_ONLINE
},
offlineDot: {
backgroundColor: Module712.colors.TEXT_STATUS_OFFLINE
},
text: {
textAlignVertical: "center",
lineHeight: isAndroid() ? 12 : void 0
},
refreshText: {
textAlignVertical: "center",
lineHeight: isAndroid() ? 14 : void 0
}
});
const r59 = memo(function MemberCount(props) {
const { type, count } = props;
let color = props.color;
const dotContainerWidth = props.dotContainerWidth;
const r10 = MobileVisualRefreshExperiment("GuildActionSheetMemberCount");
const r31 = count == null ? intl.string(type === "online" ? t["3DzP7x"] : t["5SWsJX"]) : intl.format(type === "online" ? t.PIikks : t.etqpUG, {
count
});
const styles = useStyles();
const r63 = [<View style={[styles.dotContainer, dotContainerWidth != null && {
width: dotContainerWidth
}]}>
<View style={[styles.dot, type === "online" ? styles.onlineDot : styles.offlineDot]} />
</View>, ,];
const variant = r10 ? "text-sm/normal" : "text-xs/medium";
if (color == null) {
color = "text-default";
}
r63[1] = <Text variant={variant} color={color} lineClamp={1} style={r10 ? styles.refreshText : styles.text}>{r31}</Text>;
return <View style={styles.wrapper}>{r63}</View>;
});
export default r59;
@@ -0,0 +1,25 @@
// Metro module 13112 (f13113).
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useIOSCompletionStates, useIsEligibleForGuildProgress } from "../../../guild_progress/native/GuildProgressUtils";
import { Card } from "../../../../design/components/Card/native/Card.native";
import GuildProgressOverview from "../../../guild_progress/native/components/GuildProgressOverview";
const useStyles = createStyles({
title: {
color: Module712.colors.TEXT_DEFAULT
},
cardStyle: {
marginHorizontal: Module712.space.PX_16,
padding: 0,
marginBottom: Module712.space.PX_24
}
});
export default function GuildActionSheetProgress(props) {
const guild = props.guild;
const styles = useStyles();
const iOSCompletionStates = useIOSCompletionStates(guild);
const { completed, dismissed } = iOSCompletionStates;
return useIsEligibleForGuildProgress(guild) ? completed ? null : dismissed ? <Card style={styles.cardStyle}>
<GuildProgressOverview guild={guild} titleStyle={styles.title} longPressDisabled resume />
</Card> : null : null;
};
@@ -0,0 +1,75 @@
// Metro module 13111 (f13112).
import { useCallback } from "react";
import ChannelStore from "../../../../stores/ChannelStore";
import GuildChannelStore from "../../../../stores/GuildChannelStore";
import SelectedChannelStore from "../../../../stores/SelectedChannelStore";
import { AnalyticEvents, AnalyticsObjects, AnalyticsSections, InstantInviteSources } from "../../../../Constants";
import { useGuildActionSheetPermissions } from "../GuildActionSheetUtils";
import useGuildPowerupsBoostCount from "../../../premium/powerups/hooks/useGuildPowerupsBoostCount";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { shouldRenderInvite, getInviteChannelId } from "../../../../utils/native/InstantInviteUtils";
import { handleOpenInviteActionsheet } from "../../../instant_invite/native/InstantInviteUtils";
import { ButtonGroup } from "../../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { IconButton } from "../../../../design/components/Button/native/IconButton.native";
import { intl, t } from "../../../../intl/index.native";
import { BoostGemIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemIcon";
import Module712 from "../../../../_bundle/Module712";
import AppAnalyticsUtils from "../../../app_analytics/AppAnalyticsUtils";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { openApplyBoostModal } from "../../../../actions/native/BoostingActionCreators";
import Module10223 from "../../../../_bundle/Module10223";
import Module7732 from "../../../../_bundle/Module7732";
import NotificationSettingsModalActionCreators from "../../../../actions/NotificationSettingsModalActionCreators";
import Module9012 from "../../../../_bundle/Module9012";
import GuildSettingsActionCreators from "../../../guild_settings/GuildSettingsActionCreators";
export default function GuildActionSheetTabItems(props) {
let callback;
const guild = props.guild;
callback = void 0;
let canAccessSettings = useGuildActionSheetPermissions(guild).canAccessSettings;
const total = useGuildPowerupsBoostCount(guild.id).total;
const stateFromStores = useStateFromStores([GuildChannelStore], () => GuildChannelStore.getChannels(guild.id));
let r33 = shouldRenderInvite(stateFromStores, guild);
callback = useCallback(() => {
let r24 = ChannelStore.getChannel(getInviteChannelId(SelectedChannelStore.getChannelId(guild.id), stateFromStores));
if (r24 == null) {
r24 = GuildChannelStore.getDefaultChannel(guild.id);
}
if (r24 != null) {
handleOpenInviteActionsheet(guild, r24.id, stateFromStores, InstantInviteSources.SERVER_PROFILE);
}
}, [stateFromStores, guild]);
const r75 = [<IconButton variant="secondary" label={total > 0 ? intl.formatToPlainString(t["pob/cL"], {
subscriptions: total
}) : intl.string(t.Uj0md3)} icon={<BoostGemIcon color={Module712.unsafe_rawColors.GUILD_BOOSTING_PINK} />} grow onPress={() => {
AppAnalyticsUtils.trackWithMetadata(AnalyticEvents.PREMIUM_GUILD_PROMOTION_OPENED, {
location: {
section: AnalyticsSections.GUILD_POPOUT,
object: AnalyticsObjects.BOOST_GEM_ICON
}
});
ActionSheetActionCreators.hideActionSheet();
openApplyBoostModal(guild.id);
}} />, , , ,];
if (r33) {
r33 = <IconButton variant="secondary" label={intl.string(t.VINpSK)} icon={Module10223} grow onPress={() => {
ActionSheetActionCreators.hideActionSheet();
callback();
}} />;
}
r75[1] = r33;
r75[2] = <IconButton variant="secondary" label={intl.string(t.HcoRu0)} icon={Module7732} grow onPress={() => {
ActionSheetActionCreators.hideActionSheet();
NotificationSettingsModalActionCreators.open(guild.id);
}} />;
if (canAccessSettings) {
canAccessSettings = <IconButton variant="secondary" label={intl.string(t["3D5yo/"])} icon={Module9012} grow onPress={() => {
ActionSheetActionCreators.hideActionSheet();
GuildSettingsActionCreators.open(guild.id);
}} />;
}
r75[3] = canAccessSettings;
return <ButtonGroup direction="horizontal" style={{
flexWrap: "wrap"
}}>{r75}</ButtonGroup>;
};
@@ -0,0 +1,15 @@
// Metro module 13100 (f13101).
import { GuildFeatures } from "../../../../Constants";
import { AlertModal, AlertActionButton } from "../../../../design/components/AlertModal/native/AlertModal.native";
import { intl, t } from "../../../../intl/index.native";
import { AlertActions } from "../../../../design/components/AlertModal/native/AlertModal.native";
import GuildSettingsActionCreators from "../../../guild_settings/GuildSettingsActionCreators";
export default function LeaveServerAlert(props) {
const guild = props.guild;
return <AlertModal title={guild.features.has(GuildFeatures.HUB) ? intl.string(t.Dv8gFT) : intl.string(t.J2TBi3)} content={intl.formatToPlainString(t.TB1og8, {
name: guild.name
})} actions={<AlertActions>
<AlertActionButton key="confirm" variant="destructive" onPress={() => GuildSettingsActionCreators.leaveGuild(guild.id)} text={intl.string(t.p89ACt)} />
<AlertActionButton key="cancel" variant="secondary" text={intl.string(t.gm1Vej)} />
</AlertActions>} />;
};
@@ -0,0 +1,30 @@
// Metro module 13045 (f13046).
import { AnalyticEvents, GuildFeatures } from "../../../Constants";
import { isFavoritesGuildId } from "../../favorites/FavoritesUtils";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { shouldNSFWGateGuild } from "../../age_gate/native/AgeGateUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import * as _asyncRequire from "../../../_bundle/asyncRequire";
export default function openGuildActionSheet(a0, expanded = true) {
if (!isFavoritesGuildId(a0.id)) {
AnalyticsUtils.track(AnalyticEvents.OPEN_POPOUT, {
type: "Guild Profile",
guild_id: a0.id
});
if (shouldNSFWGateGuild(a0.id)) {
ActionSheetActionCreators.openLazy(import("../../age_gate/native/components/NsfwGateGuildSettingsActionSheet"), "NsfwGateGuildSettingsActionSheet", {
guild: a0
});
} else if (a0.features.has(GuildFeatures.HUB)) {
ActionSheetActionCreators.openLazy(_asyncRequire(dependencyMap[7], dependencyMap.paths), `GuildActionSheet:${a0.id}`, {
guild: a0,
expanded
});
} else {
ActionSheetActionCreators.openLazy(_asyncRequire(dependencyMap[8], dependencyMap.paths), `GuildActionSheet:${a0.id}`, {
guild: a0,
expanded
});
}
}
};
@@ -0,0 +1,86 @@
// Metro module 13108 (f13109).
import { useMemo, useEffect } from "react";
import GuildMemberCountStore from "../../../stores/GuildMemberCountStore";
import GuildHeaderCountsStore from "./GuildHeaderCountsStore";
import { useStateFromStores } from "../../../_bundle/Module589";
function $mk90818($env) {
return () => {
const r2 = $env.$parent;
return (0, r2[0])(r2[2][3]).throttle($mk109125($env), 3000);
};
}
function $mk90819($env) {
return () => $mk109126($env);
}
function $mk90820($env) {
return () => {
const r2 = $env;
const r3 = r2[2];
if (r3 > 0) {
(0, r2[3])(r3);
}
};
}
function $mk109125($env) {
return (a0) => {
const r4 = $env;
const r1 = $env.$parent;
(0, r1[1])(r1[2][4]).dispatch({
type: r4[0],
count: a0,
guildId: r4[1]
});
};
}
function $mk109126($env) {
return () => $env[3].cancel();
}
let env9065 = {};
export function useGuildHeaderCounts(a0) {
let env20382;
let c20383_0;
let env20384;
const stateFromStores = useStateFromStores([GuildMemberCountStore], () => {
let r7 = GuildMemberCountStore.getMemberCount(a0);
if (r7 == null) {
r7 = 0;
}
return r7;
});
const r16 = env20382 = {
$parent: env9065
};
env20382[0] = "GUILD_HEADER_MEMBER_COUNT";
env20382[1] = a0;
env20382[2] = stateFromStores;
env20382[3] = void 0;
const memo = useMemo($mk90818(r16), ["GUILD_HEADER_MEMBER_COUNT", a0]);
env20382[3] = memo;
useEffect($mk90819(r16), [memo]);
useEffect($mk90820(r16), [memo, stateFromStores]);
const stateFromStores2 = useStateFromStores([GuildHeaderCountsStore], () => GuildHeaderCountsStore.getMemberCount(a0));
c20383_0 = a0;
const stateFromStores3 = useStateFromStores([GuildMemberCountStore], () => {
let r7 = GuildMemberCountStore.getOnlineCount(c20383_0);
if (r7 == null) {
r7 = 0;
}
return r7;
});
const r43 = env20384 = {
$parent: env9065
};
env20384[0] = "GUILD_HEADER_ONLINE_COUNT";
env20384[1] = a0;
env20384[2] = stateFromStores3;
env20384[3] = void 0;
const memo2 = useMemo($mk90818(r43), ["GUILD_HEADER_ONLINE_COUNT", a0]);
env20384[3] = memo2;
useEffect($mk90819(r43), [memo2]);
useEffect($mk90820(r43), [memo2, stateFromStores3]);
return {
memberCount: stateFromStores2,
onlineCount: useStateFromStores([GuildHeaderCountsStore], () => GuildHeaderCountsStore.getOnlineCount(c20383_0)),
activeChannelsCount: useStateFromStores([GuildHeaderCountsStore], () => GuildHeaderCountsStore.getActiveChannelsCount(a0))
};
}