@messenger-box/tailwind-ui-inbox 10.0.3-alpha.69 → 10.0.3-alpha.71
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 +8 -0
- package/lib/components/InboxMessage/LeftSidebar.d.ts +2 -0
- package/lib/components/InboxMessage/LeftSidebar.d.ts.map +1 -1
- package/lib/components/InboxMessage/LeftSidebar.js +16 -5
- package/lib/components/InboxMessage/LeftSidebar.js.map +1 -1
- package/lib/components/InboxMessage/Messages.d.ts +3 -1
- package/lib/components/InboxMessage/Messages.d.ts.map +1 -1
- package/lib/components/InboxMessage/Messages.js +56 -15
- package/lib/components/InboxMessage/Messages.js.map +1 -1
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts +14 -0
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts.map +1 -0
- package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js +138 -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 +293 -69
- package/lib/container/Inbox.js.map +1 -1
- package/lib/index.js +1 -1
- package/package.json +2 -2
- package/src/components/InboxMessage/LeftSidebar.tsx +14 -4
- package/src/components/InboxMessage/Messages.tsx +62 -15
- package/src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx +240 -0
- package/src/components/InboxMessage/message-widgets/index.ts +1 -0
- package/src/container/Inbox.tsx +391 -134
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
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.71](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.70...v10.0.3-alpha.71) (2025-08-12)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @messenger-box/tailwind-ui-inbox
|
|
9
|
+
|
|
10
|
+
## [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)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @messenger-box/tailwind-ui-inbox
|
|
13
|
+
|
|
6
14
|
## [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
15
|
|
|
8
16
|
**Note:** Version bump only for package @messenger-box/tailwind-ui-inbox
|
|
@@ -12,6 +12,8 @@ type LeftSidebarProps = {
|
|
|
12
12
|
supportServices?: any;
|
|
13
13
|
role?: any;
|
|
14
14
|
messagesQuery?: any;
|
|
15
|
+
windowHeight?: number;
|
|
16
|
+
windowWidth?: number;
|
|
15
17
|
};
|
|
16
18
|
export declare const LeftSidebar: React.MemoExoticComponent<(props: LeftSidebarProps) => React.JSX.Element>;
|
|
17
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/InboxMessage/LeftSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAO5D,KAAK,gBAAgB,GAAG;IACpB,YAAY,EAAE,GAAG,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,aAAa,CAAC,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"LeftSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/InboxMessage/LeftSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAO5D,KAAK,gBAAgB,GAAG;IACpB,YAAY,EAAE,GAAG,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,WAAW,oCAAsB,gBAAgB,uBA6F5D,CAAC"}
|
|
@@ -8,7 +8,9 @@ import {GoSearch}from'@react-icons/all-files/go/GoSearch.js';import React__defau
|
|
|
8
8
|
selectedChannelId,
|
|
9
9
|
supportServices,
|
|
10
10
|
role,
|
|
11
|
-
messagesQuery
|
|
11
|
+
messagesQuery,
|
|
12
|
+
windowHeight = 768,
|
|
13
|
+
windowWidth = 1024
|
|
12
14
|
} = props;
|
|
13
15
|
const [keyword, setKeyword] = useState('');
|
|
14
16
|
const {
|
|
@@ -30,16 +32,25 @@ import {GoSearch}from'@react-icons/all-files/go/GoSearch.js';import React__defau
|
|
|
30
32
|
})));
|
|
31
33
|
}
|
|
32
34
|
return React__default.createElement("div", {
|
|
33
|
-
className: "w-full
|
|
35
|
+
className: "w-full flex flex-col bg-white",
|
|
36
|
+
style: {
|
|
37
|
+
height: `${windowHeight}px`,
|
|
38
|
+
maxHeight: '100vh'
|
|
39
|
+
}
|
|
34
40
|
}, React__default.createElement("div", {
|
|
35
|
-
className: "p-3 sm:p-4 border-b border-gray-200"
|
|
41
|
+
className: "flex-shrink-0 p-3 sm:p-4 border-b border-gray-200"
|
|
36
42
|
}, React__default.createElement(SearchInput, {
|
|
37
43
|
keyword: keyword,
|
|
38
44
|
setKeyword: setKeyword
|
|
39
45
|
})), React__default.createElement("div", {
|
|
40
|
-
className: "flex-1 overflow-hidden"
|
|
46
|
+
className: "flex-1 min-h-0 overflow-hidden"
|
|
41
47
|
}, React__default.createElement("div", {
|
|
42
|
-
className: "
|
|
48
|
+
className: "overflow-y-auto p-2 sm:p-4 space-y-1",
|
|
49
|
+
style: {
|
|
50
|
+
height: `${windowHeight - 80}px`,
|
|
51
|
+
// Subtract header height
|
|
52
|
+
minHeight: 0
|
|
53
|
+
}
|
|
43
54
|
}, React__default.createElement(React__default.Fragment, null, supportServices ? supportServices : React__default.createElement(React__default.Fragment, null), sortedChannels.length > 0 ? sortedChannels.map((channel, index) => channel?.type === RoomType.Service ? React__default.createElement(ServiceConversationItem, {
|
|
44
55
|
key: `service_channel_${channel.id}`,
|
|
45
56
|
filter: keyword,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftSidebar.js","sources":["../../../src/components/InboxMessage/LeftSidebar.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"
|
|
1
|
+
{"version":3,"file":"LeftSidebar.js","sources":["../../../src/components/InboxMessage/LeftSidebar.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"yVA0Ba,MAAA,WAAW,GAAGA,cAAK,CAAC,IAAI,CAAC,KAAwB,IAAI;AAC9D,EAAA,MAAA;IAaA,WAAc;IACd;IAEA,KAAgE;AAChE,IAAA,YAAoB;uBACC;AAAU,IAAA,iBAAS;mBAC7B;AAKX,IAAA,IAAI;IAEJ,aAAI;gBAEI;eAEa,GAAC;;QAMrB,CAAA,OAAA,EAAA,UAAA,CAAA,GAAA,QAAA,CAAA,EAAA,CAAA;AACD,EAAA,MAAA;;oBAGa,CAAA,cAAA,CAAA;;AAGD,EAAA,MAAA,cAAA,GAAA,OAAA,CAAA,MAAA;AAGQ,IAAA,IAAA,CAAA,YAAA,EAAA,MAAW,EAAA,OAAA,EAAA;AACX,IAAA,OAAA,OAAA,CAAA,MAAA,CAAA,CAAA,eAAY,CAAA,EAAA,CAAA;AACf,MAAA;AAED,KAAA,KAAA,EAAA,CAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AACK,GAAA,EAAA,CAAA,YAAA,CAAA,CAAA;AAEA,EAAA,IAAA,mBAAA,EAAA;uCA8BY,CAAA,KAAA,EAAA;AACL,MAAA,SAAA,EAAA;AAQhC,KAAG,EAAA,KAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAEH,MAAM,GAAA,EAAA,CAAA;MACI,SAAK,EAAA;AACX,KAAA,CAAA,CAAA,CAAA;;AAGY,EAAA,OAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;aAOK,EAAA,+BAAA;;AAMrB,MAAE,MAAA,EAAA,CAAA,EAAA,YAAA,CAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -9,7 +9,9 @@ interface MessagesProps {
|
|
|
9
9
|
subscribeToNewMessages?: () => any;
|
|
10
10
|
subscribeToNewServiceMessages?: () => any;
|
|
11
11
|
onMessageClick: (msg: any) => void;
|
|
12
|
+
isDesktopView?: boolean;
|
|
13
|
+
isSmallScreen?: boolean;
|
|
12
14
|
}
|
|
13
|
-
export declare const Messages: ({ currentUser, channelMessages, refetchMessages, innerRef, channelId, subscribeToNewMessages, subscribeToNewServiceMessages, onMessageClick, }: MessagesProps) => React.JSX.Element;
|
|
15
|
+
export declare const Messages: ({ currentUser, channelMessages, refetchMessages, innerRef, channelId, subscribeToNewMessages, subscribeToNewServiceMessages, onMessageClick, isDesktopView, isSmallScreen, }: MessagesProps) => React.JSX.Element;
|
|
14
16
|
export {};
|
|
15
17
|
//# sourceMappingURL=Messages.d.ts.map
|
|
@@ -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;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,iLAWlB,aAAa,sBAmHf,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,
|
|
@@ -6,7 +6,9 @@ import {isToday,isYesterday,format}from'date-fns';import React__default,{useStat
|
|
|
6
6
|
channelId,
|
|
7
7
|
subscribeToNewMessages,
|
|
8
8
|
subscribeToNewServiceMessages,
|
|
9
|
-
onMessageClick
|
|
9
|
+
onMessageClick,
|
|
10
|
+
isDesktopView = false,
|
|
11
|
+
isSmallScreen = false
|
|
10
12
|
}) => {
|
|
11
13
|
const [isOpen, setIsOpen] = useState(false);
|
|
12
14
|
const [selectedElement, setSelectedElement] = useState(null);
|
|
@@ -35,7 +37,7 @@ import {isToday,isYesterday,format}from'date-fns';import React__default,{useStat
|
|
|
35
37
|
React__default.useEffect(() => {
|
|
36
38
|
if (channelMessages?.length) ;
|
|
37
39
|
}, [channelMessages]);
|
|
38
|
-
const
|
|
40
|
+
const messageListWithDates = useMemo(() => {
|
|
39
41
|
let currentDate = '';
|
|
40
42
|
let res = [];
|
|
41
43
|
channelMessages?.map(msg => {
|
|
@@ -43,26 +45,65 @@ import {isToday,isYesterday,format}from'date-fns';import React__default,{useStat
|
|
|
43
45
|
let msgDate;
|
|
44
46
|
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
47
|
if (msgDate !== currentDate) {
|
|
46
|
-
res.push(
|
|
48
|
+
res.push({
|
|
49
|
+
type: 'date',
|
|
50
|
+
content: msgDate
|
|
51
|
+
});
|
|
47
52
|
currentDate = msgDate;
|
|
48
53
|
}
|
|
49
54
|
res.push(msg);
|
|
50
55
|
});
|
|
51
56
|
return res;
|
|
52
57
|
}, [channelMessages]);
|
|
58
|
+
// Group messages by date sections for Slack-like rendering
|
|
59
|
+
const messagesByDate = useMemo(() => {
|
|
60
|
+
const sections = [];
|
|
61
|
+
let currentSection = {
|
|
62
|
+
date: null,
|
|
63
|
+
messages: []
|
|
64
|
+
};
|
|
65
|
+
messageListWithDates.forEach(item => {
|
|
66
|
+
if (item?.type === 'date') {
|
|
67
|
+
if (currentSection.messages.length > 0) {
|
|
68
|
+
sections.push(currentSection);
|
|
69
|
+
}
|
|
70
|
+
currentSection = {
|
|
71
|
+
date: item.content,
|
|
72
|
+
messages: []
|
|
73
|
+
};
|
|
74
|
+
} else {
|
|
75
|
+
currentSection.messages.push(item);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
if (currentSection.messages.length > 0) {
|
|
79
|
+
sections.push(currentSection);
|
|
80
|
+
}
|
|
81
|
+
return sections;
|
|
82
|
+
}, [messageListWithDates]);
|
|
53
83
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
54
|
-
className:
|
|
84
|
+
className: `w-full pb-8 pt-4 ${isDesktopView ? 'space-y-8 max-w-full mx-auto' : isSmallScreen ? 'space-y-4' : 'space-y-6'}`,
|
|
55
85
|
ref: innerRef
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
})
|
|
86
|
+
}, messagesByDate?.map((section, sectionIndex) => React__default.createElement("div", {
|
|
87
|
+
key: `section-${sectionIndex}`,
|
|
88
|
+
className: "w-full"
|
|
89
|
+
}, section.date && React__default.createElement("div", {
|
|
90
|
+
className: "flex items-center justify-center my-6"
|
|
91
|
+
}, React__default.createElement("div", {
|
|
92
|
+
className: "flex-grow border-t border-gray-200"
|
|
93
|
+
}), React__default.createElement("div", {
|
|
94
|
+
className: "mx-4 px-3 py-1 bg-white border border-gray-200 rounded-full text-xs font-medium text-gray-600"
|
|
95
|
+
}, section.date), React__default.createElement("div", {
|
|
96
|
+
className: "flex-grow border-t border-gray-200"
|
|
97
|
+
})), React__default.createElement("div", {
|
|
98
|
+
className: `${isDesktopView ? 'mb-6' : 'mb-4'}`
|
|
99
|
+
}, React__default.createElement(SlackLikeMessageGroup, {
|
|
100
|
+
messages: section.messages,
|
|
101
|
+
currentUser: currentUser,
|
|
102
|
+
onOpen: onOpen,
|
|
103
|
+
onMessageClick: onMessageClick,
|
|
104
|
+
isDesktopView: isDesktopView,
|
|
105
|
+
isSmallScreen: isSmallScreen
|
|
106
|
+
}))))), React__default.createElement(ChatModal, {
|
|
66
107
|
element: selectedElement,
|
|
67
108
|
isOpen: isOpen,
|
|
68
109
|
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,14 @@
|
|
|
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
|
+
isDesktopView?: boolean;
|
|
9
|
+
isSmallScreen?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const groupMessagesByUserAndTime: (messages: IPost[], timeThresholdMinutes?: number) => IPost[][];
|
|
12
|
+
export declare const SlackLikeMessageGroup: React.FC<SlackLikeMessageGroupProps>;
|
|
13
|
+
export {};
|
|
14
|
+
//# 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;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAaD,eAAO,MAAM,0BAA0B,aAAc,KAAK,EAAE,oCAA6B,KAAK,EAAE,EAgC/F,CAAC;AAqJF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAiCtE,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
isDesktopView = false,
|
|
32
|
+
isSmallScreen = false
|
|
33
|
+
}) => {
|
|
34
|
+
const isOwnMessage = author?.id === currentUser?.id;
|
|
35
|
+
const authorName = author?.givenName && author?.familyName ? `${author.givenName} ${author.familyName}` : author?.username || 'Unknown User';
|
|
36
|
+
const firstMessage = messages[0];
|
|
37
|
+
const formatTime = timestamp => {
|
|
38
|
+
const date = new Date(timestamp);
|
|
39
|
+
return format(date, 'h:mm a');
|
|
40
|
+
};
|
|
41
|
+
return React__default.createElement("div", {
|
|
42
|
+
className: `group hover:bg-white hover:bg-opacity-60 rounded transition-colors ${isDesktopView ? 'mb-8 -mx-6 px-6 py-4' : isSmallScreen ? 'mb-4 -mx-2 px-2 py-2' : 'mb-6 -mx-4 px-4 py-3'}`
|
|
43
|
+
}, React__default.createElement("div", {
|
|
44
|
+
className: `flex items-start ${isDesktopView ? 'space-x-4' : isSmallScreen ? 'space-x-2' : 'space-x-3'}`
|
|
45
|
+
}, React__default.createElement("div", {
|
|
46
|
+
className: "flex-shrink-0 mt-0.5"
|
|
47
|
+
}, React__default.createElement("img", {
|
|
48
|
+
className: `rounded-lg cursor-pointer hover:opacity-80 transition-opacity ${isDesktopView ? 'w-12 h-12' : isSmallScreen ? 'w-8 h-8' : 'w-10 h-10'}`,
|
|
49
|
+
src: author?.picture || '/default-avatar.svg',
|
|
50
|
+
alt: authorName,
|
|
51
|
+
onClick: () => onOpen(firstMessage),
|
|
52
|
+
onError: e => {
|
|
53
|
+
e.currentTarget.src = '/default-avatar.svg';
|
|
54
|
+
}
|
|
55
|
+
})), React__default.createElement("div", {
|
|
56
|
+
className: "flex-1 min-w-0 overflow-hidden"
|
|
57
|
+
}, React__default.createElement("div", {
|
|
58
|
+
className: "flex items-center space-x-2 mb-1"
|
|
59
|
+
}, React__default.createElement("span", {
|
|
60
|
+
className: "text-sm font-semibold text-gray-900 truncate"
|
|
61
|
+
}, authorName), React__default.createElement("span", {
|
|
62
|
+
className: "text-xs text-gray-500 flex-shrink-0"
|
|
63
|
+
}, formatTime(firstMessage.createdAt)), isOwnMessage && React__default.createElement("span", {
|
|
64
|
+
className: "text-xs text-gray-400 italic flex-shrink-0"
|
|
65
|
+
}, "(you)")), React__default.createElement("div", {
|
|
66
|
+
className: "space-y-0.5"
|
|
67
|
+
}, messages.map((message, index) => React__default.createElement(MessageBubble, {
|
|
68
|
+
key: message.id,
|
|
69
|
+
message: message,
|
|
70
|
+
isOwnMessage: isOwnMessage,
|
|
71
|
+
isFirstInGroup: index === 0,
|
|
72
|
+
isLastInGroup: index === messages.length - 1,
|
|
73
|
+
showTimestamp: isOwnMessage && index === 0,
|
|
74
|
+
onMessageClick: onMessageClick,
|
|
75
|
+
totalInGroup: messages.length,
|
|
76
|
+
authorName: authorName,
|
|
77
|
+
formatTime: formatTime
|
|
78
|
+
}))))));
|
|
79
|
+
};
|
|
80
|
+
const MessageBubble = ({
|
|
81
|
+
message,
|
|
82
|
+
isOwnMessage,
|
|
83
|
+
isFirstInGroup,
|
|
84
|
+
isLastInGroup,
|
|
85
|
+
showTimestamp,
|
|
86
|
+
onMessageClick,
|
|
87
|
+
totalInGroup,
|
|
88
|
+
authorName,
|
|
89
|
+
formatTime
|
|
90
|
+
}) => {
|
|
91
|
+
const handleClick = () => {
|
|
92
|
+
onMessageClick?.(message);
|
|
93
|
+
};
|
|
94
|
+
// All messages use the same format (Slack style - left aligned)
|
|
95
|
+
return React__default.createElement("div", {
|
|
96
|
+
className: "py-1 hover:bg-gray-50 hover:bg-opacity-50 rounded px-1 sm:px-2 -mx-1 sm:-mx-2 group relative"
|
|
97
|
+
}, React__default.createElement("div", {
|
|
98
|
+
className: "text-sm text-gray-900 cursor-pointer hover:bg-gray-100 px-1 sm:px-2 py-1 rounded",
|
|
99
|
+
onClick: handleClick
|
|
100
|
+
}, React__default.createElement("span", {
|
|
101
|
+
className: "text-xs text-gray-500 opacity-0 group-hover:opacity-100 transition-opacity absolute right-1 sm:right-2 top-1"
|
|
102
|
+
}, formatTime(message.createdAt)), message.message && React__default.createElement("div", {
|
|
103
|
+
className: "whitespace-pre-wrap break-words leading-relaxed pr-12 sm:pr-16"
|
|
104
|
+
}, message.message), message.files?.totalCount > 0 && React__default.createElement("div", {
|
|
105
|
+
className: "mt-2 pr-12 sm:pr-16"
|
|
106
|
+
}, React__default.createElement(FilesList, {
|
|
107
|
+
uploaded: true,
|
|
108
|
+
files: message.files.data
|
|
109
|
+
}))));
|
|
110
|
+
};
|
|
111
|
+
const SlackLikeMessageGroup = ({
|
|
112
|
+
messages,
|
|
113
|
+
currentUser,
|
|
114
|
+
onOpen,
|
|
115
|
+
onMessageClick,
|
|
116
|
+
isDesktopView = false,
|
|
117
|
+
isSmallScreen = false
|
|
118
|
+
}) => {
|
|
119
|
+
// Filter out non-message items (like date strings)
|
|
120
|
+
const actualMessages = messages.filter(msg => typeof msg !== 'string');
|
|
121
|
+
// Group messages by user and time
|
|
122
|
+
const messageGroups = groupMessagesByUserAndTime(actualMessages);
|
|
123
|
+
return React__default.createElement("div", {
|
|
124
|
+
className: `min-h-fit ${isDesktopView ? 'space-y-8' : isSmallScreen ? 'space-y-4' : 'space-y-6'}`
|
|
125
|
+
}, messageGroups.map((group, groupIndex) => {
|
|
126
|
+
const author = group[0]?.author;
|
|
127
|
+
return React__default.createElement(MessageGroup, {
|
|
128
|
+
key: `group-${groupIndex}-${group[0]?.id}`,
|
|
129
|
+
author: author,
|
|
130
|
+
messages: group,
|
|
131
|
+
currentUser: currentUser,
|
|
132
|
+
onOpen: onOpen,
|
|
133
|
+
onMessageClick: onMessageClick,
|
|
134
|
+
isDesktopView: isDesktopView,
|
|
135
|
+
isSmallScreen: isSmallScreen
|
|
136
|
+
});
|
|
137
|
+
}));
|
|
138
|
+
};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;;
|
|
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;;YAiHqB,UAAU;;;AAw6BhC,wBAAiC"}
|