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
@@ -161,32 +161,33 @@ export default function useMessagesViewModel(
161
161
  console.log('EXECUTE USE CASE MessagesViewModelWithMockUseCase EXECUTED');
162
162
  }
163
163
 
164
- const dialogUpdateHandler = (dialogInfo: DialogEventInfo) => {
165
- console.log('call dialogUpdateHandler in useMessagesViewModel');
166
- const getSender = async (sender_id: number) => {
167
- const getUser: GetUsersByIdsUseCase = new GetUsersByIdsUseCase(
168
- new UsersRepository(
169
- currentContext.storage.LOCAL_DATA_SOURCE,
170
- currentContext.storage.REMOTE_DATA_SOURCE,
171
- ),
172
- [sender_id],
173
- );
164
+ const getSender = async (sender_id: number) => {
165
+ const getUser: GetUsersByIdsUseCase = new GetUsersByIdsUseCase(
166
+ new UsersRepository(
167
+ currentContext.storage.LOCAL_DATA_SOURCE,
168
+ currentContext.storage.REMOTE_DATA_SOURCE,
169
+ ),
170
+ [sender_id],
171
+ );
174
172
 
175
- let userEntity: UserEntity | undefined;
173
+ let userEntity: UserEntity | undefined;
176
174
 
177
- await getUser
178
- .execute()
179
- // eslint-disable-next-line promise/always-return
180
- .then((data) => {
181
- // eslint-disable-next-line prefer-destructuring
182
- userEntity = data[0];
183
- })
184
- .catch((e) => {
185
- console.log('have ERROR get users :', JSON.stringify(e));
186
- });
175
+ await getUser
176
+ .execute()
177
+ // eslint-disable-next-line promise/always-return
178
+ .then((data) => {
179
+ // eslint-disable-next-line prefer-destructuring
180
+ userEntity = data[0];
181
+ })
182
+ .catch((e) => {
183
+ console.log('have ERROR get users :', JSON.stringify(e));
184
+ });
187
185
 
188
- return userEntity;
189
- };
186
+ return userEntity;
187
+ };
188
+
189
+ const dialogUpdateHandler = (dialogInfo: DialogEventInfo) => {
190
+ console.log('call dialogUpdateHandler in useMessagesViewModel');
190
191
 
191
192
  if (dialogInfo.eventMessageType === EventMessageType.LocalMessage) {
192
193
  if (dialogInfo.messageStatus) {
@@ -233,9 +234,20 @@ export default function useMessagesViewModel(
233
234
  })
234
235
  .finally(() => {
235
236
  setMessages((prevState) => {
236
- const newState = [...prevState];
237
+ let newState = [...prevState];
238
+
239
+ if (newState.find((it) => it.id === messageId)) {
240
+ newState = newState.map((elem) => {
241
+ const v: MessageEntity = {
242
+ ...elem,
243
+ delivered_ids: ResultMessage.delivered_ids,
244
+ };
237
245
 
238
- newState.push(ResultMessage);
246
+ return v;
247
+ });
248
+ } else {
249
+ newState.push(ResultMessage);
250
+ }
239
251
 
240
252
  return newState;
241
253
  });
@@ -311,7 +323,7 @@ export default function useMessagesViewModel(
311
323
  fileEntity.uid = '';
312
324
  fileEntity.name = file.name;
313
325
  fileEntity.size = file.size;
314
- fileEntity.type = file.type;
326
+ fileEntity.type = file.type || 'application/zip';
315
327
  const uploadFileUseCase: UploadFileUseCase = new UploadFileUseCase(
316
328
  new FileRepository(
317
329
  currentContext.storage.LOCAL_DATA_SOURCE,
@@ -343,6 +355,27 @@ export default function useMessagesViewModel(
343
355
  // eslint-disable-next-line promise/catch-or-return
344
356
  sendTextMessageUseCase
345
357
  .execute()
358
+ // eslint-disable-next-line promise/always-return
359
+ .then((me) => {
360
+ //
361
+ // eslint-disable-next-line promise/catch-or-return
362
+ getSender(me.sender_id)
363
+ // eslint-disable-next-line promise/always-return
364
+ .then((user) => {
365
+ // eslint-disable-next-line no-param-reassign
366
+ me.sender = user;
367
+ })
368
+ .finally(() => {
369
+ setMessages((prevState) => {
370
+ const newState = [...prevState];
371
+
372
+ newState.push(me);
373
+
374
+ return newState;
375
+ });
376
+ });
377
+ //
378
+ })
346
379
  .catch((reason) => {
347
380
  const errorMessage: string = stringifyError(reason);
348
381
 
@@ -388,70 +421,78 @@ export default function useMessagesViewModel(
388
421
  };
389
422
 
390
423
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
391
- const sendAttachmentMessage = (newMessage: File) => {
424
+ const sendAttachmentMessage = async (newMessage: File): Promise<boolean> => {
392
425
  console.log('call sendTextMessage');
393
426
  setLoading(true);
394
427
  const currentUserId =
395
428
  currentContext.storage.REMOTE_DATA_SOURCE.authInformation?.userId || 0;
396
429
 
397
- uploadFile(newMessage)
398
- // eslint-disable-next-line promise/always-return
399
- .then((fileMessage: FileEntity) => {
400
- console.log(JSON.stringify(fileMessage));
401
- // '[attachment]'
402
- const recipientId =
403
- dialog.type === DialogType.private
404
- ? (dialog as PrivateDialogEntity).participantId
405
- : currentUserId;
406
-
430
+ try {
431
+ await uploadFile(newMessage)
407
432
  // eslint-disable-next-line promise/always-return
408
- const messageBody = fileMessage.name || '[attachment]';
409
- const messageToSend: MessageEntity =
410
- Stubs.createMessageEntityWithParams(
411
- '',
412
- dialog.id,
413
- messageBody,
414
- Date.now().toString(),
415
- Date.now(),
416
- Date.now().toString(),
417
- [],
418
- [],
419
- 1,
420
- currentUserId,
421
- // eslint-disable-next-line promise/always-return
422
- recipientId,
423
- [],
424
- '',
425
- DialogType.group,
426
- );
427
-
428
- messageToSend.dialogType = dialog.type;
429
- const attachments: ChatMessageAttachmentEntity[] = [
430
- {
431
- id: fileMessage.id as string,
432
- uid: fileMessage.uid,
433
- type: fileMessage.type!,
434
- file: fileMessage,
435
- name: fileMessage.name,
436
- size: fileMessage.size,
437
- url: fileMessage.url,
438
- },
439
- ];
440
-
441
- messageToSend.attachments = attachments;
442
-
443
- messageToSend.message = `MediaContentEntity|${messageBody}|${
444
- fileMessage.uid
445
- }|${fileMessage.type!.toString()}`;
446
- sendMessage(messageToSend);
447
- //
448
- })
449
- .catch((reason) => {
450
- const errorMessage = stringifyError(reason);
433
+ .then((fileMessage: FileEntity) => {
434
+ console.log(JSON.stringify(fileMessage));
451
435
 
452
- console.log('EXCEPTION in sendAttachmentMessage');
453
- throw new Error(errorMessage);
454
- });
436
+ const recipientId =
437
+ dialog.type === DialogType.private
438
+ ? (dialog as PrivateDialogEntity).participantId
439
+ : currentUserId;
440
+
441
+ // eslint-disable-next-line promise/always-return
442
+ const messageBody = fileMessage.name || '[attachment]';
443
+ const messageToSend: MessageEntity =
444
+ Stubs.createMessageEntityWithParams(
445
+ '',
446
+ dialog.id,
447
+ messageBody,
448
+ Date.now().toString(),
449
+ Date.now(),
450
+ Date.now().toString(),
451
+ [],
452
+ [],
453
+ 1,
454
+ currentUserId,
455
+ // eslint-disable-next-line promise/always-return
456
+ recipientId,
457
+ [],
458
+ '',
459
+ DialogType.group,
460
+ );
461
+
462
+ messageToSend.dialogType = dialog.type;
463
+ const attachments: ChatMessageAttachmentEntity[] = [
464
+ {
465
+ id: fileMessage.id as string,
466
+ uid: fileMessage.uid,
467
+ type: fileMessage.type!,
468
+ file: fileMessage,
469
+ name: fileMessage.name,
470
+ size: fileMessage.size,
471
+ url: fileMessage.url,
472
+ },
473
+ ];
474
+
475
+ messageToSend.attachments = attachments;
476
+
477
+ messageToSend.message = `MediaContentEntity|${messageBody}|${
478
+ fileMessage.uid
479
+ }|${fileMessage.type!.toString()}`;
480
+ sendMessage(messageToSend);
481
+ //
482
+ })
483
+ .catch((reason) => {
484
+ setLoading(false);
485
+ const errorMessage = stringifyError(reason);
486
+
487
+ console.log('EXCEPTION in sendAttachmentMessage', errorMessage);
488
+
489
+ throw new Error(errorMessage);
490
+ });
491
+ } catch (e) {
492
+ return false;
493
+ }
494
+
495
+ return true;
455
496
  };
456
497
 
457
498
  return {
@@ -33,6 +33,10 @@ $preview-dialog-avatar-wrapper-background-color-private: var(--caption);
33
33
  text-overflow: ellipsis;
34
34
  white-space: nowrap;
35
35
  overflow: hidden;
36
+ color: var(--main-text, #0b121b);
37
+ text-align: left;
38
+ font: var(--label-label-medium, 500 12px/16px "Roboto", sans-serif);
39
+ position: relative;
36
40
  }
37
41
  &__text {
38
42
  position: relative;
@@ -56,7 +60,13 @@ $preview-dialog-avatar-wrapper-background-color-private: var(--caption);
56
60
  overflow: hidden;
57
61
  max-height: $row-center-container-base-font-line-height; /* (Number of lines you want visible) * (line-height) */
58
62
  line-height: 11px; // $row-center-container-base-font-size;
59
- text-align:justify;
63
+ //text-align:justify;
64
+ color: var(--main-text);
65
+ text-align: left;
66
+ font: var(--body-body-small, 400 12px/16px "Roboto", sans-serif);
67
+ position: relative;
68
+ align-self: stretch;
69
+ height: 32px;
60
70
  }
61
71
 
62
72
  //&__text.ellipsis::after {
@@ -98,3 +108,19 @@ $preview-dialog-avatar-wrapper-background-color-private: var(--caption);
98
108
  padding-top: 2px;
99
109
  }
100
110
 
111
+ .dialog-item-preview-text{
112
+ color: var(--main-text);
113
+ text-align: left;
114
+ font: var(--body-body-small, 400 12px/16px "Roboto", sans-serif);
115
+ position: relative;
116
+ align-self: stretch;
117
+ height: 32px;
118
+ }
119
+
120
+ .dialog-item-date-time-sent{
121
+ color: var(--secondary-text);
122
+ text-align: right;
123
+ font: var(--label-label-small, 500 11px/16px "Roboto", sans-serif);
124
+ position: relative;
125
+ }
126
+
@@ -312,7 +312,9 @@ const PreviewDialog: React.FC<PreviewDialogsProps> = ({
312
312
  const fileUid: string = messageParts[2];
313
313
  const fileUrl: string = fileUid && QB.content.privateUrl(fileUid);
314
314
 
315
- const result: JSX.Element = <div>{message}</div>;
315
+ const result: JSX.Element = (
316
+ <div className="dialog-item-preview-text">{message}</div>
317
+ );
316
318
 
317
319
  if (messageParts[3].includes('audio')) {
318
320
  return <PreviewAudioFile fileName={fileName} />;
@@ -341,7 +343,8 @@ const PreviewDialog: React.FC<PreviewDialogsProps> = ({
341
343
  haveHover
342
344
  ? {
343
345
  ...titleDialogStyles,
344
- background: hoverTheme.backgroundColorMainSection,
346
+ // background: hoverTheme.backgroundColorMainSection,
347
+ background: 'var(--chat-input)',
345
348
  border: `1px solid ${hoverTheme.divider}`,
346
349
  }
347
350
  : titleDialogStyles
@@ -382,7 +385,7 @@ const PreviewDialog: React.FC<PreviewDialogsProps> = ({
382
385
  <ColumnContainer gapBetweenItem="3px" maxWidth="213px">
383
386
  <RowLeftContainer
384
387
  RightItem={
385
- <div style={{ textAlign: 'right' }}>
388
+ <div className="dialog-item-date-time-sent">
386
389
  {!haveHover ? message_date_time_sent : ''}
387
390
  </div>
388
391
  }
package/src/index-ui.ts CHANGED
@@ -37,7 +37,10 @@ import { AIMessageWidget } from './Presentation/components/UI/Dialogs/MessagesVi
37
37
  import { AISource, IChatMessage } from './Data/source/AISource';
38
38
  import AIWidgetIcon from './Presentation/components/UI/svgs/Icons/AIWidgets/AIWidget';
39
39
  import ErrorMessageIcon from './Presentation/components/UI/Dialogs/MessagesView/AIWidgets/ErrorMessageIcon';
40
-
40
+ import PreviewDialogViewModel from './Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialogViewModel';
41
+ import {AvatarContentIncomingUserProps} from './Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser';
42
+ import {FunctionTypeViewModelToVoid} from './Presentation/Views/Base/BaseViewModel';
43
+ import {GetUserNameFct} from './Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage';
41
44
  export {
42
45
  MainButton,
43
46
  TypeButton,
@@ -74,4 +77,8 @@ export {
74
77
  type IChatMessage,
75
78
  AIWidgetIcon,
76
79
  ErrorMessageIcon,
80
+ PreviewDialogViewModel,
81
+ type FunctionTypeViewModelToVoid,
82
+ type AvatarContentIncomingUserProps,
83
+ type GetUserNameFct
77
84
  };
package/src/index.scss CHANGED
@@ -1,4 +1,3 @@
1
- @import "Presentation/assets/styles/reset-styles";
2
1
  @import "Presentation/assets/styles/fonts";
3
2
  @import "Presentation/assets/styles/theme_colors_scheme";
4
3
  @import "Presentation/assets/styles/variables";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "artan-react-ui-sample",
3
- "version": "0.0.51",
3
+ "version": "0.0.55",
4
4
  "main": "dist/index-ui.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quickblox-react-ui-kit",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "main": "dist/index-ui.js",
5
5
  "license": "MIT",
6
6
  "keywords": [