@viewberapp/chat 0.0.79 → 0.0.81
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/dist/API.d.ts +3 -3
- package/dist/API.js +3 -3
- package/dist/CachedChat.js +1 -1
- package/dist/Chat.d.ts +1 -1
- package/dist/Chat.js +3 -3
- package/dist/PendingMessage.d.ts +3 -1
- package/dist/PendingMessage.js +5 -0
- package/dist/PendingMessage.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/react/components/MessageList.d.ts +34 -0
- package/dist/react/components/MessageList.js +98 -0
- package/dist/react/components/MessageList.js.map +1 -0
- package/dist/react/components/index.d.ts +2 -1
- package/dist/react/components/index.js +3 -1
- package/dist/react/components/index.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +2 -1
- package/dist/react/index.js.map +1 -1
- package/dist/util/getLatestMessage.d.ts +3 -0
- package/dist/util/getLatestMessage.js +18 -0
- package/dist/util/getLatestMessage.js.map +1 -0
- package/dist/util/index.d.ts +2 -2
- package/dist/util/index.js +3 -3
- package/dist/util/index.js.map +1 -1
- package/package.json +3 -2
package/dist/API.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface ConstructApiParams {
|
|
|
9
9
|
getChatAblyTokenRoute: () => string;
|
|
10
10
|
getChatStoreMessageRoute: (chatId: number) => string;
|
|
11
11
|
getChatForAppointmentRoute: (appointmentId: number) => string;
|
|
12
|
-
|
|
12
|
+
markChatMessagesReadUpToRoute: (chatId: number, messageId: number) => string;
|
|
13
13
|
}
|
|
14
14
|
export declare type GetAblyTokenReturnValue = {
|
|
15
15
|
token: Record<any, any>;
|
|
@@ -46,13 +46,13 @@ export default class API {
|
|
|
46
46
|
private getChatAblyTokenRoute;
|
|
47
47
|
private getChatStoreMessageRoute;
|
|
48
48
|
private getChatForAppointmentRoute;
|
|
49
|
-
private
|
|
49
|
+
private markChatMessagesReadUpToRoute;
|
|
50
50
|
constructor(params: ConstructApiParams);
|
|
51
51
|
getAblyToken: (chats: number[]) => Promise<GetAblyTokenReturnValue>;
|
|
52
52
|
storeMessage: (chatId: number, message: string, options?: SendMessageOptions) => Promise<StoreMessageReturnValue>;
|
|
53
53
|
getLatestMessages: (chatId: number) => Promise<GetLatestMessagesReturnValue>;
|
|
54
54
|
getChatIdFromAppointmentId: (appointmentId: number) => Promise<GetChatIdFromAppointmentIdReturnValue>;
|
|
55
|
-
|
|
55
|
+
markChatMessagesReadUpTo: (chatId: number, message: Message) => Promise<{
|
|
56
56
|
error: ChatError | undefined;
|
|
57
57
|
}>;
|
|
58
58
|
private constructHeaders;
|
package/dist/API.js
CHANGED
|
@@ -91,8 +91,8 @@ class API {
|
|
|
91
91
|
resolve({ error: { code: 'error' } });
|
|
92
92
|
});
|
|
93
93
|
});
|
|
94
|
-
this.
|
|
95
|
-
this.axios.post(this.
|
|
94
|
+
this.markChatMessagesReadUpTo = (chatId, message) => new Promise((resolve, reject) => {
|
|
95
|
+
this.axios.post(this.markChatMessagesReadUpToRoute(chatId, message.id), undefined, {
|
|
96
96
|
headers: this.constructHeaders(),
|
|
97
97
|
}).then(response => {
|
|
98
98
|
resolve({ error: undefined });
|
|
@@ -116,7 +116,7 @@ class API {
|
|
|
116
116
|
this.getChatAblyTokenRoute = params.getChatAblyTokenRoute;
|
|
117
117
|
this.getChatStoreMessageRoute = params.getChatStoreMessageRoute;
|
|
118
118
|
this.getChatForAppointmentRoute = params.getChatForAppointmentRoute;
|
|
119
|
-
this.
|
|
119
|
+
this.markChatMessagesReadUpToRoute = params.markChatMessagesReadUpToRoute;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
exports.default = API;
|
package/dist/CachedChat.js
CHANGED
|
@@ -95,7 +95,7 @@ class CachedChat {
|
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
markMessagesReadUpTo(message) {
|
|
98
|
-
return this.api.
|
|
98
|
+
return this.api.markChatMessagesReadUpTo(this.id, message);
|
|
99
99
|
}
|
|
100
100
|
addMessage(message) {
|
|
101
101
|
if (message instanceof PendingMessage_1.default) {
|
package/dist/Chat.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface ChatOptions {
|
|
|
11
11
|
getChatAblyTokenRoute: ConstructApiParams['getChatAblyTokenRoute'];
|
|
12
12
|
getChatStoreMessageRoute: ConstructApiParams['getChatStoreMessageRoute'];
|
|
13
13
|
getChatForAppointmentRoute: ConstructApiParams['getChatForAppointmentRoute'];
|
|
14
|
-
|
|
14
|
+
markChatMessagesReadUpToRoute: ConstructApiParams['markChatMessagesReadUpToRoute'];
|
|
15
15
|
}
|
|
16
16
|
export declare type ConnectionStatus = 'initialized' | 'connecting' | 'connected' | 'disconnected' | 'suspended' | 'closing' | 'closed' | 'failed';
|
|
17
17
|
declare const Chat: {
|
package/dist/Chat.js
CHANGED
|
@@ -49,7 +49,7 @@ const Chat = (function () {
|
|
|
49
49
|
let getChatAblyTokenRoute;
|
|
50
50
|
let getChatStoreMessageRoute;
|
|
51
51
|
let getChatForAppointmentRoute;
|
|
52
|
-
let
|
|
52
|
+
let markChatMessagesReadUpToRoute;
|
|
53
53
|
let api;
|
|
54
54
|
let logger;
|
|
55
55
|
let ably;
|
|
@@ -67,7 +67,7 @@ const Chat = (function () {
|
|
|
67
67
|
getChatAblyTokenRoute = options.getChatAblyTokenRoute;
|
|
68
68
|
getChatStoreMessageRoute = options.getChatStoreMessageRoute;
|
|
69
69
|
getChatForAppointmentRoute = options.getChatForAppointmentRoute;
|
|
70
|
-
|
|
70
|
+
markChatMessagesReadUpToRoute = options.markChatMessagesReadUpToRoute;
|
|
71
71
|
api = makeApi();
|
|
72
72
|
logger = options.logger || new logger_1.ConsoleLogger;
|
|
73
73
|
ably = new Ably.Realtime({
|
|
@@ -170,7 +170,7 @@ const Chat = (function () {
|
|
|
170
170
|
getChatAblyTokenRoute,
|
|
171
171
|
getChatStoreMessageRoute,
|
|
172
172
|
getChatForAppointmentRoute,
|
|
173
|
-
|
|
173
|
+
markChatMessagesReadUpToRoute
|
|
174
174
|
});
|
|
175
175
|
const logout = () => {
|
|
176
176
|
setJwtToken(undefined);
|
package/dist/PendingMessage.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import Message from "./Message";
|
|
2
|
+
export declare type PendingMessageStatus = 'pending' | 'failed';
|
|
1
3
|
export default class PendingMessage {
|
|
2
4
|
readonly id: string;
|
|
3
5
|
readonly message: string;
|
|
@@ -11,4 +13,4 @@ export default class PendingMessage {
|
|
|
11
13
|
});
|
|
12
14
|
get isPendingMessage(): boolean;
|
|
13
15
|
}
|
|
14
|
-
export declare
|
|
16
|
+
export declare const isPendingMessage: (message: Message | PendingMessage) => message is PendingMessage;
|
package/dist/PendingMessage.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPendingMessage = void 0;
|
|
3
4
|
class PendingMessage {
|
|
4
5
|
constructor({ id, message, status, createdAt }) {
|
|
5
6
|
this.id = id;
|
|
@@ -12,4 +13,8 @@ class PendingMessage {
|
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
exports.default = PendingMessage;
|
|
16
|
+
const isPendingMessage = (message) => {
|
|
17
|
+
return message.isPendingMessage;
|
|
18
|
+
};
|
|
19
|
+
exports.isPendingMessage = isPendingMessage;
|
|
15
20
|
//# sourceMappingURL=PendingMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingMessage.js","sourceRoot":"","sources":["../src/PendingMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PendingMessage.js","sourceRoot":"","sources":["../src/PendingMessage.ts"],"names":[],"mappings":";;;AASA,MAAqB,cAAc;IAM/B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAkF;QAC1H,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAhBD,iCAgBC;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAA+B,EAA6B,EAAE;IAC3F,OAAO,OAAO,CAAC,gBAAgB,CAAC;AACpC,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import Chat from "./Chat";
|
|
|
2
2
|
import useChat from "./react/useChat";
|
|
3
3
|
import useAppointmentChat from "./react/useAppointmentChat";
|
|
4
4
|
export { ConsoleLogger, RollbarLogger, NullLogger } from './logger';
|
|
5
|
-
export { Message, MessageRow, AdminMessage, ConnectionAndChannelStatusLabel } from './react';
|
|
6
|
-
export {
|
|
5
|
+
export { Message, MessageRow, MessageList, AdminMessage, ConnectionAndChannelStatusLabel } from './react';
|
|
6
|
+
export { getLatestMessage } from './util';
|
|
7
7
|
export { Chat, useChat, useAppointmentChat };
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useAppointmentChat = exports.useChat = exports.Chat = exports.
|
|
6
|
+
exports.useAppointmentChat = exports.useChat = exports.Chat = exports.getLatestMessage = exports.ConnectionAndChannelStatusLabel = exports.AdminMessage = exports.MessageList = exports.MessageRow = exports.Message = exports.NullLogger = exports.RollbarLogger = exports.ConsoleLogger = void 0;
|
|
7
7
|
const Chat_1 = __importDefault(require("./Chat"));
|
|
8
8
|
exports.Chat = Chat_1.default;
|
|
9
9
|
const useChat_1 = __importDefault(require("./react/useChat"));
|
|
@@ -17,8 +17,9 @@ Object.defineProperty(exports, "NullLogger", { enumerable: true, get: function (
|
|
|
17
17
|
var react_1 = require("./react");
|
|
18
18
|
Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return react_1.Message; } });
|
|
19
19
|
Object.defineProperty(exports, "MessageRow", { enumerable: true, get: function () { return react_1.MessageRow; } });
|
|
20
|
+
Object.defineProperty(exports, "MessageList", { enumerable: true, get: function () { return react_1.MessageList; } });
|
|
20
21
|
Object.defineProperty(exports, "AdminMessage", { enumerable: true, get: function () { return react_1.AdminMessage; } });
|
|
21
22
|
Object.defineProperty(exports, "ConnectionAndChannelStatusLabel", { enumerable: true, get: function () { return react_1.ConnectionAndChannelStatusLabel; } });
|
|
22
23
|
var util_1 = require("./util");
|
|
23
|
-
Object.defineProperty(exports, "
|
|
24
|
+
Object.defineProperty(exports, "getLatestMessage", { enumerable: true, get: function () { return util_1.getLatestMessage; } });
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;AACb,kDAA0B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;AACb,kDAA0B;AAuBtB,eAvBG,cAAI,CAuBH;AAtBR,8DAAsC;AAuBlC,kBAvBG,iBAAO,CAuBH;AAtBX,oFAA4D;AAuBxD,6BAvBG,4BAAkB,CAuBH;AArBtB,mCAIkB;AAHd,uGAAA,aAAa,OAAA;AACb,uGAAA,aAAa,OAAA;AACb,oGAAA,UAAU,OAAA;AAGd,iCAMiB;AALb,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AACZ,wHAAA,+BAA+B,OAAA;AAGnC,+BAEgB;AADZ,wGAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import ChatError from '../../ChatError';
|
|
4
|
+
import MessageModel from '../../Message';
|
|
5
|
+
import { GetLatestMessagesStatus, Messages } from '../../CachedChat';
|
|
6
|
+
export interface MessageListProps {
|
|
7
|
+
messages: Messages;
|
|
8
|
+
currentUserId: number;
|
|
9
|
+
messagesScrollContainerId: string;
|
|
10
|
+
getLatestMessagesStatus: GetLatestMessagesStatus;
|
|
11
|
+
markMessagesReadUpTo(message: MessageModel): Promise<{
|
|
12
|
+
error: ChatError | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
shouldMarkMessagesAsRead: boolean;
|
|
15
|
+
loadingContent: React.ReactNode;
|
|
16
|
+
retryContent: React.ReactNode;
|
|
17
|
+
messagesContainerClassName?: string;
|
|
18
|
+
onRequestScrollToBottomOfMessagesScrollContainer: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare const MessageList: {
|
|
21
|
+
({ messages, currentUserId, messagesScrollContainerId, getLatestMessagesStatus, markMessagesReadUpTo, shouldMarkMessagesAsRead, loadingContent, retryContent, messagesContainerClassName, onRequestScrollToBottomOfMessagesScrollContainer }: MessageListProps): React.ReactNode;
|
|
22
|
+
propTypes: {
|
|
23
|
+
messages: PropTypes.Validator<(object | null | undefined)[]>;
|
|
24
|
+
currentUserId: PropTypes.Validator<number>;
|
|
25
|
+
messagesScrollContainerId: PropTypes.Validator<string>;
|
|
26
|
+
getLatestMessagesStatus: PropTypes.Requireable<string>;
|
|
27
|
+
markMessagesReadUpTo: PropTypes.Validator<(...args: any[]) => any>;
|
|
28
|
+
shouldMarkMessagesAsRead: PropTypes.Validator<boolean>;
|
|
29
|
+
loadingContent: PropTypes.Validator<string | number | boolean | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
|
|
30
|
+
retryContent: PropTypes.Validator<string | number | boolean | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
|
|
31
|
+
messagesContainerClassName: PropTypes.Requireable<string>;
|
|
32
|
+
onRequestScrollToBottomOfMessagesScrollContainer: PropTypes.Validator<(...args: any[]) => any>;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.MessageList = void 0;
|
|
30
|
+
const React = __importStar(require("react"));
|
|
31
|
+
const prop_types_1 = __importDefault(require("prop-types"));
|
|
32
|
+
const MessageRow_1 = require("./MessageRow");
|
|
33
|
+
const AdminMessage_1 = require("./AdminMessage");
|
|
34
|
+
const Message_1 = require("./Message");
|
|
35
|
+
const PendingMessage_1 = require("../../PendingMessage");
|
|
36
|
+
const util_1 = require("../../util");
|
|
37
|
+
const MessageList = ({ messages, currentUserId, messagesScrollContainerId, getLatestMessagesStatus, markMessagesReadUpTo, shouldMarkMessagesAsRead, loadingContent, retryContent, messagesContainerClassName, onRequestScrollToBottomOfMessagesScrollContainer }) => {
|
|
38
|
+
const [lastMessageMarkedAsReadUpTo, setLastMessageMarkedAsReadUpTo] = React.useState();
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
if (getLatestMessagesStatus === 'success') {
|
|
41
|
+
onRequestScrollToBottomOfMessagesScrollContainer();
|
|
42
|
+
}
|
|
43
|
+
}, [messages, getLatestMessagesStatus]);
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
if (!messages.length || !shouldMarkMessagesAsRead) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let latestMessage = (0, util_1.getLatestMessage)(messages);
|
|
49
|
+
if ((0, util_1.isNil)(latestMessage)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (((0, util_1.isNil)(lastMessageMarkedAsReadUpTo) || lastMessageMarkedAsReadUpTo < latestMessage.id)) {
|
|
53
|
+
markMessagesReadUpTo(latestMessage).then(result => {
|
|
54
|
+
if (!result.error) {
|
|
55
|
+
setLastMessageMarkedAsReadUpTo(latestMessage === null || latestMessage === void 0 ? void 0 : latestMessage.id);
|
|
56
|
+
}
|
|
57
|
+
}).catch(() => {
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}, [messages, shouldMarkMessagesAsRead]);
|
|
61
|
+
if (getLatestMessagesStatus === 'failed') {
|
|
62
|
+
return retryContent;
|
|
63
|
+
}
|
|
64
|
+
else if (!getLatestMessagesStatus
|
|
65
|
+
|| getLatestMessagesStatus === 'initialized'
|
|
66
|
+
|| getLatestMessagesStatus === 'fetching'
|
|
67
|
+
|| getLatestMessagesStatus !== 'success') {
|
|
68
|
+
return loadingContent;
|
|
69
|
+
}
|
|
70
|
+
return (React.createElement("div", { id: messagesScrollContainerId, className: messagesContainerClassName, style: { maxHeight: '500px', overflowY: 'auto' } }, messages.map(message => {
|
|
71
|
+
if ((0, PendingMessage_1.isPendingMessage)(message) || (!(0, PendingMessage_1.isPendingMessage)(message) && message.senderId === currentUserId)) {
|
|
72
|
+
return (React.createElement(MessageRow_1.MessageRow, { key: message.id, isCurrentUser: true },
|
|
73
|
+
React.createElement(Message_1.Message, { message: message, isCurrentUser: true })));
|
|
74
|
+
}
|
|
75
|
+
else if (message.isAdminMessage) {
|
|
76
|
+
return (React.createElement(MessageRow_1.MessageRow, { key: message.id, isCurrentUser: false },
|
|
77
|
+
React.createElement(AdminMessage_1.AdminMessage, { message: message })));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
return (React.createElement(MessageRow_1.MessageRow, { key: message.id, isCurrentUser: false },
|
|
81
|
+
React.createElement(Message_1.Message, { message: message, isCurrentUser: false })));
|
|
82
|
+
}
|
|
83
|
+
})));
|
|
84
|
+
};
|
|
85
|
+
exports.MessageList = MessageList;
|
|
86
|
+
exports.MessageList.propTypes = {
|
|
87
|
+
messages: prop_types_1.default.arrayOf(prop_types_1.default.object).isRequired,
|
|
88
|
+
currentUserId: prop_types_1.default.number.isRequired,
|
|
89
|
+
messagesScrollContainerId: prop_types_1.default.string.isRequired,
|
|
90
|
+
getLatestMessagesStatus: prop_types_1.default.oneOf(['initialized', 'fetching', 'success', 'failed']),
|
|
91
|
+
markMessagesReadUpTo: prop_types_1.default.func.isRequired,
|
|
92
|
+
shouldMarkMessagesAsRead: prop_types_1.default.bool.isRequired,
|
|
93
|
+
loadingContent: prop_types_1.default.node.isRequired,
|
|
94
|
+
retryContent: prop_types_1.default.node.isRequired,
|
|
95
|
+
messagesContainerClassName: prop_types_1.default.string,
|
|
96
|
+
onRequestScrollToBottomOfMessagesScrollContainer: prop_types_1.default.func.isRequired
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=MessageList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../src/react/components/MessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Message } from './Message';
|
|
2
2
|
import { MessageRow } from './MessageRow';
|
|
3
|
+
import { MessageList } from './MessageList';
|
|
3
4
|
import { AdminMessage } from "./AdminMessage";
|
|
4
5
|
import { ConnectionAndChannelStatusLabel } from "./ConnectionAndChannelStatusLabel";
|
|
5
|
-
export { Message, MessageRow, AdminMessage, ConnectionAndChannelStatusLabel };
|
|
6
|
+
export { Message, MessageRow, MessageList, AdminMessage, ConnectionAndChannelStatusLabel };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConnectionAndChannelStatusLabel = exports.AdminMessage = exports.MessageRow = exports.Message = void 0;
|
|
3
|
+
exports.ConnectionAndChannelStatusLabel = exports.AdminMessage = exports.MessageList = exports.MessageRow = exports.Message = void 0;
|
|
4
4
|
const Message_1 = require("./Message");
|
|
5
5
|
Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return Message_1.Message; } });
|
|
6
6
|
const MessageRow_1 = require("./MessageRow");
|
|
7
7
|
Object.defineProperty(exports, "MessageRow", { enumerable: true, get: function () { return MessageRow_1.MessageRow; } });
|
|
8
|
+
const MessageList_1 = require("./MessageList");
|
|
9
|
+
Object.defineProperty(exports, "MessageList", { enumerable: true, get: function () { return MessageList_1.MessageList; } });
|
|
8
10
|
const AdminMessage_1 = require("./AdminMessage");
|
|
9
11
|
Object.defineProperty(exports, "AdminMessage", { enumerable: true, get: function () { return AdminMessage_1.AdminMessage; } });
|
|
10
12
|
const ConnectionAndChannelStatusLabel_1 = require("./ConnectionAndChannelStatusLabel");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAOhC,wFAPK,iBAAO,OAOL;AANX,6CAA0C;AAOtC,2FAPK,uBAAU,OAOL;AANd,+CAA4C;AAOxC,4FAPK,yBAAW,OAOL;AANf,iDAA8C;AAO1C,6FAPK,2BAAY,OAOL;AANhB,uFAAoF;AAOhF,gHAPK,iEAA+B,OAOL"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as useChat } from './useChat';
|
|
2
2
|
export { default as useAppointmentChat } from './useAppointmentChat';
|
|
3
|
-
export { Message, MessageRow, AdminMessage, ConnectionAndChannelStatusLabel } from './components';
|
|
3
|
+
export { Message, MessageRow, MessageList, AdminMessage, ConnectionAndChannelStatusLabel } from './components';
|
package/dist/react/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ConnectionAndChannelStatusLabel = exports.AdminMessage = exports.MessageRow = exports.Message = exports.useAppointmentChat = exports.useChat = void 0;
|
|
6
|
+
exports.ConnectionAndChannelStatusLabel = exports.AdminMessage = exports.MessageList = exports.MessageRow = exports.Message = exports.useAppointmentChat = exports.useChat = void 0;
|
|
7
7
|
var useChat_1 = require("./useChat");
|
|
8
8
|
Object.defineProperty(exports, "useChat", { enumerable: true, get: function () { return __importDefault(useChat_1).default; } });
|
|
9
9
|
var useAppointmentChat_1 = require("./useAppointmentChat");
|
|
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "useAppointmentChat", { enumerable: true, get: fu
|
|
|
11
11
|
var components_1 = require("./components");
|
|
12
12
|
Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return components_1.Message; } });
|
|
13
13
|
Object.defineProperty(exports, "MessageRow", { enumerable: true, get: function () { return components_1.MessageRow; } });
|
|
14
|
+
Object.defineProperty(exports, "MessageList", { enumerable: true, get: function () { return components_1.MessageList; } });
|
|
14
15
|
Object.defineProperty(exports, "AdminMessage", { enumerable: true, get: function () { return components_1.AdminMessage; } });
|
|
15
16
|
Object.defineProperty(exports, "ConnectionAndChannelStatusLabel", { enumerable: true, get: function () { return components_1.ConnectionAndChannelStatusLabel; } });
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+C;AAAtC,mHAAA,OAAO,OAAW;AAC3B,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAEtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+C;AAAtC,mHAAA,OAAO,OAAW;AAC3B,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAEtC,2CAMsB;AALlB,qGAAA,OAAO,OAAA;AACP,wGAAA,UAAU,OAAA;AACV,yGAAA,WAAW,OAAA;AACX,0GAAA,YAAY,OAAA;AACZ,6HAAA,+BAA+B,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLatestMessage = void 0;
|
|
4
|
+
const Message_1 = require("../Message");
|
|
5
|
+
const isNil_1 = require("./isNil");
|
|
6
|
+
const getLatestMessage = (messages) => {
|
|
7
|
+
let latestMessage;
|
|
8
|
+
for (let i = 0, il = messages.length; i < il; i++) {
|
|
9
|
+
(0, Message_1.isMessageThen)(messages[i], message => {
|
|
10
|
+
if ((0, isNil_1.isNil)(latestMessage) || latestMessage.id < message.id) {
|
|
11
|
+
latestMessage = message;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return latestMessage;
|
|
16
|
+
};
|
|
17
|
+
exports.getLatestMessage = getLatestMessage;
|
|
18
|
+
//# sourceMappingURL=getLatestMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLatestMessage.js","sourceRoot":"","sources":["../../src/util/getLatestMessage.ts"],"names":[],"mappings":";;;AAAA,wCAAoD;AAEpD,mCAAgC;AAEzB,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAqB,EAAE;IACxF,IAAI,aAAgC,CAAC;IAErC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,EAAE,GAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE;QACrC,IAAA,uBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YACjC,IAAI,IAAA,aAAK,EAAC,aAAa,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE;gBACvD,aAAa,GAAG,OAAO,CAAC;aAC3B;QACL,CAAC,CAAC,CAAC;KACN;IAED,OAAO,aAAa,CAAC;AACzB,CAAC,CAAA;AAZY,QAAA,gBAAgB,oBAY5B"}
|
package/dist/util/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { isNil } from "./isNil";
|
|
2
2
|
import { groupMessages } from "./groupMessages";
|
|
3
|
-
import {
|
|
4
|
-
export { isNil, groupMessages,
|
|
3
|
+
import { getLatestMessage } from "./getLatestMessage";
|
|
4
|
+
export { isNil, groupMessages, getLatestMessage };
|
package/dist/util/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getLatestMessage = exports.groupMessages = exports.isNil = void 0;
|
|
4
4
|
const isNil_1 = require("./isNil");
|
|
5
5
|
Object.defineProperty(exports, "isNil", { enumerable: true, get: function () { return isNil_1.isNil; } });
|
|
6
6
|
const groupMessages_1 = require("./groupMessages");
|
|
7
7
|
Object.defineProperty(exports, "groupMessages", { enumerable: true, get: function () { return groupMessages_1.groupMessages; } });
|
|
8
|
-
const
|
|
9
|
-
Object.defineProperty(exports, "
|
|
8
|
+
const getLatestMessage_1 = require("./getLatestMessage");
|
|
9
|
+
Object.defineProperty(exports, "getLatestMessage", { enumerable: true, get: function () { return getLatestMessage_1.getLatestMessage; } });
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAK5B,sFALK,aAAK,OAKL;AAJT,mDAAgD;AAK5C,8FALK,6BAAa,OAKL;AAJjB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAK5B,sFALK,aAAK,OAKL;AAJT,mDAAgD;AAK5C,8FALK,6BAAa,OAKL;AAJjB,yDAAsD;AAKlD,iGALK,mCAAgB,OAKL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viewberapp/chat",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.81",
|
|
4
4
|
"description": "Viewber chat",
|
|
5
5
|
"author": "Jacob <jacob.chen@viewber.co.uk>",
|
|
6
6
|
"homepage": "https://bitbucket.org/ezadr/viewberjs#readme",
|
|
@@ -38,8 +38,9 @@
|
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"ably": "^1.2.29",
|
|
40
40
|
"axios": "^0.21.1",
|
|
41
|
+
"prop-types": "^15.7.2",
|
|
41
42
|
"react": "^16.14.0",
|
|
42
43
|
"rollbar": "^2.25.0"
|
|
43
44
|
},
|
|
44
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "a3d579706cf406084cc849968cce6af19170ae35"
|
|
45
46
|
}
|