Files
Nitro_Render_V3/packages/api/src/nitro/session/IIgnoredUsersManager.ts
T
simoleo89 a599e0cf89 feat(session): snapshot getters for IgnoredUsersManager + GroupInformationManager
Extends the v2.1.0 React-friendly snapshot pattern (originally on
SessionDataManager / RoomSessionManager) to two more session-state
holders the React client reads frequently:

- IgnoredUsersManager.getIgnoredUsersSnapshot(): ReadonlyArray<string>
- GroupInformationManager.getGroupBadgesSnapshot(): ReadonlyMap<number, string>

Both follow the same shape: lazy-frozen snapshot, cached until the
underlying state mutates, then invalidated and a dispatched event lets
the React client rebuild via useSyncExternalStore.

Two new NitroEventType members carry the invalidation signal:
- IGNORED_USERS_UPDATED — dispatched by IgnoredUsersManager whenever
  the list changes (initial load, add, remove, queue-truncate case 2).
- GROUP_BADGES_UPDATED — dispatched by GroupInformationManager only
  when the incoming HabboGroupBadges payload contains at least one
  new or changed mapping (no-op refresh stays quiet).

This lets the user-info popup, profile page, friend/guild filtering,
and any other consumer share a single read through useSyncExternalStore
instead of each subscribing to the underlying message events
independently.

API additions are interface-respecting and backwards-compatible — the
existing `isIgnored(name)` / `getGroupBadge(groupId)` accessors stay
untouched.
2026-05-18 20:50:24 +02:00

20 lines
658 B
TypeScript

export interface IIgnoredUsersManager
{
init(): void;
requestIgnoredUsers(username: string): void;
ignoreUserId(id: number): void;
ignoreUser(name: string): void;
unignoreUser(name: string): void;
isIgnored(name: string): boolean;
/**
* Returns the current ignored-users list as a frozen, referentially
* stable array. The same reference is returned across reads until
* the list is mutated; mutations dispatch
* `NitroEventType.IGNORED_USERS_UPDATED` to signal invalidation.
*
* Pairs with `useSyncExternalStore` on the React client.
*/
getIgnoredUsersSnapshot(): ReadonlyArray<string>;
}