quickblox-react-ui-kit 0.2.3 → 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 (123) hide show
  1. package/README.md +3 -2
  2. package/dist/CommonTypes/FunctionResult.d.ts +5 -1
  3. package/dist/Data/DefaultConfigurations.d.ts +2 -2
  4. package/dist/Data/repository/DialogsRepository.d.ts +1 -0
  5. package/dist/Data/repository/EventMessagesRepository.d.ts +1 -0
  6. package/dist/Data/repository/MessagesRepository.d.ts +2 -2
  7. package/dist/Domain/entity/NotificationTypes.d.ts +1 -0
  8. package/dist/Domain/repository/IDialogsRepository.d.ts +1 -0
  9. package/dist/Domain/repository/IMessagesRepository.d.ts +2 -2
  10. package/dist/Domain/use_cases/CreateDialogUseCase.d.ts +2 -1
  11. package/dist/Domain/use_cases/LeaveDialogUseCase.d.ts +2 -1
  12. package/dist/Domain/use_cases/RemoveUsersFromTheDialogUseCase.d.ts +2 -1
  13. package/dist/Domain/use_cases/SubscribeToDialogEventsUseCase.d.ts +1 -0
  14. package/dist/Domain/use_cases/UpdateDialogUseCase.d.ts +2 -1
  15. package/dist/Domain/use_cases/ai/AIAnswerAssistUseCase.d.ts +13 -0
  16. package/dist/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.d.ts +13 -0
  17. package/dist/Domain/use_cases/ai/AITranslateUseCase.d.ts +14 -0
  18. package/dist/Domain/use_cases/ai/AITranslateWithProxyUseCase.d.ts +14 -0
  19. package/dist/Presentation/Views/Base/BaseViewModel.d.ts +3 -0
  20. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.d.ts +4 -1
  21. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.d.ts +3 -2
  22. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.d.ts +5 -13
  23. package/dist/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.d.ts +8 -0
  24. package/dist/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.d.ts +7 -0
  25. package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.d.ts +3 -0
  26. package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.d.ts +12 -3
  27. package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesView.d.ts +10 -0
  28. package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.d.ts +2 -2
  29. package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.d.ts +7 -0
  30. package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.d.ts +7 -0
  31. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.d.ts +7 -0
  32. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.d.ts +7 -0
  33. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.d.ts +8 -0
  34. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.d.ts +7 -0
  35. package/dist/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.d.ts +4 -0
  36. package/dist/QBconfig.d.ts +14 -3
  37. package/dist/index-ui.d.ts +5 -1
  38. package/dist/index-ui.js +410 -61
  39. package/dist/utils/utils.d.ts +9 -0
  40. package/global.d.ts +12 -4
  41. package/package.json +5 -1
  42. package/src/App.tsx +1 -1
  43. package/src/CommonTypes/FunctionResult.ts +6 -1
  44. package/src/Data/DefaultConfigurations.ts +155 -19
  45. package/src/Data/repository/DialogsRepository.ts +4 -0
  46. package/src/Data/repository/EventMessagesRepository.ts +34 -0
  47. package/src/Data/repository/MessagesRepository.ts +16 -10
  48. package/src/Data/source/exception/MapperDTOException.ts +3 -0
  49. package/src/Data/source/remote/RemoteDataSource.ts +134 -112
  50. package/src/Domain/entity/NotificationTypes.ts +2 -0
  51. package/src/Domain/repository/IDialogsRepository.ts +2 -0
  52. package/src/Domain/repository/IMessagesRepository.ts +2 -2
  53. package/src/Domain/use_cases/CreateDialogUseCase.ts +8 -1
  54. package/src/Domain/use_cases/GetAllDialogsUseCaseWithMock.ts +1 -0
  55. package/src/Domain/use_cases/LeaveDialogUseCase.ts +8 -1
  56. package/src/Domain/use_cases/RemoveUsersFromTheDialogUseCase.ts +40 -17
  57. package/src/Domain/use_cases/SendTextMessageUseCase.ts +3 -2
  58. package/src/Domain/use_cases/SubscribeToDialogEventsUseCase.ts +21 -0
  59. package/src/Domain/use_cases/UpdateDialogUseCase.ts +8 -1
  60. package/src/Domain/use_cases/ai/AIAnswerAssistUseCase.ts +69 -0
  61. package/src/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.ts +71 -0
  62. package/src/Domain/use_cases/ai/AIRephraseUseCase.ts +38 -36
  63. package/src/Domain/use_cases/ai/AIRephraseWithProxyUseCase.ts +25 -21
  64. package/src/Domain/use_cases/ai/AITranslateUseCase.ts +76 -0
  65. package/src/Domain/use_cases/ai/AITranslateWithProxyUseCase.ts +79 -0
  66. package/src/Domain/use_cases/base/Subscribable/SubscriptionPerformer.ts +7 -10
  67. package/src/Presentation/Views/Base/BaseViewModel.ts +3 -0
  68. package/src/Presentation/Views/Dialogs/Dialogs.scss +3 -0
  69. package/src/Presentation/Views/Dialogs/Dialogs.tsx +1 -1
  70. package/src/Presentation/Views/Dialogs/useDialogsViewModel.ts +109 -48
  71. package/src/Presentation/assets/styles/_variables.scss +19 -0
  72. package/src/Presentation/components/UI/Buttons/MainButton/MainButton.scss +9 -0
  73. package/src/Presentation/components/UI/Dialogs/EditDialog/EditDialog.scss +3 -0
  74. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembers.scss +3 -0
  75. package/src/Presentation/components/UI/Dialogs/MembersList/MembersList.scss +3 -0
  76. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.ts +7 -2
  77. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.tsx +10 -4
  78. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.ts +29 -15
  79. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidget.tsx +10 -6
  80. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidgetWithProxy.tsx +10 -6
  81. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidget.tsx +17 -0
  82. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidgetWithProxy.tsx +16 -0
  83. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidget.tsx +13 -12
  84. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidgetWithProxy.tsx +13 -12
  85. package/src/Presentation/components/UI/Dialogs/MessagesView/AudioAttachmentComponent/AudioAttachmentComponent.tsx +1 -1
  86. package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.scss +76 -0
  87. package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.tsx +40 -0
  88. package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.scss +26 -0
  89. package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.tsx +25 -0
  90. package/src/Presentation/components/UI/Dialogs/MessagesView/ImageAttachmentComponent/ImageAttachmentComponent.tsx +8 -6
  91. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.tsx +6 -0
  92. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.scss +5 -7
  93. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.tsx +138 -405
  94. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +14 -26
  95. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +658 -429
  96. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.ts +2 -2
  97. package/src/Presentation/components/UI/Dialogs/MessagesView/OutGoingMessage/OutGoingMessage.tsx +1 -1
  98. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.scss +23 -0
  99. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.tsx +17 -0
  100. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.scss +21 -0
  101. package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.tsx +17 -0
  102. package/src/Presentation/components/UI/Dialogs/MessagesView/useMessagesViewModel.ts +124 -83
  103. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.scss +62 -0
  104. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.tsx +25 -0
  105. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.scss +61 -0
  106. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.tsx +32 -0
  107. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +29 -3
  108. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +55 -4
  109. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.scss +40 -0
  110. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.tsx +26 -0
  111. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.scss +62 -0
  112. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.tsx +25 -0
  113. package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.svg +5 -0
  114. package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.tsx +50 -0
  115. package/src/Presentation/components/layouts/Desktop/QuickBloxUIKitDesktopLayout.tsx +3 -15
  116. package/src/Presentation/components/providers/QuickBloxUIKitProvider/useQbInitializedDataContext.ts +15 -14
  117. package/src/QBconfig.ts +156 -10
  118. package/src/index-ui.ts +8 -1
  119. package/src/index.scss +0 -1
  120. package/src/package_artan_react_ui.json +13 -9
  121. package/src/package_original.json +5 -1
  122. package/src/utils/utils.ts +63 -0
  123. package/src/Presentation/assets/styles/_reset-styles.scss +0 -435
@@ -28,6 +28,9 @@ import { DialogType } from '../../../Domain/entity/DialogTypes';
28
28
  import { RemoveUsersFromTheDialogUseCase } from '../../../Domain/use_cases/RemoveUsersFromTheDialogUseCase';
29
29
  import { DialogEventInfo } from '../../../Domain/entity/DialogEventInfo';
30
30
  import { RemoteDataSource } from '../../../Data/source/remote/RemoteDataSource';
31
+ import { GetUsersByIdsUseCase } from '../../../Domain/use_cases/GetUsersByIdsUseCase';
32
+ import UsersRepository from '../../../Data/repository/UsersRepository';
33
+ import { UserEntity } from '../../../Domain/entity/UserEntity';
31
34
 
32
35
  export default function useDialogsViewModel(
33
36
  currentContext: QBDataContextType,
@@ -43,7 +46,9 @@ export default function useDialogsViewModel(
43
46
 
44
47
  //
45
48
  const currentUserId =
46
- currentContext.storage.REMOTE_DATA_SOURCE.authInformation?.userId;
49
+ currentContext.storage.REMOTE_DATA_SOURCE.authInformation?.userId || -1;
50
+ const currentUserName =
51
+ currentContext.storage.REMOTE_DATA_SOURCE.authInformation?.userName || '';
47
52
  // const currentContext = useQbInitializedDataContext();
48
53
  const remoteDataSourceMock: RemoteDataSource =
49
54
  currentContext.storage.REMOTE_DATA_SOURCE;
@@ -65,6 +70,49 @@ export default function useDialogsViewModel(
65
70
  'DialogsViewModel',
66
71
  );
67
72
 
73
+ async function getDialogs(currentPagination: Pagination) {
74
+ console.log('getDialogs in useDialogsViewModel');
75
+ console.log(
76
+ 'EXECUTE USE CASES GET DIALOG WITH PAGINATION: ',
77
+ JSON.stringify(currentPagination),
78
+ );
79
+ setLoading(true);
80
+ const useCaseGetAllDialogs: GetAllDialogsUseCaseWithMock =
81
+ new GetAllDialogsUseCaseWithMock(
82
+ new DialogsRepository(
83
+ currentContext.storage.LOCAL_DATA_SOURCE,
84
+ remoteDataSourceMock,
85
+ ),
86
+ currentPagination,
87
+ );
88
+
89
+ await useCaseGetAllDialogs
90
+ ?.execute()
91
+ // eslint-disable-next-line promise/always-return
92
+ .then((result) => {
93
+ console.log('EXECUTE COMPLETED: ', JSON.stringify(currentPagination));
94
+ setDialogs([...(result.ResultData as PublicDialogEntity[])]);
95
+ setLoading(false);
96
+ setPagination(result.CurrentPagination);
97
+ })
98
+ .catch((e) => {
99
+ console.log('call catch....', JSON.stringify(e));
100
+ setError(`${(e as unknown as Error).message}`);
101
+ setLoading(false);
102
+ });
103
+ await useCaseSubscribeToDialogsUpdates?.execute((data) => {
104
+ try {
105
+ console.log('3.SUBSCRIBE EXECUTE in useDialogsViewModel:', data);
106
+ setDialogs([...(data as PublicDialogEntity[])]);
107
+ setLoading(false);
108
+ setError('');
109
+ } catch (e) {
110
+ console.log('catch error2');
111
+ setError('ERROR2!!!');
112
+ }
113
+ });
114
+ }
115
+
68
116
  const dialogUpdateHandler = (dialogInfo: DialogEventInfo) => {
69
117
  console.log('call dialogUpdateHandler in useDialogsViewModel');
70
118
  if (
@@ -89,9 +137,7 @@ export default function useDialogsViewModel(
89
137
  setNewDialog(updatedDialog);
90
138
  });
91
139
  }
92
- }
93
- //
94
- if (
140
+ } else if (
95
141
  dialogInfo.notificationTypes === NotificationTypes.DELETE_LEAVE_DIALOG
96
142
  ) {
97
143
  if (
@@ -100,8 +146,23 @@ export default function useDialogsViewModel(
100
146
  ) {
101
147
  setNewDialog(undefined);
102
148
  }
149
+ } else if (
150
+ dialogInfo.notificationTypes === NotificationTypes.REMOVE_USER
151
+ ) {
152
+ if (
153
+ dialogInfo.messageInfo &&
154
+ dialogInfo.messageInfo.dialogId === newDialog?.id
155
+ ) {
156
+ setNewDialog(undefined);
157
+ }
158
+ getDialogs(pagination);
159
+ } else if (
160
+ dialogInfo.notificationTypes === NotificationTypes.NEW_DIALOG
161
+ ) {
162
+ // const pagination: Pagination = new Pagination();
163
+
164
+ getDialogs(pagination).catch();
103
165
  }
104
- //
105
166
  }
106
167
  };
107
168
 
@@ -112,48 +173,6 @@ export default function useDialogsViewModel(
112
173
  });
113
174
 
114
175
  // eslint-disable-next-line @typescript-eslint/require-await
115
- async function getDialogs(currentPagination: Pagination) {
116
- console.log('getDialogs in useDialogsViewModel');
117
- console.log(
118
- 'EXECUTE USE CASES GET DIALOG WITH PAGINATION: ',
119
- JSON.stringify(currentPagination),
120
- );
121
- setLoading(true);
122
- const useCaseGetAllDialogs: GetAllDialogsUseCaseWithMock =
123
- new GetAllDialogsUseCaseWithMock(
124
- new DialogsRepository(
125
- currentContext.storage.LOCAL_DATA_SOURCE,
126
- remoteDataSourceMock,
127
- ),
128
- currentPagination,
129
- );
130
-
131
- await useCaseGetAllDialogs
132
- ?.execute()
133
- // eslint-disable-next-line promise/always-return
134
- .then((result) => {
135
- console.log('EXECUTE COMPLETED: ', JSON.stringify(currentPagination));
136
- setDialogs([...(result.ResultData as PublicDialogEntity[])]);
137
- setLoading(false);
138
- setPagination(result.CurrentPagination);
139
- })
140
- .catch((e) => {
141
- console.log('call catch....', JSON.stringify(e));
142
- setError(`${(e as unknown as Error).message}`);
143
- setLoading(false);
144
- });
145
- await useCaseSubscribeToDialogsUpdates?.execute((data) => {
146
- try {
147
- console.log('3.SUBSCRIBE EXECUTE in useDialogsViewModel:', data);
148
- setDialogs([...(data as PublicDialogEntity[])]);
149
- setLoading(false);
150
- setError('');
151
- } catch (e) {
152
- console.log('catch error2');
153
- setError('ERROR2!!!');
154
- }
155
- });
156
- }
157
176
 
158
177
  const release = () => {
159
178
  useCaseSubscribeToDialogsUpdates.release();
@@ -163,6 +182,31 @@ export default function useDialogsViewModel(
163
182
  setLoading(status);
164
183
  };
165
184
 
185
+ const getSenders = async (senders: number[]) => {
186
+ const getUsers: GetUsersByIdsUseCase = new GetUsersByIdsUseCase(
187
+ new UsersRepository(
188
+ currentContext.storage.LOCAL_DATA_SOURCE,
189
+ currentContext.storage.REMOTE_DATA_SOURCE,
190
+ ),
191
+ [...senders],
192
+ );
193
+
194
+ let userEntites: UserEntity[] = [];
195
+
196
+ await getUsers
197
+ .execute()
198
+ // eslint-disable-next-line promise/always-return
199
+ .then((data) => {
200
+ // eslint-disable-next-line prefer-destructuring
201
+ userEntites = data;
202
+ })
203
+ .catch((e) => {
204
+ console.log('have ERROR get users :', JSON.stringify(e));
205
+ });
206
+
207
+ return userEntites;
208
+ };
209
+
166
210
  const createDialog = async (
167
211
  dialogInfo: GroupDialogEntity,
168
212
  ): Promise<DialogEntity> => {
@@ -170,7 +214,7 @@ export default function useDialogsViewModel(
170
214
  'call createDialog in use case with params: ',
171
215
  JSON.stringify(dialogInfo),
172
216
  );
173
-
217
+ const textInformationMessage = `${currentUserName} create the chat`;
174
218
  const createDialogUseCase: CreateDialogUseCase = new CreateDialogUseCase(
175
219
  eventMessageRepository,
176
220
  new DialogsRepository(
@@ -178,6 +222,7 @@ export default function useDialogsViewModel(
178
222
  remoteDataSourceMock,
179
223
  ),
180
224
  dialogInfo,
225
+ textInformationMessage,
181
226
  );
182
227
  const resultDialog: DialogEntity = await createDialogUseCase
183
228
  .execute()
@@ -201,6 +246,7 @@ export default function useDialogsViewModel(
201
246
  // eslint-disable-next-line @typescript-eslint/no-shadow,@typescript-eslint/no-unused-vars
202
247
  dialog: GroupDialogEntity,
203
248
  ): Promise<DialogEntity> => {
249
+ const textInformationMessage = `${currentUserName} has updated dialog`;
204
250
  const updateDialogUseCase: UpdateDialogUseCase = new UpdateDialogUseCase(
205
251
  eventMessageRepository,
206
252
  new DialogsRepository(
@@ -208,6 +254,7 @@ export default function useDialogsViewModel(
208
254
  remoteDataSourceMock,
209
255
  ),
210
256
  dialog,
257
+ textInformationMessage,
211
258
  );
212
259
 
213
260
  const resultDialog: DialogEntity = await updateDialogUseCase
@@ -242,6 +289,7 @@ export default function useDialogsViewModel(
242
289
  let leaveResult = false;
243
290
 
244
291
  if (dialogToDelete.type === DialogType.private) {
292
+ const textInformationMessage = `${currentUserName} has left dialog`;
245
293
  const leaveDialogUseCase: LeaveDialogUseCase = new LeaveDialogUseCase(
246
294
  eventMessageRepository,
247
295
  new DialogsRepository(
@@ -250,6 +298,7 @@ export default function useDialogsViewModel(
250
298
  ),
251
299
  dialogToDelete,
252
300
  DialogLeaveType.delete,
301
+ textInformationMessage,
253
302
  );
254
303
 
255
304
  leaveResult = await leaveDialogUseCase.execute().catch((e) => {
@@ -263,6 +312,7 @@ export default function useDialogsViewModel(
263
312
  remoteDataSourceMock?.authInformation?.userId || 0;
264
313
 
265
314
  usersForDeleteFromDialog.push(userToDeleteId);
315
+ const textInformationMessage = `${currentUserName} has left dialog`;
266
316
  const deleteUsersFromDialog: RemoveUsersFromTheDialogUseCase =
267
317
  new RemoveUsersFromTheDialogUseCase(
268
318
  eventMessageRepository,
@@ -272,6 +322,7 @@ export default function useDialogsViewModel(
272
322
  ),
273
323
  dialogToDelete,
274
324
  usersForDeleteFromDialog,
325
+ textInformationMessage,
275
326
  );
276
327
 
277
328
  leaveResult = await deleteUsersFromDialog.execute().catch((e) => {
@@ -297,6 +348,15 @@ export default function useDialogsViewModel(
297
348
  dialog.participantsToRemoveIds &&
298
349
  dialog.participantsToRemoveIds.length > 0
299
350
  ) {
351
+ const usersToDelete: UserEntity[] = await getSenders(
352
+ dialog.participantsToRemoveIds,
353
+ );
354
+ let userNames = '';
355
+
356
+ usersToDelete.forEach((u) => {
357
+ userNames += u.login || u.full_name || u.email;
358
+ });
359
+ const textInformationMessage = `${currentUserName} remove ${userNames}`;
300
360
  const deleteUsersFromDialog: RemoveUsersFromTheDialogUseCase =
301
361
  new RemoveUsersFromTheDialogUseCase(
302
362
  eventMessageRepository,
@@ -306,6 +366,7 @@ export default function useDialogsViewModel(
306
366
  ),
307
367
  dialog,
308
368
  dialog.participantsToRemoveIds,
369
+ textInformationMessage,
309
370
  );
310
371
 
311
372
  leaveResult = await deleteUsersFromDialog.execute().catch((e) => {
@@ -1,2 +1,21 @@
1
1
  @import "theme_light";
2
2
  @import "theme_dark";
3
+
4
+ /* Fonts */
5
+ :root{
6
+ --title-title-large: 500 20px/24px "Roboto", sans-serif;
7
+ --title-title-medium: 500 16px/24px "Roboto", sans-serif;
8
+ --title-title-small: 500 14px/20px "Roboto", sans-serif;
9
+ --label-label-large: 500 14px/20px "Roboto", sans-serif;
10
+ --label-label-medium: 500 12px/16px "Roboto", sans-serif;
11
+ --label-label-small: 500 11px/16px "Roboto", sans-serif;
12
+ --body-body-large: 400 16px/24px "Roboto", sans-serif;
13
+ --body-body-medium: 400 14px/20px "Roboto", sans-serif;
14
+ --body-body-small: 400 12px/16px "Roboto", sans-serif;
15
+ --button-fab: 500 14px/16px "Roboto", sans-serif;
16
+ --button-default: 700 14px/16px "Roboto", sans-serif;
17
+ --ui-kit-header: 500 48px "Roboto Mono", sans-serif;
18
+ --ui-kit-title: 500 32px "Roboto Mono", sans-serif;
19
+ --ui-kit-body: 400 17px "Roboto Mono", sans-serif;
20
+ }
21
+
@@ -31,6 +31,9 @@
31
31
 
32
32
  /* Light UiKitTheme/System */
33
33
  color: var(--main-background);
34
+
35
+ border: none;
36
+ outline: none;
34
37
  }
35
38
 
36
39
  .danger-button {
@@ -61,6 +64,9 @@
61
64
  letter-spacing: 0.4px;
62
65
  /* Light UiKitTheme/System */
63
66
  color: var(--main-background);
67
+
68
+ border: none;
69
+ outline: none;
64
70
  }
65
71
 
66
72
  .secondary-button{
@@ -124,4 +130,7 @@
124
130
  letter-spacing: 0.4px;
125
131
  /* Light UiKitTheme/Secondary text */
126
132
  color: var(--secondary-text);
133
+
134
+ border: none;
135
+ outline: none;
127
136
  }
@@ -190,6 +190,9 @@ $create-dialog-container-height: 180px;
190
190
  display: flex;
191
191
  align-items: center;
192
192
  letter-spacing: 0.15px;
193
+
194
+ border: none;
195
+ outline: none;
193
196
  }
194
197
  }
195
198
  }
@@ -114,6 +114,9 @@ $create-dialog-container-height: 412px;
114
114
  display: flex;
115
115
  align-items: center;
116
116
  letter-spacing: 0.15px;
117
+
118
+ border: none;
119
+ outline: none;
117
120
  }
118
121
 
119
122
  }
@@ -114,6 +114,9 @@ $members-list-container-height: 800px;
114
114
  display: flex;
115
115
  align-items: center;
116
116
  letter-spacing: 0.15px;
117
+
118
+ border: none;
119
+ outline: none;
117
120
  }
118
121
 
119
122
  }
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  FunctionTypeFileWithContextToToVoid,
3
3
  FunctionTypeJSXElement,
4
- FunctionTypeStringWithContextToString,
4
+ FunctionTypeStringWithContextToString, FunctionTypeVoidToTones,
5
5
  } from '../../../../../Views/Base/BaseViewModel';
6
+ import {Tone} from "./Tone";
6
7
 
7
8
  export interface MessageWidgetProps {
8
9
  // https://api.openai.com/v1/chat/completions'
@@ -29,7 +30,11 @@ export interface AIFileWidget extends AIWidget {
29
30
  export interface AIMessageWidget extends AITextWidget {
30
31
  textToWidget: FunctionTypeStringWithContextToString;
31
32
  }
32
-
33
+ //
34
+ export interface AIRephraseWidget extends AIMessageWidget {
35
+ tonesToWidget: FunctionTypeVoidToTones;
36
+ }
37
+ //
33
38
  export interface AIAttachmentWidget extends AIFileWidget {
34
39
  fileToWidget: FunctionTypeFileWithContextToToVoid;
35
40
  }
@@ -2,7 +2,7 @@ import React, { useState, CSSProperties, useRef, useEffect } from 'react';
2
2
  import './AIWidgetActions.scss';
3
3
  import EditDots from '../../../../svgs/Icons/Actions/EditDots';
4
4
 
5
- type MenuItem = {
5
+ export type MenuItem = {
6
6
  title: string;
7
7
  icon?: JSX.Element; // Добавлено поле для иконки пункта меню
8
8
  action: () => void;
@@ -12,6 +12,7 @@ type ContextMenuProps = {
12
12
  widgetToRender?: JSX.Element;
13
13
  items?: MenuItem[];
14
14
  title?: string | null;
15
+ disabled?: boolean;
15
16
  };
16
17
 
17
18
  const ContextMenuStyles: { [key: string]: CSSProperties } = {
@@ -20,7 +21,7 @@ const ContextMenuStyles: { [key: string]: CSSProperties } = {
20
21
  position: 'relative',
21
22
  maxWidth: '42px',
22
23
  maxHeight: '42px',
23
- cursor: 'pointer',
24
+ // cursor: 'pointer',
24
25
  },
25
26
  contextMenuContent: {
26
27
  position: 'absolute',
@@ -50,12 +51,13 @@ function AIWidgetActions({
50
51
  items,
51
52
  widgetToRender,
52
53
  title = null,
54
+ disabled = true,
53
55
  }: ContextMenuProps) {
54
56
  const [menuVisible, setMenuVisible] = useState(false);
55
57
  const contextMenuRef = useRef<HTMLDivElement | null>(null);
56
58
 
57
59
  const handleClick = () => {
58
- setMenuVisible(!menuVisible);
60
+ if (disabled) setMenuVisible(!menuVisible);
59
61
  };
60
62
 
61
63
  const handleMenuItemClick = (action: () => void) => {
@@ -85,7 +87,11 @@ function AIWidgetActions({
85
87
  <div onClick={handleClick}>{widgetToRender || <EditDots />}</div>
86
88
  {menuVisible && (
87
89
  // <div ref={contextMenuRef} style={ContextMenuStyles.contextMenuContent}>
88
- <div ref={contextMenuRef} className="dropdown-context-menu-tone">
90
+ <div
91
+ ref={contextMenuRef}
92
+ className="dropdown-context-menu-tone"
93
+ style={{ cursor: 'pointer' }}
94
+ >
89
95
  {title && <div style={ContextMenuStyles.menuTitle}>{title}</div>}
90
96
  {items?.map((item, index) => (
91
97
  <div
@@ -1,21 +1,35 @@
1
- export enum Tone {
2
- Professional = 'Professional Tone',
3
- Friendly = 'Friendly Tone',
4
- Encouraging = 'Encouraging Tone',
5
- Empathetic = 'Empathetic Tone',
6
- Neutral = 'Neutral Tone',
7
- Assertive = 'Assertive Tone',
8
- Instructive = 'Instructive Tone',
9
- Persuasive = 'Persuasive Tone',
10
- Sarcastic = 'Sarcastic/Ironic Tone',
11
- Poetic = 'Poetic Tone',
12
- Unchanged = 'Unchanged',
1
+ // export enum Tone {
2
+ // Professional = 'Professional Tone',
3
+ // Friendly = 'Friendly Tone',
4
+ // Encouraging = 'Encouraging Tone',
5
+ // Empathetic = 'Empathetic Tone',
6
+ // Neutral = 'Neutral Tone',
7
+ // Assertive = 'Assertive Tone',
8
+ // Instructive = 'Instructive Tone',
9
+ // Persuasive = 'Persuasive Tone',
10
+ // Sarcastic = 'Sarcastic/Ironic Tone',
11
+ // Poetic = 'Poetic Tone',
12
+ // Unchanged = 'Unchanged',
13
+ // }
14
+
15
+ export interface Tone {
16
+ name: string;
17
+ description: string;
18
+ iconEmoji: string;
13
19
  }
14
20
 
15
21
  export const toneToString = (tone: Tone): string => {
16
- return tone;
22
+ return tone.name;
17
23
  };
18
24
 
19
- export const stringToTone = (toneStr: string): Tone | undefined => {
20
- return Tone[toneStr as keyof typeof Tone];
25
+ export const stringToTone = (
26
+ toneStr: string,
27
+ description?: string,
28
+ emoji?: string,
29
+ ): Tone | undefined => {
30
+ return {
31
+ name: toneStr,
32
+ description: description || '',
33
+ iconEmoji: emoji || '',
34
+ };
21
35
  };
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
3
3
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
4
4
  import ErrorMessageIcon from './ErrorMessageIcon';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AIAnswerAssistUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidget({
50
51
  context: IChatMessage[],
51
52
  ): Promise<string> => {
52
53
  if (textToSend && textToSend.length > 0) {
53
- const prompt = `You are a customer support chat operator. Your goal is to provide helpful and informative responses to customer inquiries. Give a response to the next user's query, considering the entire conversation context, and use grammar and vocabulary at the A2-B2 level. Answer in the format of simple sentences. Do not include question in answer. Please, provide answer for this issue:"${textToSend}"`;
54
+ const openAIModel = 'gpt-3.5-turbo';
54
55
 
55
- // eslint-disable-next-line no-return-await
56
- return await AISource.getData(
57
- prompt,
56
+ const useCaseAIAnswerAssist = new AIAnswerAssistUseCase(
57
+ textToSend,
58
58
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
59
59
  context,
60
60
  servername,
61
61
  api,
62
62
  port,
63
63
  apiKeyOrSessionToken,
64
- ).then((data) => {
64
+ openAIModel,
65
+ );
66
+
67
+ // eslint-disable-next-line no-return-await
68
+ return await useCaseAIAnswerAssist.execute().then((data) => {
65
69
  setTextFromWidgetToContent(data);
66
70
 
67
71
  return data;
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
3
3
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
4
4
  import ErrorMessageIcon from './ErrorMessageIcon';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AIAnswerAssistWithProxyUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidgetWithProxy({
50
51
  context: IChatMessage[],
51
52
  ): Promise<string> => {
52
53
  if (textToSend && textToSend.length > 0) {
53
- const prompt = `You are a customer support chat operator. Your goal is to provide helpful and informative responses to customer inquiries. Give a response to the next user's query, considering the entire conversation context, and use grammar and vocabulary at the A2-B2 level. Answer in the format of simple sentences. Do not include question in answer. Please, provide answer for this issue:"${textToSend}"`;
54
+ const openAIModel = 'gpt-3.5-turbo';
54
55
 
55
- // eslint-disable-next-line no-return-await
56
- return await AISource.getDataWithProxyServer(
57
- prompt,
56
+ const useCaseAIAnswerAssist = new AIAnswerAssistWithProxyUseCase(
57
+ textToSend,
58
58
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
59
59
  context,
60
60
  servername,
61
61
  api,
62
62
  port,
63
63
  apiKeyOrSessionToken,
64
- ).then((data) => {
64
+ openAIModel,
65
+ );
66
+
67
+ // eslint-disable-next-line no-return-await
68
+ return await useCaseAIAnswerAssist.execute().then((data) => {
65
69
  setTextFromWidgetToContent(data);
66
70
 
67
71
  return data;
@@ -79,9 +79,26 @@ export default function UseDefaultAIRephraseMessageWidget({
79
79
  return '';
80
80
  };
81
81
 
82
+ // const tonesToWidget = (): Tone[] => {
83
+ // return [
84
+ // Tone.Professional,
85
+ // Tone.Friendly,
86
+ // Tone.Encouraging,
87
+ // Tone.Empathetic,
88
+ // Tone.Assertive,
89
+ // Tone.Neutral,
90
+ // Tone.Instructive,
91
+ // Tone.Persuasive,
92
+ // Tone.Sarcastic,
93
+ // Tone.Poetic,
94
+ // Tone.Unchanged,
95
+ // ];
96
+ // };
97
+
82
98
  return {
83
99
  textToContent: textFromWidgetToContent,
84
100
  renderWidget,
85
101
  textToWidget,
102
+ // tonesToWidget,
86
103
  };
87
104
  }
@@ -77,10 +77,26 @@ export default function UseDefaultAIRephraseMessageWidgetWithProxy({
77
77
  //
78
78
  return '';
79
79
  };
80
+ // const tonesToWidget = (): Tone[] => {
81
+ // return [
82
+ // Tone.Professional,
83
+ // Tone.Friendly,
84
+ // Tone.Encouraging,
85
+ // Tone.Empathetic,
86
+ // Tone.Assertive,
87
+ // Tone.Neutral,
88
+ // Tone.Instructive,
89
+ // Tone.Persuasive,
90
+ // Tone.Sarcastic,
91
+ // Tone.Poetic,
92
+ // Tone.Unchanged,
93
+ // ];
94
+ // };
80
95
 
81
96
  return {
82
97
  textToContent: textFromWidgetToContent,
83
98
  renderWidget,
84
99
  textToWidget,
100
+ // tonesToWidget,
85
101
  };
86
102
  }
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
3
3
  import ErrorMessageIcon from './ErrorMessageIcon';
4
4
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AITranslateUseCase } from '../../../../../../Domain/use_cases/ai/AITranslateUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -52,25 +53,25 @@ export default function UseDefaultAITranslateWidget({
52
53
  ): Promise<string> => {
53
54
  if (textToSend && textToSend.length > 0) {
54
55
  // eslint-disable-next-line no-return-await
55
- let prompt = `Please, translate the next text in english and give me just only translated text. Text to translate is: "${textToSend}"`;
56
56
  const { language } = additionalSettings || {};
57
+ //
58
+ const openAIModel = 'gpt-3.5-turbo';
57
59
 
58
- if (language) {
59
- prompt = `Please, translate the next text in ${
60
- language as string
61
- } and give me just only translated text. Text to translate is: "${textToSend}"`;
62
- }
63
-
64
- // eslint-disable-next-line no-return-await
65
- return await AISource.getData(
66
- prompt,
60
+ // AIRephraseWithProxyUseCase
61
+ const useCaseAITranslate = new AITranslateUseCase(
62
+ textToSend,
67
63
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
64
+ language,
68
65
  context,
69
66
  servername,
70
67
  api,
71
68
  port,
72
69
  apiKeyOrSessionToken,
73
- ).then((data) => {
70
+ openAIModel,
71
+ );
72
+
73
+ // eslint-disable-next-line no-return-await
74
+ return await useCaseAITranslate.execute().then((data) => {
74
75
  setTextFromWidgetToContent(data);
75
76
 
76
77
  return data;