@webinex/chatify 1.0.0-alpha00

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/cjs/index.js +2 -0
  2. package/dist/cjs/index.js.map +1 -0
  3. package/dist/cjs/types/ChatifyContext.d.ts +11 -0
  4. package/dist/cjs/types/core/action.d.ts +73 -0
  5. package/dist/cjs/types/core/client.d.ts +35 -0
  6. package/dist/cjs/types/core/index.d.ts +14 -0
  7. package/dist/cjs/types/core/models.d.ts +64 -0
  8. package/dist/cjs/types/core/reducer.d.ts +11 -0
  9. package/dist/cjs/types/core/state.d.ts +25 -0
  10. package/dist/cjs/types/core/useAccounts.d.ts +1 -0
  11. package/dist/cjs/types/core/useAddChat.d.ts +2 -0
  12. package/dist/cjs/types/core/useAddMember.d.ts +2 -0
  13. package/dist/cjs/types/core/useAddMessage.d.ts +5 -0
  14. package/dist/cjs/types/core/useChat.d.ts +3 -0
  15. package/dist/cjs/types/core/useChatList.d.ts +1 -0
  16. package/dist/cjs/types/core/useLoadMore.d.ts +3 -0
  17. package/dist/cjs/types/core/useMessages.d.ts +15 -0
  18. package/dist/cjs/types/core/useMutation.d.ts +12 -0
  19. package/dist/cjs/types/core/useQuery.d.ts +7 -0
  20. package/dist/cjs/types/core/useReadMonitor.d.ts +1 -0
  21. package/dist/cjs/types/core/useRemoveMember.d.ts +2 -0
  22. package/dist/cjs/types/core/useSignalR.d.ts +1 -0
  23. package/dist/cjs/types/index.d.ts +3 -0
  24. package/dist/cjs/types/ui/AddChat.d.ts +1 -0
  25. package/dist/cjs/types/ui/Aside.d.ts +1 -0
  26. package/dist/cjs/types/ui/Chat.d.ts +4 -0
  27. package/dist/cjs/types/ui/ChatBody.d.ts +4 -0
  28. package/dist/cjs/types/ui/ChatHeader.d.ts +4 -0
  29. package/dist/cjs/types/ui/ChatSettings.d.ts +1 -0
  30. package/dist/cjs/types/ui/Chatify.d.ts +8 -0
  31. package/dist/cjs/types/ui/InputForm.d.ts +1 -0
  32. package/dist/cjs/types/ui/LoadMore.d.ts +4 -0
  33. package/dist/cjs/types/ui/Main.d.ts +1 -0
  34. package/dist/cjs/types/ui/Message.d.ts +5 -0
  35. package/dist/cjs/types/ui/MessageMd.d.ts +13 -0
  36. package/dist/cjs/types/ui/MessageSkeleton.d.ts +4 -0
  37. package/dist/cjs/types/ui/SendingMessage.d.ts +6 -0
  38. package/dist/cjs/types/ui/SystemMessage.d.ts +8 -0
  39. package/dist/cjs/types/ui/index.d.ts +2 -0
  40. package/dist/cjs/types/ui/localizer.d.ts +28 -0
  41. package/dist/cjs/types/util/index.d.ts +2 -0
  42. package/dist/cjs/types/util/uniqBy.d.ts +1 -0
  43. package/dist/cjs/types/util/uniqId.d.ts +1 -0
  44. package/dist/css/chatify.css +328 -0
  45. package/dist/esm/index.js +2 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/types/ChatifyContext.d.ts +11 -0
  48. package/dist/esm/types/core/action.d.ts +73 -0
  49. package/dist/esm/types/core/client.d.ts +35 -0
  50. package/dist/esm/types/core/index.d.ts +14 -0
  51. package/dist/esm/types/core/models.d.ts +64 -0
  52. package/dist/esm/types/core/reducer.d.ts +11 -0
  53. package/dist/esm/types/core/state.d.ts +25 -0
  54. package/dist/esm/types/core/useAccounts.d.ts +1 -0
  55. package/dist/esm/types/core/useAddChat.d.ts +2 -0
  56. package/dist/esm/types/core/useAddMember.d.ts +2 -0
  57. package/dist/esm/types/core/useAddMessage.d.ts +5 -0
  58. package/dist/esm/types/core/useChat.d.ts +3 -0
  59. package/dist/esm/types/core/useChatList.d.ts +1 -0
  60. package/dist/esm/types/core/useLoadMore.d.ts +3 -0
  61. package/dist/esm/types/core/useMessages.d.ts +15 -0
  62. package/dist/esm/types/core/useMutation.d.ts +12 -0
  63. package/dist/esm/types/core/useQuery.d.ts +7 -0
  64. package/dist/esm/types/core/useReadMonitor.d.ts +1 -0
  65. package/dist/esm/types/core/useRemoveMember.d.ts +2 -0
  66. package/dist/esm/types/core/useSignalR.d.ts +1 -0
  67. package/dist/esm/types/index.d.ts +3 -0
  68. package/dist/esm/types/ui/AddChat.d.ts +1 -0
  69. package/dist/esm/types/ui/Aside.d.ts +1 -0
  70. package/dist/esm/types/ui/Chat.d.ts +4 -0
  71. package/dist/esm/types/ui/ChatBody.d.ts +4 -0
  72. package/dist/esm/types/ui/ChatHeader.d.ts +4 -0
  73. package/dist/esm/types/ui/ChatSettings.d.ts +1 -0
  74. package/dist/esm/types/ui/Chatify.d.ts +8 -0
  75. package/dist/esm/types/ui/InputForm.d.ts +1 -0
  76. package/dist/esm/types/ui/LoadMore.d.ts +4 -0
  77. package/dist/esm/types/ui/Main.d.ts +1 -0
  78. package/dist/esm/types/ui/Message.d.ts +5 -0
  79. package/dist/esm/types/ui/MessageMd.d.ts +13 -0
  80. package/dist/esm/types/ui/MessageSkeleton.d.ts +4 -0
  81. package/dist/esm/types/ui/SendingMessage.d.ts +6 -0
  82. package/dist/esm/types/ui/SystemMessage.d.ts +8 -0
  83. package/dist/esm/types/ui/index.d.ts +2 -0
  84. package/dist/esm/types/ui/localizer.d.ts +28 -0
  85. package/dist/esm/types/util/index.d.ts +2 -0
  86. package/dist/esm/types/util/uniqBy.d.ts +1 -0
  87. package/dist/esm/types/util/uniqId.d.ts +1 -0
  88. package/dist/index.d.ts +290 -0
  89. package/package.json +90 -0
  90. package/src/ChatifyContext.tsx +26 -0
  91. package/src/core/action.tsx +282 -0
  92. package/src/core/client.ts +137 -0
  93. package/src/core/index.ts +14 -0
  94. package/src/core/models.tsx +75 -0
  95. package/src/core/reducer.tsx +80 -0
  96. package/src/core/state.ts +38 -0
  97. package/src/core/useAccounts.tsx +11 -0
  98. package/src/core/useAddChat.tsx +12 -0
  99. package/src/core/useAddMember.tsx +12 -0
  100. package/src/core/useAddMessage.tsx +40 -0
  101. package/src/core/useChat.tsx +12 -0
  102. package/src/core/useChatList.tsx +10 -0
  103. package/src/core/useLoadMore.tsx +42 -0
  104. package/src/core/useMessages.tsx +23 -0
  105. package/src/core/useMutation.tsx +48 -0
  106. package/src/core/useQuery.tsx +45 -0
  107. package/src/core/useReadMonitor.tsx +31 -0
  108. package/src/core/useRemoveMember.tsx +12 -0
  109. package/src/core/useSignalR.tsx +51 -0
  110. package/src/index.ts +3 -0
  111. package/src/ui/AddChat.tsx +55 -0
  112. package/src/ui/Aside.tsx +67 -0
  113. package/src/ui/Chat.tsx +26 -0
  114. package/src/ui/ChatBody.tsx +43 -0
  115. package/src/ui/ChatHeader.tsx +47 -0
  116. package/src/ui/ChatSettings.tsx +59 -0
  117. package/src/ui/Chatify.tsx +47 -0
  118. package/src/ui/InputForm.tsx +48 -0
  119. package/src/ui/LoadMore.tsx +40 -0
  120. package/src/ui/Main.tsx +16 -0
  121. package/src/ui/Message.tsx +50 -0
  122. package/src/ui/MessageMd.tsx +47 -0
  123. package/src/ui/MessageSkeleton.tsx +19 -0
  124. package/src/ui/SendingMessage.tsx +14 -0
  125. package/src/ui/SystemMessage.tsx +26 -0
  126. package/src/ui/index.ts +2 -0
  127. package/src/ui/localizer.tsx +58 -0
  128. package/src/ui/styles/aside.scss +94 -0
  129. package/src/ui/styles/index.scss +247 -0
  130. package/src/ui/styles/keyframes.scss +14 -0
  131. package/src/ui/styles/mixins.scss +20 -0
  132. package/src/ui/styles/variables.scss +10 -0
  133. package/src/util/index.ts +2 -0
  134. package/src/util/uniqBy.tsx +17 -0
  135. package/src/util/uniqId.tsx +3 -0
@@ -0,0 +1,35 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { Account, AddChatRequest, AddMemberRequest, Chat, ChatListItem, Message, ReadRequest, RemoveMemberRequest, SendMessageRequest } from './models';
3
+ export interface ChatifySignalRConfig {
4
+ hubUri?: string;
5
+ accessTokenFactory?: () => Promise<string>;
6
+ headersFactory?: () => Promise<Record<string, string>>;
7
+ }
8
+ export interface ChatifyClientConfig {
9
+ axios: AxiosInstance;
10
+ signalR: ChatifySignalRConfig;
11
+ }
12
+ export declare class ChatifyClient {
13
+ private _config;
14
+ private _connection;
15
+ private _subscribers;
16
+ private _reconnectSubscribers;
17
+ constructor(config: ChatifyClientConfig);
18
+ connect: () => Promise<void>;
19
+ subscribe: <T extends any[]>(method: string, subscriber: (args: T) => void) => () => ((args: any[]) => void)[];
20
+ subscribeReconnect: (subscriber: () => any) => () => (() => void)[];
21
+ private get axios();
22
+ accounts: () => Promise<Account[]>;
23
+ chats: () => Promise<ChatListItem[]>;
24
+ chat: (id: string) => Promise<Chat>;
25
+ addChat: (args: AddChatRequest) => Promise<string>;
26
+ messages: (args: {
27
+ chatId: string;
28
+ skip?: number;
29
+ take?: number;
30
+ }) => Promise<Message[]>;
31
+ send: (request: SendMessageRequest) => Promise<void>;
32
+ read: (request: ReadRequest) => Promise<void>;
33
+ removeMember: (request: RemoveMemberRequest) => Promise<void>;
34
+ addMember: (request: AddMemberRequest) => Promise<void>;
35
+ }
@@ -0,0 +1,14 @@
1
+ export * from './models';
2
+ export * from './client';
3
+ export * from './action';
4
+ export * from './reducer';
5
+ export * from './useChat';
6
+ export * from './useChatList';
7
+ export * from './useLoadMore';
8
+ export * from './useMessages';
9
+ export * from './useSignalR';
10
+ export * from './useAccounts';
11
+ export * from './useAddChat';
12
+ export * from './useReadMonitor';
13
+ export * from './useAddMember';
14
+ export * from './useRemoveMember';
@@ -0,0 +1,64 @@
1
+ export interface File {
2
+ name: string;
3
+ bytes: number;
4
+ ref: string;
5
+ }
6
+ export interface Account {
7
+ id: string;
8
+ name: string;
9
+ avatar: string;
10
+ }
11
+ export interface Message {
12
+ id: string;
13
+ chatId: string;
14
+ text: string;
15
+ files: File[];
16
+ sentAt: string;
17
+ sentBy: Account;
18
+ read: boolean;
19
+ requestId?: string;
20
+ }
21
+ export interface Chat {
22
+ id: string;
23
+ name: string;
24
+ members: Account[];
25
+ }
26
+ export interface ChatListItem {
27
+ id: string;
28
+ name: string;
29
+ message: Message;
30
+ unreadCount: number;
31
+ }
32
+ export interface SendMessageRequest {
33
+ chatId: string;
34
+ text: string;
35
+ files: File[];
36
+ requestId: string;
37
+ }
38
+ export interface MessageContent {
39
+ text: string;
40
+ files: File[];
41
+ }
42
+ export interface AddChatRequest {
43
+ requestId: string;
44
+ name: string;
45
+ message?: MessageContent;
46
+ members: string[];
47
+ }
48
+ export interface ReadRequest {
49
+ ids: string[];
50
+ }
51
+ export interface ReadEvent {
52
+ messageId: string;
53
+ chatId: string;
54
+ }
55
+ export interface RemoveMemberRequest {
56
+ chatId: string;
57
+ accountId: string;
58
+ deleteHistory: boolean;
59
+ }
60
+ export interface AddMemberRequest {
61
+ chatId: string;
62
+ accountId: string;
63
+ withHistory: boolean;
64
+ }
@@ -0,0 +1,11 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ import { Action } from './action';
3
+ import { State } from './state';
4
+ export type Reducer = ReturnType<typeof useReducer>;
5
+ type Subscriber = (state: State) => void;
6
+ export declare function useReducer(): readonly [React.MutableRefObject<State>, (action: Action) => void, (subscriber: Subscriber) => () => void];
7
+ export declare function ReducerProvider({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function useDispatch(): (action: Action) => void;
9
+ export declare function useStateRef(): React.MutableRefObject<State>;
10
+ export declare function useSelect<TResult>(select: (state: State) => TResult, deps: any[]): TResult;
11
+ export {};
@@ -0,0 +1,25 @@
1
+ export interface UIState {
2
+ view?: 'chat' | 'new-chat' | 'chat-settings';
3
+ chatId?: string;
4
+ }
5
+ export interface QueryState<TData> {
6
+ uninitialized: boolean;
7
+ isFetching: boolean;
8
+ error?: any;
9
+ data?: TData;
10
+ }
11
+ export interface MutationState {
12
+ isFetching: boolean;
13
+ error?: any;
14
+ }
15
+ export interface State {
16
+ ui: UIState;
17
+ query: Record<string, QueryState<any>>;
18
+ mutation: Record<string, MutationState>;
19
+ read: {
20
+ queued: string[];
21
+ sent: string[];
22
+ timestamp: number;
23
+ };
24
+ }
25
+ export declare const INITIAL_STATE: State;
@@ -0,0 +1 @@
1
+ export declare function useAccounts(): import("./state").QueryState<import("./models").Account[]>;
@@ -0,0 +1,2 @@
1
+ import { AddChatRequest } from './models';
2
+ export declare function useAddChat(): readonly [(args: AddChatRequest) => void, import("./state").MutationState];
@@ -0,0 +1,2 @@
1
+ import { AddMemberRequest } from './models';
2
+ export declare function useAddMember(): readonly [(args: AddMemberRequest) => void, import("./state").MutationState];
@@ -0,0 +1,5 @@
1
+ import { SendMessageRequest } from './models';
2
+ export interface UseAddMessageArgs {
3
+ chatId: string;
4
+ }
5
+ export declare function useAddMessage(args: UseAddMessageArgs): readonly [(args: Omit<SendMessageRequest, "chatId">) => void, import("./state").MutationState];
@@ -0,0 +1,3 @@
1
+ export declare function useChat(args: {
2
+ chatId: string;
3
+ }): import("./state").QueryState<import("./models").Chat>;
@@ -0,0 +1 @@
1
+ export declare function useChatList(): import("./state").QueryState<import("./models").ChatListItem[]>;
@@ -0,0 +1,3 @@
1
+ export declare function useLoadMore({ chatId }: {
2
+ chatId: string;
3
+ }): readonly [(args: void) => void, import("./state").MutationState];
@@ -0,0 +1,15 @@
1
+ import { File, Message } from './models';
2
+ import { QueryState } from './state';
3
+ export type MessageState = ({
4
+ type: 'message';
5
+ } & Message) | {
6
+ type: 'more';
7
+ } | {
8
+ type: 'sending';
9
+ text: string;
10
+ files: File[];
11
+ requestId: string;
12
+ };
13
+ export declare function useMessages(args: {
14
+ chatId: string;
15
+ }): QueryState<MessageState[]>;
@@ -0,0 +1,12 @@
1
+ import { MutationState, State } from './state';
2
+ export interface MutationApi<TResult> {
3
+ promise: Promise<TResult>;
4
+ state: State;
5
+ updateState: (mutation: (state: State) => State) => void;
6
+ }
7
+ export interface UseMutationArgs<TResult = unknown, TArgs = void> {
8
+ key: string;
9
+ queryFn: (args: TArgs) => Promise<TResult>;
10
+ onQueryStarted?: (args: TArgs, api: MutationApi<TResult>) => void;
11
+ }
12
+ export declare function useMutation<TResult = unknown, TArgs = void>(args: UseMutationArgs<TResult, TArgs>): readonly [(args: TArgs) => void, MutationState];
@@ -0,0 +1,7 @@
1
+ import { QueryState } from './state';
2
+ interface UseQueryArgs<TData> {
3
+ key: string;
4
+ queryFn: () => Promise<TData>;
5
+ }
6
+ export declare function useQuery<TData>(args: UseQueryArgs<TData>): QueryState<TData>;
7
+ export {};
@@ -0,0 +1 @@
1
+ export declare function useReadMonitor(): void;
@@ -0,0 +1,2 @@
1
+ import { RemoveMemberRequest } from './models';
2
+ export declare function useRemoveMember(): readonly [(args: RemoveMemberRequest) => void, import("./state").MutationState];
@@ -0,0 +1 @@
1
+ export declare function useSignalR(): void;
@@ -0,0 +1,3 @@
1
+ export * from './ui';
2
+ export * from './core';
3
+ export * from './ChatifyContext';
@@ -0,0 +1 @@
1
+ export declare function AddChat(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function Aside(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export interface ChatProps {
2
+ id: string;
3
+ }
4
+ export declare function Chat(props: ChatProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export interface ChatBodyProps {
2
+ id: string;
3
+ }
4
+ export declare function ChatBody(props: ChatBodyProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export interface ChatHeaderProps {
2
+ id: string;
3
+ }
4
+ export declare function ChatHeader(props: ChatHeaderProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function ChatSettings(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { CSSProperties } from 'react';
2
+ import { Localizer } from './localizer';
3
+ export interface ChatifyProps {
4
+ className?: string;
5
+ style?: CSSProperties;
6
+ localizer?: Localizer;
7
+ }
8
+ export declare function Chatify(props: ChatifyProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function InputForm(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export interface LoadMoreProps {
2
+ chatId: string;
3
+ }
4
+ export declare function LoadMore(props: LoadMoreProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function Main(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { Message as MessageModel } from '../core';
2
+ export interface MessageProps {
3
+ message: MessageModel;
4
+ }
5
+ export declare function Message(props: MessageProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { Account, File } from '../core';
2
+ import React from 'react';
3
+ export interface MessageMdProps {
4
+ author?: Account;
5
+ text: string;
6
+ files: File[];
7
+ my: boolean;
8
+ read?: boolean;
9
+ sending?: boolean;
10
+ reading?: boolean;
11
+ timestamp: string;
12
+ }
13
+ export declare const MessageMd: React.ForwardRefExoticComponent<MessageMdProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,4 @@
1
+ export interface MessageSkeletonProps {
2
+ count?: number;
3
+ }
4
+ export declare function MessageSkeleton(props: MessageSkeletonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { File } from '../core';
2
+ export interface SendingMessageProps {
3
+ text: string;
4
+ files: File[];
5
+ }
6
+ export declare function SendingMessage(props: SendingMessageProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { Localizer } from './localizer';
3
+ export interface SystemMessageProps {
4
+ text: string;
5
+ sentAt: string;
6
+ }
7
+ export declare function formatSystemMessage(localizer: Localizer, text: string): React.ReactNode;
8
+ export declare function SystemMessage(props: SystemMessageProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export * from './Chatify';
2
+ export * from './localizer';
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ export interface Localizer {
3
+ timestamp: (value: string) => string;
4
+ system: {
5
+ chatCreated: () => string;
6
+ };
7
+ message: {
8
+ read: () => React.ReactNode;
9
+ reading: () => React.ReactNode;
10
+ sending: () => React.ReactNode;
11
+ };
12
+ addChat: {
13
+ title: () => React.ReactNode;
14
+ name: {
15
+ label: () => React.ReactNode;
16
+ required: () => string;
17
+ max250: () => string;
18
+ };
19
+ members: {
20
+ label: () => React.ReactNode;
21
+ required: () => string;
22
+ };
23
+ submitBtn: () => React.ReactNode;
24
+ };
25
+ }
26
+ export declare const LocalizerContext: React.Context<Localizer>;
27
+ export declare function useLocalizer(): Localizer;
28
+ export declare const defaultLocalizer: Localizer;
@@ -0,0 +1,2 @@
1
+ export * from './uniqBy';
2
+ export * from './uniqId';
@@ -0,0 +1 @@
1
+ export declare function uniqBy<T, TKey extends string | number | symbol>(items: T[], selector: (x: T) => TKey): T[];
@@ -0,0 +1 @@
1
+ export declare function uniqId(): string;
@@ -0,0 +1,290 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React, { CSSProperties, PropsWithChildren } from 'react';
3
+ import { AxiosInstance } from 'axios';
4
+
5
+ interface Localizer {
6
+ timestamp: (value: string) => string;
7
+ system: {
8
+ chatCreated: () => string;
9
+ };
10
+ message: {
11
+ read: () => React.ReactNode;
12
+ reading: () => React.ReactNode;
13
+ sending: () => React.ReactNode;
14
+ };
15
+ addChat: {
16
+ title: () => React.ReactNode;
17
+ name: {
18
+ label: () => React.ReactNode;
19
+ required: () => string;
20
+ max250: () => string;
21
+ };
22
+ members: {
23
+ label: () => React.ReactNode;
24
+ required: () => string;
25
+ };
26
+ submitBtn: () => React.ReactNode;
27
+ };
28
+ }
29
+ declare const LocalizerContext: React.Context<Localizer>;
30
+ declare function useLocalizer(): Localizer;
31
+ declare const defaultLocalizer: Localizer;
32
+
33
+ interface ChatifyProps {
34
+ className?: string;
35
+ style?: CSSProperties;
36
+ localizer?: Localizer;
37
+ }
38
+ declare function Chatify(props: ChatifyProps): react_jsx_runtime.JSX.Element;
39
+
40
+ interface File {
41
+ name: string;
42
+ bytes: number;
43
+ ref: string;
44
+ }
45
+ interface Account {
46
+ id: string;
47
+ name: string;
48
+ avatar: string;
49
+ }
50
+ interface Message {
51
+ id: string;
52
+ chatId: string;
53
+ text: string;
54
+ files: File[];
55
+ sentAt: string;
56
+ sentBy: Account;
57
+ read: boolean;
58
+ requestId?: string;
59
+ }
60
+ interface Chat {
61
+ id: string;
62
+ name: string;
63
+ members: Account[];
64
+ }
65
+ interface ChatListItem {
66
+ id: string;
67
+ name: string;
68
+ message: Message;
69
+ unreadCount: number;
70
+ }
71
+ interface SendMessageRequest {
72
+ chatId: string;
73
+ text: string;
74
+ files: File[];
75
+ requestId: string;
76
+ }
77
+ interface MessageContent {
78
+ text: string;
79
+ files: File[];
80
+ }
81
+ interface AddChatRequest {
82
+ requestId: string;
83
+ name: string;
84
+ message?: MessageContent;
85
+ members: string[];
86
+ }
87
+ interface ReadRequest {
88
+ ids: string[];
89
+ }
90
+ interface ReadEvent {
91
+ messageId: string;
92
+ chatId: string;
93
+ }
94
+ interface RemoveMemberRequest {
95
+ chatId: string;
96
+ accountId: string;
97
+ deleteHistory: boolean;
98
+ }
99
+ interface AddMemberRequest {
100
+ chatId: string;
101
+ accountId: string;
102
+ withHistory: boolean;
103
+ }
104
+
105
+ interface ChatifySignalRConfig {
106
+ hubUri?: string;
107
+ accessTokenFactory?: () => Promise<string>;
108
+ headersFactory?: () => Promise<Record<string, string>>;
109
+ }
110
+ interface ChatifyClientConfig {
111
+ axios: AxiosInstance;
112
+ signalR: ChatifySignalRConfig;
113
+ }
114
+ declare class ChatifyClient {
115
+ private _config;
116
+ private _connection;
117
+ private _subscribers;
118
+ private _reconnectSubscribers;
119
+ constructor(config: ChatifyClientConfig);
120
+ connect: () => Promise<void>;
121
+ subscribe: <T extends any[]>(method: string, subscriber: (args: T) => void) => () => ((args: any[]) => void)[];
122
+ subscribeReconnect: (subscriber: () => any) => () => (() => void)[];
123
+ private get axios();
124
+ accounts: () => Promise<Account[]>;
125
+ chats: () => Promise<ChatListItem[]>;
126
+ chat: (id: string) => Promise<Chat>;
127
+ addChat: (args: AddChatRequest) => Promise<string>;
128
+ messages: (args: {
129
+ chatId: string;
130
+ skip?: number;
131
+ take?: number;
132
+ }) => Promise<Message[]>;
133
+ send: (request: SendMessageRequest) => Promise<void>;
134
+ read: (request: ReadRequest) => Promise<void>;
135
+ removeMember: (request: RemoveMemberRequest) => Promise<void>;
136
+ addMember: (request: AddMemberRequest) => Promise<void>;
137
+ }
138
+
139
+ interface UIState {
140
+ view?: 'chat' | 'new-chat' | 'chat-settings';
141
+ chatId?: string;
142
+ }
143
+ interface QueryState<TData> {
144
+ uninitialized: boolean;
145
+ isFetching: boolean;
146
+ error?: any;
147
+ data?: TData;
148
+ }
149
+ interface MutationState {
150
+ isFetching: boolean;
151
+ error?: any;
152
+ }
153
+ interface State {
154
+ ui: UIState;
155
+ query: Record<string, QueryState<any>>;
156
+ mutation: Record<string, MutationState>;
157
+ read: {
158
+ queued: string[];
159
+ sent: string[];
160
+ timestamp: number;
161
+ };
162
+ }
163
+
164
+ declare const ACTIONS: {
165
+ query_fetch: (state: State, { key }: {
166
+ key: string;
167
+ }) => State;
168
+ query_resolve: (state: State, { key, data }: {
169
+ key: string;
170
+ data: any[];
171
+ }) => State;
172
+ query_reject: (state: State, { key, error }: {
173
+ key: string;
174
+ error: any;
175
+ }) => State;
176
+ mutation_fetch: (state: State, { key }: {
177
+ key: string;
178
+ }) => State;
179
+ mutation_resolve: (state: State, { key }: {
180
+ key: string;
181
+ }) => State;
182
+ mutation_reject: (state: State, { key, error }: {
183
+ key: string;
184
+ error: any;
185
+ }) => State;
186
+ update: (state: State, { mutation }: {
187
+ mutation: (state: State) => State;
188
+ }) => State;
189
+ chat_open: (state: State, { chatId }: {
190
+ chatId: string;
191
+ }) => State;
192
+ new_chat_open: (state: State) => State;
193
+ chat_settings_open: (state: State, { chatId }: {
194
+ chatId: string;
195
+ }) => State;
196
+ message_received: (state: State, { message, requestId }: {
197
+ message: Message;
198
+ requestId: string;
199
+ }) => State;
200
+ chat_created: (state: State, { chat }: {
201
+ chat: ChatListItem;
202
+ requestId?: string | undefined;
203
+ }) => State;
204
+ read: (state: State, { id, timestamp }: {
205
+ id: string;
206
+ timestamp: number;
207
+ }) => State;
208
+ read_send: (state: State, { ids }: {
209
+ ids: string[];
210
+ }) => State;
211
+ read_reject: (state: State, { ids, timestamp }: {
212
+ ids: string[];
213
+ timestamp: number;
214
+ }) => State;
215
+ read_received: (state: State, { events }: {
216
+ events: ReadEvent[];
217
+ }) => State;
218
+ member_added: (state: State, { chatId, account }: {
219
+ chatId: string;
220
+ account: Account;
221
+ }) => State;
222
+ member_removed: (state: State, { chatId, accountId, deleteHistory, me, }: {
223
+ chatId: string;
224
+ accountId: string;
225
+ deleteHistory: boolean;
226
+ me: string;
227
+ }) => State;
228
+ };
229
+ type Action = {
230
+ [K in keyof typeof ACTIONS]: {
231
+ type: K;
232
+ data: Parameters<(typeof ACTIONS)[K]>[1];
233
+ };
234
+ }[keyof typeof ACTIONS];
235
+
236
+ type Reducer = ReturnType<typeof useReducer>;
237
+ type Subscriber = (state: State) => void;
238
+ declare function useReducer(): readonly [React.MutableRefObject<State>, (action: Action) => void, (subscriber: Subscriber) => () => void];
239
+ declare function ReducerProvider({ children }: PropsWithChildren<{}>): react_jsx_runtime.JSX.Element;
240
+ declare function useDispatch(): (action: Action) => void;
241
+ declare function useStateRef(): React.MutableRefObject<State>;
242
+ declare function useSelect<TResult>(select: (state: State) => TResult, deps: any[]): TResult;
243
+
244
+ declare function useChat(args: {
245
+ chatId: string;
246
+ }): QueryState<Chat>;
247
+
248
+ declare function useChatList(): QueryState<ChatListItem[]>;
249
+
250
+ declare function useLoadMore({ chatId }: {
251
+ chatId: string;
252
+ }): readonly [(args: void) => void, MutationState];
253
+
254
+ type MessageState = ({
255
+ type: 'message';
256
+ } & Message) | {
257
+ type: 'more';
258
+ } | {
259
+ type: 'sending';
260
+ text: string;
261
+ files: File[];
262
+ requestId: string;
263
+ };
264
+ declare function useMessages(args: {
265
+ chatId: string;
266
+ }): QueryState<MessageState[]>;
267
+
268
+ declare function useSignalR(): void;
269
+
270
+ declare function useAccounts(): QueryState<Account[]>;
271
+
272
+ declare function useAddChat(): readonly [(args: AddChatRequest) => void, MutationState];
273
+
274
+ declare function useReadMonitor(): void;
275
+
276
+ declare function useAddMember(): readonly [(args: AddMemberRequest) => void, MutationState];
277
+
278
+ declare function useRemoveMember(): readonly [(args: RemoveMemberRequest) => void, MutationState];
279
+
280
+ declare function useClient(): ChatifyClient;
281
+ declare function useMe(): string;
282
+ interface ChatifyContextValue {
283
+ me: string;
284
+ client: ChatifyClient;
285
+ }
286
+ declare function ChatifyContext({ value, children }: PropsWithChildren<{
287
+ value: ChatifyContextValue;
288
+ }>): react_jsx_runtime.JSX.Element;
289
+
290
+ export { ACTIONS, Account, Action, AddChatRequest, AddMemberRequest, Chat, ChatListItem, Chatify, ChatifyClient, ChatifyClientConfig, ChatifyContext, ChatifyContextValue, ChatifyProps, ChatifySignalRConfig, File, Localizer, LocalizerContext, Message, MessageContent, MessageState, ReadEvent, ReadRequest, Reducer, ReducerProvider, RemoveMemberRequest, SendMessageRequest, defaultLocalizer, useAccounts, useAddChat, useAddMember, useChat, useChatList, useClient, useDispatch, useLoadMore, useLocalizer, useMe, useMessages, useReadMonitor, useReducer, useRemoveMember, useSelect, useSignalR, useStateRef };