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

131 lines
5.7 KiB
TypeScript

// Metro module 14963 (f14964).
import { useMemo } from "react";
import { View } from "react-native";
import GuildReadStateStore from "../../../stores/GuildReadStateStore";
import GuildStore from "../../../stores/GuildStore";
import SortedGuildStore from "../../../stores/SortedGuildStore";
import UserGuildSettingsStore from "../../../stores/UserGuildSettingsStore";
import VoiceStateStore from "../../../stores/VoiceStateStore";
import { NOOP } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { useStateFromStoresArray, useStateFromStores } from "../../../_bundle/Module589";
import { BellSlashIcon } from "../../../design/components/Icon/native/redesign/generated/BellSlashIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import { HomeDrawerSharedItem } from "./HomeDrawerShared";
import { MobileHomeDrawerExperiment } from "./HomeDrawerExperiment";
import useChatLayout from "../../chat/native/useChatLayout";
let useStyles;
const Wrapper = function Wrapper(props) {
let r83, r84;
let stateFromStoresArray, stateFromStoresArray2, stateFromStoresArray3, children, color;
const { folder, expanded } = props;
stateFromStoresArray = void 0;
stateFromStoresArray2 = void 0;
stateFromStoresArray3 = void 0;
children = void 0;
color = void 0;
const styles = useStyles();
const memo = useMemo(() => ({
isMuted: false
}), []);
stateFromStoresArray = useStateFromStoresArray([GuildReadStateStore, UserGuildSettingsStore], () => folder.guildIds.filter((guildId) => {
const isMuted = UserGuildSettingsStore.isMuted(guildId);
return isMuted ? !isMuted : GuildReadStateStore.getMentionCount(guildId) > 0;
}));
const stateFromStores3 = useStateFromStores([GuildStore], () => {
const r6 = stateFromStoresArray[0];
return r6 != null ? GuildStore.getGuild(r6)?.name : void 0;
});
stateFromStoresArray2 = useStateFromStoresArray([GuildReadStateStore, UserGuildSettingsStore], () => folder.guildIds.filter((guildId) => {
const isMuted = UserGuildSettingsStore.isMuted(guildId);
return isMuted ? !isMuted : GuildReadStateStore.hasUnread(guildId);
}));
const stateFromStores2 = useStateFromStores([GuildStore], () => {
const r6 = stateFromStoresArray2[0];
return r6 != null ? GuildStore.getGuild(r6)?.name : void 0;
});
stateFromStoresArray3 = useStateFromStoresArray([VoiceStateStore, GuildStore, UserGuildSettingsStore], () => folder.guildIds.filter((guildId) => {
if (UserGuildSettingsStore.isMuted(guildId)) {
return false;
}
const afkChannelId = GuildStore.getGuild(guildId)?.afkChannelId;
const set = new Set();
for (const item of Object.values(VoiceStateStore.getVoiceStates(guildId))) {
if (item.channelId != null && item.channelId !== afkChannelId) {
set.add(item.channelId);
}
}
return [...set].some((item) => {
const isCategoryMuted = UserGuildSettingsStore.isCategoryMuted(guildId, item);
return isCategoryMuted ? !isCategoryMuted : !UserGuildSettingsStore.isChannelMuted(guildId, item);
});
}));
const stateFromStores = useStateFromStores([GuildStore], () => {
const r6 = stateFromStoresArray3[0];
return r6 != null ? GuildStore.getGuild(r6)?.name : void 0;
});
const memo2 = useMemo(() => {
const r23 = [memo.isMuted ? <BellSlashIcon size="xs" /> : <NOOP size="xs" />, ,];
let folderName = folder.folderName;
if (folderName == null) {
folderName = intl.string(t["JQ/1n3"]);
}
r23[1] = <Text variant="text-md/medium" style={styles.titleText} lineClamp={1} color="text-default">{folderName}</Text>;
return <View style={styles.title}>{r23}</View>;
}, [folder.folderName, memo, styles.title, styles.titleText]);
children = intl.format(t.knOfkb, {
num: folder.guildIds.length
});
color = "text-muted";
if (stateFromStoresArray.length > 0 && stateFromStores3 != null) {
children = intl.format(t.UoFb3H, {
guildName: stateFromStores3,
count: stateFromStoresArray.length - 1
});
r83 = "text-muted";
r84 = children;
} else if (stateFromStoresArray3.length > 0 && stateFromStores != null) {
children = intl.format(t["0CRdJQ"], {
guildName: stateFromStores,
count: stateFromStoresArray3.length - 1
});
color = "text-voice-connected";
r83 = "text-voice-connected";
r84 = children;
} else {
const r82 = stateFromStoresArray2.length > 0 && stateFromStores2 != null;
r83 = "text-muted";
r84 = children;
if (r82) {
children = intl.format(t["3Pm7uY"], {
guildName: stateFromStores2,
count: stateFromStoresArray2.length - 1
});
r83 = "text-muted";
r84 = children;
}
}
const memo3 = useMemo(() => <Text variant="text-xs/medium" color={color} lineClamp={1}>{children}</Text>, [r84, r83]);
return <HomeDrawerSharedItem title={memo2} subtitle={expanded ? void 0 : memo3} />;
};
useStyles = createStyles({
title: {
flexDirection: "row",
alignItems: "center",
gap: 4
},
titleText: {
flexShrink: 1
}
});
export default function HomeDrawerFolderExpandedChildren(props) {
const { folderId, expanded } = props;
const stateFromStores = useStateFromStores([SortedGuildStore], () => folderId != null ? SortedGuildStore.getGuildFolderById(folderId) : null);
const enableHome = MobileHomeDrawerExperiment.useConfig({
location: "folder-expanded-children"
}).enableHome;
const isChatBesideChannelList = useChatLayout().isChatBesideChannelList;
return stateFromStores == null ? null : enableHome ? isChatBesideChannelList ? null : <Wrapper folder={stateFromStores} expanded={expanded} /> : null;
};