@droppii-org/chat-sdk 0.1.6 → 0.1.8

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.
Files changed (108) hide show
  1. package/dist/assets/droppiiFontSelection.json +14521 -14521
  2. package/dist/assets/sdk/sql-wasm.wasm +0 -0
  3. package/dist/assets/svg/cannedResponse.tsx +48 -48
  4. package/dist/assets/svg/document.tsx +37 -37
  5. package/dist/assets/svg/index.ts +2 -2
  6. package/dist/components/cannedResponse/CannedResponseBody.d.ts.map +1 -1
  7. package/dist/components/cannedResponse/CannedResponseBody.js +54 -3
  8. package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
  9. package/dist/components/conversation/ConversationBySessionItem.js +7 -2
  10. package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
  11. package/dist/components/conversation/DeskConversationList.js +22 -17
  12. package/dist/components/message/MessageHeader.d.ts +2 -2
  13. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  14. package/dist/components/message/MessageHeader.js +5 -2
  15. package/dist/components/message/MessageList.d.ts.map +1 -1
  16. package/dist/components/message/MessageList.js +31 -22
  17. package/dist/components/message/SelectSession.d.ts.map +1 -1
  18. package/dist/components/message/SelectSession.js +7 -9
  19. package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
  20. package/dist/components/message/footer/ActionBar.js +3 -2
  21. package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
  22. package/dist/components/message/footer/CannedResponsePlugin.js +37 -1
  23. package/dist/components/message/footer/ComposerEditor.d.ts +7 -0
  24. package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -0
  25. package/dist/components/message/footer/ComposerEditor.js +13 -0
  26. package/dist/components/message/footer/ComposerTabs.d.ts +9 -0
  27. package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -0
  28. package/dist/components/message/footer/ComposerTabs.js +37 -0
  29. package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
  30. package/dist/components/message/footer/EnterHandler.js +10 -1
  31. package/dist/components/message/footer/index.d.ts +2 -2
  32. package/dist/components/message/footer/index.d.ts.map +1 -1
  33. package/dist/components/message/footer/index.js +45 -9
  34. package/dist/components/message/item/index.d.ts.map +1 -1
  35. package/dist/components/message/item/index.js +11 -1
  36. package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
  37. package/dist/components/session/DeskAssignedSession.js +14 -109
  38. package/dist/components/session/DeskTeamInbox.d.ts +3 -0
  39. package/dist/components/session/DeskTeamInbox.d.ts.map +1 -0
  40. package/dist/components/session/DeskTeamInbox.js +56 -0
  41. package/dist/components/session/SessionFilterMenu.d.ts +13 -0
  42. package/dist/components/session/SessionFilterMenu.d.ts.map +1 -0
  43. package/dist/components/session/SessionFilterMenu.js +27 -0
  44. package/dist/components/session/sessionMenuItems.d.ts +26 -0
  45. package/dist/components/session/sessionMenuItems.d.ts.map +1 -0
  46. package/dist/components/session/sessionMenuItems.js +108 -0
  47. package/dist/hooks/conversation/useConversationPreview.d.ts +12 -0
  48. package/dist/hooks/conversation/useConversationPreview.d.ts.map +1 -0
  49. package/dist/hooks/conversation/useConversationPreview.js +22 -0
  50. package/dist/hooks/message/useConversationMessages.d.ts +27 -0
  51. package/dist/hooks/message/useConversationMessages.d.ts.map +1 -0
  52. package/dist/hooks/message/useConversationMessages.js +29 -0
  53. package/dist/hooks/message/useMessage.d.ts.map +1 -1
  54. package/dist/hooks/message/usePullSessionMessages.d.ts +9 -0
  55. package/dist/hooks/message/usePullSessionMessages.d.ts.map +1 -0
  56. package/dist/hooks/message/usePullSessionMessages.js +27 -0
  57. package/dist/hooks/message/useSendMessage.d.ts +8 -6
  58. package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
  59. package/dist/hooks/message/useSendMessage.js +8 -8
  60. package/dist/hooks/session/useConversationSessionState.d.ts +21 -0
  61. package/dist/hooks/session/useConversationSessionState.d.ts.map +1 -0
  62. package/dist/hooks/session/useConversationSessionState.js +41 -0
  63. package/dist/hooks/session/useGetSession.d.ts.map +1 -1
  64. package/dist/hooks/session/useGetSession.js +138 -52
  65. package/dist/hooks/session/useGetTeamSessionSummary.d.ts +3 -0
  66. package/dist/hooks/session/useGetTeamSessionSummary.d.ts.map +1 -0
  67. package/dist/hooks/session/useGetTeamSessionSummary.js +12 -0
  68. package/dist/hooks/session/useIsJoinedGroup.d.ts +5 -0
  69. package/dist/hooks/session/useIsJoinedGroup.d.ts.map +1 -0
  70. package/dist/hooks/session/useIsJoinedGroup.js +24 -0
  71. package/dist/hooks/session/useJoinGroupFlow.d.ts +12 -0
  72. package/dist/hooks/session/useJoinGroupFlow.d.ts.map +1 -0
  73. package/dist/hooks/session/useJoinGroupFlow.js +59 -0
  74. package/dist/hooks/session/useJoinSession.d.ts +3 -0
  75. package/dist/hooks/session/useJoinSession.d.ts.map +1 -0
  76. package/dist/hooks/session/useJoinSession.js +38 -0
  77. package/dist/hooks/user/useCurrentUserAccountType.d.ts +3 -0
  78. package/dist/hooks/user/useCurrentUserAccountType.d.ts.map +1 -0
  79. package/dist/hooks/user/useCurrentUserAccountType.js +30 -0
  80. package/dist/locales/i18n.ts +18 -18
  81. package/dist/locales/vi/common.json +112 -102
  82. package/dist/screens/chatBubble/index.d.ts +2 -2
  83. package/dist/screens/chatBubble/index.d.ts.map +1 -1
  84. package/dist/screens/chatBubble/index.js +13 -7
  85. package/dist/services/query.d.ts +5 -0
  86. package/dist/services/query.d.ts.map +1 -1
  87. package/dist/services/query.js +5 -0
  88. package/dist/services/routes.d.ts +5 -0
  89. package/dist/services/routes.d.ts.map +1 -1
  90. package/dist/services/routes.js +5 -0
  91. package/dist/store/conversation.d.ts.map +1 -1
  92. package/dist/store/conversation.js +41 -12
  93. package/dist/store/session.js +1 -1
  94. package/dist/styles/global.css +1 -1
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/dist/types/chat.d.ts +18 -1
  97. package/dist/types/chat.d.ts.map +1 -1
  98. package/dist/types/chat.js +9 -0
  99. package/dist/types/dto.d.ts +87 -0
  100. package/dist/types/dto.d.ts.map +1 -1
  101. package/dist/utils/events.d.ts +1 -0
  102. package/dist/utils/events.d.ts.map +1 -1
  103. package/dist/utils/messageTransform.d.ts +5 -0
  104. package/dist/utils/messageTransform.d.ts.map +1 -0
  105. package/dist/utils/messageTransform.js +106 -0
  106. package/dist/utils/queryHelpers.d.ts.map +1 -1
  107. package/dist/utils/queryHelpers.js +2 -0
  108. package/package.json +11 -11
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { Icon } from "../icon";
6
+ import { useGetTeamSessionSummary } from "../../hooks/session/useGetTeamSessionSummary";
7
+ import useSessionStore from "../../store/session";
8
+ import emitter from "../../utils/events";
9
+ import SessionFilterMenu from "./SessionFilterMenu";
10
+ const TeamGroup = memo(({ team, isExpanded, isSelected, selectedFilter, onToggle, onFilterSelect, }) => (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-2 cursor-pointer hover:bg-gray-50", onClick: onToggle, children: [_jsx("span", { className: "text-sm font-semibold text-blue-500 truncate flex-1", children: team.teamName }), _jsx(Icon, { icon: isExpanded ? "angle-up-o" : "angle-down-o", size: 16, className: "text-gray-400 shrink-0" })] }), isExpanded && (_jsx(SessionFilterMenu, { summary: team.summary, isActive: isSelected, filterSummary: selectedFilter, onFilterSelect: onFilterSelect, includeUnassigned: true, activeCount: team.summary.activeSessionCount }))] })));
11
+ const DeskTeamInbox = () => {
12
+ const { t } = useTranslation();
13
+ const { data: teamSummaries, refetch } = useGetTeamSessionSummary();
14
+ const filterSummary = useSessionStore((s) => s.filterSummary);
15
+ const setFilterSummary = useSessionStore((s) => s.setFilterSummary);
16
+ const [expandedTeamIds, setExpandedTeamIds] = useState([]);
17
+ const initializedRef = useRef(false);
18
+ useEffect(() => {
19
+ if ((teamSummaries === null || teamSummaries === void 0 ? void 0 : teamSummaries.length) && !initializedRef.current) {
20
+ setExpandedTeamIds([teamSummaries[0].teamId]);
21
+ initializedRef.current = true;
22
+ }
23
+ }, [teamSummaries]);
24
+ useEffect(() => {
25
+ const handler = () => refetch();
26
+ emitter.on("UPDATE_SESSION", handler);
27
+ return () => {
28
+ emitter.off("UPDATE_SESSION", handler);
29
+ };
30
+ }, [refetch]);
31
+ const toggleTeam = useCallback((teamId) => {
32
+ setExpandedTeamIds((prev) => prev.includes(teamId)
33
+ ? prev.filter((id) => id !== teamId)
34
+ : [...prev, teamId]);
35
+ }, []);
36
+ const toggleHandlers = useMemo(() => {
37
+ if (!teamSummaries)
38
+ return {};
39
+ return Object.fromEntries(teamSummaries.map((team) => [
40
+ team.teamId,
41
+ () => toggleTeam(team.teamId),
42
+ ]));
43
+ }, [teamSummaries, toggleTeam]);
44
+ const filterHandlers = useMemo(() => {
45
+ if (!teamSummaries)
46
+ return {};
47
+ return Object.fromEntries(teamSummaries.map((team) => [
48
+ team.teamId,
49
+ (filter) => setFilterSummary(Object.assign(Object.assign({}, filter), { teamId: team.teamId })),
50
+ ]));
51
+ }, [teamSummaries, setFilterSummary]);
52
+ if (!(teamSummaries === null || teamSummaries === void 0 ? void 0 : teamSummaries.length))
53
+ return null;
54
+ return (_jsxs("div", { children: [_jsx("div", { className: "px-4 pt-4 pb-2 text-xs font-semibold text-gray-400 tracking-wider", children: t("team_messages") }), teamSummaries.map((team) => (_jsx(TeamGroup, { team: team, isExpanded: expandedTeamIds.includes(team.teamId), isSelected: filterSummary.teamId === team.teamId, selectedFilter: filterSummary, onToggle: toggleHandlers[team.teamId], onFilterSelect: filterHandlers[team.teamId] }, team.teamId)))] }));
55
+ };
56
+ export default DeskTeamInbox;
@@ -0,0 +1,13 @@
1
+ import { IFilterSummary } from "../../store/type";
2
+ import { ISessionSummaryResponse } from "../../types/dto";
3
+ interface SessionFilterMenuProps {
4
+ summary: ISessionSummaryResponse;
5
+ isActive: boolean;
6
+ filterSummary: IFilterSummary;
7
+ onFilterSelect: (filter: IFilterSummary) => void;
8
+ includeUnassigned?: boolean;
9
+ activeCount?: number;
10
+ }
11
+ declare const SessionFilterMenu: ({ summary, isActive, filterSummary, onFilterSelect, includeUnassigned, activeCount, }: SessionFilterMenuProps) => import("react/jsx-runtime").JSX.Element;
12
+ export default SessionFilterMenu;
13
+ //# sourceMappingURL=SessionFilterMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilterMenu.d.ts","sourceRoot":"","sources":["../../../src/components/session/SessionFilterMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,uBAAuB,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,cAAc,CAAC;IAC9B,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,QAAA,MAAM,iBAAiB,GAAI,uFAOxB,sBAAsB,4CAiCxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useMemo } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { Menu } from "antd";
6
+ import { SessionStatus } from "../../types/chat";
7
+ import { buildSessionMenuItems } from "./sessionMenuItems";
8
+ const getSelectedKeys = (isActive, filterSummary) => {
9
+ if (!isActive)
10
+ return [];
11
+ if (filterSummary.status === SessionStatus.COMPLETED)
12
+ return [SessionStatus.COMPLETED];
13
+ const key = filterSummary.status || filterSummary.tag;
14
+ return key ? [key] : [];
15
+ };
16
+ const SessionFilterMenu = ({ summary, isActive, filterSummary, onFilterSelect, includeUnassigned = false, activeCount, }) => {
17
+ const { t } = useTranslation();
18
+ const selectedKeys = useMemo(() => getSelectedKeys(isActive, filterSummary), [isActive, filterSummary]);
19
+ const menuItems = useMemo(() => buildSessionMenuItems({
20
+ summary,
21
+ t,
22
+ onFilterSelect,
23
+ includeUnassigned,
24
+ }), [summary, t, onFilterSelect, includeUnassigned]);
25
+ return (_jsx(Menu, { selectedKeys: selectedKeys, defaultOpenKeys: ["ACTIVE_SESSIONS"], mode: "inline", items: menuItems, inlineIndent: 12, expandIcon: activeCount ? (_jsx("span", { className: "text-xs", children: activeCount })) : undefined }));
26
+ };
27
+ export default SessionFilterMenu;
@@ -0,0 +1,26 @@
1
+ import { MenuProps } from "antd";
2
+ import { TFunction } from "i18next";
3
+ import { IFilterSummary } from "../../store/type";
4
+ import { ISessionSummaryResponse } from "../../types/dto";
5
+ type MenuItem = Required<MenuProps>["items"][number];
6
+ interface SessionFilterConfig {
7
+ key: string;
8
+ labelKey: string;
9
+ iconName: string;
10
+ iconClassName?: string;
11
+ filter: IFilterSummary;
12
+ countSource: "status" | "tag";
13
+ teamOnly?: boolean;
14
+ highlighted?: boolean;
15
+ }
16
+ export declare const SESSION_FILTER_CONFIGS: SessionFilterConfig[];
17
+ export declare const getFilterConfig: (key: string) => SessionFilterConfig | undefined;
18
+ interface BuildSessionMenuItemsOptions {
19
+ summary: ISessionSummaryResponse;
20
+ t: TFunction;
21
+ onFilterSelect: (filter: IFilterSummary) => void;
22
+ includeUnassigned?: boolean;
23
+ }
24
+ export declare const buildSessionMenuItems: ({ summary, t, onFilterSelect, includeUnassigned, }: BuildSessionMenuItemsOptions) => MenuItem[];
25
+ export {};
26
+ //# sourceMappingURL=sessionMenuItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionMenuItems.d.ts","sourceRoot":"","sources":["../../../src/components/session/sessionMenuItems.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,KAAK,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,EA0DvD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,oCACQ,CAAC;AAEpD,UAAU,4BAA4B;IACpC,OAAO,EAAE,uBAAuB,CAAC;IACjC,CAAC,EAAE,SAAS,CAAC;IACb,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA0BD,eAAO,MAAM,qBAAqB,GAAI,oDAKnC,4BAA4B,KAAG,QAAQ,EA4CzC,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Icon } from "../icon";
3
+ import { SessionStatus, SessionTag } from "../../types/chat";
4
+ export const SESSION_FILTER_CONFIGS = [
5
+ {
6
+ key: SessionStatus.UNASSIGNED,
7
+ labelKey: "unassigned",
8
+ iconName: "user-del-o",
9
+ iconClassName: "!text-amber-500",
10
+ filter: { status: SessionStatus.UNASSIGNED, tag: undefined },
11
+ countSource: "status",
12
+ teamOnly: true,
13
+ },
14
+ {
15
+ key: SessionTag.SLOW_PROCESSING,
16
+ labelKey: "slow_processing",
17
+ iconName: "warning-square-o",
18
+ iconClassName: "!text-red-500",
19
+ filter: { status: undefined, tag: SessionTag.SLOW_PROCESSING },
20
+ countSource: "tag",
21
+ highlighted: true,
22
+ },
23
+ {
24
+ key: SessionStatus.WAITING_PROCESS,
25
+ labelKey: "waiting_process",
26
+ iconName: "time-circle-o",
27
+ iconClassName: "!text-orange-400",
28
+ filter: { status: SessionStatus.WAITING_PROCESS, tag: undefined },
29
+ countSource: "status",
30
+ highlighted: true,
31
+ },
32
+ {
33
+ key: SessionTag.AWAITING_REPLY,
34
+ labelKey: "awaiting_reply",
35
+ iconName: "arrow-reply-o",
36
+ iconClassName: "!text-purple-500",
37
+ filter: { status: undefined, tag: SessionTag.AWAITING_REPLY },
38
+ countSource: "tag",
39
+ highlighted: true,
40
+ },
41
+ {
42
+ key: SessionStatus.IN_PROCESS,
43
+ labelKey: "in_process",
44
+ iconName: "play-circle-o",
45
+ filter: { status: SessionStatus.IN_PROCESS, tag: undefined },
46
+ countSource: "status",
47
+ },
48
+ {
49
+ key: SessionTag.TEMPORARILY_PAUSED,
50
+ labelKey: "temporarily_paused",
51
+ iconName: "pause-o",
52
+ filter: { status: undefined, tag: SessionTag.TEMPORARILY_PAUSED },
53
+ countSource: "tag",
54
+ },
55
+ {
56
+ key: SessionStatus.COMPLETED,
57
+ labelKey: "closed_sessions",
58
+ iconName: "check-square-o",
59
+ filter: { status: SessionStatus.COMPLETED, tag: undefined },
60
+ countSource: "status",
61
+ },
62
+ ];
63
+ export const getFilterConfig = (key) => SESSION_FILTER_CONFIGS.find((c) => c.key === key);
64
+ const countBadge = (count, highlighted) => {
65
+ if (!count)
66
+ return null;
67
+ if (highlighted) {
68
+ return (_jsx("span", { className: "text-xs font-medium text-white bg-red-500 rounded-full px-1.5 py-0.5 leading-none -mr-1.5", children: count }));
69
+ }
70
+ return _jsx("span", { className: "text-xs text-gray-500", children: count });
71
+ };
72
+ const getCount = (config, summary) => {
73
+ var _a, _b, _c, _d;
74
+ if (config.countSource === "status") {
75
+ return (((_b = (_a = summary.sessionStatuses) === null || _a === void 0 ? void 0 : _a.find((s) => s.type === config.key)) === null || _b === void 0 ? void 0 : _b.count) || "");
76
+ }
77
+ return ((_d = (_c = summary.tagCounts) === null || _c === void 0 ? void 0 : _c.find((s) => s.type === config.key)) === null || _d === void 0 ? void 0 : _d.count) || "";
78
+ };
79
+ export const buildSessionMenuItems = ({ summary, t, onFilterSelect, includeUnassigned = false, }) => {
80
+ const activeConfigs = SESSION_FILTER_CONFIGS.filter((c) => c.key !== SessionStatus.COMPLETED &&
81
+ (!c.teamOnly || includeUnassigned));
82
+ const activeChildren = activeConfigs.map((config) => ({
83
+ label: t(config.labelKey),
84
+ key: config.key,
85
+ icon: (_jsx(Icon, { icon: config.iconName, size: 18, className: config.iconClassName })),
86
+ onClick: () => onFilterSelect(config.filter),
87
+ itemIcon: countBadge(getCount(config, summary), config.highlighted),
88
+ }));
89
+ const closedConfig = SESSION_FILTER_CONFIGS.find((c) => c.key === SessionStatus.COMPLETED);
90
+ const closedItem = closedConfig
91
+ ? {
92
+ label: t(closedConfig.labelKey),
93
+ key: closedConfig.key,
94
+ icon: _jsx(Icon, { icon: closedConfig.iconName, size: 20 }),
95
+ onClick: () => onFilterSelect(closedConfig.filter),
96
+ itemIcon: countBadge(summary.completedSessionCount),
97
+ }
98
+ : null;
99
+ return [
100
+ {
101
+ label: t("active_sessions"),
102
+ key: "ACTIVE_SESSIONS",
103
+ icon: _jsx(Icon, { icon: "chat-dot-o", size: 20 }),
104
+ children: activeChildren,
105
+ },
106
+ closedItem,
107
+ ].filter(Boolean);
108
+ };
@@ -0,0 +1,12 @@
1
+ import { ConversationItem } from "@openim/wasm-client-sdk";
2
+ interface UseConversationPreviewParams {
3
+ conversation?: ConversationItem | null;
4
+ ownerUserID?: string;
5
+ }
6
+ export declare const useConversationPreview: ({ conversation, ownerUserID, }: UseConversationPreviewParams) => {
7
+ latestMsg: string;
8
+ latestMsgSendTime: number;
9
+ isLoadingPreview: boolean;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=useConversationPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConversationPreview.d.ts","sourceRoot":"","sources":["../../../src/hooks/conversation/useConversationPreview.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAe,MAAM,yBAAyB,CAAC;AAIxE,UAAU,4BAA4B;IACpC,YAAY,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB,GAAI,gCAGpC,4BAA4B;;;;CA6B9B,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ import { usePullSessionMessages } from "../message/usePullSessionMessages";
4
+ export const useConversationPreview = ({ conversation, ownerUserID, }) => {
5
+ var _a;
6
+ const hasPreview = Boolean(conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg) && ((_a = conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime) !== null && _a !== void 0 ? _a : 0) > 0;
7
+ const shouldFetchPreview = Boolean((conversation === null || conversation === void 0 ? void 0 : conversation.isNotInGroup) && (conversation === null || conversation === void 0 ? void 0 : conversation.conversationID) && ownerUserID) &&
8
+ !hasPreview;
9
+ const { data: messages, isLoading } = usePullSessionMessages({
10
+ conversationID: conversation === null || conversation === void 0 ? void 0 : conversation.conversationID,
11
+ userID: ownerUserID,
12
+ enabled: shouldFetchPreview,
13
+ });
14
+ const latestMessage = useMemo(() => messages === null || messages === void 0 ? void 0 : messages[0], [messages]);
15
+ return useMemo(() => ({
16
+ latestMsg: (conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg) || (latestMessage ? JSON.stringify(latestMessage) : ""),
17
+ latestMsgSendTime: (conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime) && conversation.latestMsgSendTime > 0
18
+ ? conversation.latestMsgSendTime
19
+ : (latestMessage === null || latestMessage === void 0 ? void 0 : latestMessage.sendTime) || 0,
20
+ isLoadingPreview: isLoading,
21
+ }), [conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg, conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime, latestMessage, isLoading]);
22
+ };
@@ -0,0 +1,27 @@
1
+ import { MessageItem } from "@openim/wasm-client-sdk";
2
+ interface UseConversationMessagesParams {
3
+ conversationId?: string;
4
+ searchClientMsgID?: string;
5
+ restrictToLastSession?: boolean;
6
+ customerUserID?: string;
7
+ }
8
+ export declare const useConversationMessages: ({ conversationId, searchClientMsgID, restrictToLastSession, customerUserID, }: UseConversationMessagesParams) => {
9
+ loadState: {
10
+ initLoading: boolean;
11
+ hasMoreOld: boolean;
12
+ hasMoreNew: boolean;
13
+ messageList: MessageItem[];
14
+ };
15
+ latestLoadState: import("react").RefObject<{
16
+ initLoading: boolean;
17
+ hasMoreOld: boolean;
18
+ hasMoreNew: boolean;
19
+ messageList: MessageItem[];
20
+ }>;
21
+ moreOldLoading: boolean;
22
+ getMoreOldMessages: (loadMore?: any) => Promise<void>;
23
+ moreNewLoading: boolean;
24
+ getMoreNewMessages: (loadMore?: any) => Promise<void>;
25
+ };
26
+ export {};
27
+ //# sourceMappingURL=useConversationMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConversationMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useConversationMessages.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,UAAU,6BAA6B;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,GAAI,+EAKrC,6BAA6B;;;;;;;;;;;;;;;;;CAkC/B,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ import { useMessage } from "./useMessage";
4
+ import { usePullSessionMessages } from "./usePullSessionMessages";
5
+ export const useConversationMessages = ({ conversationId, searchClientMsgID, restrictToLastSession = false, customerUserID, }) => {
6
+ const sdkMessages = useMessage(conversationId, searchClientMsgID);
7
+ const { data: pulledMessages, isLoading: isPullLoading, isFetching: isPullFetching, } = usePullSessionMessages({
8
+ conversationID: conversationId,
9
+ userID: customerUserID,
10
+ enabled: restrictToLastSession,
11
+ });
12
+ const lastSessionState = useMemo(() => ({
13
+ initLoading: isPullLoading || isPullFetching,
14
+ hasMoreOld: false,
15
+ hasMoreNew: false,
16
+ messageList: pulledMessages !== null && pulledMessages !== void 0 ? pulledMessages : [],
17
+ }), [isPullLoading, isPullFetching, pulledMessages]);
18
+ if (restrictToLastSession) {
19
+ return {
20
+ loadState: lastSessionState,
21
+ latestLoadState: { current: lastSessionState },
22
+ moreOldLoading: false,
23
+ getMoreOldMessages: async () => undefined,
24
+ moreNewLoading: false,
25
+ getMoreNewMessages: async () => undefined,
26
+ };
27
+ }
28
+ return sdkMessages;
29
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,kBAAkB,eAe9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM;;;;;qBAML,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;CAgPnC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,SACpB,CAAC;AAChC,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,SACpB,CAAC;AAClC,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,SACf,CAAC;AAEtC,eAAO,MAAM,kBAAkB,GAC7B,aAAa,WAAW,EAAE,EAC1B,SAAS,WAAW,EACpB,WAAW,MAAM,GAAG,MAAM,KACzB,WAAW,GAAG,SAkBhB,CAAC"}
1
+ {"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,kBAAkB,eAe9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM;;;;;qBAML,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;CAiPnC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,SACpB,CAAC;AAChC,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,SACpB,CAAC;AAClC,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,SACf,CAAC;AAEtC,eAAO,MAAM,kBAAkB,GAC7B,aAAa,WAAW,EAAE,EAC1B,SAAS,WAAW,EACpB,WAAW,MAAM,GAAG,MAAM,KACzB,WAAW,GAAG,SAkBhB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { MessageItem } from "@openim/wasm-client-sdk";
2
+ interface UsePullSessionMessagesParams {
3
+ conversationID?: string;
4
+ userID?: string;
5
+ enabled?: boolean;
6
+ }
7
+ export declare const usePullSessionMessages: ({ conversationID, userID, enabled, }: UsePullSessionMessagesParams) => import("@tanstack/react-query").UseQueryResult<MessageItem[], Error>;
8
+ export {};
9
+ //# sourceMappingURL=usePullSessionMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePullSessionMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/usePullSessionMessages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAetD,UAAU,4BAA4B;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,sBAAsB,GAAI,sCAIpC,4BAA4B,yEA4B9B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { useQuery } from "@tanstack/react-query";
2
+ import { apiInstance } from "../../services/api";
3
+ import { ENDPOINTS } from "../../services/routes";
4
+ import { QUERY_KEYS } from "../../services/query";
5
+ import useAuthStore from "../../store/auth";
6
+ import { sortMessagesDesc, transformPulledMessage, } from "../../utils/messageTransform";
7
+ export const usePullSessionMessages = ({ conversationID, userID, enabled = true, }) => {
8
+ const applicationType = useAuthStore((state) => state.applicationType);
9
+ const query = useQuery({
10
+ queryKey: [QUERY_KEYS.PULL_SESSION_MESSAGES, conversationID, userID],
11
+ enabled: Boolean(enabled && conversationID && userID),
12
+ queryFn: async () => {
13
+ var _a, _b, _c, _d;
14
+ const payload = {
15
+ conversationID: conversationID !== null && conversationID !== void 0 ? conversationID : "",
16
+ userID: userID !== null && userID !== void 0 ? userID : "",
17
+ applicationType,
18
+ };
19
+ const res = await apiInstance.post(ENDPOINTS.chatService.pullSessionMessages, payload);
20
+ const group = (_c = (_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.msgs) === null || _c === void 0 ? void 0 : _c[conversationID !== null && conversationID !== void 0 ? conversationID : ""];
21
+ const rawList = (_d = group === null || group === void 0 ? void 0 : group.Msgs) !== null && _d !== void 0 ? _d : [];
22
+ const messageList = sortMessagesDesc(rawList.map(transformPulledMessage));
23
+ return messageList;
24
+ },
25
+ });
26
+ return query;
27
+ };
@@ -1,7 +1,7 @@
1
1
  import { MergerMsgParams, MessageItem } from "@openim/wasm-client-sdk";
2
2
  import { ExtendMessageInfo, FileMsgParamsByFile, ImageMsgParamsByFile, VideoMsgParamsByFile } from "../../types/chat";
3
3
  import { UploadFile } from "antd";
4
- import { ISessionByStatus } from "../../store/type";
4
+ import { ISessionResponse } from "../../types/dto";
5
5
  export declare const isMediaResendable: (message: {
6
6
  clientMsgID: string;
7
7
  contentType: number;
@@ -14,21 +14,23 @@ export declare const createFileMessageByFile: (file: FileMsgParamsByFile) => Pro
14
14
  export declare const createUrlTextMessage: (text: string, urls: string[]) => Promise<MessageItem | null>;
15
15
  export declare const createQuoteMessage: (text: string, quotedMessage: MessageItem) => Promise<MessageItem | null>;
16
16
  export declare const useSendMessage: () => {
17
- sendTextMessage: ({ plainText, richText, currentSession, }: {
17
+ sendTextMessage: ({ plainText, richText, currentSession, isInternal, }: {
18
18
  plainText: string;
19
19
  richText: string;
20
- currentSession?: ISessionByStatus;
20
+ currentSession?: ISessionResponse;
21
+ isInternal: boolean;
21
22
  }) => Promise<void>;
22
- sendMergeMessage: ({ richText, plainText, files, currentSession, }: {
23
+ sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, }: {
23
24
  richText: string;
24
25
  plainText: string;
25
26
  files: UploadFile[];
26
- currentSession?: ISessionByStatus;
27
+ currentSession?: ISessionResponse;
28
+ isInternal: boolean;
27
29
  }) => Promise<void>;
28
30
  resendMessage: (failedMessage: MessageItem) => Promise<void>;
29
31
  };
30
32
  export declare const generateExtendMessageInfo: ({ richText, currentSession, }: {
31
33
  richText?: string;
32
- currentSession?: ISessionByStatus;
34
+ currentSession?: ISessionResponse;
33
35
  }) => ExtendMessageInfo;
34
36
  //# sourceMappingURL=useSendMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAepD,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,YAE0C,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,gCAanD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,iBAAiB,eAAe,gCAazE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,mBAAmB,gCAatE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,gCActE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,eAAe,WAAW,gCAc3B,CAAC;AAEF,eAAO,MAAM,cAAc;gEAgKpB;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,gBAAgB,CAAC;KACnC;wEAkCE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,gBAAgB,CAAC;KACnC;mCAhJqB,WAAW;CAgRpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,+BAGvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,KAWM,iBACN,CAAC"}
1
+ {"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAenD,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,YAE0C,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,gCAanD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,iBAAiB,eAAe,gCAazE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,mBAAmB,gCAatE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,gCActE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,eAAe,WAAW,gCAc3B,CAAC;AAEF,eAAO,MAAM,cAAc;4EA4KpB;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;KACrB;oFAoCE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;KACrB;mCA7JqB,WAAW;CA8RpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,+BAGvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,KAWM,iBACN,CAAC"}
@@ -105,7 +105,7 @@ export const useSendMessage = () => {
105
105
  const setQuotedMessage = useConversationStore((state) => state.setQuotedMessage);
106
106
  const { userID: recvID, groupID } = conversationData || {};
107
107
  const dispatchMessage = useCallback(async (message) => {
108
- var _a;
108
+ var _a, _b;
109
109
  const desc = generateContentBasedOnMessageType(message.contentType, ((_a = message === null || message === void 0 ? void 0 : message.textElem) === null || _a === void 0 ? void 0 : _a.content) || "") || t("new_message");
110
110
  const { data: successMessage } = await DChatSDK.sendMessage({
111
111
  recvID: recvID || "",
@@ -124,7 +124,7 @@ export const useSendMessage = () => {
124
124
  iOSBadgeCount: true,
125
125
  },
126
126
  });
127
- updateOneMessage(successMessage);
127
+ updateOneMessage(Object.assign(Object.assign({}, successMessage), { isInternal: (_b = successMessage.isInternal) !== null && _b !== void 0 ? _b : message.isInternal }));
128
128
  messageFileStore.delete(message.clientMsgID);
129
129
  }, [recvID, groupID]);
130
130
  const sendMessage = useCallback(async (message) => {
@@ -160,7 +160,7 @@ export const useSendMessage = () => {
160
160
  clientMsgID: failedMessage.clientMsgID,
161
161
  });
162
162
  removeOneMessage(failedMessage.clientMsgID);
163
- await sendMessage(Object.assign(Object.assign({}, newTextPayload), { ex: failedMessage.ex }));
163
+ await sendMessage(Object.assign(Object.assign({}, newTextPayload), { ex: failedMessage.ex, isInternal: failedMessage.isInternal }));
164
164
  return;
165
165
  }
166
166
  let newPayload = null;
@@ -216,9 +216,9 @@ export const useSendMessage = () => {
216
216
  clientMsgID: failedMessage.clientMsgID,
217
217
  });
218
218
  removeOneMessage(failedMessage.clientMsgID);
219
- await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex }));
219
+ await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex, isInternal: failedMessage.isInternal }));
220
220
  }, [sendMessage]);
221
- const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, }) => {
221
+ const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, isInternal, }) => {
222
222
  if (!recvID && !groupID)
223
223
  return;
224
224
  const urls = extractLinks(plainText);
@@ -240,10 +240,10 @@ export const useSendMessage = () => {
240
240
  richText,
241
241
  currentSession,
242
242
  });
243
- let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
243
+ let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
244
244
  sendMessage(messageItem);
245
245
  }, [recvID, groupID, user, sendMessage, quotedMessage, setQuotedMessage]);
246
- const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, }) => {
246
+ const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, isInternal, }) => {
247
247
  if (!recvID && !groupID)
248
248
  return;
249
249
  const messageList = [];
@@ -354,7 +354,7 @@ export const useSendMessage = () => {
354
354
  richText: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.TextMessage ? richText : "",
355
355
  currentSession,
356
356
  });
357
- const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
357
+ const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
358
358
  await sendMessage(mMessage);
359
359
  }
360
360
  }, [recvID, groupID, sendMessage, quotedMessage, setQuotedMessage]);
@@ -0,0 +1,21 @@
1
+ import { SessionType } from "@openim/wasm-client-sdk";
2
+ interface UseConversationSessionStateParams {
3
+ conversationId: string;
4
+ conversationType?: SessionType;
5
+ groupId?: string;
6
+ userID?: string;
7
+ }
8
+ export declare const useConversationSessionState: ({ conversationId, conversationType, groupId, userID, }: UseConversationSessionStateParams) => {
9
+ isGroupConversation: boolean;
10
+ groupId: string | undefined;
11
+ isJoined: boolean | null;
12
+ latestConversationSession: import("../../types/dto").ISessionResponse | undefined;
13
+ isSessionMember: boolean;
14
+ isMember: boolean;
15
+ isNotGroupMember: boolean;
16
+ customerUserID: string;
17
+ refetchIsJoined: () => Promise<void>;
18
+ refetchConversationSessions: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("../../types/dto").ISessionResponse[], Error>>;
19
+ };
20
+ export {};
21
+ //# sourceMappingURL=useConversationSessionState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConversationSessionState.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useConversationSessionState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,UAAU,iCAAiC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,2BAA2B,GAAI,wDAKzC,iCAAiC;;;;;;;;;;;CA4CnC,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ import { useGetListSessionByConversation } from "./useGetListSessionByConversation";
4
+ import { useIsJoinedGroup } from "./useIsJoinedGroup";
5
+ import { isGroupSession } from "../../utils/imCommon";
6
+ export const useConversationSessionState = ({ conversationId, conversationType, groupId, userID, }) => {
7
+ var _a;
8
+ const isGroupConversation = isGroupSession(conversationType);
9
+ const currentGroupId = isGroupConversation ? groupId : undefined;
10
+ const { isJoined, refetch: refetchIsJoined } = useIsJoinedGroup(currentGroupId);
11
+ const { data: conversationSessions, refetch: refetchConversationSessions, } = useGetListSessionByConversation({
12
+ conversationId,
13
+ });
14
+ const latestConversationSession = useMemo(() => {
15
+ if (!(conversationSessions === null || conversationSessions === void 0 ? void 0 : conversationSessions.length))
16
+ return undefined;
17
+ return [...conversationSessions].sort((a, b) => new Date(b.createdDate).getTime() - new Date(a.createdDate).getTime())[0];
18
+ }, [conversationSessions]);
19
+ const isSessionMember = useMemo(() => {
20
+ var _a, _b;
21
+ if (!latestConversationSession || !userID)
22
+ return false;
23
+ if (latestConversationSession.supporterId === userID)
24
+ return true;
25
+ return (_b = (_a = latestConversationSession.priorSupporterIds) === null || _a === void 0 ? void 0 : _a.includes(userID)) !== null && _b !== void 0 ? _b : false;
26
+ }, [latestConversationSession, userID]);
27
+ const isMember = isJoined === true || isSessionMember;
28
+ const isNotGroupMember = isGroupConversation && isJoined !== null && !isMember;
29
+ return {
30
+ isGroupConversation,
31
+ groupId: currentGroupId,
32
+ isJoined,
33
+ latestConversationSession,
34
+ isSessionMember,
35
+ isMember,
36
+ isNotGroupMember,
37
+ customerUserID: (_a = latestConversationSession === null || latestConversationSession === void 0 ? void 0 : latestConversationSession.ownerId) !== null && _a !== void 0 ? _a : "",
38
+ refetchIsJoined,
39
+ refetchConversationSessions,
40
+ };
41
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAA+B,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AACD,eAAO,MAAM,aAAa,GAAI,sBAM3B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8FpB,CAAC"}
1
+ {"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,YAAY,EAIb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AA2JD,eAAO,MAAM,aAAa,GAAI,sBAG3B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEpB,CAAC"}