Skip to content

Commit c8152d8

Browse files
v0.2.8-beta.5
1 parent 660077a commit c8152d8

File tree

59 files changed

+2206
-17201
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2206
-17201
lines changed

package-lock.json

Lines changed: 6 additions & 14651 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "quickblox-react-ui-kit",
3-
"version": "0.2.7-release-final",
3+
"version": "0.2.8-beta.5",
44
"main": "dist/index-ui.js",
55
"license": "MIT",
66
"keywords": [
@@ -89,7 +89,7 @@
8989
"test": "react-scripts test",
9090
"lint": "eslint ./src",
9191
"eject": "react-scripts eject",
92-
"prepublishOnly": "npm run build"
92+
"prepublishOnly": "npm run build:lib"
9393
},
9494
"lint-staged": {
9595
"src/**/*.{ts,tsx}": "eslint"

src/App.tsx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function App() {
2828
const { connectionRepository } = useQBConnection();
2929

3030
const initLoginData: LoginData = {
31-
login: 'anruaav2', // vit1
31+
login: 'artimed', // vit1
3232
password: 'quickblox',
3333
};
3434

@@ -215,29 +215,29 @@ function App() {
215215
}}
216216
>
217217
<div className="App">
218-
<div className="App">
219-
<Routes>
220-
{/* eslint-disable-next-line @typescript-eslint/no-misused-promises */}
221-
<Route path="/" element={<Login loginHandler={loginHandler} />} />
222-
<Route
223-
path="/desktop-test-mock"
224-
element={
218+
<Routes>
219+
{/* eslint-disable-next-line @typescript-eslint/no-misused-promises */}
220+
<Route path="/" element={<Login loginHandler={loginHandler} />} />
221+
<Route
222+
path="/desktop-test-mock"
223+
element={
224+
<div>
225+
<div style={{ height: '32px' }}>Q-communicate</div>
225226
<QuickBloxUIKitDesktopLayout
226227
theme={new DefaultTheme()}
228+
uikitHeightOffset="32px"
227229
// AIAssist={{
228230
// enabled: true,
229231
// default: true,
230232
// AIWidget: defaultAIAnswer,
231233
// }}
232234
/>
233-
}
234-
/>
235-
236-
<Route path="/test-stage" element={<TestStageMarkup />} />
237-
</Routes>
238-
</div>
239-
<br />
240-
<br />
235+
</div>
236+
}
237+
/>
238+
239+
<Route path="/test-stage" element={<TestStageMarkup />} />
240+
</Routes>
241241
</div>
242242
</QuickBloxUIKitProvider>
243243
);

src/CommonTypes/BaseViewModel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export type FunctionTypeForwardMessagesParamsToBoolean = (
7474
) => Promise<boolean>;
7575
export type FunctionTypeFileToToVoid = (file: File) => void;
7676
export type FunctionTypeMessageEntityToVoid = (message: MessageEntity) => void;
77+
export type FunctionDialogEntityToVoid = (dialog: DialogEntity) => void;
7778
export type FunctionTypeFileToToBoolean = (file: File) => Promise<boolean>;
7879
export type FunctionTypePaginationToVoid = (pagination: Pagination) => void;
7980
export type FunctionTypeVoidToVoid = () => void;

src/Data/source/remote/Mapper/MessageDTOMapper.ts

Lines changed: 71 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export class MessageDTOMapper implements IDTOMapper {
136136

137137
dto.id = qbMessage._id;
138138
dto.dialogId = qbMessage.chat_dialog_id;
139-
dto.message = MessageDTOMapper.formatMessage(qbMessage.message);
139+
dto.message = qbMessage.message; // MessageDTOMapper.formatMessage(qbMessage.message);
140140
dto.created_at = qbMessage.created_at;
141141
dto.date_sent = qbMessage.date_sent * 1000;
142142
dto.delivered_ids = qbMessage.delivered_ids || [];
@@ -156,7 +156,7 @@ export class MessageDTOMapper implements IDTOMapper {
156156
dto.id = qbMessage._id;
157157
dto.dialogId = qbMessage.chat_dialog_id;
158158

159-
dto.message = MessageDTOMapper.formatMessage(qbMessage.message); // todo: check
159+
dto.message = qbMessage.message; // MessageDTOMapper.formatMessage(qbMessage.message); // todo: check
160160
dto.created_at = qbMessage.created_at || Date.now().toString(); // todo: check
161161
dto.date_sent = qbMessage.date_sent || Date.now() * 1000; // todo: check
162162
dto.delivered_ids = qbMessage.delivered_ids || [];
@@ -262,43 +262,89 @@ export class MessageDTOMapper implements IDTOMapper {
262262
}
263263

264264
//
265+
public static FORWARD_MESSAGE_PREFIX = '[Forwarded_Message]';
266+
267+
public static REPLY_MESSAGE_PREFIX = '[Replied_Message]';
268+
269+
public static ATTACHMENT_PREFIX = '[Attachment]';
270+
271+
public static MEDIA_CONTENT_ENTITY_PREFIX = 'MediaContentEntity';
272+
273+
private static isForwardedOrRepliedMessage(qbMessage: string) {
274+
return (
275+
qbMessage.includes(MessageDTOMapper.FORWARD_MESSAGE_PREFIX) ||
276+
qbMessage.includes(MessageDTOMapper.REPLY_MESSAGE_PREFIX)
277+
);
278+
}
279+
280+
private static isMediaOrAttachmentMessage(message: string) {
281+
return (
282+
message.includes(MessageDTOMapper.MEDIA_CONTENT_ENTITY_PREFIX) ||
283+
message.includes(MessageDTOMapper.ATTACHMENT_PREFIX)
284+
);
285+
}
265286

266287
public static formatMessage(qbMessage: string) {
267-
if (
268-
qbMessage.includes('MediaContentEntity') ||
269-
qbMessage.includes('[Attachment]')
270-
) {
271-
const messageParts = qbMessage.split('|');
272-
273-
// val messageBody = "${MediaContentEntity::class.java.simpleName}|$fileName|$uid|$fileMimeType"
274-
// 0, 1, 2, 3
275-
return messageParts[1] || '';
288+
if (MessageDTOMapper.isMediaOrAttachmentMessage(qbMessage)) {
289+
return this.splitMessageParts(qbMessage)[1] || '';
276290
}
277-
if (
278-
qbMessage.includes('[Forwarded_Message]') ||
279-
qbMessage.includes('[Replied_Message]')
280-
) {
291+
if (MessageDTOMapper.isForwardedOrRepliedMessage(qbMessage)) {
281292
return '';
282293
}
283294

284295
return qbMessage;
285296
}
286297

287-
private static getMessageParts(qbMessage: string) {
288-
if (
289-
qbMessage.includes('MediaContentEntity') ||
290-
qbMessage.includes('[Attachment]')
291-
) {
292-
const messageParts = qbMessage.split('|');
293-
294-
// val messageBody = "${MediaContentEntity::class.java.simpleName}|$fileName|$uid|$fileMimeType"
295-
// 0, 1, 2, 3
296-
return messageParts;
298+
public static getMessageParts(qbMessage: string) {
299+
if (MessageDTOMapper.isMediaOrAttachmentMessage(qbMessage)) {
300+
return MessageDTOMapper.splitMessageParts(qbMessage);
297301
}
298302

299303
return [];
300304
}
301305

306+
private static splitMessageParts(message: string) {
307+
// val messageBody = "${MediaContentEntity::class.java.simpleName}|$fileName|$uid|$fileMimeType"
308+
// 0, 1, 2, 3
309+
return message.split('|');
310+
}
311+
312+
// public static formatMessage(qbMessage: string) {
313+
// if (
314+
// qbMessage.includes('MediaContentEntity') ||
315+
// qbMessage.includes('[Attachment]')
316+
// ) {
317+
// const messageParts = qbMessage.split('|');
318+
//
319+
// // val messageBody = "${MediaContentEntity::class.java.simpleName}|$fileName|$uid|$fileMimeType"
320+
// // 0, 1, 2, 3
321+
// return messageParts[1] || '';
322+
// }
323+
// if (
324+
// qbMessage.includes('[Forwarded_Message]') ||
325+
// qbMessage.includes('[Replied_Message]')
326+
// ) {
327+
// return '';
328+
// }
329+
//
330+
// return qbMessage;
331+
// }
332+
//
333+
// private static getMessageParts(qbMessage: string) {
334+
// if (
335+
// qbMessage.includes('MediaContentEntity') ||
336+
// qbMessage.includes('[Attachment]')
337+
// ) {
338+
// const messageParts = qbMessage.split('|');
339+
//
340+
// // val messageBody = "${MediaContentEntity::class.java.simpleName}|$fileName|$uid|$fileMimeType"
341+
// // 0, 1, 2, 3
342+
// return messageParts;
343+
// }
344+
//
345+
// return [];
346+
// }
347+
302348
private static validateDTO(messageDTO: RemoteMessageDTO) {
303349
const messageDTOValidator: DtoValidator<RemoteMessageDTO> = {
304350
created_at(v: unknown): v is RemoteMessageDTO['created_at'] {

src/Data/source/remote/RemoteDataSource.ts

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -359,39 +359,39 @@ export class RemoteDataSource implements IRemoteDataSource {
359359
};
360360

361361
// eslint-disable-next-line @typescript-eslint/no-unused-vars
362-
function QBChatXMPPMessageToRemoteMessageDTO(message: QBChatXMPPMessage) {
363-
const resultMessage = new RemoteMessageDTO();
364-
365-
resultMessage.id = message.id;
366-
resultMessage.message = MessageDTOMapper.formatMessage(message.body);
367-
resultMessage.markable = message.markable
368-
? message.markable.toString()
369-
: '0';
370-
resultMessage.dialogId = message?.extension?.dialog_id || '';
371-
// eslint-disable-next-line no-nested-ternary
372-
resultMessage.recipient_id = message?.recipient_id
373-
? parseInt(message?.recipient_id, 10)
374-
: message?.extension?.sender_id
375-
? message?.extension?.sender_id
376-
: 0;
377-
resultMessage.sender_id = message?.extension?.sender_id
378-
? message?.extension?.sender_id
379-
: 0;
380-
resultMessage.notification_type =
381-
message.notification_type || message.extension.notification_type;
382-
resultMessage.date_sent = message.extension.date_sent
383-
? parseInt(message.extension.date_sent, 10)
384-
: 0;
385-
resultMessage.delivered_ids = [];
386-
387-
// resultMessage.attachments = message.extension.attachments || [];
388-
resultMessage.attachments = MessageDTOMapper.transformAttachment(
389-
message.body,
390-
message.extension.attachments ? message.extension.attachments : [],
391-
);
392-
393-
return resultMessage;
394-
}
362+
// function QBChatXMPPMessageToRemoteMessageDTO(message: QBChatXMPPMessage) {
363+
// const resultMessage = new RemoteMessageDTO();
364+
//
365+
// resultMessage.id = message.id;
366+
// resultMessage.message = MessageDTOMapper.formatMessage(message.body);
367+
// resultMessage.markable = message.markable
368+
// ? message.markable.toString()
369+
// : '0';
370+
// resultMessage.dialogId = message?.extension?.dialog_id || '';
371+
// // eslint-disable-next-line no-nested-ternary
372+
// resultMessage.recipient_id = message?.recipient_id
373+
// ? parseInt(message?.recipient_id, 10)
374+
// : message?.extension?.sender_id
375+
// ? message?.extension?.sender_id
376+
// : 0;
377+
// resultMessage.sender_id = message?.extension?.sender_id
378+
// ? message?.extension?.sender_id
379+
// : 0;
380+
// resultMessage.notification_type =
381+
// message.notification_type || message.extension.notification_type;
382+
// resultMessage.date_sent = message.extension.date_sent
383+
// ? parseInt(message.extension.date_sent, 10)
384+
// : 0;
385+
// resultMessage.delivered_ids = [];
386+
//
387+
// // resultMessage.attachments = message.extension.attachments || [];
388+
// resultMessage.attachments = MessageDTOMapper.transformAttachment(
389+
// message.body,
390+
// message.extension.attachments ? message.extension.attachments : [],
391+
// );
392+
//
393+
// return resultMessage;
394+
// }
395395

396396
QB.chat.onMessageListener = (
397397
userId: number,

src/Presentation/Views/Dialog/ContextMenu/ContextMenu.scss

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
0px 8px 10px 0px rgba(0, 0, 0, 0.12);
1818
z-index: 1;
1919
position: absolute;
20-
top: 0;
21-
left: 50%;
22-
transform: translate(-50%, -50%);
20+
top: 60px;
21+
// left: 50%;
22+
transform: translate(-80%, -80%);
2323
}
2424

2525

src/Presentation/Views/Dialog/ContextMenu/ContextMenu.tsx

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ type ContextMenuProps = {
1414

1515
const ContextMenuStyles: { [key: string]: CSSProperties } = {
1616
contextMenuIcon: {
17-
// display: 'inline-block',
18-
// position: 'relative',
19-
// maxWidth: '42px',
20-
// maxHeight: '42px',
2117
cursor: 'pointer',
2218
},
2319
contextMenuContent: {
@@ -72,38 +68,21 @@ function ContextMenu({ items, widgetToRender }: ContextMenuProps) {
7268
>
7369
<div onClick={handleClick}>{widgetToRender || <EditDots />}</div>
7470
{menuVisible && (
75-
<div
76-
ref={contextMenuRef}
77-
// style={ContextMenuStyles.contextMenuContent}
78-
className="context-menu"
79-
>
71+
<div ref={contextMenuRef} className="context-menu">
8072
{items?.map((item, index) => (
8173
<div
8274
className="context-menu-item"
8375
key={index}
8476
style={{
85-
// padding: '4px',
8677
cursor: 'pointer',
8778
}}
8879
onClick={() => {
89-
handleMenuItemClick(item.action); // Используем новую функцию обработчика
80+
handleMenuItemClick(item.action);
9081
}}
9182
>
9283
<div className="context-menu-item-reply">{item.title}</div>
9384
<div className="context-menu-item-icon" />
9485
</div>
95-
// <div
96-
// key={index}
97-
// style={{
98-
// padding: '4px',
99-
// cursor: 'pointer',
100-
// }}
101-
// onClick={() => {
102-
// handleMenuItemClick(item.action); // Используем новую функцию обработчика
103-
// }}
104-
// >
105-
// {item.title}
106-
// </div>
10786
))}
10887
</div>
10988
)}

src/Presentation/Views/Dialog/Dialog.scss

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ $message-view-container-message-text-color: var(--main-text);
1111
$message-view-container-date-time-text-color: var(--secondary-text);
1212
$message-view-container-ai-translate-text-color: var(--tertiary-elements);
1313
.message-view-container{
14-
min-height: $message-view-container-wrapper-max-height;
15-
max-height: $message-view-container-wrapper-max-height;
14+
// min-height: $message-view-container-wrapper-max-height;
15+
// max-height: $message-view-container-wrapper-max-height;
1616
display: flex;
1717
flex-flow: column nowrap;
1818

1919
justify-content: space-between;
2020
align-items: center;
2121
margin: 0 auto;
2222
gap: 3px;
23+
min-width: var(--max-width-message-view-container);
2324

2425

2526
&--header{
@@ -52,6 +53,7 @@ $message-view-container-ai-translate-text-color: var(--tertiary-elements);
5253
background-color: $message-view-container-background-color;
5354
width: 100%;
5455
max-height: calc(800px - 128px - 16px);
56+
// max-height: calc(100vh - 128px - 16px); // TODO: fix calc max-height
5557

5658
display: flex;
5759
flex-flow: column nowrap;
@@ -68,6 +70,7 @@ $message-view-container-ai-translate-text-color: var(--tertiary-elements);
6870
flex-wrap: nowrap;
6971
margin: 0 auto;
7072
gap: 3px;
73+
padding: 20px 0px 10px 0px;
7174
&__date_container{
7275
background-color: var(--disabled-elements);
7376
border-radius: 30px;
@@ -196,8 +199,8 @@ $message-view-container-ai-translate-text-color: var(--tertiary-elements);
196199
&--message-content-wrapper{
197200
max-width: 300px;
198201
max-height: 160px;
199-
min-width: 300px;
200-
width: 300px;
202+
// min-width: 300px;
203+
// width: 300px;
201204

202205
display: flex;
203206
flex-direction: row;

0 commit comments

Comments
 (0)