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.
- package/README.md +3 -2
- package/dist/Data/repository/DialogsRepository.d.ts +1 -0
- package/dist/Data/repository/EventMessagesRepository.d.ts +1 -0
- package/dist/Data/repository/MessagesRepository.d.ts +2 -2
- package/dist/Domain/entity/NotificationTypes.d.ts +1 -0
- package/dist/Domain/repository/IDialogsRepository.d.ts +1 -0
- package/dist/Domain/repository/IMessagesRepository.d.ts +2 -2
- package/dist/Domain/use_cases/CreateDialogUseCase.d.ts +2 -1
- package/dist/Domain/use_cases/LeaveDialogUseCase.d.ts +2 -1
- package/dist/Domain/use_cases/RemoveUsersFromTheDialogUseCase.d.ts +2 -1
- package/dist/Domain/use_cases/SubscribeToDialogEventsUseCase.d.ts +1 -0
- package/dist/Domain/use_cases/UpdateDialogUseCase.d.ts +2 -1
- package/dist/Presentation/Views/Base/BaseViewModel.d.ts +1 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.d.ts +1 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.d.ts +3 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.d.ts +9 -2
- package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesView.d.ts +10 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.d.ts +2 -2
- package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.d.ts +7 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.d.ts +7 -0
- package/dist/index-ui.d.ts +5 -1
- package/dist/index-ui.js +101 -35
- package/package.json +1 -1
- package/src/App.tsx +1 -1
- package/src/Data/repository/DialogsRepository.ts +4 -0
- package/src/Data/repository/EventMessagesRepository.ts +34 -0
- package/src/Data/repository/MessagesRepository.ts +16 -10
- package/src/Data/source/exception/MapperDTOException.ts +3 -0
- package/src/Data/source/remote/RemoteDataSource.ts +134 -112
- package/src/Domain/entity/NotificationTypes.ts +2 -0
- package/src/Domain/repository/IDialogsRepository.ts +2 -0
- package/src/Domain/repository/IMessagesRepository.ts +2 -2
- package/src/Domain/use_cases/CreateDialogUseCase.ts +8 -1
- package/src/Domain/use_cases/GetAllDialogsUseCaseWithMock.ts +1 -0
- package/src/Domain/use_cases/LeaveDialogUseCase.ts +8 -1
- package/src/Domain/use_cases/RemoveUsersFromTheDialogUseCase.ts +40 -17
- package/src/Domain/use_cases/SendTextMessageUseCase.ts +3 -2
- package/src/Domain/use_cases/SubscribeToDialogEventsUseCase.ts +21 -0
- package/src/Domain/use_cases/UpdateDialogUseCase.ts +8 -1
- package/src/Domain/use_cases/base/Subscribable/SubscriptionPerformer.ts +7 -10
- package/src/Presentation/Views/Base/BaseViewModel.ts +1 -0
- package/src/Presentation/Views/Dialogs/Dialogs.scss +3 -0
- package/src/Presentation/Views/Dialogs/useDialogsViewModel.ts +109 -48
- package/src/Presentation/assets/styles/_variables.scss +19 -0
- package/src/Presentation/components/UI/Buttons/MainButton/MainButton.scss +9 -0
- package/src/Presentation/components/UI/Dialogs/EditDialog/EditDialog.scss +3 -0
- package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembers.scss +3 -0
- package/src/Presentation/components/UI/Dialogs/MembersList/MembersList.scss +3 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/AudioAttachmentComponent/AudioAttachmentComponent.tsx +1 -1
- package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.tsx +20 -14
- package/src/Presentation/components/UI/Dialogs/MessagesView/ImageAttachmentComponent/ImageAttachmentComponent.tsx +8 -6
- package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/AvatarContentIncomingUser/AvatarContentIncomingUser.tsx +6 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.scss +1 -1
- package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.tsx +74 -29
- package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +12 -23
- package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +101 -33
- package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.ts +2 -2
- package/src/Presentation/components/UI/Dialogs/MessagesView/OutGoingMessage/OutGoingMessage.tsx +1 -1
- package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.scss +23 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/SystemDateBanner/SystemDateBanner.tsx +17 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.scss +21 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/SystemMessageBanner/SystemMessageBanner.tsx +17 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/useMessagesViewModel.ts +124 -83
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +27 -1
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +6 -3
- package/src/index-ui.ts +8 -1
- package/src/index.scss +0 -1
- package/src/package_artan_react_ui.json +1 -1
- package/src/package_original.json +1 -1
- 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
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
173
|
+
let userEntity: UserEntity | undefined;
|
|
176
174
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
398
|
-
|
|
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
|
-
|
|
409
|
-
|
|
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
|
-
|
|
453
|
-
|
|
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 =
|
|
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
|
|
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