11import type { IRoom , ISubscription , IUser } from '@rocket.chat/core-typings' ;
22import { Emitter } from '@rocket.chat/emitter' ;
33import { useLocalStorage } from '@rocket.chat/fuselage-hooks' ;
4+ import { createPredicateFromFilter } from '@rocket.chat/mongo-adapter' ;
45import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts' ;
56import { UserContext , useEndpoint , useRouteParameter , useSearchParameter } from '@rocket.chat/ui-contexts' ;
67import { useQueryClient } from '@tanstack/react-query' ;
@@ -20,6 +21,7 @@ import { sdk } from '../../../app/utils/client/lib/SDKClient';
2021import { afterLogoutCleanUpCallback } from '../../../lib/callbacks/afterLogoutCleanUpCallback' ;
2122import { useIdleConnection } from '../../hooks/useIdleConnection' ;
2223import { useReactiveValue } from '../../hooks/useReactiveValue' ;
24+ import { applyQueryOptions } from '../../lib/cachedCollections/pipe' ;
2325import { createReactiveSubscriptionFactory } from '../../lib/createReactiveSubscriptionFactory' ;
2426import { useSamlInviteToken } from '../../views/invite/hooks/useSamlInviteToken' ;
2527
@@ -74,13 +76,28 @@ const UserProvider = ({ children }: UserProviderProps): ReactElement => {
7476 querySubscription : createReactiveSubscriptionFactory < ISubscription | undefined > ( ( query , fields , sort ) =>
7577 Subscriptions . findOne ( query , { fields, sort } ) ,
7678 ) ,
77- queryRoom : createReactiveSubscriptionFactory < IRoom | undefined > ( ( query , fields ) => Rooms . findOne ( query , { fields } ) ) ,
79+ queryRoom : createReactiveSubscriptionFactory < IRoom | undefined > ( ( query ) => {
80+ const predicate = createPredicateFromFilter ( query ) ;
81+ return Rooms . state . find ( predicate ) ;
82+ } ) ,
7883 querySubscriptions : createReactiveSubscriptionFactory < SubscriptionWithRoom [ ] > ( ( query , options ) => {
7984 if ( userId ) {
80- return Subscriptions . find ( query , options ) . fetch ( ) ;
85+ const predicate = createPredicateFromFilter ( query ) ;
86+ const subs = Subscriptions . state . filter ( predicate ) ;
87+
88+ if ( options ?. sort || options ?. limit || options ?. skip ) {
89+ return applyQueryOptions ( subs , options ) ;
90+ }
91+ return subs ;
8192 }
93+ // Anonnymous users don't have subscriptions. Fetch Rooms instead.
94+ const predicate = createPredicateFromFilter ( query ) ;
95+ const rooms = Rooms . state . filter ( predicate ) as unknown as SubscriptionWithRoom [ ] ; // FIXME: this is a hack to make the typings work. How was it working before?
8296
83- return Rooms . find ( query , options ) . fetch ( ) ;
97+ if ( options ?. sort || options ?. limit ) {
98+ return applyQueryOptions ( rooms , options ) ;
99+ }
100+ return rooms ;
84101 } ) ,
85102 logout : async ( ) => Meteor . logout ( ) ,
86103 onLogout : ( cb ) => {
0 commit comments