@azure/communication-react
Version:
React library for building modern communication user experiences utilizing Azure Communication Services
153 lines • 7.79 kB
TypeScript
import { ChatClientState, StatefulChatClient } from "../../../../../chat-stateful-client/src";
import { ChatThreadClient, SendMessageOptions } from '@azure/communication-chat';
import { CommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common';
import { _TelemetryImplementationHint } from "../../../../../acs-ui-common/src";
import { ChatAdapter, ChatAdapterState, MessageDeletedListener, MessageEditedListener, MessageReadListener, MessageReceivedListener, ParticipantsAddedListener, ParticipantsRemovedListener, TopicChangedListener } from './ChatAdapter';
import { ResourceDetails } from './ChatAdapter';
import { AdapterError } from '../../common/adapters';
import type { OnFetchChatProfileCallback } from './OnFetchProfileCallback';
/**
* @private
*/
export type AdapterStateModifier = (state: ChatAdapterState) => ChatAdapterState;
/**
* Options for configuring the ChatAdapter.
*
* @public
*/
export type ChatAdapterOptions = {
/**
* Optional callback to fetch a chat profile
*/
onFetchProfile?: OnFetchChatProfileCallback;
};
/**
* Context of Chat, which is a centralized context for all state updates
* @private
*/
export declare class ChatContext {
private emitter;
private state;
private threadId;
private displayNameModifier;
constructor(clientState: ChatClientState, threadId: string, chatAdapterOptions?: ChatAdapterOptions);
onStateChange(handler: (_uiState: ChatAdapterState) => void): void;
offStateChange(handler: (_uiState: ChatAdapterState) => void): void;
setState(state: ChatAdapterState): void;
getState(): ChatAdapterState;
setError(error: Error): void;
updateClientState(clientState: ChatClientState): void;
}
/**
* @private
*/
export declare class AzureCommunicationChatAdapter implements ChatAdapter {
private chatClient;
private chatThreadClient;
private context;
private handlers;
private emitter;
constructor(chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient, chatAdapterOptions?: ChatAdapterOptions);
private bindAllPublicMethods;
dispose(): void;
fetchInitialData(): Promise<void>;
getState(): ChatAdapterState;
onStateChange(handler: (state: ChatAdapterState) => void): void;
offStateChange(handler: (state: ChatAdapterState) => void): void;
sendMessage(content: string, options?: SendMessageOptions): Promise<void>;
sendReadReceipt(chatMessageId: string): Promise<void>;
sendTypingIndicator(): Promise<void>;
removeParticipant(userId: string): Promise<void>;
setTopic(topicName: string): Promise<void>;
loadPreviousChatMessages(messagesToLoad: number): Promise<boolean>;
updateMessage(messageId: string, content: string, options?: Record<string, string>): Promise<void>;
deleteMessage(messageId: string): Promise<void>;
downloadResourceToCache(resourceDetails: ResourceDetails): Promise<void>;
removeResourceFromCache(resourceDetails: ResourceDetails): void;
private messageReceivedListener;
private messageEditedListener;
private messageDeletedListener;
private messageReadListener;
private participantsAddedListener;
private participantsRemovedListener;
private chatThreadPropertiesUpdatedListener;
private subscribeAllEvents;
private unsubscribeAllEvents;
on(event: 'messageReceived', listener: MessageReceivedListener): void;
on(event: 'messageEdited', listener: MessageEditedListener): void;
on(event: 'messageDeleted', listener: MessageDeletedListener): void;
on(event: 'messageSent', listener: MessageReceivedListener): void;
on(event: 'messageRead', listener: MessageReadListener): void;
on(event: 'participantsAdded', listener: ParticipantsAddedListener): void;
on(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;
on(event: 'topicChanged', listener: TopicChangedListener): void;
on(event: 'error', listener: (e: AdapterError) => void): void;
off(event: 'messageReceived', listener: MessageReceivedListener): void;
off(event: 'messageEdited', listener: MessageEditedListener): void;
off(event: 'messageDeleted', listener: MessageDeletedListener): void;
off(event: 'messageSent', listener: MessageReceivedListener): void;
off(event: 'messageRead', listener: MessageReadListener): void;
off(event: 'participantsAdded', listener: ParticipantsAddedListener): void;
off(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;
off(event: 'topicChanged', listener: TopicChangedListener): void;
off(event: 'error', listener: (e: AdapterError) => void): void;
private asyncTeeErrorToEventEmitter;
}
/**
* Arguments for creating the Azure Communication Services implementation of {@link ChatAdapter}.
*
* @public
*/
export type AzureCommunicationChatAdapterArgs = {
endpoint: string;
userId: CommunicationUserIdentifier;
displayName: string;
credential: CommunicationTokenCredential;
threadId: string;
chatAdapterOptions?: ChatAdapterOptions;
};
/**
* Create a {@link ChatAdapter} backed by Azure Communication Services.
*
* This is the default implementation of {@link ChatAdapter} provided by this library.
*
* @public
*/
export declare const createAzureCommunicationChatAdapter: ({ endpoint: endpointUrl, userId, displayName, credential, threadId, chatAdapterOptions }: AzureCommunicationChatAdapterArgs) => Promise<ChatAdapter>;
/**
* This inner function is used to allow injection of TelemetryImplementationHint without changing the public API.
*
* @internal
*/
export declare const _createAzureCommunicationChatAdapterInner: (endpoint: string, userId: CommunicationUserIdentifier, displayName: string, credential: CommunicationTokenCredential, threadId: string, telemetryImplementationHint?: _TelemetryImplementationHint, chatAdapterOptions?: ChatAdapterOptions) => Promise<ChatAdapter>;
/**
* This inner function to create ChatAdapterPromise in case when threadID is not avaialble.
* ThreadId is a promise to allow for lazy initialization of the adapter.
* @internal
*/
export declare const _createLazyAzureCommunicationChatAdapterInner: (endpoint: string, userId: CommunicationUserIdentifier, displayName: string, credential: CommunicationTokenCredential, threadId: Promise<string>, telemetryImplementationHint?: _TelemetryImplementationHint, chatAdapterOptions?: ChatAdapterOptions) => Promise<ChatAdapter>;
/**
* A custom React hook to simplify the creation of {@link ChatAdapter}.
*
* Similar to {@link createAzureCommunicationChatAdapter}, but takes care of asynchronous
* creation of the adapter internally.
*
* Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments
* as they are created. The adapter is only created when all arguments are defined.
*
* Note that you must memoize the arguments to avoid recreating adapter on each render.
* See storybook for typical usage examples.
*
* @public
*/
export declare const useAzureCommunicationChatAdapter: (args: Partial<AzureCommunicationChatAdapterArgs>, afterCreate?: (adapter: ChatAdapter) => Promise<ChatAdapter>, beforeDispose?: (adapter: ChatAdapter) => Promise<void>) => ChatAdapter | undefined;
/**
* Create a {@link ChatAdapter} using the provided {@link StatefulChatClient}.
*
* Useful if you want to keep a reference to {@link StatefulChatClient}.
* Consider using {@link createAzureCommunicationChatAdapter} for a simpler API.
*
* @public
*/
export declare function createAzureCommunicationChatAdapterFromClient(chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient, chatAdapterOptions?: ChatAdapterOptions): Promise<ChatAdapter>;
//# sourceMappingURL=AzureCommunicationChatAdapter.d.ts.map