Files
discord-decomp/modules/app_launcher/hooks/useAppsInThisServer.tsx
T
2026-11-01 12:12:55 +02:00

56 lines
2.6 KiB
TypeScript

// Metro module 11296 (f11297).
import { useMemo } from "react";
import { useGuildIndexState } from "../../application_commands/ApplicationCommandIndexStore";
import UserStore from "../../../stores/UserStore";
import { DISCOVERY_COMMANDS_QUERY_LIMIT } from "../../application_commands/ApplicationCommandConstants";
import { useStateFromStores } from "../../../_bundle/Module589";
import { useDiscovery } from "../../application_commands/ApplicationCommandQueryApi";
import { ApplicationCommandType } from "../../../flow/Server";
import { BUILT_IN_SECTIONS } from "../../application_commands/ApplicationCommandBuiltIns";
import { useSortApplicationsViaFrecency } from "../../applications/ApplicationFrecencyHooks";
import Module12 from "../../../_bundle/Module12";
import isApplicationAgeRestricted from "../../applications/utils/isApplicationAgeRestricted";
export default function useAppsInThisServer({ context }) {
let commandsByActiveSection, memo, sortApplicationsViaFrecency;
commandsByActiveSection = void 0;
memo = void 0;
sortApplicationsViaFrecency = void 0;
const guildIndexState = useGuildIndexState((context.type === "channel" ? context.channel : void 0)?.guild_id, true);
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser()?.nsfwAllowed);
const discovery = useDiscovery({
context,
filters: {
commandTypes: [ApplicationCommandType.CHAT, ApplicationCommandType.PRIMARY_ENTRY_POINT]
},
options: {
placeholderCount: 0,
limit: DISCOVERY_COMMANDS_QUERY_LIMIT,
includeFrecency: true
},
allowFetch: true
});
commandsByActiveSection = discovery.commandsByActiveSection;
const loading = discovery.loading;
memo = useMemo(() => commandsByActiveSection.reduce((acc, item) => {
const section = item.section;
if (item.data.length > 0) {
acc.add(section.id);
}
return acc;
}, new Set()), [commandsByActiveSection]);
sortApplicationsViaFrecency = useSortApplicationsViaFrecency(useMemo(() => {
const r6 = Object;
let r9 = guildIndexState.result?.sections;
if (r9 == null) {
r9 = {};
}
return r6.values(r9).map((item) => item.descriptor).filter((item) => !(item.id in BUILT_IN_SECTIONS) && memo.has(item.id));
}, [guildIndexState.result?.sections, memo]));
return {
appsInThisServer: useMemo(() => Module12.compact(sortApplicationsViaFrecency.map((item) => item.application)).filter((item) => !(stateFromStores === false && isApplicationAgeRestricted(item.id))).map((item) => ({
application: item
})), [stateFromStores, sortApplicationsViaFrecency]),
isLoading: guildIndexState.fetchState.fetching || loading
};
};