@messenger-box/tailwind-ui-inbox 10.0.3-alpha.69 → 10.0.3-alpha.70
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/CHANGELOG.md +4 -0
- package/lib/components/InboxMessage/Messages.d.ts.map +1 -1
- package/lib/components/InboxMessage/Messages.js +48 -13
- package/lib/components/InboxMessage/Messages.js.map +1 -1
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts +12 -0
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts.map +1 -0
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js +134 -0
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js.map +1 -0
- package/lib/components/InboxMessage/message-widgets/index.d.ts +1 -0
- package/lib/components/InboxMessage/message-widgets/index.d.ts.map +1 -1
- package/lib/components/slot-fill/chat-message-filler.js +1 -1
- package/lib/components/slot-fill/chat-message-filler.js.map +1 -1
- package/lib/container/Inbox.d.ts.map +1 -1
- package/lib/container/Inbox.js +140 -33
- package/lib/container/Inbox.js.map +1 -1
- package/lib/index.js +1 -1
- package/package.json +2 -2
- package/src/components/InboxMessage/Messages.tsx +48 -11
- package/src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx +208 -0
- package/src/components/InboxMessage/message-widgets/index.ts +1 -0
- package/src/container/Inbox.tsx +141 -31
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [10.0.3-alpha.70](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.69...v10.0.3-alpha.70) (2025-08-12)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @messenger-box/tailwind-ui-inbox
|
|
9
|
+
|
|
6
10
|
## [10.0.3-alpha.69](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.68...v10.0.3-alpha.69) (2025-08-11)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @messenger-box/tailwind-ui-inbox
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Messages.d.ts","sourceRoot":"","sources":["../../../src/components/InboxMessage/Messages.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Messages.d.ts","sourceRoot":"","sources":["../../../src/components/InboxMessage/Messages.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,UAAU,aAAa;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,GAAG,CAAC;IACnC,6BAA6B,CAAC,EAAE,MAAM,GAAG,CAAC;IAC1C,cAAc,EAAE,CAAC,GAAG,KAAA,KAAK,IAAI,CAAC;CACjC;AAED,eAAO,MAAM,QAAQ,mJASlB,aAAa,sBA6Gf,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isToday,isYesterday,format}from'date-fns';import React__default,{useState,useEffect,useRef,useMemo}from'react';import {useTranslation}from'react-i18next';import {UserModalContent}from'./UserModalContent.js';import {
|
|
1
|
+
import {isToday,isYesterday,format}from'date-fns';import React__default,{useState,useEffect,useRef,useMemo}from'react';import {useTranslation}from'react-i18next';import {UserModalContent}from'./UserModalContent.js';import {SlackLikeMessageGroup}from'./message-widgets/SlackLikeMessageGroup.js';const Messages = ({
|
|
2
2
|
currentUser,
|
|
3
3
|
channelMessages,
|
|
4
4
|
refetchMessages,
|
|
@@ -35,7 +35,7 @@ import {isToday,isYesterday,format}from'date-fns';import React__default,{useStat
|
|
|
35
35
|
React__default.useEffect(() => {
|
|
36
36
|
if (channelMessages?.length) ;
|
|
37
37
|
}, [channelMessages]);
|
|
38
|
-
const
|
|
38
|
+
const messageListWithDates = useMemo(() => {
|
|
39
39
|
let currentDate = '';
|
|
40
40
|
let res = [];
|
|
41
41
|
channelMessages?.map(msg => {
|
|
@@ -43,26 +43,61 @@ import {isToday,isYesterday,format}from'date-fns';import React__default,{useStat
|
|
|
43
43
|
let msgDate;
|
|
44
44
|
if (isToday(date)) msgDate = t('tailwind_ui_inbox.today');else if (isYesterday(date)) msgDate = t('tailwind_ui_inbox.yesterday');else msgDate = format(new Date(msg.createdAt), 'eee, do MMMM');
|
|
45
45
|
if (msgDate !== currentDate) {
|
|
46
|
-
res.push(
|
|
46
|
+
res.push({
|
|
47
|
+
type: 'date',
|
|
48
|
+
content: msgDate
|
|
49
|
+
});
|
|
47
50
|
currentDate = msgDate;
|
|
48
51
|
}
|
|
49
52
|
res.push(msg);
|
|
50
53
|
});
|
|
51
54
|
return res;
|
|
52
55
|
}, [channelMessages]);
|
|
56
|
+
// Group messages by date sections for Slack-like rendering
|
|
57
|
+
const messagesByDate = useMemo(() => {
|
|
58
|
+
const sections = [];
|
|
59
|
+
let currentSection = {
|
|
60
|
+
date: null,
|
|
61
|
+
messages: []
|
|
62
|
+
};
|
|
63
|
+
messageListWithDates.forEach(item => {
|
|
64
|
+
if (item?.type === 'date') {
|
|
65
|
+
if (currentSection.messages.length > 0) {
|
|
66
|
+
sections.push(currentSection);
|
|
67
|
+
}
|
|
68
|
+
currentSection = {
|
|
69
|
+
date: item.content,
|
|
70
|
+
messages: []
|
|
71
|
+
};
|
|
72
|
+
} else {
|
|
73
|
+
currentSection.messages.push(item);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
if (currentSection.messages.length > 0) {
|
|
77
|
+
sections.push(currentSection);
|
|
78
|
+
}
|
|
79
|
+
return sections;
|
|
80
|
+
}, [messageListWithDates]);
|
|
53
81
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
54
82
|
className: "w-full",
|
|
55
83
|
ref: innerRef
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
})
|
|
84
|
+
}, messagesByDate?.map((section, sectionIndex) => React__default.createElement("div", {
|
|
85
|
+
key: `section-${sectionIndex}`,
|
|
86
|
+
className: sectionIndex === messagesByDate.length - 1 ? '' : 'mb-4'
|
|
87
|
+
}, section.date && React__default.createElement("div", {
|
|
88
|
+
className: "flex items-center justify-center my-4"
|
|
89
|
+
}, React__default.createElement("div", {
|
|
90
|
+
className: "flex-grow border-t border-gray-200"
|
|
91
|
+
}), React__default.createElement("div", {
|
|
92
|
+
className: "mx-4 px-3 py-1 bg-white border border-gray-200 rounded-full text-xs font-medium text-gray-600"
|
|
93
|
+
}, section.date), React__default.createElement("div", {
|
|
94
|
+
className: "flex-grow border-t border-gray-200"
|
|
95
|
+
})), React__default.createElement(SlackLikeMessageGroup, {
|
|
96
|
+
messages: section.messages,
|
|
97
|
+
currentUser: currentUser,
|
|
98
|
+
onOpen: onOpen,
|
|
99
|
+
onMessageClick: onMessageClick
|
|
100
|
+
})))), React__default.createElement(ChatModal, {
|
|
66
101
|
element: selectedElement,
|
|
67
102
|
isOpen: isOpen,
|
|
68
103
|
onClose: onClose
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Messages.js","sources":["../../../src/components/InboxMessage/Messages.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Messages.js","sources":["../../../src/components/InboxMessage/Messages.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IAuthUser, IPost } from 'common';
|
|
3
|
+
interface SlackLikeMessageGroupProps {
|
|
4
|
+
messages: IPost[];
|
|
5
|
+
currentUser: IAuthUser;
|
|
6
|
+
onOpen: (element?: any) => void;
|
|
7
|
+
onMessageClick: (msg: IPost) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const groupMessagesByUserAndTime: (messages: IPost[], timeThresholdMinutes?: number) => IPost[][];
|
|
10
|
+
export declare const SlackLikeMessageGroup: React.FC<SlackLikeMessageGroupProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=SlackLikeMessageGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackLikeMessageGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG1C,UAAU,0BAA0B;IAChC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAWD,eAAO,MAAM,0BAA0B,aAAc,KAAK,EAAE,oCAA6B,KAAK,EAAE,EAgC/F,CAAC;AA6HF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA6BtE,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import React__default from'react';import {format,differenceInMinutes}from'date-fns';import {FilesList}from'../../inbox/FilesList.js';import'../../inbox/MessageItem.js';import'../../inbox/ThreadItem.js';// Utility function to group messages by user and time
|
|
2
|
+
const groupMessagesByUserAndTime = (messages, timeThresholdMinutes = 5) => {
|
|
3
|
+
if (!messages || messages.length === 0) return [];
|
|
4
|
+
const groups = [];
|
|
5
|
+
let currentGroup = [];
|
|
6
|
+
let lastMessage = null;
|
|
7
|
+
for (const message of messages) {
|
|
8
|
+
if (typeof message === 'string') continue; // Skip date separators
|
|
9
|
+
const shouldStartNewGroup = !lastMessage || lastMessage.author?.id !== message.author?.id || differenceInMinutes(new Date(message.createdAt), new Date(lastMessage.createdAt)) > timeThresholdMinutes;
|
|
10
|
+
if (shouldStartNewGroup) {
|
|
11
|
+
if (currentGroup.length > 0) {
|
|
12
|
+
groups.push(currentGroup);
|
|
13
|
+
}
|
|
14
|
+
currentGroup = [message];
|
|
15
|
+
} else {
|
|
16
|
+
currentGroup.push(message);
|
|
17
|
+
}
|
|
18
|
+
lastMessage = message;
|
|
19
|
+
}
|
|
20
|
+
if (currentGroup.length > 0) {
|
|
21
|
+
groups.push(currentGroup);
|
|
22
|
+
}
|
|
23
|
+
return groups;
|
|
24
|
+
};
|
|
25
|
+
const MessageGroup = ({
|
|
26
|
+
author,
|
|
27
|
+
messages,
|
|
28
|
+
currentUser,
|
|
29
|
+
onOpen,
|
|
30
|
+
onMessageClick
|
|
31
|
+
}) => {
|
|
32
|
+
const isOwnMessage = author?.id === currentUser?.id;
|
|
33
|
+
const authorName = author?.givenName && author?.familyName ? `${author.givenName} ${author.familyName}` : author?.username || 'Unknown User';
|
|
34
|
+
const firstMessage = messages[0];
|
|
35
|
+
const formatTime = timestamp => {
|
|
36
|
+
const date = new Date(timestamp);
|
|
37
|
+
return format(date, 'h:mm a');
|
|
38
|
+
};
|
|
39
|
+
return React__default.createElement("div", {
|
|
40
|
+
className: "mb-1 group hover:bg-white hover:bg-opacity-60 -mx-4 px-4 py-1 rounded transition-colors"
|
|
41
|
+
}, React__default.createElement("div", {
|
|
42
|
+
className: "flex items-start space-x-2"
|
|
43
|
+
}, React__default.createElement("div", {
|
|
44
|
+
className: "flex-shrink-0 mt-0.5"
|
|
45
|
+
}, React__default.createElement("img", {
|
|
46
|
+
className: "w-9 h-9 rounded-lg cursor-pointer hover:opacity-80 transition-opacity",
|
|
47
|
+
src: author?.picture || '/default-avatar.svg',
|
|
48
|
+
alt: authorName,
|
|
49
|
+
onClick: () => onOpen(firstMessage),
|
|
50
|
+
onError: e => {
|
|
51
|
+
e.currentTarget.src = '/default-avatar.svg';
|
|
52
|
+
}
|
|
53
|
+
})), React__default.createElement("div", {
|
|
54
|
+
className: "flex-1 min-w-0"
|
|
55
|
+
}, React__default.createElement("div", {
|
|
56
|
+
className: "flex items-center space-x-2 mb-1"
|
|
57
|
+
}, React__default.createElement("span", {
|
|
58
|
+
className: "text-sm font-bold text-gray-900"
|
|
59
|
+
}, authorName), React__default.createElement("span", {
|
|
60
|
+
className: "text-xs text-gray-500"
|
|
61
|
+
}, formatTime(firstMessage.createdAt)), isOwnMessage && React__default.createElement("span", {
|
|
62
|
+
className: "text-xs text-gray-400 italic"
|
|
63
|
+
}, "(you)")), React__default.createElement("div", {
|
|
64
|
+
className: "space-y-1"
|
|
65
|
+
}, messages.map((message, index) => React__default.createElement(MessageBubble, {
|
|
66
|
+
key: message.id,
|
|
67
|
+
message: message,
|
|
68
|
+
isOwnMessage: isOwnMessage,
|
|
69
|
+
isFirstInGroup: index === 0,
|
|
70
|
+
isLastInGroup: index === messages.length - 1,
|
|
71
|
+
showTimestamp: isOwnMessage && index === 0,
|
|
72
|
+
onMessageClick: onMessageClick,
|
|
73
|
+
totalInGroup: messages.length,
|
|
74
|
+
authorName: authorName,
|
|
75
|
+
formatTime: formatTime
|
|
76
|
+
}))))));
|
|
77
|
+
};
|
|
78
|
+
const MessageBubble = ({
|
|
79
|
+
message,
|
|
80
|
+
isOwnMessage,
|
|
81
|
+
isFirstInGroup,
|
|
82
|
+
isLastInGroup,
|
|
83
|
+
showTimestamp,
|
|
84
|
+
onMessageClick,
|
|
85
|
+
totalInGroup,
|
|
86
|
+
authorName,
|
|
87
|
+
formatTime
|
|
88
|
+
}) => {
|
|
89
|
+
const handleClick = () => {
|
|
90
|
+
onMessageClick?.(message);
|
|
91
|
+
};
|
|
92
|
+
// All messages use the same format (Slack style - left aligned)
|
|
93
|
+
return React__default.createElement("div", {
|
|
94
|
+
className: "py-0.5 hover:bg-gray-50 hover:bg-opacity-50 rounded px-1 -mx-1 group"
|
|
95
|
+
}, React__default.createElement("div", {
|
|
96
|
+
className: "text-sm text-gray-900 cursor-pointer hover:bg-gray-100 px-1 rounded",
|
|
97
|
+
onClick: handleClick
|
|
98
|
+
}, React__default.createElement("span", {
|
|
99
|
+
className: "text-xs text-gray-500 opacity-0 group-hover:opacity-100 transition-opacity float-right ml-2"
|
|
100
|
+
}, formatTime(message.createdAt)), message.message && React__default.createElement("span", {
|
|
101
|
+
className: "whitespace-pre-wrap break-words leading-relaxed"
|
|
102
|
+
}, message.message), message.files?.totalCount > 0 && React__default.createElement("div", {
|
|
103
|
+
className: "mt-1 clear-both"
|
|
104
|
+
}, React__default.createElement(FilesList, {
|
|
105
|
+
uploaded: true,
|
|
106
|
+
files: message.files.data
|
|
107
|
+
})), React__default.createElement("div", {
|
|
108
|
+
className: `${navigator.userAgent.includes('Firefox') ? 'mt-1' : ''} clear-both`
|
|
109
|
+
})));
|
|
110
|
+
};
|
|
111
|
+
const SlackLikeMessageGroup = ({
|
|
112
|
+
messages,
|
|
113
|
+
currentUser,
|
|
114
|
+
onOpen,
|
|
115
|
+
onMessageClick
|
|
116
|
+
}) => {
|
|
117
|
+
// Filter out non-message items (like date strings)
|
|
118
|
+
const actualMessages = messages.filter(msg => typeof msg !== 'string');
|
|
119
|
+
// Group messages by user and time
|
|
120
|
+
const messageGroups = groupMessagesByUserAndTime(actualMessages);
|
|
121
|
+
return React__default.createElement("div", {
|
|
122
|
+
className: "space-y-2"
|
|
123
|
+
}, messageGroups.map((group, groupIndex) => {
|
|
124
|
+
const author = group[0]?.author;
|
|
125
|
+
return React__default.createElement(MessageGroup, {
|
|
126
|
+
key: `group-${groupIndex}-${group[0]?.id}`,
|
|
127
|
+
author: author,
|
|
128
|
+
messages: group,
|
|
129
|
+
currentUser: currentUser,
|
|
130
|
+
onOpen: onOpen,
|
|
131
|
+
onMessageClick: onMessageClick
|
|
132
|
+
});
|
|
133
|
+
}));
|
|
134
|
+
};export{SlackLikeMessageGroup,groupMessagesByUserAndTime};//# sourceMappingURL=SlackLikeMessageGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackLikeMessageGroup.js","sources":["../../../../src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/InboxMessage/message-widgets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/InboxMessage/message-widgets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as React from'react';import {ChatMessageFiller}from'./chat-message-slot.js';import {MessageSliceRenderer}from'../InboxMessage/message-widgets/MessageSliceRenderer.js';const ChatMessageFill = () => {
|
|
1
|
+
import*as React from'react';import {ChatMessageFiller}from'./chat-message-slot.js';import {MessageSliceRenderer}from'../InboxMessage/message-widgets/MessageSliceRenderer.js';import'date-fns';import'../inbox/FilesList.js';import'../inbox/MessageItem.js';import'../inbox/ThreadItem.js';const ChatMessageFill = () => {
|
|
2
2
|
return React.createElement(ChatMessageFiller, null, props => React.createElement(MessageSliceRenderer, {
|
|
3
3
|
...props
|
|
4
4
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-message-filler.js","sources":["../../../src/components/slot-fill/chat-message-filler.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-message-filler.js","sources":["../../../src/components/slot-fill/chat-message-filler.tsx"],"sourcesContent":[null],"names":[],"mappings":"4RAIO,MAAM,eAAe,GAAG,MAAK;AAChC,EAAA,OAAA,KAAQ,CAAA,aAAA,CAAA,iBAAA,EAAiB,IAAE,EAAA,SAAQ,KAAG,CAAA,aAAA,CAAA,oBAAqB,EAAA;AAC/D,IAAE,GAAA;AAEF,GAAA,CAAA,CAAA;AACI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inbox.d.ts","sourceRoot":"","sources":["../../src/container/Inbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyE,MAAM,OAAO,CAAC;AAgC9F,MAAM,WAAW,UAAU;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;;YAkFqB,UAAU;;;
|
|
1
|
+
{"version":3,"file":"Inbox.d.ts","sourceRoot":"","sources":["../../src/container/Inbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyE,MAAM,OAAO,CAAC;AAgC9F,MAAM,WAAW,UAAU;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;;YAkFqB,UAAU;;;AAozBhC,wBAAiC"}
|
package/lib/container/Inbox.js
CHANGED
|
@@ -281,13 +281,15 @@ const Inbox = props => {
|
|
|
281
281
|
setBottomDrawer: setBottomDrawer,
|
|
282
282
|
channelName: channelName,
|
|
283
283
|
loaderdata: data
|
|
284
|
-
}) : React__default.createElement(EmptyState, null)), pathChannelId && data?.[1] && !isMobileView &&
|
|
285
|
-
|
|
286
|
-
|
|
284
|
+
}) : React__default.createElement(EmptyState, null)), pathChannelId && data?.[1] && !isMobileView &&
|
|
285
|
+
// <div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
286
|
+
React__default.createElement(RightSidebarWrapper, {
|
|
287
287
|
MessagesLoaderQuery: data?.[1],
|
|
288
288
|
selectedPost: null,
|
|
289
289
|
detailSidebarOptions: detailSidebarOptions
|
|
290
|
-
})
|
|
290
|
+
})
|
|
291
|
+
// </div>
|
|
292
|
+
);
|
|
291
293
|
};
|
|
292
294
|
const ContentComponent = React__default.memo(props => {
|
|
293
295
|
const {
|
|
@@ -401,14 +403,16 @@ const RightSidebarWrapper = React__default.memo(({
|
|
|
401
403
|
return orderBy(uniqBy(messages, 'id'), ['createdAt'], ['asc']);
|
|
402
404
|
}, [data?.messages?.data]);
|
|
403
405
|
if (!sortedMessages.length) return null;
|
|
404
|
-
return
|
|
405
|
-
className
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
406
|
+
return (
|
|
407
|
+
// <div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
408
|
+
React__default.createElement(RightSidebar, {
|
|
409
|
+
channelMessages: sortedMessages,
|
|
410
|
+
visibility: "visible",
|
|
411
|
+
selectedPost: selectedPost,
|
|
412
|
+
...detailSidebarOptions
|
|
413
|
+
})
|
|
414
|
+
// </div>
|
|
415
|
+
);
|
|
412
416
|
});
|
|
413
417
|
const MessagesComponent = React__default.memo(props => {
|
|
414
418
|
const {
|
|
@@ -421,6 +425,9 @@ const MessagesComponent = React__default.memo(props => {
|
|
|
421
425
|
const messageRootListRef = useRef(null);
|
|
422
426
|
const messageListRef = useRef(null);
|
|
423
427
|
useApolloClient();
|
|
428
|
+
const [isLoadingOlder, setIsLoadingOlder] = React__default.useState(false);
|
|
429
|
+
const isLoadingOlderRef = useRef(false);
|
|
430
|
+
const scrollTimeoutRef = useRef(null);
|
|
424
431
|
const auth = useSelector(userSelector);
|
|
425
432
|
const {
|
|
426
433
|
startUpload
|
|
@@ -439,18 +446,24 @@ const MessagesComponent = React__default.memo(props => {
|
|
|
439
446
|
}, [data?.messages?.data]);
|
|
440
447
|
const totalCount = data?.messages?.totalCount || 0;
|
|
441
448
|
const scrollToBottom = useCallback(() => {
|
|
442
|
-
if (
|
|
449
|
+
if (messageRootListRef?.current) {
|
|
443
450
|
messageRootListRef.current.scrollTop = messageRootListRef.current.scrollHeight;
|
|
444
451
|
}
|
|
445
452
|
}, []);
|
|
446
|
-
// Auto-scroll on new messages
|
|
453
|
+
// Auto-scroll on new messages (but not when loading older messages)
|
|
447
454
|
useEffect(() => {
|
|
448
|
-
|
|
449
|
-
|
|
455
|
+
if (!isLoadingOlderRef.current) {
|
|
456
|
+
const timer = setTimeout(() => scrollToBottom(), 100);
|
|
457
|
+
return () => clearTimeout(timer);
|
|
458
|
+
}
|
|
450
459
|
}, [messages.length, scrollToBottom]);
|
|
451
460
|
const onFetchOld = useCallback(async skip => {
|
|
452
|
-
if (channelId && fetchMoreMessages) {
|
|
461
|
+
if (channelId && fetchMoreMessages && !isLoadingOlder) {
|
|
453
462
|
try {
|
|
463
|
+
setIsLoadingOlder(true);
|
|
464
|
+
isLoadingOlderRef.current = true;
|
|
465
|
+
// Capture current scroll height before fetching
|
|
466
|
+
const oldScrollHeight = messageRootListRef?.current?.scrollHeight || 0;
|
|
454
467
|
await fetchMoreMessages({
|
|
455
468
|
variables: {
|
|
456
469
|
channelId: channelId.toString(),
|
|
@@ -472,26 +485,112 @@ const MessagesComponent = React__default.memo(props => {
|
|
|
472
485
|
};
|
|
473
486
|
}
|
|
474
487
|
});
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
488
|
+
// Maintain scroll position after loading older messages
|
|
489
|
+
setTimeout(() => {
|
|
490
|
+
if (messageRootListRef?.current) {
|
|
491
|
+
const newScrollHeight = messageRootListRef.current.scrollHeight;
|
|
492
|
+
const scrollDiff = newScrollHeight - oldScrollHeight;
|
|
493
|
+
// For normal flex layout, maintain position by adjusting scroll offset
|
|
494
|
+
messageRootListRef.current.scrollTop = scrollDiff;
|
|
495
|
+
}
|
|
496
|
+
// Reset the loading flag after position is maintained
|
|
497
|
+
setTimeout(() => {
|
|
498
|
+
isLoadingOlderRef.current = false;
|
|
499
|
+
}, 50);
|
|
500
|
+
}, 100);
|
|
478
501
|
} catch (error) {
|
|
479
502
|
console.error('Error fetching older messages:', error);
|
|
503
|
+
isLoadingOlderRef.current = false;
|
|
504
|
+
} finally {
|
|
505
|
+
setIsLoadingOlder(false);
|
|
480
506
|
}
|
|
481
507
|
}
|
|
482
|
-
}, [channelId, fetchMoreMessages]);
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
508
|
+
}, [channelId, fetchMoreMessages, isLoadingOlder]);
|
|
509
|
+
// Scroll to bottom when channel changes
|
|
510
|
+
useEffect(() => {
|
|
511
|
+
if (channelId && messages.length > 0) {
|
|
512
|
+
isLoadingOlderRef.current = false; // Reset flag on channel change
|
|
513
|
+
const timer = setTimeout(() => scrollToBottom(), 200);
|
|
514
|
+
return () => clearTimeout(timer);
|
|
515
|
+
}
|
|
516
|
+
}, [channelId, scrollToBottom]);
|
|
517
|
+
// Alternative scroll detection for Firefox
|
|
518
|
+
useEffect(() => {
|
|
519
|
+
const element = messageRootListRef.current;
|
|
520
|
+
if (!element) return;
|
|
521
|
+
// Firefox-specific scroll detection using passive listeners
|
|
522
|
+
const handleScrollEnd = () => {
|
|
523
|
+
if (!isLoadingOlder && element) {
|
|
524
|
+
const {
|
|
525
|
+
scrollTop
|
|
526
|
+
} = element;
|
|
527
|
+
const isAtTop = Math.round(scrollTop) <= 30;
|
|
528
|
+
const hasMoreMessages = totalCount > messages.length;
|
|
529
|
+
if (isAtTop && hasMoreMessages) {
|
|
530
|
+
console.log('ScrollEnd triggered load more (Firefox):', {
|
|
531
|
+
scrollTop: Math.round(scrollTop),
|
|
532
|
+
totalCount,
|
|
533
|
+
messagesLength: messages.length
|
|
534
|
+
});
|
|
535
|
+
onFetchOld(messages.length);
|
|
536
|
+
}
|
|
492
537
|
}
|
|
538
|
+
};
|
|
539
|
+
// Use scrollend event if available (modern Firefox/Chrome)
|
|
540
|
+
if ('onscrollend' in element) {
|
|
541
|
+
element.addEventListener('scrollend', handleScrollEnd, {
|
|
542
|
+
passive: true
|
|
543
|
+
});
|
|
544
|
+
return () => {
|
|
545
|
+
element.removeEventListener('scrollend', handleScrollEnd);
|
|
546
|
+
};
|
|
493
547
|
}
|
|
494
|
-
}, [totalCount, messages.length, onFetchOld]);
|
|
548
|
+
}, [totalCount, messages.length, onFetchOld, isLoadingOlder]);
|
|
549
|
+
// Cleanup scroll timeout on unmount
|
|
550
|
+
useEffect(() => {
|
|
551
|
+
return () => {
|
|
552
|
+
if (scrollTimeoutRef.current) {
|
|
553
|
+
clearTimeout(scrollTimeoutRef.current);
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
}, []);
|
|
557
|
+
const onMessagesScroll = useCallback(async e => {
|
|
558
|
+
// Throttle scroll events for better performance, especially in Firefox
|
|
559
|
+
if (scrollTimeoutRef.current) {
|
|
560
|
+
clearTimeout(scrollTimeoutRef.current);
|
|
561
|
+
}
|
|
562
|
+
scrollTimeoutRef.current = setTimeout(async () => {
|
|
563
|
+
if (messageRootListRef.current && !isLoadingOlder) {
|
|
564
|
+
const element = messageRootListRef.current;
|
|
565
|
+
const {
|
|
566
|
+
clientHeight,
|
|
567
|
+
scrollHeight,
|
|
568
|
+
scrollTop
|
|
569
|
+
} = element;
|
|
570
|
+
// Firefox-compatible scroll detection
|
|
571
|
+
// Use Math.ceil to handle Firefox's fractional scrollTop values
|
|
572
|
+
const isAtTop = Math.ceil(scrollTop) <= 25;
|
|
573
|
+
const hasMoreMessages = totalCount > messages.length;
|
|
574
|
+
// Additional Firefox-specific check
|
|
575
|
+
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
576
|
+
const firefoxAdjustedTop = isFirefox ? Math.round(scrollTop) <= 30 : isAtTop;
|
|
577
|
+
if ((isAtTop || firefoxAdjustedTop) && hasMoreMessages) {
|
|
578
|
+
console.log('Triggering load more:', {
|
|
579
|
+
scrollTop: Math.ceil(scrollTop),
|
|
580
|
+
originalScrollTop: scrollTop,
|
|
581
|
+
totalCount,
|
|
582
|
+
messagesLength: messages.length,
|
|
583
|
+
scrollHeight,
|
|
584
|
+
clientHeight,
|
|
585
|
+
browser: isFirefox ? 'Firefox' : 'Other',
|
|
586
|
+
isAtTop,
|
|
587
|
+
firefoxAdjustedTop
|
|
588
|
+
});
|
|
589
|
+
await onFetchOld(messages.length);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}, 100);
|
|
593
|
+
}, [totalCount, messages.length, onFetchOld, isLoadingOlder]);
|
|
495
594
|
// Optimistic message sending with Apollo cache updates
|
|
496
595
|
const handleSend = useCallback(async (message, files = []) => {
|
|
497
596
|
// Allow sending if there's either a message or files
|
|
@@ -668,9 +767,17 @@ const MessagesComponent = React__default.memo(props => {
|
|
|
668
767
|
}
|
|
669
768
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
670
769
|
ref: messageRootListRef,
|
|
671
|
-
className: "flex flex-col
|
|
770
|
+
className: "flex flex-col flex-grow flex-shrink overflow-y-auto p-4 px-4 md:px-8 lg:px-12 bg-gray-50",
|
|
672
771
|
onScroll: onMessagesScroll
|
|
673
|
-
}, messages.length > 0 ? React__default.createElement(React__default.Fragment, null, React__default.createElement(
|
|
772
|
+
}, messages.length > 0 ? React__default.createElement(React__default.Fragment, null, isLoadingOlder && React__default.createElement("div", {
|
|
773
|
+
className: "flex justify-center py-4"
|
|
774
|
+
}, React__default.createElement("div", {
|
|
775
|
+
className: "flex items-center space-x-2 text-gray-500"
|
|
776
|
+
}, React__default.createElement(Spinner, {
|
|
777
|
+
className: "w-4 h-4"
|
|
778
|
+
}), React__default.createElement("span", {
|
|
779
|
+
className: "text-sm"
|
|
780
|
+
}, "Loading older messages..."))), React__default.createElement(Messages, {
|
|
674
781
|
innerRef: messageListRef,
|
|
675
782
|
channelId: channelId,
|
|
676
783
|
currentUser: auth,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inbox.js","sources":["../../src/container/Inbox.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"ysDAsBA,MAAM;AAyBN,EAAsC;AACtC,CAAA,GAAA,MAAmB;AACf;MAES,aAAM,GAAA,KAAA,IAAA;QACX,CAAI,OAAA,EAAA,UAAa,CAAA,GAAgBA,cAAA,CAAA,QAAA,CAAA,KAAA,CAAA;YAAE,MAAO;QAE1C,OAAM,MAAA;UACA,UAAA,GAAA,MAAgB,CAAA,UAAgB,CAAA,KAAA,CAAC;AAEvC,IAAA,MAAA,aAAe,GAAC,MAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA;AAChB,IAAA,aAAA,EAAW;cACJ,CAAA,gBAAgB,CAAC,QAAmB,EAAA,aAAS,CAAA;AACxD,IAAA,OAAS,MAAG,UAAA,CAAA,mBAAA,CAAA,QAAA,EAAA,aAAA,CAAA;AAEZ,GAAA,EAAA,CAAA,KAAO;AACX,EAAE,OAAA,OAAA;AAEF,CAAoB;AACpB;AAEQ,MAAA,OAAA,GAAAA,cAAA,CAAA,IAAA,CAAA,CAAA;AAIR,EAAA,YAAe;AACX,CAAA,KAAAA,cAAW,CAAA,aAAA,CAAA,KAAA,EAAA;AAAE,EAAA,SAAA,EAAA,CAAA,qEAAY,EAAA,SAAA,CAAA;AAEzB,CAAA,EAAAA,cAAA,CAAA,aACI,CAAA,MAAA,EAAA;AACI,EAAA,SAAA,EAAA;eACK,CAAA,CAAA,CAAA;YACD,GAAKA,cAAA,CAAA,IAAA,CAAA,CAAA;AACD,EAAA,MAAA;AACA,EAAA,OAAA;AACI,EAAA,QAAA;AACI,EAAA;;AAa5B,EAAE,IAAC,CAAA,MAAA,EAAA,OAAA,IAAA;AAEH,EAAA,OAAgBA,cAAA,CAAA,aAAa,CAAA,KAAI,EAAG;IAE5B,SAAK,EAAA;mBACI,CAAA,aAAA,CAAA,KAAA,EAAA;aACD,EAAA,yCAAU;WACX,EAAA;AAOf,GAAyB,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AACzB,IAAA;AAII,GAAA,EAAAA,4BAAoB,CAAA,KAAA,EAAQ;aACjB,EAAA;KACVA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AACD,IAAA;AACJ,GAAE,EAAA,KAAA,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AAEF,IAAA,OAAW,EAAA,OAAqB;AAC5B,IAAA,SAAsB,EAAA;AACtB,GAAA,EAAAA,cAAM,CAAE,aAAI,CAAA,KAAe,EAAA;AAC3B,IAAA,SAAc,EAAA,SAAc;AAC5B,IAAA,IAAA,EAAM,MAAY;IAElB,MAAsE,EAAA,cAAA;AACtE,IAAA,OAAO,EAAA;KACDA,cAAA,CAAC,oBAAoB,EAAA;AACvB,IAAA,aAAA,EAAA,OAAA;AACA,IAAA,cAAA,EAAA,OAAmB;AACnB,IAAA,WAAA,EAAA,CAAA;AACH,IAAA,CAAA,EAAE;IAEH,CAAQ,CAAA,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AACR,IAAA;AACA,GAAA,EAAA,SAAU,CAAG,CAAA;;AAGb,MAAA,uCAA+BA,cAAM,CAAC,aAAG,CAAA,KAAA,EAAA;AACzC,EAAA,WACQ;iBAKqD,CAAA,aAAA,CAAA,KAAA,EAAA;AAC7D,EAAA,SAAc,EAAA;iBACV,CAAI,mBAAe,EAAA;AAAyD,EAAA,SAAA,EAAA;iBAErE,CAAA,EAAAA,cAAW,CAAA,aAAa,CAAE,IAAA,EAAA;AACrC,EAAA,SAAgB,EAAA;yBAEiD,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA;AACjE,EAAA,SAAoB,EAAA;8DACM,CAAA,CAAA,CAAA,CAAA;AAC1B;MAEiD,oBAAA,GAAA,CAAA,KAAA,EAAA,MAAA,KAAA;AACjD,EAAA,IAAA,MAAoB,CAAA,IAAA,KAAA,QAAU,EAAA;AAC1B,IAAA,OAAA;SACM,KAAA;AACN,MAAA,GAAA,MAAO,CAAC;AACR,KAAA;AACJ;AAEA,EAAA,OAAA,KAAW;;AAGC,MAAA,KAAA,GAAA;AACA,EAAA,MAAA;AACJ,IAAA,cAAU,EAAE,iBACd;AACN,IAAA,WAAY;IAEZ,eAA+B;IAC/B,IAAmF;IACnF,OAAiC;IACjC,UAAK,GAAA;MACC,KAAA;AAEN,EAAA,MAAA;AACI,IAAA,EAAA,EAAA,aAAa;AAAoB,IAAA,MAAA,EAAA;AAEjC,GAAA,GAAA;AACA,EAAA,MAAA,QAAgB,GAAA,WAAA,EAAA;AAAE,EAAA,MAAA,eAAU,eAAA,EAAA;;AAI5B,EAAA,MAAA,CAAA,kBAAqB,EAAA,eAAkB,CAAA,GAAAA,cAAQ,CAAA,QAAO,CAAC,KAAA,CAAA;2BACpC,eAAe,CAAC,aAAkB,CAAA,oBAAwB,EAAA;AACzE,IAAA,uBAAe,EAAI,KAAG;qBACZ,EAAA;wBACF,EAAA;AAAyB,GAAA,CAAA;AAC7B;oBACH,GAAA,aAAA,CAAA,oBAAA,CAAA;YACD,GAAO,WAAS,CAAA,YAAA,CAAA;;QAGpB,sBAAgB,GAAS,IAAC,GAAA,CAAA,CAAA;QAC1B;IAEJ,IAAU,EAAA,YAAA;IACV,OAAS,EAAA,mBAAM;AACX,IAAA,OAAA,EAAA;4BAEuC,IAAA,EAAA;AACvC;AACI,EAAA,MAAA,QAAA,GAAA,OAAA,CAAA,MAAqB;AACjB,IAAA,IAAA,CAAA,cAAiB,cAAA,IAAA,CAAA,YAAA,EAAA,sBAAA,EAAA,OAAA,EAAA;AACjB,IAAA,OAAA,MAAA,CAAA,CAAA,IAAA,YAAiB,EAAA,sBAAA,IAAA,EAAA,CAAA,EAAA,IAAA,YAAA,EAAA,cAAA,IAAA,EAAA,CAAA,CAAA,EAAA,IAAA,CAAA;AACb,GAAA,EAAA,CAAA,YAAA,CAAA,CAAA;AACA;sBACW,GAAA,OAAA,CAAE,MAAiB;AAClC,IAAA,OAAA,QAAA,IAAA,EAAA;AACH,GAAA,EAAA,CAAA,QAAC,CAAC,CAAA;;AAEP,EAAA,MAAA,yBAAyB,MAAC;IAC9B,MAAI,OAAA,GAAa;MAE0B,GAAA;KACrC;UAEyB,WAAA,GAAA,OAAA,EAAA,IAAA,IAAA,QAAA,CAAA,MAAA;WACjB,CAAA,IAAA,GAAA,eAAkB,GAAA,CAAA,WAAA,EAAA,QAAA,CAAA,OAAA,CAAA,GAAA,WAAA;AACpB,IAAA,OAAA,OAAK;AACD,GAAA,EAAA,CAAA,iBAAQ,EAAA;AACR,EAAA,MAAA,KAAA,GAAA,OAAE,CAAM,MAAO;AACnB,IAAA,OAAA,QAAK,EAAA,MAAA,CAAA,CAAA,GAAA,EAAA,IAAA,KAAA;AACL,MAAA,MAAA,UAAE,GAAA,IAAmB,CAAA,OAAA,EAAA,MAAS,CAAA,CAAA;AAC9B,QAAA;AACJ,OAAA,KAAA,CAAA,GAAc,CAAA,IAAA,CAAA,CAAA;AAEd,QAAA;YACiE,EAAA,KAAA,IAAA,CAAA,EAAA,CAAA,CAAA,IAAA,EAAA;aACZ,CAAA,GAAA,GAAA,EAAA,GAAA,UAAA,CAAA,GAAA,CAAA,CAAA;QAErD;YACQ,IAAA,CAAC;SAEsD,CAAA,IAAA,EAAA;AAC/D,GAAA,EAAA,CAAA,QAAK,CAAA,CAAA;;AAEG;AACA;AACI;AACA,EAAA,MAAA,WAAA,GAAA,IAAA;AACA,EAAA,MAAA,WAAA,GAAA,OAAwB,CAAA,MAAA;AAC3B,IAAA,IAAA,CAAA,QAAA,IAAA,CAAA,aAAA,EAAA,OAAA,EAAA;AACD,IAAA,MAAA,WAAM,GAAA,QAAA,EAAA,IAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,aAAA,CAAA;AACF,IAAA,IAAA,CAAA,WAAA,EAAA,OAAU,EAAA;AACN,IAAA,MAAA;AACA,MAAA,OAAA;AACA,MAAA,KAAA;AACA,MAAA;AACH,KAAA,GAAA,WAAA;AACJ,IAAA,IAAA,IAAA,KAAA,QAAA,CAAA,MAAA,IAAA,OAAA,EAAA,MAAA,IAAA,CAAA,EAAA;AACJ,MAAA,MAAA,SAAE,GAAA,OAAA,CAAA,IAAA,CAAA,MAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,KAAA,WAAA,EAAA,EAAA,CAAA;UACN,SAAA,EAAA,IAAA,EAAA;QAAC,MAAO;mBACiE;AACtE,UAAA;SACH,GAAA,SAAA,CAAA,IAAA;AACL,QACC,IAAQ,SAAc,IAAA,UAAS,EAAA,OAAa,CAAA,EAAA,SAAY,CAAA,CAAA,EAAA,UAC3D,CAAA,CAAA;AAEF,QAAA,8BAA6B,IACtB,KAAG,IAAC,gBAAA;;aAEoB,KAAA,IAAA;;WAIG,KAAA,IAAA,SAAA;AAE7B,GAAA,EAAA,CAAC,QACW,EAAA,aACf,EAAA,WAAA,CAAA,CAAA;AAEF;AAGQ,EAAA,SAAA,CAAA,MAAA;;;AAIC,IAAA,MAAA,OAAA,GAAA,UAAA,CAAA,MAAA;wBAEI,GAAA;AAeL,QAAA,IAAA,EAAA,WAAA;;2BAGkB;AACjB,UAAA,OAEI,EAAa,cAAG,EACb,OAAA,IAAA,OAAA,IAAiB;AAmBxB,SAAA,GAAA,cAAiB;uBAET,EAAA,CAAA,CAAA,eAAA;AASrB,QAAE,sBAAA,EAAA;AAEF,UAAM,IAAA,EAAA,SAAmB;;AAerB,OAAA,CAAA;AACA,KAAA,EAAA,CAAA,CAAA;AAEA,IAAA,OAAO,MAAA,YAAc,CAAA,OAAA,CAAA;AACrB,GAAA,EAAA,CAAA,WAAc,EAAA,cAAa,EAAA,eAAS,EAAA,kBAA+C,CAAA,CAAA;AAEnF;QACI,mBAAmB,GAAE,WAAA,CAAA,OAAA,SAAA,EAAA,GAAA,GAAA,IAAA,KAAA;;AAGzB,IAAA,MAAM,QAAc,GAAA,OAAU,GAAA,GAAA,IAAI,GAAE,EAAA,OAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,CAAA,GAAA,EAAA,OAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,CAAA,GAAA,GAAA,GAAA,CAAA,OAAA,EAAA,SAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,CAAA,OAAA,EAAA,SAAA,CAAA,CAAA;AAChC,IAAA,MAAA,QAAkB,GAAA,UAAmB,GAAA,CAAA,EAAA,UAAA,CAAA,UAAS,CAAA,CAAA,GAAA,QAAA;AAClD,IAAA,MAAe,YAAG,GAAA,IAAA,eAAA,EAAA;AAElB;;AAKa,IAAA,MAAA,OAAA,GAAA,YACQ,CAAA,QAAA,EAAA,GAAA,CAAA,EAAA,QAAA,CAAA,CAAA,EAAA,YAA6E,CAAA,QAAA,EAAA,CAAA,CAAA,GAAA,QAAA;oBACzE,EAAA;;AAGI,KAAA,CAAA;AAMO;AAMI,IAAA,IAAA;AASZ,MAAA,YAAA,CAAA,UAAA,CAAA;AAEH,QAAA,KAAA,EAAA,gBAAA;iBAaA,EAAA;mBAEA,EAAA,SAAA,CAAA,QAAA,EAAA;oBACD,IAAK;;AAED,SAAA;AAQR,QAAA,IAAA,EAAA;AAKP,UAAA,QAAA,EAAA;YAsCQ,UAAA,EAAI,UACZ;AAKG,YAAA,IAAA,EAAA,EAAA;AASpB,YAAG,UAAA,EAAA,CAAA;AAEH,YAAyB,aAAA,EAAA;AACrB;AAEA;QACI;AACA,KAAA,CAAA,OAAA;;MAGA,OAAe,CAAA,KAAA,CAAA,8CAAO,EAAA,KAAA,CAAA;AAAE;AAE5B,GAAA,EAAA,CAAA,QACI,EAAA,YAAA,EAAA,OAAA,EAAA,WAAc,EAAC,UAA8D,CAAA,CAAA;AACzE,EAAA,MAAA,oBAAC,kBACG;AAOhB,IAAG,YAAA;AAEH,IAAM,uBAAyB,EAAA,CAAA,iBAAqB,CAAA;AAChD,MAAA,OAAQ,EAAA;AAER,QAAA,oBAAwB,EAAG;AAC3B,OAAA;AACA,MAAA,IAAM,EAAY;AAElB,KAAA,CAAA;AACA,IAAA,oBAAmB,EAAK,CAAA,IAAA,aAAgB,CAAC;AACzC,MAAA,OAAc,EAAA;AAEd,QAAA,iBAAqB,EAAE;OAEmB;AAC1C,MAAA,IAAM,EAAQ;;AAEV,IAAA,0BAAsB,EAAA,CAAA,IAAA,aAAqB,CAAA;MAC9C,OAAO;QAEF;AAEN,OAAA;UACQ,EAAA;;mBAEH,CAAA,CAAA;SACAA,cAAE,CAAA,aAAA,CAAA,KAAA,EAAA;IAEP,SAA8B,EAAA,yDAAA;IAC9B,KAAS,EAAA;AACL,MAAA,MAAA,EAAM;AACN;KACHA,cAAW,CAAA,aAAS,CAAA,KAAA,EAAA;IAErB,SAAM,EAAA;AAEE;AACI,gBAAI,EAAC,YAAA,IAAA,aAAA,GAAA,QAAA,GAAA,2BAAA;AACD,YAAA;AACI,GAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,WAAW,EAAA;AACP,IAAA,WAAA,EAAA,WAAA;AACA,IAAA,YAAA,EAAA,cAAQ;yBACJ,mBAAA;AACP,IAAA,KAAA,EAAA,KAAA;uBACU,EAAA,mBAA0B;AACjC,IAAA,iBAAA,EAAA,aAAoB;AAAE,IAAA,YAAA,EAAA,CAAA;AAEtB,IAAA,kBAAA,EAAA,kBAAoB;;0BAGb,CAAA;AACH,GAAA,CAAA,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAO,EAAA;AACP,IAAA,SAAA,EAAA;;AAEI,gBAAA,EAAA,YAAA,IAAA,CAAA,aAAiB,GAAA,QAAA,GAAa,OAAmB;AACpD,YAAA;mCACH,CAAA,aAAA,CAAA,gBAAA,EAAA;4BACL;AACJ,IAAA,MAAA,EAAA,UAAE;AAEH,IAAA,WAAA,EAAA,WAAsB;qBACA,CAAA,UAAA;gBACtB,EAAC,YAAA;sBACJ,EAAA,kBAAA;wBAAa,EAAE,oBAAC;AACb,IAAA,kBAAA,EAAQ;mBACX,EAAA,eAAA;eACJ,EAAA,WAAA;AACL,IAAA,UACC,EAAA;IAGL,GAAMA,cAAA,CAAA,aAAgB,WAAc,EAAA,QACzB,aAAU,IAAA,IAAA,GAAA,CAAA,CAAA,IAAA,CAAA,YAAA,IAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AACb,IAAA,SAAsB,EAAA;iCACE,CAAA,mBAAc,EAAA;AAElC,IAAA,mBAAgB,EAAA,IAAA,GAAY,CAAA,CAAA;AACxB,IAAA,YAAA,EAAA,IAAM;wBACT,EAAA;;;MAM0C,gBAAA,GAAAA,cAAA,CAAA,IAAA,CAAA,KAAA,IAAA;QACjD;aAEuD;eACxC;cAA+D;AAC5E,IAAA,MAAA;gBAAuB;AAEvB,IAAA,kBAAK;AACD,IAAA,oBAAY;AACZ,IAAA,kBAAiB;AAEjB,IAAA;AACI,IAAA,WAAA;AACA,IAAA;;AAEA,EAAA,MAAA,4BAAW,GAAY,UAAA,GAAa,CAAA,CAAA;AACpC,EAAA,MAAA,mBAAW,GAAA,UAAY,GAAA,CAAA,CAAA;AACvB,EAAA,MAAA,CAAA,YAAA,EAAQ,eAAA,CAAA,GAAAA,cAAA,CAAA,QAAA,CAAA,IAAA,CAAA;AACJ,EAAA,MAAA;qBACE;AACF,IAAA,OAAA,EAAA;AACA,GAAA,GAAA,4BAAgB,IAAE;AAClB,EAAA,MAAA,cAAA,GAAK,eAAe,IAAE;AACtB,IAAA,eAAA,CAAA,GAAA,CAAA;AACA,GAAA,EAAA,EAAA,CAAA;AACA,EAAA,MAAA,cAAA,GAAA,OAAa,CAAA;AACb,IAAA,OAAA,WAAA,EAAA,iBAAwB,IAAA;AACxB,GAAA,EAAA,CAAA,WAAA,CAAA,CAAA;AACH,EAAA,OAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;;AAED,GAAA,EAAAA,cAAA,CAAA,aAAQ,CAAK,KAAA,EAAA;AACb,IAAA,SAAA,EAAA;AACA,GAAA,EAAA,SAAA,IAAAA,cAAA,CAAQ,aAAM,CAAA,KAAA,EAAA;AACd,IAAA,SAAA,EAAA;AACA,GAAA,EAAAA,cAAA,CAAA,aAAS,CAAA,KAAA,EAAA;AACL,IAAA,SAAA,EAAA;AACA,GAAA,EAAAA,cAAA,CAAA,aAAI,CAAS,KAAA,EAAA;AAChB,IAAA,SAAA,EAAA;AACD,GAAA,EAAA,YAAA,IAAAA,cAAA,CAAA,aAAoB,CAAA,QAAA,EAAA;AAChB,IAAA,SAAA,EAAA,gEAA2C;AAC3C,IAAA,OAAA,EAAA,MAAA,MAAQ,CAAA,OAAA,CAAA,IAAA,EAAA;AACR,IAAA,YAAA,EAAA;AACA,GAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAU,EAAI;AACd,IAAA,SAAA,EAAA,uBAAU;AACV,IAAA,IAAA,EAAA,MAAA;AACA,IAAA,MAAA,EAAA,cAAA;AACH,IAAA,OAAA,EAAA;AACD,GAAA,EAAAA,cAAA,CAAA,aAAS,CAAA,MAAA,EAAA;AACT,IAAA,aAAA,EAAA,OAAO;AACH,IAAA,cAAA,EAAA,OAAA;;AAEA,IAAA,CAAA,EAAA;AACH,GAAA,CAAA,CAAA,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AACD,IAAA,SAAA,EAAA;AACI,GAAA,EAAA,WAAA,CAAA,CAAA,EAAA,YAAY,IAAmB,kBAAA,EAAA,uBAAA,IAAAA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AAC/B,IAAA,SAAA,EAAA,yFAAQ;AACR,IAAA,OAAA,EAAA,MAAA,eAAa,CAAA,IAAA;AAChB,GAAA,EAAA,kBAAA,EAAA,oBAAA,CAAA,CAAA,CAAA,EAAA,YAAA,IAAA,SAAA,IAAA,kBAAA,EAAA,uBAAA,IAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AACJ,IAAA,SAAA,EAAE;AAEH,GAAA,EAAAA,cAAA,CAAA;AAEA,IAAA,SAAA,EAAA;AACI,GAAA,EAAAA,cAAA,CAAA,aAAoB,CAAA,KAAA,EAAA;AAChB,IAAA,SAAA,EAAA;AACA,GAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,MAAoB,kBAAa,EAAM,iBAAI,CAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AAC3C,IAAA,SAAA,EAAA,2FAA2C;AAC9C,IAAA,OAAA,EAAA,MAAE,eAAA,CAAA,IAAA;AAEH,GAAA,EAAA,kBAAmB,EAAA,oBAAiB,CAAA,CAAA,CAAA,EAAAA,4BAAgC,CAAA,IAAA,EAAA;;AAEhE,GAAA,CAAA,CAAA,EAAA,SAAA,IAAAA,cAAA,CAAM,aAAuB,CAAAA,cAAA,CAAA,QAAK,EAAO,IAAI,EAAE,MAAK,GAAA,MAAA,KAAA,GAAA,GAAAA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAA;AACpD,IAAA,SAAA,EAAA,SAAA;AACI,IAAA,IAAA,EAAA,WAAA;AACA,IAAA,UAAA,EAAA,UAAA;AACI,IAAA,YAAA,EAAA,MAAA,EAAA;AACA,IAAA,SAAA,EAAA,MAAA,EAAA;AACH,IAAA,SAAA,EAAA,MAAA;mCACK,CAAA,mBAAgB,EAAE;;;;AAIpB,IAAA,MAAA,EAAA,KAAA;AACI,IAAA,UAAA,EAAA,UAAA;AACA,IAAA,SAAA,EAAA,MAAA,EAAA;AACI,IAAA,YAAA,EAAA,MAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,GAAA,CAAA,GAAAA,cAAA,CAAA,aAAA,CAAA,iBAAwB,EAAA;AAC3B,IAAA,SAAA,EAAA,SAAA;4CACH;AAEF,IAAA,cAAA,EAAA,cAAK;kCACK;AACN,IAAA,cAAA,EAAA;6DACoB;AACZ,IAAA,MAAA,EAAA,kBAAA;AACA,IAAA,OAAA,EAAA,MAAA,eAAA,CAAA,KAAA,CAAA;AACI,IAAA,KAAA,EAAA,kBAAA,CAAA;;AAEI,IAAA,mBAAA,EAAA,mBAAA;;AAEI,IAAA,oBAAA,EAAA;AACH,GAAA,CAAA,CAAA,CAAA;;AAEJ,MAAA,mBAAA,GAAAA,cAAA,CAAA,IAAA,CAAA,CAAA;AACJ,EAAA,mBAAA;AACJ,EAAA,YAAA;;;;AAGL,IAAA;6BACH,EAAA;yBACJ,OAAA,CAAA,MAAA;AACJ,IAAA,MAAA,QAAA,GAAA,IAAE,EAAA,QAAA,EAAA,IAAA,IAAA,EAAA;kBACN,CAAA,MAAA,CAAA,QAAA,EAAA,IAAA,CAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA;YACL,QAAC,EAAA,IAAA,CAAA,CAAA;qBAAO,CAAA,MAAA,EAAA,OAAA,IAAA;AACJ,EAAA,OAAAA,cAAA,CAAA,cAAa,KAAC,EAAA;AACV,IAAA,SAAA,EAAA;AACA,GAAA,EAAAA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAoB;AAChB,IAAA,eAAA,EAAA;AACA,IAAA,UAAA,EAAA,SAAA;AACH,IAAA,YAAA,EAAA,YAAA;;;;0BAI0CA,cAAA,CAAA,IAAA,CAAA,KAAA,IAAA;AACvC,EAAA,MAAA;AACI,IAAA,SAAA;AACA,IAAA,mBAAA;AACI,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA;AACH,GAAA,GAAA,KAAA;0BACH,GAAA,MAAA,CAAA,IAAA,CAAA;AAEF,EAAA,MAAA,cAAA,GAAA,MAAK,CAAA,IAAA,CAAA;iBACK;AACN,EAAA,MAAA,IAAA,GAAA,WAAA,CAAA,YAAgB,CAAA;;AAER,IAAA;AACA,GAAA,GAAA,cAAA,EAAA;AACI,EAAA,MAAA,CAAA,OAAA,CAAA,GAAA,uBAAA,EAAA;;AAEI,IAAA,IAAA;;AAEH,IAAA,SAAA,EAAA,iBAAA;AACJ,IAAA;AACJ,GAAA,GAAA,mBAAA,IAAA,EAAA;;0BAER,CAAA,MAAA;yBAAQ,IAAA,EAAA,QAAQ,EAAA,IAAA,IAAA,EAAA;AACb,IAAA,OAAA,OAAA,CAAA,MAAA,CAAA,YAAa,EAAA;0BAChB,CAAA,CAAA;qBACJ,IAAA,EAAA,QAAA,EAAA,UAAA,IAAA,CAAA;AACJ,EAAA,MAAA,cAAE,GAAA,WAAA,CAAA,MAAA;sBACN,EAAA,OAAA,IAAA,kBAAA,EAAA,OAAA,EAAA;wBACJ,CAAA,OAAA,CAAA,SAAA,GAAA,kBAAA,CAAA,OAAA,CAAA,YAAA;;AACG,GAAA,EAAA,EAAA,CAAA;;WAGP,CAAA,MAAW;IAGhB,MAAwC,KAAA,GAAA,UAAA,CAAA,MAAA,cAAA,EAAA,EAAA,GAAA,CAAA;AACxC,IAAA,OAAK,MAAA,YAAkB,CAAA,KAAA,CAAA;AACnB,GAAA,EAAA,CAAA,QAAA,CAAO,MACH,EAAA,cAAA,CAAA,CAAA;kBACK,GAAA,WAAA,CAAA,MAAO,IAAC,IAAS;IAG9B,IAAC,SAAA,IAAA,iBAAA,EAAA;AAED,MAAA,IAAA;QAEQ,MACI,iBAAA,CAAA;mBAMS,EAAA;AAQD,YAAA,SAAA,EAAA,SAAC;oBAMO,EAAO,IAAA;AACP,YAAA;AACI,WAAA;AACA,UAAA,WAAA,EAAA,CAAA,IAAA,EAAA;;AAEJ,WAAA,KAAA;AACA,YAAA,IAAA,CAAA,eAAY;6BAEL,GAAA,eAAA,CAAA,QAAA,CAAA,IAAA;AACH,YAAA,MAAA,gBAAO,GAAA,IAAA,CAAA,QAAA,EAAA,IAAA,IAAA,EAAA;AACP,YAAA,OAAA;;AAEI,cAAA,QAAA,EAAA;kCACU,CAAA,QAAG;AAChB,gBAAA,IAAA,EAAA,MAAA,CAAA,CAAA,GAAA,WAAA,EAAA,GAAA,gBAAA,CAAA,EAAA,IAAA;;AAET,aAAA;AAEI;;YAMR,kBAAK,EAAA,OAAA,EAAA;4BACI,CAAA,OAAA,CAAA,SAAA,IAAA,kBAAU,CAAA,OAAwB,CAAA,YAAA;;AAMvD,OAAA,CAAA,OAAA,KAAA,EAAA;AAGZ,QAAG,OAAA,CAAA,KAAA,CAAA,gCAAA,EAAA,KAAA,CAAA;AAEH;AACA;AACA,GAAA,EAAA,CAAA,SAAA,EAAiB,iBAAc,CAAA,CAAA;AAC/B,EAAA,MAAA,gBAAkB,GAAA,WAAc,CAAA,MAAA,CAAA,IAAA;AAChC,IAAA,IAAA,kBAAoB,CAAA,OAAc,EAAA;AAElC,MAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Inbox.js","sources":["../../src/container/Inbox.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{default}from'./module.js';export{default as Inbox}from'./container/Inbox.js';export{default as InboxWithLoader}from'./container/InboxWithLoader.js';export{default as Threads}from'./container/Threads.js';export{default as ThreadMessages}from'./container/ThreadMessages.js';export{default as ServiceInbox}from'./container/ServiceInbox.js';import'./container/ThreadsInbox.js';import'./container/ThreadMessagesInbox.js';export{FilesList}from'./components/inbox/FilesList.js';export{MessageItem}from'./components/inbox/MessageItem.js';import'./components/inbox/ThreadItem.js';export{CommonMessage}from'./components/InboxMessage/CommonMessage.js';export{ConversationItem}from'./components/InboxMessage/ConversationItem.js';import'./components/InboxMessage/ServiceConversationItem.js';export{LeftSidebar}from'./components/InboxMessage/LeftSidebar.js';export{MessageInput}from'./components/InboxMessage/MessageInput.js';export{Messages}from'./components/InboxMessage/Messages.js';export{Popover}from'./components/InboxMessage/Popover.js';export{UploadImageButton}from'./components/InboxMessage/UploadImageButton.js';export{UserModalContent}from'./components/InboxMessage/UserModalContent.js';export{MessageSliceRenderer}from'./components/InboxMessage/message-widgets/MessageSliceRenderer.js';import'react';import'@common-stack/components-pro';export{MessengerSlotFillNameEnum}from'./enums/messenger-slot-fill-name-enum.js';export{ServiceInboxItem}from'./components/InboxMessage/ServiceInboxItem.js';import'@messenger-box/core';export{ChatMessageFill}from'./components/slot-fill/chat-message-filler.js';//# sourceMappingURL=index.js.map
|
|
1
|
+
export{default}from'./module.js';export{default as Inbox}from'./container/Inbox.js';export{default as InboxWithLoader}from'./container/InboxWithLoader.js';export{default as Threads}from'./container/Threads.js';export{default as ThreadMessages}from'./container/ThreadMessages.js';export{default as ServiceInbox}from'./container/ServiceInbox.js';import'./container/ThreadsInbox.js';import'./container/ThreadMessagesInbox.js';export{FilesList}from'./components/inbox/FilesList.js';export{MessageItem}from'./components/inbox/MessageItem.js';import'./components/inbox/ThreadItem.js';export{CommonMessage}from'./components/InboxMessage/CommonMessage.js';export{ConversationItem}from'./components/InboxMessage/ConversationItem.js';import'./components/InboxMessage/ServiceConversationItem.js';export{LeftSidebar}from'./components/InboxMessage/LeftSidebar.js';export{MessageInput}from'./components/InboxMessage/MessageInput.js';export{Messages}from'./components/InboxMessage/Messages.js';export{Popover}from'./components/InboxMessage/Popover.js';export{UploadImageButton}from'./components/InboxMessage/UploadImageButton.js';export{UserModalContent}from'./components/InboxMessage/UserModalContent.js';export{MessageSliceRenderer}from'./components/InboxMessage/message-widgets/MessageSliceRenderer.js';import'react';import'date-fns';import'@common-stack/components-pro';export{MessengerSlotFillNameEnum}from'./enums/messenger-slot-fill-name-enum.js';export{ServiceInboxItem}from'./components/InboxMessage/ServiceInboxItem.js';import'@messenger-box/core';export{ChatMessageFill}from'./components/slot-fill/chat-message-filler.js';//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@messenger-box/tailwind-ui-inbox",
|
|
3
|
-
"version": "10.0.3-alpha.
|
|
3
|
+
"version": "10.0.3-alpha.70",
|
|
4
4
|
"description": "Inbox UI components built with TailwindCSS",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"typescript": {
|
|
54
54
|
"definition": "lib/index.d.ts"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "2e0dee183caed5aa9c8736b8a1953e147ff39aa4"
|
|
57
57
|
}
|
|
@@ -3,6 +3,7 @@ import React, { useMemo, useRef, useEffect, useState } from 'react';
|
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { UserModalContent } from './UserModalContent';
|
|
5
5
|
import { MessageSliceRenderer } from './message-widgets';
|
|
6
|
+
import { SlackLikeMessageGroup } from './message-widgets/SlackLikeMessageGroup';
|
|
6
7
|
|
|
7
8
|
interface MessagesProps {
|
|
8
9
|
channelId: number;
|
|
@@ -60,7 +61,7 @@ export const Messages = ({
|
|
|
60
61
|
}
|
|
61
62
|
}, [channelMessages]);
|
|
62
63
|
|
|
63
|
-
const
|
|
64
|
+
const messageListWithDates = useMemo(() => {
|
|
64
65
|
let currentDate = '';
|
|
65
66
|
let res = [];
|
|
66
67
|
channelMessages?.map((msg) => {
|
|
@@ -71,7 +72,7 @@ export const Messages = ({
|
|
|
71
72
|
else msgDate = format(new Date(msg.createdAt), 'eee, do MMMM');
|
|
72
73
|
|
|
73
74
|
if (msgDate !== currentDate) {
|
|
74
|
-
res.push(msgDate);
|
|
75
|
+
res.push({ type: 'date', content: msgDate });
|
|
75
76
|
currentDate = msgDate;
|
|
76
77
|
}
|
|
77
78
|
res.push(msg);
|
|
@@ -79,21 +80,57 @@ export const Messages = ({
|
|
|
79
80
|
return res;
|
|
80
81
|
}, [channelMessages]);
|
|
81
82
|
|
|
83
|
+
// Group messages by date sections for Slack-like rendering
|
|
84
|
+
const messagesByDate = useMemo(() => {
|
|
85
|
+
const sections = [];
|
|
86
|
+
let currentSection = { date: null, messages: [] };
|
|
87
|
+
|
|
88
|
+
messageListWithDates.forEach((item) => {
|
|
89
|
+
if (item?.type === 'date') {
|
|
90
|
+
if (currentSection.messages.length > 0) {
|
|
91
|
+
sections.push(currentSection);
|
|
92
|
+
}
|
|
93
|
+
currentSection = { date: item.content, messages: [] };
|
|
94
|
+
} else {
|
|
95
|
+
currentSection.messages.push(item);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (currentSection.messages.length > 0) {
|
|
100
|
+
sections.push(currentSection);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return sections;
|
|
104
|
+
}, [messageListWithDates]);
|
|
105
|
+
|
|
82
106
|
return (
|
|
83
107
|
<>
|
|
84
108
|
<div className="w-full" ref={innerRef}>
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
109
|
+
{messagesByDate?.map((section, sectionIndex) => (
|
|
110
|
+
<div
|
|
111
|
+
key={`section-${sectionIndex}`}
|
|
112
|
+
className={sectionIndex === messagesByDate.length - 1 ? '' : 'mb-4'}
|
|
113
|
+
>
|
|
114
|
+
{/* Date separator */}
|
|
115
|
+
{section.date && (
|
|
116
|
+
<div className="flex items-center justify-center my-4">
|
|
117
|
+
<div className="flex-grow border-t border-gray-200"></div>
|
|
118
|
+
<div className="mx-4 px-3 py-1 bg-white border border-gray-200 rounded-full text-xs font-medium text-gray-600">
|
|
119
|
+
{section.date}
|
|
120
|
+
</div>
|
|
121
|
+
<div className="flex-grow border-t border-gray-200"></div>
|
|
122
|
+
</div>
|
|
123
|
+
)}
|
|
124
|
+
|
|
125
|
+
{/* Messages grouped by user and time */}
|
|
126
|
+
<SlackLikeMessageGroup
|
|
127
|
+
messages={section.messages}
|
|
92
128
|
currentUser={currentUser}
|
|
129
|
+
onOpen={onOpen}
|
|
93
130
|
onMessageClick={onMessageClick}
|
|
94
131
|
/>
|
|
95
|
-
|
|
96
|
-
|
|
132
|
+
</div>
|
|
133
|
+
))}
|
|
97
134
|
</div>
|
|
98
135
|
<ChatModal element={selectedElement} isOpen={isOpen} onClose={onClose} />
|
|
99
136
|
</>
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { format, formatDistanceToNow, differenceInMinutes } from 'date-fns';
|
|
3
|
+
import { IAuthUser, IPost } from 'common';
|
|
4
|
+
import { FilesList } from '../../inbox';
|
|
5
|
+
|
|
6
|
+
interface SlackLikeMessageGroupProps {
|
|
7
|
+
messages: IPost[];
|
|
8
|
+
currentUser: IAuthUser;
|
|
9
|
+
onOpen: (element?: any) => void;
|
|
10
|
+
onMessageClick: (msg: IPost) => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface MessageGroupProps {
|
|
14
|
+
author: any;
|
|
15
|
+
messages: IPost[];
|
|
16
|
+
currentUser: IAuthUser;
|
|
17
|
+
onOpen: (element?: any) => void;
|
|
18
|
+
onMessageClick: (msg: IPost) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Utility function to group messages by user and time
|
|
22
|
+
export const groupMessagesByUserAndTime = (messages: IPost[], timeThresholdMinutes = 5): IPost[][] => {
|
|
23
|
+
if (!messages || messages.length === 0) return [];
|
|
24
|
+
|
|
25
|
+
const groups: IPost[][] = [];
|
|
26
|
+
let currentGroup: IPost[] = [];
|
|
27
|
+
let lastMessage: IPost | null = null;
|
|
28
|
+
|
|
29
|
+
for (const message of messages) {
|
|
30
|
+
if (typeof message === 'string') continue; // Skip date separators
|
|
31
|
+
|
|
32
|
+
const shouldStartNewGroup =
|
|
33
|
+
!lastMessage ||
|
|
34
|
+
lastMessage.author?.id !== message.author?.id ||
|
|
35
|
+
differenceInMinutes(new Date(message.createdAt), new Date(lastMessage.createdAt)) > timeThresholdMinutes;
|
|
36
|
+
|
|
37
|
+
if (shouldStartNewGroup) {
|
|
38
|
+
if (currentGroup.length > 0) {
|
|
39
|
+
groups.push(currentGroup);
|
|
40
|
+
}
|
|
41
|
+
currentGroup = [message];
|
|
42
|
+
} else {
|
|
43
|
+
currentGroup.push(message);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
lastMessage = message;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (currentGroup.length > 0) {
|
|
50
|
+
groups.push(currentGroup);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return groups;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const MessageGroup: React.FC<MessageGroupProps> = ({ author, messages, currentUser, onOpen, onMessageClick }) => {
|
|
57
|
+
const isOwnMessage = author?.id === currentUser?.id;
|
|
58
|
+
const authorName =
|
|
59
|
+
author?.givenName && author?.familyName
|
|
60
|
+
? `${author.givenName} ${author.familyName}`
|
|
61
|
+
: author?.username || 'Unknown User';
|
|
62
|
+
|
|
63
|
+
const firstMessage = messages[0];
|
|
64
|
+
const formatTime = (timestamp: string) => {
|
|
65
|
+
const date = new Date(timestamp);
|
|
66
|
+
return format(date, 'h:mm a');
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<div className="mb-1 group hover:bg-white hover:bg-opacity-60 -mx-4 px-4 py-1 rounded transition-colors">
|
|
71
|
+
<div className="flex items-start space-x-2">
|
|
72
|
+
{/* Avatar - show for all messages */}
|
|
73
|
+
<div className="flex-shrink-0 mt-0.5">
|
|
74
|
+
<img
|
|
75
|
+
className="w-9 h-9 rounded-lg cursor-pointer hover:opacity-80 transition-opacity"
|
|
76
|
+
src={author?.picture || '/default-avatar.svg'}
|
|
77
|
+
alt={authorName}
|
|
78
|
+
onClick={() => onOpen(firstMessage)}
|
|
79
|
+
onError={(e) => {
|
|
80
|
+
e.currentTarget.src = '/default-avatar.svg';
|
|
81
|
+
}}
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div className="flex-1 min-w-0">
|
|
86
|
+
{/* Author name and timestamp - show for all messages */}
|
|
87
|
+
<div className="flex items-center space-x-2 mb-1">
|
|
88
|
+
<span className="text-sm font-bold text-gray-900">{authorName}</span>
|
|
89
|
+
<span className="text-xs text-gray-500">{formatTime(firstMessage.createdAt)}</span>
|
|
90
|
+
{isOwnMessage && <span className="text-xs text-gray-400 italic">(you)</span>}
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
{/* Messages in the group - single line for each message */}
|
|
94
|
+
<div className="space-y-1">
|
|
95
|
+
{messages.map((message, index) => (
|
|
96
|
+
<MessageBubble
|
|
97
|
+
key={message.id}
|
|
98
|
+
message={message}
|
|
99
|
+
isOwnMessage={isOwnMessage}
|
|
100
|
+
isFirstInGroup={index === 0}
|
|
101
|
+
isLastInGroup={index === messages.length - 1}
|
|
102
|
+
showTimestamp={isOwnMessage && index === 0}
|
|
103
|
+
onMessageClick={onMessageClick}
|
|
104
|
+
totalInGroup={messages.length}
|
|
105
|
+
authorName={authorName}
|
|
106
|
+
formatTime={formatTime}
|
|
107
|
+
/>
|
|
108
|
+
))}
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
interface MessageBubbleProps {
|
|
117
|
+
message: IPost;
|
|
118
|
+
isOwnMessage: boolean;
|
|
119
|
+
isFirstInGroup: boolean;
|
|
120
|
+
isLastInGroup: boolean;
|
|
121
|
+
showTimestamp: boolean;
|
|
122
|
+
onMessageClick: (msg: IPost) => void;
|
|
123
|
+
totalInGroup: number;
|
|
124
|
+
authorName: string;
|
|
125
|
+
formatTime: (timestamp: string) => string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const MessageBubble: React.FC<MessageBubbleProps> = ({
|
|
129
|
+
message,
|
|
130
|
+
isOwnMessage,
|
|
131
|
+
isFirstInGroup,
|
|
132
|
+
isLastInGroup,
|
|
133
|
+
showTimestamp,
|
|
134
|
+
onMessageClick,
|
|
135
|
+
totalInGroup,
|
|
136
|
+
authorName,
|
|
137
|
+
formatTime,
|
|
138
|
+
}) => {
|
|
139
|
+
const handleClick = () => {
|
|
140
|
+
onMessageClick?.(message);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// All messages use the same format (Slack style - left aligned)
|
|
144
|
+
return (
|
|
145
|
+
<div className="py-0.5 hover:bg-gray-50 hover:bg-opacity-50 rounded px-1 -mx-1 group">
|
|
146
|
+
<div className="text-sm text-gray-900 cursor-pointer hover:bg-gray-100 px-1 rounded" onClick={handleClick}>
|
|
147
|
+
{/* Show timestamp on hover */}
|
|
148
|
+
<span className="text-xs text-gray-500 opacity-0 group-hover:opacity-100 transition-opacity float-right ml-2">
|
|
149
|
+
{formatTime(message.createdAt)}
|
|
150
|
+
</span>
|
|
151
|
+
|
|
152
|
+
{message.message && (
|
|
153
|
+
<span className="whitespace-pre-wrap break-words leading-relaxed">{message.message}</span>
|
|
154
|
+
)}
|
|
155
|
+
|
|
156
|
+
{message.files?.totalCount > 0 && (
|
|
157
|
+
<div className="mt-1 clear-both">
|
|
158
|
+
<FilesList uploaded files={message.files.data} />
|
|
159
|
+
</div>
|
|
160
|
+
)}
|
|
161
|
+
<div className={`${navigator.userAgent.includes('Firefox') ? 'mt-1' : ''} clear-both`}></div>
|
|
162
|
+
|
|
163
|
+
{/* Show delivery status for own messages */}
|
|
164
|
+
{/* {isOwnMessage && message.isDelivered !== undefined && (
|
|
165
|
+
<div className="text-xs text-gray-400 mt-1 clear-both">
|
|
166
|
+
{message.isDelivered
|
|
167
|
+
? message.isRead
|
|
168
|
+
? '✓✓ Read'
|
|
169
|
+
: '✓✓ Delivered'
|
|
170
|
+
: '✓ Sent'
|
|
171
|
+
}
|
|
172
|
+
</div>
|
|
173
|
+
)} */}
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export const SlackLikeMessageGroup: React.FC<SlackLikeMessageGroupProps> = ({
|
|
180
|
+
messages,
|
|
181
|
+
currentUser,
|
|
182
|
+
onOpen,
|
|
183
|
+
onMessageClick,
|
|
184
|
+
}) => {
|
|
185
|
+
// Filter out non-message items (like date strings)
|
|
186
|
+
const actualMessages = messages.filter((msg) => typeof msg !== 'string') as IPost[];
|
|
187
|
+
|
|
188
|
+
// Group messages by user and time
|
|
189
|
+
const messageGroups = groupMessagesByUserAndTime(actualMessages);
|
|
190
|
+
|
|
191
|
+
return (
|
|
192
|
+
<div className="space-y-2">
|
|
193
|
+
{messageGroups.map((group, groupIndex) => {
|
|
194
|
+
const author = group[0]?.author;
|
|
195
|
+
return (
|
|
196
|
+
<MessageGroup
|
|
197
|
+
key={`group-${groupIndex}-${group[0]?.id}`}
|
|
198
|
+
author={author}
|
|
199
|
+
messages={group}
|
|
200
|
+
currentUser={currentUser}
|
|
201
|
+
onOpen={onOpen}
|
|
202
|
+
onMessageClick={onMessageClick}
|
|
203
|
+
/>
|
|
204
|
+
);
|
|
205
|
+
})}
|
|
206
|
+
</div>
|
|
207
|
+
);
|
|
208
|
+
};
|
package/src/container/Inbox.tsx
CHANGED
|
@@ -329,13 +329,13 @@ const Inbox = (props: InboxProps) => {
|
|
|
329
329
|
|
|
330
330
|
{/* Right Sidebar - Desktop Only */}
|
|
331
331
|
{pathChannelId && data?.[1] && !isMobileView && (
|
|
332
|
-
<div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
</div>
|
|
332
|
+
// <div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
333
|
+
<RightSidebarWrapper
|
|
334
|
+
MessagesLoaderQuery={data?.[1]}
|
|
335
|
+
selectedPost={null}
|
|
336
|
+
detailSidebarOptions={detailSidebarOptions}
|
|
337
|
+
/>
|
|
338
|
+
// </div>
|
|
339
339
|
)}
|
|
340
340
|
</div>
|
|
341
341
|
);
|
|
@@ -500,14 +500,14 @@ const RightSidebarWrapper = React.memo(({ MessagesLoaderQuery, selectedPost, det
|
|
|
500
500
|
if (!sortedMessages.length) return null;
|
|
501
501
|
|
|
502
502
|
return (
|
|
503
|
-
<div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
</div>
|
|
503
|
+
// <div className="w-80 xl:w-96 border-l border-gray-200 bg-white flex-shrink-0">
|
|
504
|
+
<RightSidebar
|
|
505
|
+
channelMessages={sortedMessages}
|
|
506
|
+
visibility="visible"
|
|
507
|
+
selectedPost={selectedPost}
|
|
508
|
+
{...detailSidebarOptions}
|
|
509
|
+
/>
|
|
510
|
+
// </div>
|
|
511
511
|
);
|
|
512
512
|
});
|
|
513
513
|
|
|
@@ -517,6 +517,9 @@ const MessagesComponent = React.memo((props: any) => {
|
|
|
517
517
|
const messageRootListRef = useRef(null);
|
|
518
518
|
const messageListRef = useRef(null);
|
|
519
519
|
const apolloClient = useApolloClient();
|
|
520
|
+
const [isLoadingOlder, setIsLoadingOlder] = React.useState(false);
|
|
521
|
+
const isLoadingOlderRef = useRef(false);
|
|
522
|
+
const scrollTimeoutRef = useRef(null);
|
|
520
523
|
|
|
521
524
|
const auth = useSelector(userSelector);
|
|
522
525
|
const { startUpload } = useUploadFiles();
|
|
@@ -533,21 +536,28 @@ const MessagesComponent = React.memo((props: any) => {
|
|
|
533
536
|
const totalCount = data?.messages?.totalCount || 0;
|
|
534
537
|
|
|
535
538
|
const scrollToBottom = useCallback(() => {
|
|
536
|
-
if (
|
|
539
|
+
if (messageRootListRef?.current) {
|
|
537
540
|
messageRootListRef.current.scrollTop = messageRootListRef.current.scrollHeight;
|
|
538
541
|
}
|
|
539
542
|
}, []);
|
|
540
543
|
|
|
541
|
-
// Auto-scroll on new messages
|
|
544
|
+
// Auto-scroll on new messages (but not when loading older messages)
|
|
542
545
|
useEffect(() => {
|
|
543
|
-
|
|
544
|
-
|
|
546
|
+
if (!isLoadingOlderRef.current) {
|
|
547
|
+
const timer = setTimeout(() => scrollToBottom(), 100);
|
|
548
|
+
return () => clearTimeout(timer);
|
|
549
|
+
}
|
|
545
550
|
}, [messages.length, scrollToBottom]);
|
|
546
551
|
|
|
547
552
|
const onFetchOld = useCallback(
|
|
548
553
|
async (skip: number) => {
|
|
549
|
-
if (channelId && fetchMoreMessages) {
|
|
554
|
+
if (channelId && fetchMoreMessages && !isLoadingOlder) {
|
|
550
555
|
try {
|
|
556
|
+
setIsLoadingOlder(true);
|
|
557
|
+
isLoadingOlderRef.current = true;
|
|
558
|
+
// Capture current scroll height before fetching
|
|
559
|
+
const oldScrollHeight = messageRootListRef?.current?.scrollHeight || 0;
|
|
560
|
+
|
|
551
561
|
await fetchMoreMessages({
|
|
552
562
|
variables: {
|
|
553
563
|
channelId: channelId.toString(),
|
|
@@ -570,28 +580,119 @@ const MessagesComponent = React.memo((props: any) => {
|
|
|
570
580
|
},
|
|
571
581
|
});
|
|
572
582
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
583
|
+
// Maintain scroll position after loading older messages
|
|
584
|
+
setTimeout(() => {
|
|
585
|
+
if (messageRootListRef?.current) {
|
|
586
|
+
const newScrollHeight = messageRootListRef.current.scrollHeight;
|
|
587
|
+
const scrollDiff = newScrollHeight - oldScrollHeight;
|
|
588
|
+
// For normal flex layout, maintain position by adjusting scroll offset
|
|
589
|
+
messageRootListRef.current.scrollTop = scrollDiff;
|
|
590
|
+
}
|
|
591
|
+
// Reset the loading flag after position is maintained
|
|
592
|
+
setTimeout(() => {
|
|
593
|
+
isLoadingOlderRef.current = false;
|
|
594
|
+
}, 50);
|
|
595
|
+
}, 100);
|
|
576
596
|
} catch (error) {
|
|
577
597
|
console.error('Error fetching older messages:', error);
|
|
598
|
+
isLoadingOlderRef.current = false;
|
|
599
|
+
} finally {
|
|
600
|
+
setIsLoadingOlder(false);
|
|
578
601
|
}
|
|
579
602
|
}
|
|
580
603
|
},
|
|
581
|
-
[channelId, fetchMoreMessages],
|
|
604
|
+
[channelId, fetchMoreMessages, isLoadingOlder],
|
|
582
605
|
);
|
|
583
606
|
|
|
607
|
+
// Scroll to bottom when channel changes
|
|
608
|
+
useEffect(() => {
|
|
609
|
+
if (channelId && messages.length > 0) {
|
|
610
|
+
isLoadingOlderRef.current = false; // Reset flag on channel change
|
|
611
|
+
const timer = setTimeout(() => scrollToBottom(), 200);
|
|
612
|
+
return () => clearTimeout(timer);
|
|
613
|
+
}
|
|
614
|
+
}, [channelId, scrollToBottom]);
|
|
615
|
+
|
|
616
|
+
// Alternative scroll detection for Firefox
|
|
617
|
+
useEffect(() => {
|
|
618
|
+
const element = messageRootListRef.current;
|
|
619
|
+
if (!element) return;
|
|
620
|
+
|
|
621
|
+
// Firefox-specific scroll detection using passive listeners
|
|
622
|
+
const handleScrollEnd = () => {
|
|
623
|
+
if (!isLoadingOlder && element) {
|
|
624
|
+
const { scrollTop } = element;
|
|
625
|
+
const isAtTop = Math.round(scrollTop) <= 30;
|
|
626
|
+
const hasMoreMessages = totalCount > messages.length;
|
|
627
|
+
|
|
628
|
+
if (isAtTop && hasMoreMessages) {
|
|
629
|
+
console.log('ScrollEnd triggered load more (Firefox):', {
|
|
630
|
+
scrollTop: Math.round(scrollTop),
|
|
631
|
+
totalCount,
|
|
632
|
+
messagesLength: messages.length,
|
|
633
|
+
});
|
|
634
|
+
onFetchOld(messages.length);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
// Use scrollend event if available (modern Firefox/Chrome)
|
|
640
|
+
if ('onscrollend' in element) {
|
|
641
|
+
element.addEventListener('scrollend', handleScrollEnd, { passive: true });
|
|
642
|
+
return () => {
|
|
643
|
+
element.removeEventListener('scrollend', handleScrollEnd);
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
}, [totalCount, messages.length, onFetchOld, isLoadingOlder]);
|
|
647
|
+
|
|
648
|
+
// Cleanup scroll timeout on unmount
|
|
649
|
+
useEffect(() => {
|
|
650
|
+
return () => {
|
|
651
|
+
if (scrollTimeoutRef.current) {
|
|
652
|
+
clearTimeout(scrollTimeoutRef.current);
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
}, []);
|
|
656
|
+
|
|
584
657
|
const onMessagesScroll = useCallback(
|
|
585
658
|
async (e: any) => {
|
|
586
|
-
|
|
587
|
-
|
|
659
|
+
// Throttle scroll events for better performance, especially in Firefox
|
|
660
|
+
if (scrollTimeoutRef.current) {
|
|
661
|
+
clearTimeout(scrollTimeoutRef.current);
|
|
662
|
+
}
|
|
588
663
|
|
|
589
|
-
|
|
590
|
-
|
|
664
|
+
scrollTimeoutRef.current = setTimeout(async () => {
|
|
665
|
+
if (messageRootListRef.current && !isLoadingOlder) {
|
|
666
|
+
const element = messageRootListRef.current;
|
|
667
|
+
const { clientHeight, scrollHeight, scrollTop } = element;
|
|
668
|
+
|
|
669
|
+
// Firefox-compatible scroll detection
|
|
670
|
+
// Use Math.ceil to handle Firefox's fractional scrollTop values
|
|
671
|
+
const isAtTop = Math.ceil(scrollTop) <= 25;
|
|
672
|
+
const hasMoreMessages = totalCount > messages.length;
|
|
673
|
+
|
|
674
|
+
// Additional Firefox-specific check
|
|
675
|
+
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
676
|
+
const firefoxAdjustedTop = isFirefox ? Math.round(scrollTop) <= 30 : isAtTop;
|
|
677
|
+
|
|
678
|
+
if ((isAtTop || firefoxAdjustedTop) && hasMoreMessages) {
|
|
679
|
+
console.log('Triggering load more:', {
|
|
680
|
+
scrollTop: Math.ceil(scrollTop),
|
|
681
|
+
originalScrollTop: scrollTop,
|
|
682
|
+
totalCount,
|
|
683
|
+
messagesLength: messages.length,
|
|
684
|
+
scrollHeight,
|
|
685
|
+
clientHeight,
|
|
686
|
+
browser: isFirefox ? 'Firefox' : 'Other',
|
|
687
|
+
isAtTop,
|
|
688
|
+
firefoxAdjustedTop,
|
|
689
|
+
});
|
|
690
|
+
await onFetchOld(messages.length);
|
|
691
|
+
}
|
|
591
692
|
}
|
|
592
|
-
}
|
|
693
|
+
}, 100);
|
|
593
694
|
},
|
|
594
|
-
[totalCount, messages.length, onFetchOld],
|
|
695
|
+
[totalCount, messages.length, onFetchOld, isLoadingOlder],
|
|
595
696
|
);
|
|
596
697
|
|
|
597
698
|
// Optimistic message sending with Apollo cache updates
|
|
@@ -768,11 +869,20 @@ const MessagesComponent = React.memo((props: any) => {
|
|
|
768
869
|
<>
|
|
769
870
|
<div
|
|
770
871
|
ref={messageRootListRef}
|
|
771
|
-
className="flex flex-col
|
|
872
|
+
className="flex flex-col flex-grow flex-shrink overflow-y-auto p-4 px-4 md:px-8 lg:px-12 bg-gray-50"
|
|
772
873
|
onScroll={onMessagesScroll}
|
|
773
874
|
>
|
|
774
875
|
{messages.length > 0 ? (
|
|
775
876
|
<>
|
|
877
|
+
{/* Loading indicator for older messages at the top */}
|
|
878
|
+
{isLoadingOlder && (
|
|
879
|
+
<div className="flex justify-center py-4">
|
|
880
|
+
<div className="flex items-center space-x-2 text-gray-500">
|
|
881
|
+
<Spinner className="w-4 h-4" />
|
|
882
|
+
<span className="text-sm">Loading older messages...</span>
|
|
883
|
+
</div>
|
|
884
|
+
</div>
|
|
885
|
+
)}
|
|
776
886
|
<Messages
|
|
777
887
|
innerRef={messageListRef}
|
|
778
888
|
channelId={channelId}
|