🆙 Fix Group Forum buy

This commit is contained in:
duckietm
2026-06-10 14:16:18 +02:00
parent 4bfd5e96ec
commit 9fcbfba22f
6 changed files with 113 additions and 74 deletions
+29 -30
View File
@@ -1,32 +1,31 @@
import { CatalogGroupsComposer, GuildMembershipsMessageEvent, HabboGroupEntryData } from '@nitrots/nitro-renderer';
import { UseQueryResult } from '@tanstack/react-query';
import { useNitroQuery } from '../../api/nitro-query';
import { useCallback, useEffect, useState } from 'react';
import { useBetween } from 'use-between';
import { SendMessageComposer } from '../../api';
import { useMessageEvent } from '../events';
/**
* The list of guilds the current Habbo belongs to, as returned by
* the `CatalogGroupsComposer` → `GuildMembershipsMessageEvent`
* request/response pair.
*
* Cached at session level: the membership list is stable for the
* session unless the user joins/leaves a guild (in which case the
* relevant flow should invalidate the `['nitro', 'user', 'groups']`
* query key, which today nobody does — re-mounting the consumer
* refetches via React Query's default behavior).
*
* Replaces three duplicate request+listener pairs that previously
* each issued their own CatalogGroupsComposer:
* - useCatalog (catalogOptions.groups)
* - WiredSelectorUsersGroupView
* - WiredConditionActorIsGroupMemberView
*/
export const useUserGroups = (
options: { enabled?: boolean } = {}
): UseQueryResult<HabboGroupEntryData[]> =>
useNitroQuery<GuildMembershipsMessageEvent, HabboGroupEntryData[]>({
key: [ 'nitro', 'user', 'groups' ],
request: () => new CatalogGroupsComposer(),
parser: GuildMembershipsMessageEvent,
select: event => (event.getParser().groups || []),
enabled: options.enabled,
staleTime: Infinity
});
const useUserGroupsStore = () =>
{
const [ groups, setGroups ] = useState<HabboGroupEntryData[]>([]);
const onGuildMemberships = useCallback((event: GuildMembershipsMessageEvent) =>
{
setGroups(event.getParser()?.groups || []);
}, []);
useMessageEvent<GuildMembershipsMessageEvent>(GuildMembershipsMessageEvent, onGuildMemberships);
useEffect(() =>
{
SendMessageComposer(new CatalogGroupsComposer());
}, []);
return { groups };
};
export const useUserGroups = (): { data: HabboGroupEntryData[] } =>
{
const { groups } = useBetween(useUserGroupsStore);
return { data: groups };
};