Files
discord-decomp/modules/hub/native/components/HubSidebar.tsx
T
2026-11-01 12:12:55 +02:00

62 lines
3.9 KiB
TypeScript

// Metro module 15178 (f15179).
import { View } from "react-native";
import GuildChannelStore from "../../../../stores/GuildChannelStore";
import SelectedChannelStore from "../../../../stores/SelectedChannelStore";
import { InstantInviteSources } from "../../../../Constants";
import { CHANNEL_MARGIN_VERTICAL } from "../../../channel_list_v2/native/RedesignChannelListConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import BaseChannelItem, { ChannelModes, BaseChannelName, BaseChannelIcon } from "../../../guild_sidebar/native/BaseChannelItem";
import { Badge } from "../../../../design/void/native";
import { useStateFromStores, useStateFromStoresObject } from "../../../../_bundle/Module589";
import { useHubUnreadCount } from "../../HubUnreadUtils";
import HubSideBarProgressOverview from "./progress_bar/HubSideBarProgressOverview";
import { CompassIcon } from "../../../../design/components/Icon/native/redesign/generated/CompassIcon";
import { intl, t } from "../../../../intl/index.native";
import { transitionToChannel } from "../../../routing/transitionToChannel";
import { PlusMediumIcon } from "../../../../design/components/Icon/native/redesign/generated/PlusMediumIcon";
import GuildDirectoryAddModalActionCreators from "../../../directory_channels/native/components/GuildDirectoryAddModalActionCreators";
import { UserPlusIcon } from "../../../../design/components/Icon/native/redesign/generated/UserPlusIcon";
import { handleOpenInviteActionsheet } from "../../../instant_invite/native/InstantInviteUtils";
let useStyles;
const HubItem = function HubItem(props) {
const { IconComponent, label, handleItemClick: handleItemClick2, active, unreadCount } = props;
const styles = useStyles();
const mode = active ? ChannelModes.SELECTED : ChannelModes.DEFAULT;
return <BaseChannelItem style={styles.container} accessibilityLabel={label} accessibilityRole="menuitem" onPress={handleItemClick2} disableHighlightOnPress mode={mode} name={<BaseChannelName name={label} mode={mode} />} icon={<BaseChannelIcon mode={mode} IconComponent={IconComponent} />} channelInfo={unreadCount != null ? <Badge value={unreadCount} /> : null} />;
};
useStyles = createStyles({
container: {
marginVertical: CHANNEL_MARGIN_VERTICAL,
marginHorizontal: 8,
borderRadius: Module712.radii.md
},
row: {
flex: 1
}
});
export default function HubSidebar(props) {
let stateFromStoresObject;
const { guild, flashList } = props;
stateFromStoresObject = void 0;
const stateFromStores = useStateFromStores([GuildChannelStore], () => GuildChannelStore.getDefaultChannel(guild.id), [guild.id]);
const styles = useStyles();
stateFromStoresObject = useStateFromStoresObject([GuildChannelStore], () => GuildChannelStore.getChannels(guild.id));
const stateFromStores2 = useStateFromStores([SelectedChannelStore], () => stateFromStores != null && SelectedChannelStore.getChannelId() === stateFromStores.id);
const hubUnreadCount = useHubUnreadCount(stateFromStores);
return stateFromStores == null ? null : <View style={flashList ? styles.row : null}>
<HubSideBarProgressOverview guild={guild} />
<HubItem active={stateFromStores2} IconComponent={CompassIcon} label={intl.string(t.K50GHd)} handleItemClick={() => {
transitionToChannel(stateFromStores.id);
}} unreadCount={hubUnreadCount} />
<HubItem IconComponent={PlusMediumIcon} label={intl.string(t.emRpdS)} handleItemClick={() => GuildDirectoryAddModalActionCreators.open({
directoryGuildName: guild.name,
directoryGuildId: guild.id,
directoryChannelId: stateFromStores.id
})} />
<HubItem IconComponent={UserPlusIcon} label={intl.string(t.MJQOuJ)} handleItemClick={() => {
handleOpenInviteActionsheet(guild, stateFromStores.id, stateFromStoresObject, InstantInviteSources.GUILD_HEADER);
}} />
</View>;
};