stream-chat
Version:
JS SDK for the Stream Chat API
174 lines • 7.68 kB
TypeScript
import { DebouncedFunc } from './utils';
import { StateStore } from './store';
import type { Channel } from './channel';
import type { StreamChat } from './client';
import type { ChannelFilters, ChannelOptions, ChannelSort, DefaultGenerics, ExtendableGenerics, MessageFilters, MessageResponse, SearchMessageSort, UserFilters, UserOptions, UserResponse, UserSort } from './types';
export declare type SearchSourceType = 'channels' | 'users' | 'messages' | (string & {});
export declare type QueryReturnValue<T> = {
items: T[];
next?: string;
};
export declare type DebounceOptions = {
debounceMs: number;
};
declare type DebouncedExecQueryFunction = DebouncedFunc<(searchString?: string) => Promise<void>>;
export interface SearchSource<T = any> {
activate(): void;
deactivate(): void;
readonly hasNext: boolean;
readonly hasResults: boolean;
readonly initialState: SearchSourceState<T>;
readonly isActive: boolean;
readonly isLoading: boolean;
readonly items: T[] | undefined;
readonly lastQueryError: Error | undefined;
readonly next: string | undefined;
readonly offset: number | undefined;
resetState(): void;
search(text?: string): void;
searchDebounced: DebouncedExecQueryFunction;
readonly searchQuery: string;
setDebounceOptions(options: DebounceOptions): void;
readonly state: StateStore<SearchSourceState<T>>;
readonly type: SearchSourceType;
}
export declare type SearchSourceState<T = any> = {
hasNext: boolean;
isActive: boolean;
isLoading: boolean;
items: T[] | undefined;
searchQuery: string;
lastQueryError?: Error;
next?: string;
offset?: number;
};
export declare type SearchSourceOptions = {
/** The number of milliseconds to debounce the search query. The default interval is 300ms. */
debounceMs?: number;
pageSize?: number;
};
export declare abstract class BaseSearchSource<T> implements SearchSource<T> {
state: StateStore<SearchSourceState<T>>;
protected pageSize: number;
abstract readonly type: SearchSourceType;
searchDebounced: DebouncedExecQueryFunction;
protected constructor(options?: SearchSourceOptions);
get lastQueryError(): Error | undefined;
get hasNext(): boolean;
get hasResults(): boolean;
get isActive(): boolean;
get isLoading(): boolean;
get initialState(): {
hasNext: boolean;
isActive: boolean;
isLoading: boolean;
items: undefined;
lastQueryError: undefined;
next: undefined;
offset: number;
searchQuery: string;
};
get items(): T[] | undefined;
get next(): string | undefined;
get offset(): number | undefined;
get searchQuery(): string;
protected abstract query(searchQuery: string): Promise<QueryReturnValue<T>>;
protected abstract filterQueryResults(items: T[]): T[] | Promise<T[]>;
setDebounceOptions: ({ debounceMs }: DebounceOptions) => void;
activate: () => void;
deactivate: () => void;
executeQuery(newSearchString?: string): Promise<void>;
search: (searchQuery?: string | undefined) => void;
resetState(): void;
}
export declare class UserSearchSource<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> extends BaseSearchSource<UserResponse<StreamChatGenerics>> {
readonly type = "users";
private client;
filters: UserFilters<StreamChatGenerics> | undefined;
sort: UserSort<StreamChatGenerics> | undefined;
searchOptions: Omit<UserOptions, 'limit' | 'offset'> | undefined;
constructor(client: StreamChat<StreamChatGenerics>, options?: SearchSourceOptions);
protected query(searchQuery: string): Promise<{
items: UserResponse<StreamChatGenerics>[];
}>;
protected filterQueryResults(items: UserResponse<StreamChatGenerics>[]): UserResponse<StreamChatGenerics>[];
}
export declare class ChannelSearchSource<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> extends BaseSearchSource<Channel<StreamChatGenerics>> {
readonly type = "channels";
private client;
filters: ChannelFilters<StreamChatGenerics> | undefined;
sort: ChannelSort<StreamChatGenerics> | undefined;
searchOptions: Omit<ChannelOptions, 'limit' | 'offset'> | undefined;
constructor(client: StreamChat<StreamChatGenerics>, options?: SearchSourceOptions);
protected query(searchQuery: string): Promise<{
items: Channel<StreamChatGenerics>[];
}>;
protected filterQueryResults(items: Channel<StreamChatGenerics>[]): Channel<StreamChatGenerics>[];
}
export declare class MessageSearchSource<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> extends BaseSearchSource<MessageResponse<StreamChatGenerics>> {
readonly type = "messages";
private client;
messageSearchChannelFilters: ChannelFilters<StreamChatGenerics> | undefined;
messageSearchFilters: MessageFilters<StreamChatGenerics> | undefined;
messageSearchSort: SearchMessageSort<StreamChatGenerics> | undefined;
channelQueryFilters: ChannelFilters<StreamChatGenerics> | undefined;
channelQuerySort: ChannelSort<StreamChatGenerics> | undefined;
channelQueryOptions: Omit<ChannelOptions, 'limit' | 'offset'> | undefined;
constructor(client: StreamChat<StreamChatGenerics>, options?: SearchSourceOptions);
protected query(searchQuery: string): Promise<{
items: never[];
next?: undefined;
} | {
items: MessageResponse<StreamChatGenerics>[];
next: string | undefined;
}>;
protected filterQueryResults(items: MessageResponse<StreamChatGenerics>[]): MessageResponse<StreamChatGenerics>[];
}
export declare type DefaultSearchSources<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = [
UserSearchSource<StreamChatGenerics>,
ChannelSearchSource<StreamChatGenerics>,
MessageSearchSource<StreamChatGenerics>
];
export declare type SearchControllerState = {
isActive: boolean;
searchQuery: string;
sources: SearchSource[];
};
export declare type InternalSearchControllerState<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = {
focusedMessage?: MessageResponse<StreamChatGenerics>;
};
export declare type SearchControllerConfig = {
keepSingleActiveSource: boolean;
};
export declare type SearchControllerOptions = {
config?: Partial<SearchControllerConfig>;
sources?: SearchSource[];
};
export declare class SearchController<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> {
/**
* Not intended for direct use by integrators, might be removed without notice resulting in
* broken integrations.
*/
_internalState: StateStore<InternalSearchControllerState<StreamChatGenerics>>;
state: StateStore<SearchControllerState>;
config: SearchControllerConfig;
constructor({ config, sources }?: SearchControllerOptions);
get hasNext(): boolean;
get sources(): SearchSource<any>[];
get activeSources(): SearchSource<any>[];
get isActive(): boolean;
get searchQuery(): string;
get searchSourceTypes(): Array<SearchSource['type']>;
addSource: (source: SearchSource) => void;
getSource: (sourceType: SearchSource['type']) => SearchSource<any> | undefined;
removeSource: (sourceType: SearchSource['type']) => void;
activateSource: (sourceType: SearchSource['type']) => void;
deactivateSource: (sourceType: SearchSource['type']) => void;
activate: () => void;
search: (searchQuery?: string | undefined) => Promise<void>;
cancelSearchQueries: () => void;
clear: () => void;
exit: () => void;
}
export {};
//# sourceMappingURL=search_controller.d.ts.map