@droppii-org/chat-sdk 0.1.23 → 0.1.25
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/components/biz-inbox/BizInboxHeader.d.ts +3 -0
- package/dist/components/biz-inbox/BizInboxHeader.d.ts.map +1 -0
- package/dist/components/biz-inbox/BizInboxHeader.js +8 -0
- package/dist/components/biz-inbox/BizThreadAvatar.d.ts +10 -0
- package/dist/components/biz-inbox/BizThreadAvatar.d.ts.map +1 -0
- package/dist/components/biz-inbox/BizThreadAvatar.js +8 -0
- package/dist/components/biz-inbox/BizThreadCard.d.ts +8 -0
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -0
- package/dist/components/biz-inbox/BizThreadCard.js +25 -0
- package/dist/components/biz-inbox/BizThreadList.d.ts +11 -0
- package/dist/components/biz-inbox/BizThreadList.d.ts.map +1 -0
- package/dist/components/biz-inbox/BizThreadList.js +35 -0
- package/dist/components/biz-inbox/BizThreadTitle.d.ts +8 -0
- package/dist/components/biz-inbox/BizThreadTitle.d.ts.map +1 -0
- package/dist/components/biz-inbox/BizThreadTitle.js +6 -0
- package/dist/components/biz-inbox/index.d.ts +10 -0
- package/dist/components/biz-inbox/index.d.ts.map +1 -0
- package/dist/components/biz-inbox/index.js +5 -0
- package/dist/components/bizInbox/BizThreadAvatar.d.ts +10 -0
- package/dist/components/bizInbox/BizThreadAvatar.d.ts.map +1 -0
- package/dist/components/bizInbox/BizThreadAvatar.js +8 -0
- package/dist/components/bizInbox/BizThreadCard.d.ts.map +1 -1
- package/dist/components/bizInbox/BizThreadCard.js +12 -40
- package/dist/components/bizInbox/BizThreadList.d.ts +1 -1
- package/dist/components/bizInbox/BizThreadList.d.ts.map +1 -1
- package/dist/components/bizInbox/BizThreadList.js +22 -4
- package/dist/components/bizInbox/BizThreadTitle.d.ts +8 -0
- package/dist/components/bizInbox/BizThreadTitle.d.ts.map +1 -0
- package/dist/components/bizInbox/BizThreadTitle.js +6 -0
- package/dist/components/bizInbox/index.d.ts +4 -0
- package/dist/components/bizInbox/index.d.ts.map +1 -1
- package/dist/components/bizInbox/index.js +2 -0
- package/dist/components/bizThreadDetail/BizMessageBubble.d.ts +10 -0
- package/dist/components/bizThreadDetail/BizMessageBubble.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/BizMessageBubble.js +11 -0
- package/dist/components/bizThreadDetail/BizMessageList.d.ts +3 -0
- package/dist/components/bizThreadDetail/BizMessageList.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/BizMessageList.js +28 -0
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.d.ts +8 -0
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.js +18 -0
- package/dist/components/bizThreadDetail/BizThreadDetailInput.d.ts +8 -0
- package/dist/components/bizThreadDetail/BizThreadDetailInput.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/BizThreadDetailInput.js +147 -0
- package/dist/components/bizThreadDetail/index.d.ts +8 -0
- package/dist/components/bizThreadDetail/index.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/index.js +4 -0
- package/dist/components/bizThreadDetail/item/BizMessageItem.d.ts +8 -0
- package/dist/components/bizThreadDetail/item/BizMessageItem.d.ts.map +1 -0
- package/dist/components/bizThreadDetail/item/BizMessageItem.js +20 -0
- package/dist/components/cannedResponse/CannedResponseBody.js +2 -2
- package/dist/components/cannedResponse/CannedResponseFooter.js +1 -1
- package/dist/components/cannedResponse/CannedResponseHeader.js +1 -1
- package/dist/components/cannedResponse/team/TeamItem.d.ts.map +1 -1
- package/dist/components/cannedResponse/team/TeamItem.js +1 -1
- package/dist/components/chatBubble/ChatBubble.js +1 -1
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +3 -3
- package/dist/components/mediaCollection/FileCollection.js +1 -1
- package/dist/components/mediaCollection/LinkCollection.js +1 -1
- package/dist/components/mediaCollection/VideoCollection.js +1 -1
- package/dist/components/mediaCollection/index.js +1 -1
- package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
- package/dist/components/message/GroupMembersDrawer.js +1 -1
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +3 -3
- package/dist/components/message/MessageInfiniteScroll.d.ts +15 -0
- package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -0
- package/dist/components/message/MessageInfiniteScroll.js +20 -0
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +8 -76
- package/dist/components/message/SelectSession.js +1 -1
- package/dist/components/message/UnassignedSessionFooter.js +2 -2
- package/dist/components/message/footer/ActionBar.js +1 -1
- package/dist/components/message/footer/FilePreview.js +1 -1
- package/dist/components/message/footer/MediaActions.js +1 -1
- package/dist/components/message/footer/QuotedMessage.js +1 -1
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +1 -1
- package/dist/components/message/item/FileMessage.js +1 -1
- package/dist/components/message/item/QuoteMessage.js +2 -2
- package/dist/components/message/item/TextMessage.js +1 -1
- package/dist/components/message/item/index.js +1 -1
- package/dist/components/richTextEditor/RichTextEditor.js +4 -4
- package/dist/components/searchConversation/SearchAll.js +1 -1
- package/dist/components/searchConversation/SearchDrawer.js +1 -1
- package/dist/components/searchConversation/item/SearchItemAsUser.d.ts.map +1 -1
- package/dist/components/session/DeskAssignedSession.js +1 -1
- package/dist/components/session/DeskTeamInbox.js +1 -1
- package/dist/components/session/SessionFilterMenu.d.ts.map +1 -1
- package/dist/components/session/sessionMenuItems.d.ts.map +1 -1
- package/dist/components/session/sessionMenuItems.js +1 -1
- package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
- package/dist/components/thread/ManualAssignPopover.js +1 -1
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +1 -1
- package/dist/components/thread/UserSection.js +1 -1
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/hooks/biz/index.d.ts +1 -0
- package/dist/hooks/biz/index.d.ts.map +1 -1
- package/dist/hooks/biz/index.js +1 -0
- package/dist/hooks/biz/useBizConversationList.d.ts.map +1 -1
- package/dist/hooks/biz/useBizSendMessage.d.ts +4 -0
- package/dist/hooks/biz/useBizSendMessage.d.ts.map +1 -0
- package/dist/hooks/biz/useBizSendMessage.js +61 -0
- package/dist/hooks/biz/useCreateBizConversation.d.ts.map +1 -1
- package/dist/hooks/cannedResponse/useFetchCannedCategories.d.ts.map +1 -1
- package/dist/hooks/cannedResponse/useFetchCannedResponse.d.ts.map +1 -1
- package/dist/hooks/conversation/useConversation.js +1 -1
- package/dist/hooks/global/useGlobalEvent.js +2 -2
- package/dist/hooks/message/useMessageListScroll.d.ts +29 -0
- package/dist/hooks/message/useMessageListScroll.d.ts.map +1 -0
- package/dist/hooks/message/useMessageListScroll.js +88 -0
- package/dist/hooks/message/usePullSessionMessages.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +1 -1
- package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
- package/dist/hooks/session/useAssignSession.d.ts.map +1 -1
- package/dist/hooks/session/useCloseSession.d.ts.map +1 -1
- package/dist/hooks/session/useCreateNote.d.ts.map +1 -1
- package/dist/hooks/session/useGetLabelSession.d.ts.map +1 -1
- package/dist/hooks/session/useGetListSessionByConversation.d.ts.map +1 -1
- package/dist/hooks/session/useGetSession.d.ts.map +1 -1
- package/dist/hooks/session/useGetSessionSummary.d.ts.map +1 -1
- package/dist/hooks/session/useGetTeamSessionSummary.d.ts.map +1 -1
- package/dist/hooks/session/useGetTeamSessionSummary.js +14 -8
- package/dist/hooks/session/useGetTeamSupporters.d.ts.map +1 -1
- package/dist/hooks/session/useGetUserSideInfo.d.ts.map +1 -1
- package/dist/hooks/session/useJoinSession.d.ts.map +1 -1
- package/dist/hooks/session/useLeaveConversation.d.ts.map +1 -1
- package/dist/hooks/session/useReopenOrCreateSession.d.ts.map +1 -1
- package/dist/hooks/session/useSessionLatestPreview.d.ts.map +1 -1
- package/dist/hooks/session/useSessionLatestPreview.js +1 -1
- package/dist/hooks/session/useSortedSessions.d.ts.map +1 -1
- package/dist/hooks/session/useUpdateNote.d.ts.map +1 -1
- package/dist/hooks/session/useUpdateSession.d.ts.map +1 -1
- package/dist/hooks/session/useUpdateSessionInfo.d.ts.map +1 -1
- package/dist/hooks/team/useFetchMyTeam.d.ts.map +1 -1
- package/dist/hooks/user/useCurrentUserAccountType.d.ts.map +1 -1
- package/dist/hooks/user/useUpdateFcmToken.d.ts.map +1 -1
- package/dist/hooks/user/useUpdateFcmToken.js +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/locales/i18n.js +3 -3
- package/dist/locales/i18n.ts +3 -3
- package/dist/locales/vi/biz-inbox.json +20 -0
- package/dist/locales/vi/bizInbox.json +7 -0
- package/dist/screens/bizMessage/index.d.ts.map +1 -1
- package/dist/screens/bizMessage/index.js +37 -12
- package/dist/screens/bizThreadDetail/index.d.ts +9 -0
- package/dist/screens/bizThreadDetail/index.d.ts.map +1 -0
- package/dist/screens/bizThreadDetail/index.js +36 -0
- package/dist/store/bizConversation.d.ts +12 -0
- package/dist/store/bizConversation.d.ts.map +1 -0
- package/dist/store/bizConversation.js +22 -0
- package/dist/store/bizMessageDraft.d.ts +8 -0
- package/dist/store/bizMessageDraft.d.ts.map +1 -0
- package/dist/store/bizMessageDraft.js +23 -0
- package/dist/store/type.d.ts +111 -0
- package/dist/store/type.d.ts.map +1 -0
- package/dist/store/type.js +1 -0
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/biz.d.ts +20 -17
- package/dist/types/biz.d.ts.map +1 -1
- package/dist/types/biz.js +17 -1
- package/dist/types/chat.d.ts +1 -0
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/dto.d.ts +1 -1
- package/dist/types/dto.d.ts.map +1 -1
- package/dist/utils/bizConversation.d.ts +11 -0
- package/dist/utils/bizConversation.d.ts.map +1 -0
- package/dist/utils/bizConversation.js +65 -0
- package/dist/utils/bizMessage.d.ts +15 -0
- package/dist/utils/bizMessage.d.ts.map +1 -0
- package/dist/utils/bizMessage.js +23 -0
- package/dist/utils/events.d.ts +1 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/messageTransform.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizInboxHeader.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizInboxHeader.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,cAAc,+CAkBnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
const BizInboxHeader = () => {
|
|
5
|
+
const { t } = useTranslation("biz-inbox");
|
|
6
|
+
return (_jsx("div", { "data-testid": "biz-inbox-header", className: "flex w-full flex-col border-b border-gray-100 bg-white", children: _jsx("div", { className: "flex h-12 items-end px-3", children: _jsxs("div", { className: "flex h-full flex-col items-center justify-end px-3", children: [_jsx("span", { className: "pb-1.5 text-center text-[16px] font-bold leading-[160%] tracking-[0.16px] text-[#1B3FE4]", children: t("tabs.messages") }), _jsx("span", { className: "h-[3px] w-full rounded-t bg-[#1B3FE4]" })] }) }) }));
|
|
7
|
+
};
|
|
8
|
+
export default BizInboxHeader;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BizChatCategory } from "../../types/biz";
|
|
2
|
+
export interface BizThreadAvatarProps {
|
|
3
|
+
chatCategory: BizChatCategory;
|
|
4
|
+
displayName: string;
|
|
5
|
+
avatarUrl: string | null;
|
|
6
|
+
badgeLabel: string;
|
|
7
|
+
}
|
|
8
|
+
declare const BizThreadAvatar: ({ chatCategory, displayName, avatarUrl, badgeLabel, }: BizThreadAvatarProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default BizThreadAvatar;
|
|
10
|
+
//# sourceMappingURL=BizThreadAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadAvatar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,eAAe,GAAI,uDAKtB,oBAAoB,4CA8BtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Icon } from "../../components/icon";
|
|
5
|
+
import { BizChatCategory } from "../../types/biz";
|
|
6
|
+
import { resolveBizBadgeColor } from "../../utils/bizConversation";
|
|
7
|
+
const BizThreadAvatar = ({ chatCategory, displayName, avatarUrl, badgeLabel, }) => (_jsxs("div", { className: "relative h-12 w-12 shrink-0", children: [avatarUrl ? (_jsx("img", { src: avatarUrl, alt: displayName, className: "h-12 w-12 rounded-full object-cover" })) : (_jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-[#0C5CFF] text-white", children: chatCategory === BizChatCategory.GROUP ? (_jsx(Icon, { icon: "user-two-b", size: 20 })) : chatCategory === BizChatCategory.BIZ_BOT_PDP ? (_jsx(Icon, { icon: "droppii-o-1", size: 20 })) : (_jsx(Icon, { icon: "user-o", size: 20 })) })), badgeLabel && (_jsx("span", { className: clsx("absolute -bottom-px -right-px flex h-[17px] items-center justify-center gap-2 rounded-md border border-white px-1 text-[10px] font-semibold leading-3 text-white shadow-[inset_2px_6px_8px_0_rgba(0,0,0,0.40)]", resolveBizBadgeColor(chatCategory)), children: badgeLabel }))] }));
|
|
8
|
+
export default BizThreadAvatar;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BizConversationItem } from "../../types/biz";
|
|
2
|
+
export interface BizThreadCardProps {
|
|
3
|
+
item: BizConversationItem;
|
|
4
|
+
onClick: (item: BizConversationItem) => void;
|
|
5
|
+
}
|
|
6
|
+
declare const BizThreadCard: ({ item, onClick }: BizThreadCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default BizThreadCard;
|
|
8
|
+
//# sourceMappingURL=BizThreadCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadCard.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAYvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC9C;AAOD,QAAA,MAAM,aAAa,GAAI,mBAAmB,kBAAkB,4CA+C3D,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { formatTimestamp } from "../../utils/common";
|
|
5
|
+
import { resolveBizAvatarUrl, resolveBizBadgeLabel, resolveBizDisplayName, resolveBizLastMessagePreview, resolveBizLastMessageTime, } from "../../utils/bizConversation";
|
|
6
|
+
import BizThreadAvatar from "./BizThreadAvatar";
|
|
7
|
+
import BizThreadTitle from "./BizThreadTitle";
|
|
8
|
+
const formatLatestMessageTime = (sendTime) => {
|
|
9
|
+
if (!sendTime)
|
|
10
|
+
return "";
|
|
11
|
+
return formatTimestamp(sendTime, { hasTime: true });
|
|
12
|
+
};
|
|
13
|
+
const BizThreadCard = ({ item, onClick }) => {
|
|
14
|
+
const { t } = useTranslation("biz-inbox");
|
|
15
|
+
const displayName = resolveBizDisplayName(item, t("thread_card.fallback_name"));
|
|
16
|
+
const avatarUrl = resolveBizAvatarUrl(item);
|
|
17
|
+
const badgeLabel = resolveBizBadgeLabel(item.chatCategory, t);
|
|
18
|
+
const latestMessagePreview = resolveBizLastMessagePreview(item.lastMessage, t);
|
|
19
|
+
const latestMessageTime = formatLatestMessageTime(resolveBizLastMessageTime(item.lastMessage));
|
|
20
|
+
const handleClick = () => {
|
|
21
|
+
onClick(item);
|
|
22
|
+
};
|
|
23
|
+
return (_jsxs("button", { type: "button", onClick: handleClick, "data-testid": "biz-inbox-thread-card", className: "flex w-full shrink-0 items-center gap-2 border-b border-[#EFEFEF] bg-white p-3 text-left transition-colors hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#1677ff]", children: [_jsx(BizThreadAvatar, { chatCategory: item.chatCategory, displayName: displayName, avatarUrl: avatarUrl, badgeLabel: badgeLabel }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col pt-0.5", children: [_jsx(BizThreadTitle, { chatCategory: item.chatCategory, displayName: displayName }), _jsx("p", { className: "min-h-[22.4px] truncate text-[14px] font-normal leading-[160%] tracking-[0.14px] text-[#5C6366] [font-feature-settings:'liga'_off,'clig'_off]", children: latestMessagePreview })] }), latestMessageTime && (_jsx("span", { className: "shrink-0 text-[12px] font-normal leading-[160%] text-[#747B7E] [font-feature-settings:'liga'_off,'clig'_off]", children: latestMessageTime }))] }));
|
|
24
|
+
};
|
|
25
|
+
export default BizThreadCard;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BizConversationItem } from "../../types/biz";
|
|
2
|
+
export interface BizThreadListProps {
|
|
3
|
+
items: BizConversationItem[];
|
|
4
|
+
isFetchingNextPage: boolean;
|
|
5
|
+
hasNextPage: boolean;
|
|
6
|
+
onLoadMore: () => void;
|
|
7
|
+
onSelectThread?: (item: BizConversationItem) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const BizThreadList: ({ items, isFetchingNextPage, hasNextPage, onLoadMore, onSelectThread, }: BizThreadListProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default BizThreadList;
|
|
11
|
+
//# sourceMappingURL=BizThreadList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadList.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadList.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtD;AAYD,QAAA,MAAM,aAAa,GAAI,yEAMpB,kBAAkB,4CAoEpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { Empty } from "antd";
|
|
6
|
+
import InfiniteScroll from "react-infinite-scroll-component";
|
|
7
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
8
|
+
import { Icon } from "../../components/icon";
|
|
9
|
+
import BizThreadCard from "./BizThreadCard";
|
|
10
|
+
const FooterSkeleton = () => (_jsxs("div", { className: "flex items-center gap-3 p-3", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded-full bg-neutral-200" }), _jsxs("div", { className: "flex flex-1 flex-col gap-2", children: [_jsx("div", { className: "h-3 w-1/2 animate-pulse rounded bg-neutral-200" }), _jsx("div", { className: "h-2.5 w-1/3 animate-pulse rounded bg-neutral-200" })] })] }));
|
|
11
|
+
const BizThreadList = ({ items, isFetchingNextPage, hasNextPage, onLoadMore, onSelectThread, }) => {
|
|
12
|
+
const { t } = useTranslation("biz-inbox");
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const pathname = usePathname();
|
|
15
|
+
const searchParams = useSearchParams();
|
|
16
|
+
const selectConversation = useBizConversationStore((state) => state.selectConversation);
|
|
17
|
+
const handleSelectThread = (item) => {
|
|
18
|
+
selectConversation(item);
|
|
19
|
+
if (searchParams.get("threadId") === item.conversationId) {
|
|
20
|
+
onSelectThread === null || onSelectThread === void 0 ? void 0 : onSelectThread(item);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const newSearchParams = new URLSearchParams(searchParams);
|
|
24
|
+
newSearchParams.set("threadId", item.conversationId);
|
|
25
|
+
router.push(`${pathname}?${newSearchParams.toString()}`);
|
|
26
|
+
onSelectThread === null || onSelectThread === void 0 ? void 0 : onSelectThread(item);
|
|
27
|
+
};
|
|
28
|
+
const handleEndReached = () => {
|
|
29
|
+
if (hasNextPage && !isFetchingNextPage) {
|
|
30
|
+
onLoadMore();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return (_jsx("div", { id: "scrollableBizThreadsDiv", "data-testid": "biz-inbox-thread-list", className: "min-h-0 w-full flex-1 overflow-auto", children: _jsx(InfiniteScroll, { dataLength: items.length, next: handleEndReached, hasMore: hasNextPage, loader: isFetchingNextPage ? _jsx(FooterSkeleton, {}) : null, scrollableTarget: "scrollableBizThreadsDiv", children: items.length === 0 ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: t("empty.no_conversations") }) })) : (items.map((item) => (_jsx(BizThreadCard, { item: item, onClick: handleSelectThread }, item.conversationId)))) }) }));
|
|
34
|
+
};
|
|
35
|
+
export default BizThreadList;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BizChatCategory } from "../../types/biz";
|
|
2
|
+
export interface BizThreadTitleProps {
|
|
3
|
+
chatCategory: BizChatCategory;
|
|
4
|
+
displayName: string;
|
|
5
|
+
}
|
|
6
|
+
declare const BizThreadTitle: ({ chatCategory, displayName }: BizThreadTitleProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default BizThreadTitle;
|
|
8
|
+
//# sourceMappingURL=BizThreadTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadTitle.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadTitle.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,QAAA,MAAM,cAAc,GAAI,+BAA+B,mBAAmB,4CAczE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Icon } from "../../components/icon";
|
|
4
|
+
import { BizChatCategory } from "../../types/biz";
|
|
5
|
+
const BizThreadTitle = ({ chatCategory, displayName }) => (_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [chatCategory === BizChatCategory.GROUP && (_jsx(Icon, { icon: "user-two-b", size: 12, className: "shrink-0 text-black" })), chatCategory === BizChatCategory.BIZ_BOT_PDP && (_jsx("span", { className: "flex h-4 w-4 shrink-0 items-center justify-center gap-0.5 rounded-full border border-white bg-[linear-gradient(93deg,#607CFB_0%,#1B3FE4_100%)] px-1 py-0.5 text-white", children: _jsx(Icon, { icon: "shield-done-b", size: 8 }) })), _jsx("span", { className: "truncate text-[16px] font-[510] leading-[160%] text-black", children: displayName })] }));
|
|
6
|
+
export default BizThreadTitle;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default as BizInboxHeader } from "./BizInboxHeader";
|
|
2
|
+
export { default as BizThreadAvatar } from "./BizThreadAvatar";
|
|
3
|
+
export type { BizThreadAvatarProps } from "./BizThreadAvatar";
|
|
4
|
+
export { default as BizThreadTitle } from "./BizThreadTitle";
|
|
5
|
+
export type { BizThreadTitleProps } from "./BizThreadTitle";
|
|
6
|
+
export { default as BizThreadCard } from "./BizThreadCard";
|
|
7
|
+
export type { BizThreadCardProps } from "./BizThreadCard";
|
|
8
|
+
export { default as BizThreadList } from "./BizThreadList";
|
|
9
|
+
export type { BizThreadListProps } from "./BizThreadList";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as BizInboxHeader } from "./BizInboxHeader";
|
|
2
|
+
export { default as BizThreadAvatar } from "./BizThreadAvatar";
|
|
3
|
+
export { default as BizThreadTitle } from "./BizThreadTitle";
|
|
4
|
+
export { default as BizThreadCard } from "./BizThreadCard";
|
|
5
|
+
export { default as BizThreadList } from "./BizThreadList";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BizChatCategory } from "../../types/biz";
|
|
2
|
+
export interface BizThreadAvatarProps {
|
|
3
|
+
chatCategory: BizChatCategory;
|
|
4
|
+
displayName: string;
|
|
5
|
+
avatarUrl: string | null;
|
|
6
|
+
badgeLabel: string;
|
|
7
|
+
}
|
|
8
|
+
declare const BizThreadAvatar: ({ chatCategory, displayName, avatarUrl, badgeLabel, }: BizThreadAvatarProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default BizThreadAvatar;
|
|
10
|
+
//# sourceMappingURL=BizThreadAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadAvatar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,eAAe,GAAI,uDAKtB,oBAAoB,4CA8BtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Icon } from "../icon";
|
|
5
|
+
import { BizChatCategory } from "../../types/biz";
|
|
6
|
+
import { resolveBizBadgeColor } from "../../utils/bizConversation";
|
|
7
|
+
const BizThreadAvatar = ({ chatCategory, displayName, avatarUrl, badgeLabel, }) => (_jsxs("div", { className: "relative h-12 w-12 shrink-0", children: [avatarUrl ? (_jsx("img", { src: avatarUrl, alt: displayName, className: "h-12 w-12 rounded-full object-cover" })) : (_jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-[#0C5CFF] text-white", children: chatCategory === BizChatCategory.GROUP ? (_jsx(Icon, { icon: "user-two-b", size: 20 })) : chatCategory === BizChatCategory.BIZ_BOT_PDP ? (_jsx(Icon, { icon: "droppii-o-1", size: 20 })) : (_jsx(Icon, { icon: "user-o", size: 20 })) })), badgeLabel && (_jsx("span", { className: clsx("absolute -bottom-px -right-px flex h-[17px] items-center justify-center gap-2 rounded-md border border-white px-1 text-[10px] font-semibold leading-3 text-white shadow-[inset_2px_6px_8px_0_rgba(0,0,0,0.40)]", resolveBizBadgeColor(chatCategory)), children: badgeLabel }))] }));
|
|
8
|
+
export default BizThreadAvatar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizThreadCard.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BizThreadCard.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAY3D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC9C;AAOD,QAAA,MAAM,aAAa,GAAI,mBAAmB,kBAAkB,4CA+C3D,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,53 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useMemo } from "react";
|
|
4
3
|
import { useTranslation } from "react-i18next";
|
|
5
|
-
import clsx from "clsx";
|
|
6
|
-
import { Icon } from "../icon";
|
|
7
4
|
import { formatTimestamp } from "../../utils/common";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return fullName;
|
|
14
|
-
const username = (_b = item.peer.user.username) === null || _b === void 0 ? void 0 : _b.trim();
|
|
15
|
-
if (username)
|
|
16
|
-
return username;
|
|
17
|
-
}
|
|
18
|
-
if (item.peer.group) {
|
|
19
|
-
const groupName = (_c = item.peer.group.name) === null || _c === void 0 ? void 0 : _c.trim();
|
|
20
|
-
if (groupName)
|
|
21
|
-
return groupName;
|
|
22
|
-
}
|
|
23
|
-
return fallback;
|
|
24
|
-
};
|
|
25
|
-
const resolveAvatarUrl = (item) => {
|
|
26
|
-
var _a, _b, _c, _d;
|
|
27
|
-
return (_d = (_b = (_a = item.peer.user) === null || _a === void 0 ? void 0 : _a.avatar) !== null && _b !== void 0 ? _b : (_c = item.peer.group) === null || _c === void 0 ? void 0 : _c.avatar) !== null && _d !== void 0 ? _d : null;
|
|
28
|
-
};
|
|
29
|
-
const formatLatestMessageTime = (latestMessageAt) => {
|
|
30
|
-
if (!latestMessageAt)
|
|
31
|
-
return "";
|
|
32
|
-
const timestamp = new Date(latestMessageAt).getTime();
|
|
33
|
-
if (Number.isNaN(timestamp))
|
|
5
|
+
import { resolveBizAvatarUrl, resolveBizBadgeLabel, resolveBizDisplayName, resolveBizLastMessagePreview, resolveBizLastMessageTime, } from "../../utils/bizConversation";
|
|
6
|
+
import BizThreadAvatar from "./BizThreadAvatar";
|
|
7
|
+
import BizThreadTitle from "./BizThreadTitle";
|
|
8
|
+
const formatLatestMessageTime = (sendTime) => {
|
|
9
|
+
if (!sendTime)
|
|
34
10
|
return "";
|
|
35
|
-
return formatTimestamp(
|
|
11
|
+
return formatTimestamp(sendTime, { hasTime: true });
|
|
36
12
|
};
|
|
37
13
|
const BizThreadCard = ({ item, onClick }) => {
|
|
38
14
|
const { t } = useTranslation("bizInbox");
|
|
39
|
-
const displayName =
|
|
40
|
-
const avatarUrl =
|
|
41
|
-
const badgeLabel = item.chatCategory
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
? t("thread_card.badge.bot")
|
|
45
|
-
: "";
|
|
46
|
-
const latestMessagePreview = "";
|
|
47
|
-
const latestMessageTime = formatLatestMessageTime(item.latestMessageAt);
|
|
15
|
+
const displayName = resolveBizDisplayName(item, t("thread_card.fallback_name"));
|
|
16
|
+
const avatarUrl = resolveBizAvatarUrl(item);
|
|
17
|
+
const badgeLabel = resolveBizBadgeLabel(item.chatCategory, t);
|
|
18
|
+
const latestMessagePreview = resolveBizLastMessagePreview(item.lastMessage, t);
|
|
19
|
+
const latestMessageTime = formatLatestMessageTime(resolveBizLastMessageTime(item.lastMessage));
|
|
48
20
|
const handleClick = () => {
|
|
49
21
|
onClick(item);
|
|
50
22
|
};
|
|
51
|
-
return (_jsxs("button", { type: "button", onClick: handleClick, "data-testid": "biz-inbox-thread-card", className: "flex w-full shrink-0 items-center gap-2 border-b border-[#EFEFEF] bg-white p-3 text-left transition-colors hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#1677ff]", children: [
|
|
23
|
+
return (_jsxs("button", { type: "button", onClick: handleClick, "data-testid": "biz-inbox-thread-card", className: "flex w-full shrink-0 items-center gap-2 border-b border-[#EFEFEF] bg-white p-3 text-left transition-colors hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#1677ff]", children: [_jsx(BizThreadAvatar, { chatCategory: item.chatCategory, displayName: displayName, avatarUrl: avatarUrl, badgeLabel: badgeLabel }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col pt-0.5", children: [_jsx(BizThreadTitle, { chatCategory: item.chatCategory, displayName: displayName }), _jsx("p", { className: "min-h-[22.4px] truncate text-[14px] font-normal leading-[160%] tracking-[0.14px] text-[#5C6366] [font-feature-settings:'liga'_off,'clig'_off]", children: latestMessagePreview })] }), latestMessageTime && (_jsx("span", { className: "shrink-0 text-[12px] font-normal leading-[160%] text-[#747B7E] [font-feature-settings:'liga'_off,'clig'_off]", children: latestMessageTime }))] }));
|
|
52
24
|
};
|
|
53
25
|
export default BizThreadCard;
|
|
@@ -4,7 +4,7 @@ export interface BizThreadListProps {
|
|
|
4
4
|
isFetchingNextPage: boolean;
|
|
5
5
|
hasNextPage: boolean;
|
|
6
6
|
onLoadMore: () => void;
|
|
7
|
-
onSelectThread
|
|
7
|
+
onSelectThread?: (item: BizConversationItem) => void;
|
|
8
8
|
}
|
|
9
9
|
declare const BizThreadList: ({ items, isFetchingNextPage, hasNextPage, onLoadMore, onSelectThread, }: BizThreadListProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
10
|
export default BizThreadList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizThreadList.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BizThreadList.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadList.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAK3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtD;AAYD,QAAA,MAAM,aAAa,GAAI,yEAMpB,kBAAkB,4CAoEpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,17 +1,35 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
4
5
|
import { Empty } from "antd";
|
|
5
6
|
import InfiniteScroll from "react-infinite-scroll-component";
|
|
7
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
6
8
|
import { Icon } from "../icon";
|
|
7
9
|
import BizThreadCard from "./BizThreadCard";
|
|
8
10
|
const FooterSkeleton = () => (_jsxs("div", { className: "flex items-center gap-3 p-3", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded-full bg-neutral-200" }), _jsxs("div", { className: "flex flex-1 flex-col gap-2", children: [_jsx("div", { className: "h-3 w-1/2 animate-pulse rounded bg-neutral-200" }), _jsx("div", { className: "h-2.5 w-1/3 animate-pulse rounded bg-neutral-200" })] })] }));
|
|
9
11
|
const BizThreadList = ({ items, isFetchingNextPage, hasNextPage, onLoadMore, onSelectThread, }) => {
|
|
10
|
-
const
|
|
12
|
+
const { t } = useTranslation("bizInbox");
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const pathname = usePathname();
|
|
15
|
+
const searchParams = useSearchParams();
|
|
16
|
+
const selectConversation = useBizConversationStore((state) => state.selectConversation);
|
|
17
|
+
const handleSelectThread = (item) => {
|
|
18
|
+
selectConversation(item);
|
|
19
|
+
if (searchParams.get("threadId") === item.conversationId) {
|
|
20
|
+
onSelectThread === null || onSelectThread === void 0 ? void 0 : onSelectThread(item);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const newSearchParams = new URLSearchParams(searchParams);
|
|
24
|
+
newSearchParams.set("threadId", item.conversationId);
|
|
25
|
+
router.push(`${pathname}?${newSearchParams.toString()}`);
|
|
26
|
+
onSelectThread === null || onSelectThread === void 0 ? void 0 : onSelectThread(item);
|
|
27
|
+
};
|
|
28
|
+
const handleEndReached = () => {
|
|
11
29
|
if (hasNextPage && !isFetchingNextPage) {
|
|
12
30
|
onLoadMore();
|
|
13
31
|
}
|
|
14
|
-
}
|
|
15
|
-
return (_jsx("div", { id: "scrollableBizThreadsDiv", "data-testid": "biz-inbox-thread-list", className: "min-h-0 w-full flex-1 overflow-auto", children: _jsx(InfiniteScroll, { dataLength: items.length, next: handleEndReached, hasMore: hasNextPage, loader: isFetchingNextPage ? _jsx(FooterSkeleton, {}) : null, scrollableTarget: "scrollableBizThreadsDiv", children: items.length === 0 ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: "
|
|
32
|
+
};
|
|
33
|
+
return (_jsx("div", { id: "scrollableBizThreadsDiv", "data-testid": "biz-inbox-thread-list", className: "min-h-0 w-full flex-1 overflow-auto", children: _jsx(InfiniteScroll, { dataLength: items.length, next: handleEndReached, hasMore: hasNextPage, loader: isFetchingNextPage ? _jsx(FooterSkeleton, {}) : null, scrollableTarget: "scrollableBizThreadsDiv", children: items.length === 0 ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: t("empty.no_conversations") }) })) : (items.map((item) => (_jsx(BizThreadCard, { item: item, onClick: handleSelectThread }, item.conversationId)))) }) }));
|
|
16
34
|
};
|
|
17
35
|
export default BizThreadList;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BizChatCategory } from "../../types/biz";
|
|
2
|
+
export interface BizThreadTitleProps {
|
|
3
|
+
chatCategory: BizChatCategory;
|
|
4
|
+
displayName: string;
|
|
5
|
+
}
|
|
6
|
+
declare const BizThreadTitle: ({ chatCategory, displayName }: BizThreadTitleProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default BizThreadTitle;
|
|
8
|
+
//# sourceMappingURL=BizThreadTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadTitle.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/BizThreadTitle.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,QAAA,MAAM,cAAc,GAAI,+BAA+B,mBAAmB,4CAczE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Icon } from "../icon";
|
|
4
|
+
import { BizChatCategory } from "../../types/biz";
|
|
5
|
+
const BizThreadTitle = ({ chatCategory, displayName }) => (_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [chatCategory === BizChatCategory.GROUP && (_jsx(Icon, { icon: "user-two-b", size: 12, className: "shrink-0 text-black" })), chatCategory === BizChatCategory.BIZ_BOT_PDP && (_jsx("span", { className: "flex h-4 w-4 shrink-0 items-center justify-center gap-0.5 rounded-full border border-white bg-[linear-gradient(93deg,#607CFB_0%,#1B3FE4_100%)] px-1 py-0.5 text-white", children: _jsx(Icon, { icon: "shield-done-b", size: 8 }) })), _jsx("span", { className: "truncate text-[16px] font-[510] leading-[160%] text-black", children: displayName })] }));
|
|
6
|
+
export default BizThreadTitle;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export { default as BizInboxHeader } from "./BizInboxHeader";
|
|
2
|
+
export { default as BizThreadAvatar } from "./BizThreadAvatar";
|
|
3
|
+
export type { BizThreadAvatarProps } from "./BizThreadAvatar";
|
|
4
|
+
export { default as BizThreadTitle } from "./BizThreadTitle";
|
|
5
|
+
export type { BizThreadTitleProps } from "./BizThreadTitle";
|
|
2
6
|
export { default as BizThreadCard } from "./BizThreadCard";
|
|
3
7
|
export type { BizThreadCardProps } from "./BizThreadCard";
|
|
4
8
|
export { default as BizThreadList } from "./BizThreadList";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bizInbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as BizInboxHeader } from "./BizInboxHeader";
|
|
2
|
+
export { default as BizThreadAvatar } from "./BizThreadAvatar";
|
|
3
|
+
export { default as BizThreadTitle } from "./BizThreadTitle";
|
|
2
4
|
export { default as BizThreadCard } from "./BizThreadCard";
|
|
3
5
|
export { default as BizThreadList } from "./BizThreadList";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface BizMessageBubbleProps {
|
|
2
|
+
isMine: boolean;
|
|
3
|
+
content: string;
|
|
4
|
+
senderName?: string;
|
|
5
|
+
showSenderName?: boolean;
|
|
6
|
+
showTip?: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const BizMessageBubble: ({ isMine, content, senderName, showSenderName, showTip, }: BizMessageBubbleProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default BizMessageBubble;
|
|
10
|
+
//# sourceMappingURL=BizMessageBubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMessageBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bizThreadDetail/BizMessageBubble.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6BD,QAAA,MAAM,gBAAgB,GAAI,2DAMvB,qBAAqB,4CA2BvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
const INCOMING_TAIL_PATH = "M1.3798 18H4V0C3.51762 4.5 3.34269 10.5 0.966518 14C-0.568384 16.2608 -0.159364 18 1.3798 18Z";
|
|
5
|
+
const OUTGOING_TAIL_PATH = "M2.6202 18H0V0C0.482375 4.5 0.657308 10.5 3.03348 14C4.56838 16.2608 4.15936 18 2.6202 18Z";
|
|
6
|
+
const BizMessageBubbleTail = ({ isMine }) => (_jsx("div", { className: "flex shrink-0 items-center justify-center", children: _jsx("div", { className: "flex-none", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "4", height: "18", viewBox: "0 0 4 18", fill: "none", "aria-hidden": true, children: _jsx("path", { d: isMine ? OUTGOING_TAIL_PATH : INCOMING_TAIL_PATH, fill: isMine ? "#0051FF" : "#83899D", fillOpacity: "0.1" }) }) }) }));
|
|
7
|
+
const BizMessageBubble = ({ isMine, content, senderName, showSenderName, showTip = true, }) => {
|
|
8
|
+
const bubbleClass = clsx("relative max-w-full rounded-[20px] p-2", isMine ? "bg-[rgba(0,81,255,0.1)]" : "bg-[rgba(131,137,157,0.1)]");
|
|
9
|
+
return (_jsxs("div", { className: "relative flex items-end", "data-testid": "biz-message-bubble", children: [!isMine && showTip && _jsx(BizMessageBubbleTail, { isMine: isMine }), _jsx("div", { className: bubbleClass, children: _jsxs("div", { className: "flex flex-col gap-1 px-1", children: [showSenderName && senderName && (_jsx("span", { className: "text-[12px] font-medium leading-[160%] tracking-[0.12px] text-[#747B7E]", children: senderName })), _jsx("p", { className: "whitespace-pre-wrap break-words text-[16px] leading-[160%] tracking-[0.16px] text-[#393E40]", children: content })] }) }), isMine && showTip && _jsx(BizMessageBubbleTail, { isMine: isMine })] }));
|
|
10
|
+
};
|
|
11
|
+
export default BizMessageBubble;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/bizThreadDetail/BizMessageList.tsx"],"names":[],"mappings":"AAaA,QAAA,MAAM,cAAc,+CA8DnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { Empty, Spin } from "antd";
|
|
5
|
+
import { useTranslation } from "react-i18next";
|
|
6
|
+
import { useChatContext } from "../../context/ChatContext";
|
|
7
|
+
import MessageInfiniteScroll from "../../components/message/MessageInfiniteScroll";
|
|
8
|
+
import { useMessage } from "../../hooks/message/useMessage";
|
|
9
|
+
import { useMessageListScroll } from "../../hooks/message/useMessageListScroll";
|
|
10
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
11
|
+
import emitter from "../../utils/events";
|
|
12
|
+
import BizMessageItem from "./item/BizMessageItem";
|
|
13
|
+
const BizMessageList = () => {
|
|
14
|
+
const { t } = useTranslation("biz-inbox");
|
|
15
|
+
const { user } = useChatContext();
|
|
16
|
+
const conversationId = useBizConversationStore((state) => { var _a; return (_a = state.conversationData) === null || _a === void 0 ? void 0 : _a.conversationId; });
|
|
17
|
+
const messageController = useMessage(conversationId, undefined, !!conversationId);
|
|
18
|
+
const { scrollRef, loadMoreOldMessage, handleInfiniteScroll, scrollToBottomIfAtBottom, } = useMessageListScroll(Object.assign({ conversationId, userId: user === null || user === void 0 ? void 0 : user.userID }, messageController));
|
|
19
|
+
const { loadState, moreNewLoading } = messageController;
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
emitter.on("BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM", scrollToBottomIfAtBottom);
|
|
22
|
+
return () => {
|
|
23
|
+
emitter.off("BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM", scrollToBottomIfAtBottom);
|
|
24
|
+
};
|
|
25
|
+
}, [scrollToBottomIfAtBottom]);
|
|
26
|
+
return (_jsxs("div", { "data-testid": "biz-message-list", className: "relative flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden bg-white", children: [_jsx(MessageInfiniteScroll, { scrollRef: scrollRef, scrollableTargetId: "scrollableBizMessagesDiv", loadState: loadState, onLoadMoreOld: loadMoreOldMessage, onScroll: handleInfiniteScroll, containerClassName: "h-full", empty: _jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Empty, { description: t("empty.no_messages") }) }), children: loadState.messageList.map((message, _, array) => (_jsx(BizMessageItem, { message: message, allMessages: array }, message.clientMsgID))) }), moreNewLoading && (_jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }))] }));
|
|
27
|
+
};
|
|
28
|
+
export default BizMessageList;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BizConversationItem } from "../../types/biz";
|
|
2
|
+
export interface BizThreadDetailHeaderProps {
|
|
3
|
+
conversation: BizConversationItem;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
}
|
|
6
|
+
declare const BizThreadDetailHeader: ({ conversation, onBack, }: BizThreadDetailHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default BizThreadDetailHeader;
|
|
8
|
+
//# sourceMappingURL=BizThreadDetailHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadDetailHeader.d.ts","sourceRoot":"","sources":["../../../src/components/bizThreadDetail/BizThreadDetailHeader.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQvD,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAqBD,QAAA,MAAM,qBAAqB,GAAI,2BAG5B,0BAA0B,4CA8C5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { Icon } from "../../components/icon";
|
|
5
|
+
import BizThreadAvatar from "../../components/biz-inbox/BizThreadAvatar";
|
|
6
|
+
import BizThreadTitle from "../../components/biz-inbox/BizThreadTitle";
|
|
7
|
+
import { isBizGroupChat, resolveBizAvatarUrl, resolveBizBadgeLabel, resolveBizDisplayName, } from "../../utils/bizConversation";
|
|
8
|
+
const HeaderIconButton = ({ icon, onClick, testId, }) => (_jsx("button", { type: "button", onClick: onClick, "data-testid": testId, className: "flex shrink-0 cursor-pointer items-center justify-center p-2 text-[#1B3FE4]", children: _jsx(Icon, { icon: icon, size: 24 }) }));
|
|
9
|
+
const BizThreadDetailHeader = ({ conversation, onBack, }) => {
|
|
10
|
+
const { t } = useTranslation("biz-inbox");
|
|
11
|
+
const isGroup = isBizGroupChat(conversation);
|
|
12
|
+
const displayName = resolveBizDisplayName(conversation, t("thread_card.fallback_name"));
|
|
13
|
+
const avatarUrl = resolveBizAvatarUrl(conversation);
|
|
14
|
+
const badgeLabel = resolveBizBadgeLabel(conversation.chatCategory, t);
|
|
15
|
+
const subtitle = isGroup ? "" : t("thread_detail.profile_hint");
|
|
16
|
+
return (_jsxs("div", { "data-testid": "biz-thread-detail-header", className: "flex w-full cursor-default items-center border-b border-[#EFEFEF] bg-white p-2 shadow-[inset_0px_-1px_0px_0px_rgba(61,63,64,0.1)]", children: [_jsx(HeaderIconButton, { icon: "arrow-left-o", onClick: onBack, testId: "biz-thread-detail-back" }), _jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 px-1", "data-testid": "biz-thread-detail-profile", children: [_jsx(BizThreadAvatar, { chatCategory: conversation.chatCategory, displayName: displayName, avatarUrl: avatarUrl, badgeLabel: badgeLabel }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(BizThreadTitle, { chatCategory: conversation.chatCategory, displayName: displayName }), _jsx("p", { className: "truncate text-[10px] font-normal leading-[160%] tracking-[0.1px] text-[#5C6366] [font-feature-settings:'liga'_off,'clig'_off]", children: subtitle })] })] })] }));
|
|
17
|
+
};
|
|
18
|
+
export default BizThreadDetailHeader;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface BizThreadDetailInputProps {
|
|
2
|
+
placeholder?: string;
|
|
3
|
+
onSendMessage?: (text: string) => void;
|
|
4
|
+
onInputChange?: (value: string) => void;
|
|
5
|
+
}
|
|
6
|
+
declare const BizThreadDetailInput: ({ placeholder, onSendMessage, onInputChange, }: BizThreadDetailInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default BizThreadDetailInput;
|
|
8
|
+
//# sourceMappingURL=BizThreadDetailInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizThreadDetailInput.d.ts","sourceRoot":"","sources":["../../../src/components/bizThreadDetail/BizThreadDetailInput.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,oBAAoB,GAAI,gDAI3B,yBAAyB,4CAwM3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|