quickblox-react-ui-kit 0.2.4 → 0.2.5

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 (70) hide show
  1. package/README.md +3 -2
  2. package/dist/Data/repository/DialogsRepository.d.ts +1 -0
  3. package/dist/Data/repository/EventMessagesRepository.d.ts +1 -0
  4. package/dist/Data/repository/MessagesRepository.d.ts +2 -2
  5. package/dist/Domain/entity/NotificationTypes.d.ts +1 -0
  6. package/dist/Domain/repository/IDialogsRepository.d.ts +1 -0
  7. package/dist/Domain/repository/IMessagesRepository.d.ts +2 -2
  8. package/dist/Domain/use_cases/CreateDialogUseCase.d.ts +2 -1
  9. package/dist/Domain/use_cases/LeaveDialogUseCase.d.ts +2 -1
  10. package/dist/Domain/use_cases/RemoveUsersFromTheDialogUseCase.d.ts +2 -1
  11. package/dist/Domain/use_cases/SubscribeToDialogEventsUseCase.d.ts +1 -0
  12. package/dist/Domain/use_cases/UpdateDialogUseCase.d.ts +2 -1
  13. package/dist/Presentation/Views/Base/BaseViewModel.d.ts +1 -0
  14. package/dist/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.d.ts +1 -0
  15. package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.d.ts +3 -0
  16. package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.d.ts +9 -2
  17. package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesView.d.ts +10 -0
  18. package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.d.ts +2 -2
  19. package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.d.ts +7 -0
  20. package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.d.ts +7 -0
  21. package/dist/index-ui.d.ts +5 -1
  22. package/dist/index-ui.js +101 -35
  23. package/package.json +1 -1
  24. package/src/App.tsx +1 -1
  25. package/src/Data/repository/DialogsRepository.ts +4 -0
  26. package/src/Data/repository/EventMessagesRepository.ts +34 -0
  27. package/src/Data/repository/MessagesRepository.ts +16 -10
  28. package/src/Data/source/exception/MapperDTOException.ts +3 -0
  29. package/src/Data/source/remote/RemoteDataSource.ts +134 -112
  30. package/src/Domain/entity/NotificationTypes.ts +2 -0
  31. package/src/Domain/repository/IDialogsRepository.ts +2 -0
  32. package/src/Domain/repository/IMessagesRepository.ts +2 -2
  33. package/src/Domain/use_cases/CreateDialogUseCase.ts +8 -1
  34. package/src/Domain/use_cases/GetAllDialogsUseCaseWithMock.ts +1 -0
  35. package/src/Domain/use_cases/LeaveDialogUseCase.ts +8 -1
  36. package/src/Domain/use_cases/RemoveUsersFromTheDialogUseCase.ts +40 -17
  37. package/src/Domain/use_cases/SendTextMessageUseCase.ts +3 -2
  38. package/src/Domain/use_cases/SubscribeToDialogEventsUseCase.ts +21 -0
  39. package/src/Domain/use_cases/UpdateDialogUseCase.ts +8 -1
  40. package/src/Domain/use_cases/base/Subscribable/SubscriptionPerformer.ts +7 -10
  41. package/src/Presentation/Views/Base/BaseViewModel.ts +1 -0
  42. package/src/Presentation/Views/Dialogs/Dialogs.scss +3 -0
  43. package/src/Presentation/Views/Dialogs/useDialogsViewModel.ts +109 -48
  44. package/src/Presentation/assets/styles/_variables.scss +19 -0
  45. package/src/Presentation/components/UI/Buttons/MainButton/MainButton.scss +9 -0
  46. package/src/Presentation/components/UI/Dialogs/EditDialog/EditDialog.scss +3 -0
  47. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembers.scss +3 -0
  48. package/src/Presentation/components/UI/Dialogs/MembersList/MembersList.scss +3 -0
  49. package/src/Presentation/components/UI/Dialogs/MessagesView/AudioAttachmentComponent/AudioAttachmentComponent.tsx +1 -1
  50. package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.tsx +20 -14
  51. package/src/Presentation/components/UI/Dialogs/MessagesView/ImageAttachmentComponent/ImageAttachmentComponent.tsx +8 -6
  52. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.tsx +6 -0
  53. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.scss +1 -1
  54. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.tsx +74 -29
  55. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +12 -23
  56. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +101 -33
  57. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.ts +2 -2
  58. package/src/Presentation/components/UI/Dialogs/MessagesView/OutGoingMessage/OutGoingMessage.tsx +1 -1
  59. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.scss +23 -0
  60. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.tsx +17 -0
  61. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.scss +21 -0
  62. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.tsx +17 -0
  63. package/src/Presentation/components/UI/Dialogs/MessagesView/useMessagesViewModel.ts +124 -83
  64. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +27 -1
  65. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +6 -3
  66. package/src/index-ui.ts +8 -1
  67. package/src/index.scss +0 -1
  68. package/src/package_artan_react_ui.json +1 -1
  69. package/src/package_original.json +1 -1
  70. package/src/Presentation/assets/styles/_reset-styles.scss +0 -435
package/README.md CHANGED
@@ -35,7 +35,7 @@ QuickBlox UIKit for React provides next functionality:
35
35
  The QuickBlox UIKit for React comprises a collection of pre-assembled UI components that enable effortless creation of an in-app chat equipped with all the necessary messaging functionalities. Our development kit encompasses light and dark themes, colors, and various other features. These components can be personalized to fashion an engaging messaging interface that reflects your brand's distinct identity.
36
36
 
37
37
  The QuickBlox UIKit fully supports both private and group dialogs. To initiate the process of sending a message from the ground up using Java or Kotlin, please refer to the instructions provided in the guide below.
38
-
38
+ [Additional information with sample](https://docs.quickblox.com/docs/react-uikit-send-your-first-message)
39
39
  ## Requirements
40
40
 
41
41
  The minimum requirements for QuickBlox UIKit for React are:
@@ -293,7 +293,8 @@ and specify selected components:
293
293
  # Sample
294
294
 
295
295
  https://github.com/QuickBlox/quickblox-javascript-sdk/tree/gh-pages/samples/react-chat-ui-kit-init-sample
296
-
296
+ ## Video guide "How to use AI Feature"
297
+ [Youtube video about AI Assistant](https://youtu.be/BneMtDagOy4)
297
298
  # License
298
299
  [](#license)
299
300
  MIT License [here](https://github.com/QuickBlox/react-ui-kit/blob/main/LICENSE.md).
@@ -10,6 +10,7 @@ export default class DialogsRepository implements IDialogsRepository {
10
10
  private dialogRemoteDTOMapper;
11
11
  private dialogLocalDTOMapper;
12
12
  constructor(localDataStorage: ILocalDataSource, remoteDataSource: IRemoteDataSource);
13
+ release(): void;
13
14
  subscribeLocalSync(subscriber: FunctionTypeVoidToVoid): void;
14
15
  unsubscribeLocalSync(): void;
15
16
  isLocalSynced(): Promise<boolean>;
@@ -26,6 +26,7 @@ export default class EventMessagesRepository implements IRemoteMessaging<Message
26
26
  protected NewMessageEventHandler(messageInfo: RemoteMessageDTO): void;
27
27
  protected NewDialogEventHandler(messageInfo: RemoteMessageDTO): void;
28
28
  protected DeleteLeaveDialogEventHandler(messageInfo: RemoteMessageDTO): void;
29
+ protected RemoteUserDialogEventHandler(messageInfo: RemoteMessageDTO): void;
29
30
  protected UpdateDialogEventHandler(messageInfo: RemoteMessageDTO): void;
30
31
  dispatchEvent<TEventInfo>(even: EventMessageType, eventBody: TEventInfo, receivers: number[]): void;
31
32
  subscribeOnMessaging(callback: CallBackFunction<MessageEntity>, nameSubscription?: string): void;
@@ -17,8 +17,8 @@ export default class MessagesRepository implements IMessagesRepository {
17
17
  getMessagesFromRemote(dialogId: string, pagination: Pagination): Promise<PaginatedResult<MessageEntity>>;
18
18
  typingMessageStart(dialog: DialogEntity, senderId: number): Promise<void>;
19
19
  typingMessageStop(dialog: DialogEntity, senderId: number): Promise<void>;
20
- saveMessageToLocal(entity: MessageEntity): Promise<boolean>;
21
- sendMessageToRemote(entity: MessageEntity): Promise<boolean>;
20
+ saveMessageToLocal(entity: MessageEntity): Promise<MessageEntity>;
21
+ sendMessageToRemote(entity: MessageEntity): Promise<MessageEntity>;
22
22
  updateMessageInLocal(entity: MessageEntity): Promise<boolean>;
23
23
  updateMessageInRemote(entity: MessageEntity): Promise<boolean>;
24
24
  }
@@ -2,4 +2,5 @@ export declare class NotificationTypes {
2
2
  static readonly NEW_DIALOG = "1";
3
3
  static readonly UPDATE_DIALOG = "2";
4
4
  static readonly DELETE_LEAVE_DIALOG = "3";
5
+ static readonly REMOVE_USER = "4";
5
6
  }
@@ -17,4 +17,5 @@ export interface IDialogsRepository {
17
17
  unsubscribeLocalSync(): void;
18
18
  isLocalSynced(): Promise<boolean>;
19
19
  setLocalSynced(synced: boolean): void;
20
+ release(): void;
20
21
  }
@@ -2,8 +2,8 @@ import { MessageEntity } from '../entity/MessageEntity';
2
2
  import { PaginatedResult, Pagination } from './Pagination';
3
3
  import { DialogEntity } from '../entity/DialogEntity';
4
4
  export interface IMessagesRepository {
5
- saveMessageToLocal(message: MessageEntity): Promise<boolean>;
6
- sendMessageToRemote(message: MessageEntity): Promise<boolean>;
5
+ saveMessageToLocal(message: MessageEntity): Promise<MessageEntity>;
6
+ sendMessageToRemote(message: MessageEntity): Promise<MessageEntity>;
7
7
  getMessagesFromLocal(dialogId: string): Promise<Array<MessageEntity>>;
8
8
  getMessagesFromRemote(dialogId: string, pagination: Pagination): Promise<PaginatedResult<MessageEntity>>;
9
9
  updateMessageInLocal(message: MessageEntity): Promise<boolean>;
@@ -7,6 +7,7 @@ export declare class CreateDialogUseCase implements IUseCase<void, DialogEntity>
7
7
  private dialogRepository;
8
8
  private eventMessagesRepository;
9
9
  private newDialog;
10
- constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, newDialog: GroupDialogEntity);
10
+ private textInformationMessage;
11
+ constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, newDialog: GroupDialogEntity, textInformationMessage: string);
11
12
  execute(): Promise<DialogEntity>;
12
13
  }
@@ -13,6 +13,7 @@ export declare class LeaveDialogUseCase implements IUseCase<void, boolean> {
13
13
  private eventMessagesRepository;
14
14
  private dialogToLeave;
15
15
  private leaveType;
16
- constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, dialog: DialogEntity, leaveType: DialogLeaveTypeArcheType);
16
+ private textInformationMessage;
17
+ constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, dialog: DialogEntity, leaveType: DialogLeaveTypeArcheType, textInformationMessage: string);
17
18
  execute(): Promise<boolean>;
18
19
  }
@@ -7,6 +7,7 @@ export declare class RemoveUsersFromTheDialogUseCase implements IUseCase<void, b
7
7
  private eventMessagesRepository;
8
8
  private dialogToLeave;
9
9
  private usersIds;
10
- constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, dialog: DialogEntity, usersIds: Array<number>);
10
+ private textInformationMessage;
11
+ constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, dialog: DialogEntity, usersIds: Array<number>, textInformationMessage: string);
11
12
  execute(): Promise<boolean>;
12
13
  }
@@ -12,5 +12,6 @@ export declare class SubscribeToDialogEventsUseCase extends BaseUseCase<DialogEv
12
12
  newMessageEventHandler(messageEntity: MessageEntity): void;
13
13
  updateDialogEventHandler(messageEntity: MessageEntity): void;
14
14
  leaveDialogEventHandler(messageEntity: MessageEntity): void;
15
+ removeUserDialogEventHandler(messageEntity: MessageEntity): void;
15
16
  newDialogEventHandler(messageEntity: MessageEntity): void;
16
17
  }
@@ -7,6 +7,7 @@ export declare class UpdateDialogUseCase implements IUseCase<void, DialogEntity>
7
7
  private dialogRepository;
8
8
  private eventMessagesRepository;
9
9
  private updateDialog;
10
- constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, updateDialog: GroupDialogEntity);
10
+ private textInformationMessage;
11
+ constructor(eventMessagesRepository: EventMessagesRepository, dialogRepository: DialogsRepository, updateDialog: GroupDialogEntity, textInformationMessage: string);
11
12
  execute(): Promise<DialogEntity>;
12
13
  }
@@ -17,6 +17,7 @@ export type EditDialogParams = {
17
17
  dialogAvatar: File | string | null;
18
18
  };
19
19
  export type FunctionTypeFileToToVoid = (file: File) => void;
20
+ export type FunctionTypeFileToToBoolean = (file: File) => Promise<boolean>;
20
21
  export type FunctionTypePaginationToVoid = (pagination: Pagination) => void;
21
22
  export type FunctionTypeVoidToVoid = () => void;
22
23
  export type FunctionTypeStringToVoid = (value: string) => void;
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import './DefaultAttachmentComponent.scss';
3
3
  type DefaultAttachmentComponentProps = {
4
4
  fileName: string;
5
+ fileUrl: string;
5
6
  };
6
7
  declare const DefaultAttachmentComponent: React.FC<DefaultAttachmentComponentProps>;
7
8
  export default DefaultAttachmentComponent;
@@ -1,3 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import './AvatarContentIncomingUser.scss';
3
+ export interface AvatarContentIncomingUserProps {
4
+ userId: number;
5
+ }
3
6
  export default function AvatarContentIncomingUser(): JSX.Element;
@@ -1,11 +1,17 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import './InComingMessage.scss';
3
3
  import UiKitTheme from '../../../../../assets/UiKitTheme';
4
4
  import { MessageEntity } from '../../../../../../Domain/entity/MessageEntity';
5
5
  import { AIMessageWidget } from '../AIWidgets/AIMessageWidget';
6
+ import { AvatarContentIncomingUserProps } from './AvatarContentIncomingUser/AvatarContentIncomingUser';
7
+ import { UserEntity } from '../../../../../../Domain/entity/UserEntity';
8
+ export type GetUserNameFct = (props: {
9
+ userId?: number;
10
+ sender?: UserEntity;
11
+ }) => Promise<string | undefined>;
6
12
  export declare function InComingMessage(props: {
7
13
  theme: UiKitTheme | undefined;
8
- senderName: string | undefined;
14
+ senderNameFct: GetUserNameFct;
9
15
  message: MessageEntity;
10
16
  onStartLoader: () => void;
11
17
  onStopLoader: () => void;
@@ -14,4 +20,5 @@ export declare function InComingMessage(props: {
14
20
  messagesToView: MessageEntity[];
15
21
  AITranslation?: AIMessageWidget;
16
22
  AIAnswerToMessage?: AIMessageWidget;
23
+ userIconRenderer?: (props: AvatarContentIncomingUserProps) => React.ReactElement;
17
24
  }): JSX.Element;
@@ -1,9 +1,11 @@
1
1
  import React from 'react';
2
2
  import './MessagesView.scss';
3
+ import { UserEntity } from '../../../../../Domain/entity/UserEntity';
3
4
  import UiKitTheme from '../../../../assets/UiKitTheme';
4
5
  import { AIMessageWidget } from './AIWidgets/AIMessageWidget';
5
6
  import { DialogsViewModel } from '../../../../Views/Dialogs/DialogViewModel';
6
7
  import { FunctionTypeVoidToVoid } from '../../../../Views/Base/BaseViewModel';
8
+ import { AvatarContentIncomingUserProps } from './InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser';
7
9
  type HeaderDialogsMessagesProps = {
8
10
  AIRephrase?: AIMessageWidget;
9
11
  AITranslate?: AIMessageWidget;
@@ -12,8 +14,16 @@ type HeaderDialogsMessagesProps = {
12
14
  onDialogInformationHandler?: FunctionTypeVoidToVoid;
13
15
  maxWidthToResize?: string;
14
16
  theme?: UiKitTheme;
17
+ headerContent?: React.ReactNode;
15
18
  subHeaderContent?: React.ReactNode;
16
19
  upHeaderContent?: React.ReactNode;
20
+ rootStyles?: React.CSSProperties;
21
+ messagesContainerStyles?: React.CSSProperties;
22
+ userIconRenderer?: (props: AvatarContentIncomingUserProps) => React.ReactElement;
23
+ getSenderNameFct?: (props: {
24
+ sender?: UserEntity;
25
+ userId?: number;
26
+ }) => Promise<string | undefined>;
17
27
  };
18
28
  declare const MessagesView: React.FC<HeaderDialogsMessagesProps>;
19
29
  export default MessagesView;
@@ -1,4 +1,4 @@
1
- import BaseViewModel, { FunctionTypeFileToToVoid, FunctionTypePaginationToVoid, FunctionTypeStringToVoid, FunctionTypeVoidToVoid } from '../../../../Views/Base/BaseViewModel';
1
+ import BaseViewModel, { FunctionTypeFileToToBoolean, FunctionTypePaginationToVoid, FunctionTypeStringToVoid, FunctionTypeVoidToVoid } from '../../../../Views/Base/BaseViewModel';
2
2
  import { MessageEntity } from '../../../../../Domain/entity/MessageEntity';
3
3
  import { DialogEntity } from '../../../../../Domain/entity/DialogEntity';
4
4
  export interface MessagesViewModel extends BaseViewModel<DialogEntity> {
@@ -7,7 +7,7 @@ export interface MessagesViewModel extends BaseViewModel<DialogEntity> {
7
7
  messages: MessageEntity[];
8
8
  getMessages: FunctionTypePaginationToVoid;
9
9
  sendTextMessage: FunctionTypeStringToVoid;
10
- sendAttachmentMessage: FunctionTypeFileToToVoid;
10
+ sendAttachmentMessage: FunctionTypeFileToToBoolean;
11
11
  release: FunctionTypeVoidToVoid;
12
12
  sendTypingTextMessage: FunctionTypeVoidToVoid;
13
13
  typingText: string;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './SystemDateBanner.scss';
3
+ type SystemDateBannerProps = {
4
+ text: string;
5
+ };
6
+ export declare const SystemDateBanner: React.FC<SystemDateBannerProps>;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './SystemMessageBanner.scss';
3
+ type SystemMessageBannerProps = {
4
+ messageText: string;
5
+ };
6
+ export declare const SystemMessageBanner: React.FC<SystemMessageBannerProps>;
7
+ export {};
@@ -28,4 +28,8 @@ import { AIMessageWidget } from './Presentation/components/UI/Dialogs/MessagesVi
28
28
  import { AISource, IChatMessage } from './Data/source/AISource';
29
29
  import AIWidgetIcon from './Presentation/components/UI/svgs/Icons/AIWidgets/AIWidget';
30
30
  import ErrorMessageIcon from './Presentation/components/UI/Dialogs/MessagesView/AIWidgets/ErrorMessageIcon';
31
- export { MainButton, TypeButton, type LoginData, type AuthorizationData, QuickBloxUIKitProvider, qbDataContext, type QBDataContextType, RemoteDataSource, LocalDataSource, useQBConnection, useQbInitializedDataContext, useQbUIKitDataContext, useEventMessagesRepository, type DialogsViewModel, useDialogsViewModel, SubscribeToDialogEventsUseCase, Pagination, type DialogEventInfo, EventMessageType, NotificationTypes, stringifyError, DesktopLayout, DialogsComponent, MessagesView, DialogInformation, type DialogEntity, BaseViewModel, QuickBloxUIKitDesktopLayout, DefaultTheme, type UiKitTheme, type AIMessageWidget, AISource, type IChatMessage, AIWidgetIcon, ErrorMessageIcon, };
31
+ import PreviewDialogViewModel from './Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialogViewModel';
32
+ import { AvatarContentIncomingUserProps } from './Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser';
33
+ import { FunctionTypeViewModelToVoid } from './Presentation/Views/Base/BaseViewModel';
34
+ import { GetUserNameFct } from './Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage';
35
+ export { MainButton, TypeButton, type LoginData, type AuthorizationData, QuickBloxUIKitProvider, qbDataContext, type QBDataContextType, RemoteDataSource, LocalDataSource, useQBConnection, useQbInitializedDataContext, useQbUIKitDataContext, useEventMessagesRepository, type DialogsViewModel, useDialogsViewModel, SubscribeToDialogEventsUseCase, Pagination, type DialogEventInfo, EventMessageType, NotificationTypes, stringifyError, DesktopLayout, DialogsComponent, MessagesView, DialogInformation, type DialogEntity, BaseViewModel, QuickBloxUIKitDesktopLayout, DefaultTheme, type UiKitTheme, type AIMessageWidget, AISource, type IChatMessage, AIWidgetIcon, ErrorMessageIcon, PreviewDialogViewModel, type FunctionTypeViewModelToVoid, type AvatarContentIncomingUserProps, type GetUserNameFct };