@droppii-org/chat-sdk 0.1.26 → 0.1.28

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 (119) hide show
  1. package/dist/assets/svg/canned-response.d.ts +7 -0
  2. package/dist/assets/svg/canned-response.d.ts.map +1 -0
  3. package/dist/assets/svg/canned-response.js +3 -0
  4. package/dist/assets/svg/canned-response.tsx +48 -0
  5. package/dist/assets/svg/index.d.ts +1 -1
  6. package/dist/assets/svg/index.d.ts.map +1 -1
  7. package/dist/assets/svg/index.js +1 -1
  8. package/dist/assets/svg/index.ts +1 -1
  9. package/dist/components/biz-thread-detail/BizMessageBubble.d.ts +10 -0
  10. package/dist/components/biz-thread-detail/BizMessageBubble.d.ts.map +1 -0
  11. package/dist/components/biz-thread-detail/BizMessageBubble.js +15 -0
  12. package/dist/components/biz-thread-detail/BizMessageList.d.ts +3 -0
  13. package/dist/components/biz-thread-detail/BizMessageList.d.ts.map +1 -0
  14. package/dist/components/biz-thread-detail/BizMessageList.js +28 -0
  15. package/dist/components/biz-thread-detail/BizThreadDetailHeader.d.ts +8 -0
  16. package/dist/components/biz-thread-detail/BizThreadDetailHeader.d.ts.map +1 -0
  17. package/dist/components/biz-thread-detail/BizThreadDetailHeader.js +18 -0
  18. package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts +8 -0
  19. package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -0
  20. package/dist/components/biz-thread-detail/BizThreadDetailInput.js +147 -0
  21. package/dist/components/biz-thread-detail/index.d.ts +8 -0
  22. package/dist/components/biz-thread-detail/index.d.ts.map +1 -0
  23. package/dist/components/biz-thread-detail/index.js +4 -0
  24. package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts +8 -0
  25. package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts.map +1 -0
  26. package/dist/components/biz-thread-detail/item/BizMessageItem.js +20 -0
  27. package/dist/components/canned-response/CannedResponseBody.d.ts +8 -0
  28. package/dist/components/canned-response/CannedResponseBody.d.ts.map +1 -0
  29. package/dist/components/canned-response/CannedResponseBody.js +109 -0
  30. package/dist/components/canned-response/CannedResponseFooter.d.ts +6 -0
  31. package/dist/components/canned-response/CannedResponseFooter.d.ts.map +1 -0
  32. package/dist/components/canned-response/CannedResponseFooter.js +8 -0
  33. package/dist/components/canned-response/CannedResponseHeader.d.ts +8 -0
  34. package/dist/components/canned-response/CannedResponseHeader.d.ts.map +1 -0
  35. package/dist/components/canned-response/CannedResponseHeader.js +11 -0
  36. package/dist/components/canned-response/index.d.ts +8 -0
  37. package/dist/components/canned-response/index.d.ts.map +1 -0
  38. package/dist/components/canned-response/index.js +34 -0
  39. package/dist/components/canned-response/team/TeamItem.d.ts +11 -0
  40. package/dist/components/canned-response/team/TeamItem.d.ts.map +1 -0
  41. package/dist/components/canned-response/team/TeamItem.js +31 -0
  42. package/dist/components/chat-bubble/ChatBubble.d.ts +6 -0
  43. package/dist/components/chat-bubble/ChatBubble.d.ts.map +1 -0
  44. package/dist/components/chat-bubble/ChatBubble.js +35 -0
  45. package/dist/components/conversation/DeskConversationList.js +1 -1
  46. package/dist/components/media-collection/FileCollection.d.ts +3 -0
  47. package/dist/components/media-collection/FileCollection.d.ts.map +1 -0
  48. package/dist/components/media-collection/FileCollection.js +53 -0
  49. package/dist/components/media-collection/ImageCollection.d.ts +3 -0
  50. package/dist/components/media-collection/ImageCollection.d.ts.map +1 -0
  51. package/dist/components/media-collection/ImageCollection.js +52 -0
  52. package/dist/components/media-collection/LinkCollection.d.ts +5 -0
  53. package/dist/components/media-collection/LinkCollection.d.ts.map +1 -0
  54. package/dist/components/media-collection/LinkCollection.js +92 -0
  55. package/dist/components/media-collection/VideoCollection.d.ts +3 -0
  56. package/dist/components/media-collection/VideoCollection.d.ts.map +1 -0
  57. package/dist/components/media-collection/VideoCollection.js +51 -0
  58. package/dist/components/media-collection/index.d.ts +9 -0
  59. package/dist/components/media-collection/index.d.ts.map +1 -0
  60. package/dist/components/media-collection/index.js +57 -0
  61. package/dist/components/message/MessageHeader.js +2 -2
  62. package/dist/components/message/footer/MediaActions.js +1 -1
  63. package/dist/components/message/footer/index.js +1 -1
  64. package/dist/components/rich-text-editor/RichTextEditor.d.ts +12 -0
  65. package/dist/components/rich-text-editor/RichTextEditor.d.ts.map +1 -0
  66. package/dist/components/rich-text-editor/RichTextEditor.js +62 -0
  67. package/dist/components/search-conversation/SearchAll.d.ts +8 -0
  68. package/dist/components/search-conversation/SearchAll.d.ts.map +1 -0
  69. package/dist/components/search-conversation/SearchAll.js +37 -0
  70. package/dist/components/search-conversation/SearchConversationAsMessages.d.ts +6 -0
  71. package/dist/components/search-conversation/SearchConversationAsMessages.d.ts.map +1 -0
  72. package/dist/components/search-conversation/SearchConversationAsMessages.js +23 -0
  73. package/dist/components/search-conversation/SearchConversationAsUsers.d.ts +6 -0
  74. package/dist/components/search-conversation/SearchConversationAsUsers.d.ts.map +1 -0
  75. package/dist/components/search-conversation/SearchConversationAsUsers.js +21 -0
  76. package/dist/components/search-conversation/SearchConversationMyInbox.d.ts +6 -0
  77. package/dist/components/search-conversation/SearchConversationMyInbox.d.ts.map +1 -0
  78. package/dist/components/search-conversation/SearchConversationMyInbox.js +24 -0
  79. package/dist/components/search-conversation/SearchDrawer.d.ts +3 -0
  80. package/dist/components/search-conversation/SearchDrawer.d.ts.map +1 -0
  81. package/dist/components/search-conversation/SearchDrawer.js +33 -0
  82. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts +7 -0
  83. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -0
  84. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +28 -0
  85. package/dist/components/search-conversation/index.d.ts +12 -0
  86. package/dist/components/search-conversation/index.d.ts.map +1 -0
  87. package/dist/components/search-conversation/index.js +46 -0
  88. package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts +12 -0
  89. package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -0
  90. package/dist/components/search-conversation/item/SearchItemAsMessage.js +72 -0
  91. package/dist/components/search-conversation/item/SearchItemAsUser.d.ts +8 -0
  92. package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -0
  93. package/dist/components/search-conversation/item/SearchItemAsUser.js +25 -0
  94. package/dist/hooks/biz/useBizSendMessage.d.ts.map +1 -1
  95. package/dist/hooks/biz/useBizSendMessage.js +4 -0
  96. package/dist/hooks/canned-response/useFetchCannedCategories.d.ts +3 -0
  97. package/dist/hooks/canned-response/useFetchCannedCategories.d.ts.map +1 -0
  98. package/dist/hooks/canned-response/useFetchCannedCategories.js +13 -0
  99. package/dist/hooks/canned-response/useFetchCannedResponse.d.ts +219 -0
  100. package/dist/hooks/canned-response/useFetchCannedResponse.d.ts.map +1 -0
  101. package/dist/hooks/canned-response/useFetchCannedResponse.js +55 -0
  102. package/dist/index.d.ts +9 -9
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +6 -6
  105. package/dist/screens/biz-message/index.d.ts +9 -0
  106. package/dist/screens/biz-message/index.d.ts.map +1 -0
  107. package/dist/screens/biz-message/index.js +55 -0
  108. package/dist/screens/biz-thread-detail/index.d.ts +9 -0
  109. package/dist/screens/biz-thread-detail/index.d.ts.map +1 -0
  110. package/dist/screens/biz-thread-detail/index.js +36 -0
  111. package/dist/screens/chat-bubble/index.d.ts +7 -0
  112. package/dist/screens/chat-bubble/index.d.ts.map +1 -0
  113. package/dist/screens/chat-bubble/index.js +41 -0
  114. package/dist/screens/desk-message/index.d.ts +6 -0
  115. package/dist/screens/desk-message/index.d.ts.map +1 -0
  116. package/dist/screens/desk-message/index.js +17 -0
  117. package/dist/styles/global.css +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +1 -1
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { LexicalComposer } from "@lexical/react/LexicalComposer";
5
+ import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
6
+ import { ContentEditable } from "@lexical/react/LexicalContentEditable";
7
+ import { LexicalErrorBoundary } from "@lexical/react/LexicalErrorBoundary";
8
+ import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
9
+ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
10
+ import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin";
11
+ import { $generateHtmlFromNodes, $generateNodesFromDOM } from "@lexical/html";
12
+ import { $getRoot } from "lexical";
13
+ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
14
+ import { useEffect } from "react";
15
+ import { ToolbarPlugin } from "../../components/message/footer/ToolbarPlugin";
16
+ import MediaActions from "../../components/message/footer/MediaActions";
17
+ import { FilePreviewList } from "../../components/message/footer/FilePreview";
18
+ import { editorTheme, editorNodes, editorOnError, } from "../../components/message/footer/editorConfig";
19
+ const EDITOR_CONFIG = {
20
+ namespace: "CannedResponseEditor",
21
+ theme: editorTheme,
22
+ onError: editorOnError,
23
+ nodes: editorNodes,
24
+ };
25
+ function HtmlPlugin({ initialHtml }) {
26
+ const [editor] = useLexicalComposerContext();
27
+ useEffect(() => {
28
+ if (!initialHtml)
29
+ return;
30
+ editor.update(() => {
31
+ const parser = new DOMParser();
32
+ const dom = parser.parseFromString(initialHtml, "text/html");
33
+ const nodes = $generateNodesFromDOM(editor, dom);
34
+ const root = $getRoot();
35
+ root.clear();
36
+ root.append(...nodes);
37
+ }, { tag: "initial-html" });
38
+ }, [editor, initialHtml]);
39
+ return null;
40
+ }
41
+ export default function RichTextEditor({ initialHtml, placeholder, onChange, onFilesChange, minHeight = "160px", showMediaUpload = true, }) {
42
+ const [listUploadFiles, setListUploadFiles] = useState([]);
43
+ const handleChange = (editorState, editor, tags) => {
44
+ if (tags.has("initial-html"))
45
+ return;
46
+ editorState.read(() => {
47
+ const html = $generateHtmlFromNodes(editor);
48
+ const plainText = $getRoot().getTextContent().trim();
49
+ onChange === null || onChange === void 0 ? void 0 : onChange(html, plainText);
50
+ });
51
+ };
52
+ const handleRemoveFile = (file) => {
53
+ const newList = listUploadFiles.filter((f) => f.uid !== file.uid);
54
+ setListUploadFiles(newList);
55
+ onFilesChange === null || onFilesChange === void 0 ? void 0 : onFilesChange(newList);
56
+ };
57
+ const handleFilesChange = (files) => {
58
+ setListUploadFiles(files);
59
+ onFilesChange === null || onFilesChange === void 0 ? void 0 : onFilesChange(files);
60
+ };
61
+ return (_jsxs(LexicalComposer, { initialConfig: EDITOR_CONFIG, children: [_jsxs("div", { className: "border border-gray-200 rounded-lg", children: [_jsx(FilePreviewList, { files: listUploadFiles, onRemove: handleRemoveFile }), _jsx("div", { className: "relative", children: _jsx(RichTextPlugin, { contentEditable: _jsx(ContentEditable, { className: "px-3 py-2 text-sm outline-none", style: { minHeight } }), ErrorBoundary: LexicalErrorBoundary, placeholder: placeholder ? (_jsx("div", { className: "absolute top-2 left-3 pointer-events-none", children: _jsx("p", { className: "text-gray-400 text-sm", children: placeholder }) })) : null }) }), _jsxs("div", { className: "flex items-center border-t border-gray-100 px-2 py-1", children: [_jsx(ToolbarPlugin, {}), _jsx(MediaActions, { listUploadFiles: listUploadFiles, onFilesChange: handleFilesChange, showMediaUpload: showMediaUpload })] })] }), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), _jsx(OnChangePlugin, { onChange: handleChange, ignoreSelectionChange: true }), _jsx(HtmlPlugin, { initialHtml: initialHtml })] }));
62
+ }
@@ -0,0 +1,8 @@
1
+ import { SearchConversationTabKey } from ".";
2
+ interface SearchConversationAllProps {
3
+ searchTerm: string;
4
+ setActiveKey: (key: SearchConversationTabKey) => void;
5
+ }
6
+ declare const SearchConversationAll: ({ searchTerm, setActiveKey, }: SearchConversationAllProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default SearchConversationAll;
8
+ //# sourceMappingURL=SearchAll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchAll.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchAll.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAC;AAG7C,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACvD;AACD,QAAA,MAAM,qBAAqB,GAAI,+BAG5B,0BAA0B,4CA6G5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Empty, Spin } from "antd";
3
+ import clsx from "clsx";
4
+ import { useTranslation } from "react-i18next";
5
+ import { useSearchMessage } from "../../hooks/search/useSearchMessage";
6
+ import { MessageType } from "@openim/wasm-client-sdk";
7
+ import { Icon } from "../../components/icon";
8
+ import SearchItemAsMessage from "./item/SearchItemAsMessage";
9
+ import { useGetSession } from "../../hooks/session/useGetSession";
10
+ import SearchItemAsUser from "./item/SearchItemAsUser";
11
+ import { SearchConversationTabKey } from ".";
12
+ import { PAGE_SIZE } from "../../constants";
13
+ const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
14
+ const { t } = useTranslation();
15
+ const { dataFlatten: messages, isLoading: isLoadingMessage, hasNextPage: hasNextPageMessage, } = useSearchMessage({
16
+ payload: {
17
+ searchTerm: searchTerm.trim(),
18
+ contentType: MessageType.TextMessage,
19
+ },
20
+ options: { pageSize: PAGE_SIZE.xs },
21
+ });
22
+ const { dataFlatten: sessions, isLoading: isLoadingSession, hasNextPage: hasNextPageSession, } = useGetSession({
23
+ filter: {
24
+ searchTerm: searchTerm.trim(),
25
+ },
26
+ options: { pageSize: PAGE_SIZE.xs },
27
+ });
28
+ if (searchTerm.trim() === "" ||
29
+ (messages.length === 0 && sessions.length === 0)) {
30
+ return (_jsx("div", { className: "h-full overflow-auto", children: _jsx(Empty, { description: t("no_conversation") }) }));
31
+ }
32
+ if (isLoadingMessage || isLoadingSession) {
33
+ return (_jsx("div", { className: "h-full overflow-auto flex items-center justify-center", children: _jsx(Spin, {}) }));
34
+ }
35
+ return (_jsxs("div", { className: "h-full overflow-auto", children: [sessions.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3 min-h-[32px]", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("users") }), _jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: clsx("p-0 gap-1", !hasNextPageSession && "invisible"), onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Users), children: t("see_more") })] }), _jsx("div", { children: sessions.map((session) => (_jsx(SearchItemAsUser, { session: session, searchTerm: searchTerm }))) })] })), messages.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3 min-h-[32px]", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("messages") }), _jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: clsx("p-0 gap-1", !hasNextPageMessage && "invisible"), onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Messages), children: t("see_more") })] }), _jsx("div", { children: messages.map((message) => (_jsx(SearchItemAsMessage, { message: message.chatLog, searchTerm: searchTerm, displayTag: message.displayTag }))) })] }))] }));
36
+ };
37
+ export default SearchConversationAll;
@@ -0,0 +1,6 @@
1
+ interface SearchConversationAsMessagesProps {
2
+ searchTerm: string;
3
+ }
4
+ declare const SearchConversationAsMessages: (props: SearchConversationAsMessagesProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default SearchConversationAsMessages;
6
+ //# sourceMappingURL=SearchConversationAsMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchConversationAsMessages.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchConversationAsMessages.tsx"],"names":[],"mappings":"AAOA,UAAU,iCAAiC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,4BAA4B,GAChC,OAAO,iCAAiC,4CA2CzC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Empty, Spin } from "antd";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useSearchMessage } from "../../hooks/search/useSearchMessage";
5
+ import { MessageType } from "@openim/wasm-client-sdk";
6
+ import InfiniteScroll from "react-infinite-scroll-component";
7
+ import SearchItemAsMessage from "./item/SearchItemAsMessage";
8
+ const SearchConversationAsMessages = (props) => {
9
+ const { searchTerm = "" } = props;
10
+ const { t } = useTranslation();
11
+ const { dataFlatten, hasNextPage, fetchNextPage, isLoading } = useSearchMessage({
12
+ payload: {
13
+ searchTerm: searchTerm.trim(),
14
+ contentType: MessageType.TextMessage,
15
+ },
16
+ });
17
+ if ((dataFlatten.length === 0 && !isLoading) || searchTerm.trim() === "")
18
+ return _jsx(Empty, { description: t("no_conversation") });
19
+ if (isLoading)
20
+ return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
21
+ return (_jsx("div", { id: "scrollableSearchMessagesTab", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableSearchMessagesTab", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, displayTag: item.displayTag }))) }) }));
22
+ };
23
+ export default SearchConversationAsMessages;
@@ -0,0 +1,6 @@
1
+ interface SearchConversationAsUsersProps {
2
+ searchTerm: string;
3
+ }
4
+ declare const SearchConversationAsUsers: (props: SearchConversationAsUsersProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default SearchConversationAsUsers;
6
+ //# sourceMappingURL=SearchConversationAsUsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchConversationAsUsers.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchConversationAsUsers.tsx"],"names":[],"mappings":"AAMA,UAAU,8BAA8B;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,yBAAyB,GAAI,OAAO,8BAA8B,4CAoCvE,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Empty, Spin } from "antd";
3
+ import { useTranslation } from "react-i18next";
4
+ import InfiniteScroll from "react-infinite-scroll-component";
5
+ import SearchItemAsUser from "./item/SearchItemAsUser";
6
+ import { useGetSession } from "../../hooks/session/useGetSession";
7
+ const SearchConversationAsUsers = (props) => {
8
+ const { searchTerm = "" } = props;
9
+ const { t } = useTranslation();
10
+ const { dataFlatten, hasNextPage, fetchNextPage, isLoading } = useGetSession({
11
+ filter: {
12
+ searchTerm: searchTerm.trim(),
13
+ },
14
+ });
15
+ if ((dataFlatten.length === 0 && !isLoading) || searchTerm.trim() === "")
16
+ return _jsx(Empty, { description: t("no_conversation") });
17
+ if (isLoading)
18
+ return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
19
+ return (_jsx("div", { id: "scrollableSearchUsersTab", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableSearchUsersTab", children: dataFlatten.map((item) => (_jsx(SearchItemAsUser, { session: item, searchTerm: searchTerm }))) }) }));
20
+ };
21
+ export default SearchConversationAsUsers;
@@ -0,0 +1,6 @@
1
+ interface SearchConversationMyInboxProps {
2
+ searchTerm: string;
3
+ }
4
+ declare const SearchConversationMyInbox: ({ searchTerm, }: SearchConversationMyInboxProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default SearchConversationMyInbox;
6
+ //# sourceMappingURL=SearchConversationMyInbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchConversationMyInbox.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchConversationMyInbox.tsx"],"names":[],"mappings":"AAQA,UAAU,8BAA8B;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,yBAAyB,GAAI,iBAEhC,8BAA8B,4CA2ChC,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Empty, Spin } from "antd";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useSearchMessage } from "../../hooks/search/useSearchMessage";
5
+ import { MessageType } from "@openim/wasm-client-sdk";
6
+ import SearchItemAsMessage from "./item/SearchItemAsMessage";
7
+ const MY_INBOX_TAG = "MY_INBOX";
8
+ const SearchConversationMyInbox = ({ searchTerm = "", }) => {
9
+ const { t } = useTranslation();
10
+ const { dataFlatten, hasNextPage, fetchNextPage, isLoading, isFetchingNextPage } = useSearchMessage({
11
+ payload: {
12
+ searchTerm: searchTerm.trim(),
13
+ contentType: MessageType.TextMessage,
14
+ tag: MY_INBOX_TAG,
15
+ },
16
+ options: { untilEmptyPage: true },
17
+ });
18
+ if ((dataFlatten.length === 0 && !isLoading) || searchTerm.trim() === "")
19
+ return _jsx(Empty, { description: t("no_conversation") });
20
+ if (isLoading)
21
+ return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
22
+ return (_jsxs("div", { className: "overflow-auto", children: [dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, displayTag: item.displayTag }, item.chatLog.clientMsgID))), _jsx("div", { className: "flex justify-center py-2", children: _jsx(Button, { type: "link", loading: isFetchingNextPage, onClick: () => fetchNextPage(), children: t("see_more") }) })] }));
23
+ };
24
+ export default SearchConversationMyInbox;
@@ -0,0 +1,3 @@
1
+ declare const SearchDrawer: () => import("react/jsx-runtime").JSX.Element;
2
+ export default SearchDrawer;
3
+ //# sourceMappingURL=SearchDrawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchDrawer.tsx"],"names":[],"mappings":"AAQA,QAAA,MAAM,YAAY,+CAgFjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Drawer, Input } from "antd";
3
+ import { Icon } from "../../components/icon";
4
+ import { useIsMobile } from "../../hooks/common/useIsMobile";
5
+ import useBoolean from "ahooks/lib/useBoolean";
6
+ import { useTranslation } from "react-i18next";
7
+ import { useRef, useState } from "react";
8
+ import SearchMessageOnCurrentConversation from "./SearchMessageOnCurrentConversation";
9
+ const SearchDrawer = () => {
10
+ const { t } = useTranslation();
11
+ const searchInputRef = useRef(null);
12
+ const [isOpen, { toggle }] = useBoolean(false);
13
+ const [search, setSearch] = useState("");
14
+ const isMobile = useIsMobile();
15
+ const handleDrawerAfterOpenChange = (opened) => {
16
+ if (!opened) {
17
+ return;
18
+ }
19
+ requestAnimationFrame(() => {
20
+ var _a;
21
+ (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
22
+ });
23
+ };
24
+ return (_jsxs("div", { className: "inline-flex shrink-0", children: [_jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: toggle, children: _jsx(Icon, { icon: "search-o", size: 22 }) }), _jsx(Drawer, { open: isOpen, onClose: toggle, afterOpenChange: handleDrawerAfterOpenChange, mask: false, closeIcon: false, styles: {
25
+ body: {
26
+ padding: 0,
27
+ height: "100%",
28
+ },
29
+ }, getContainer: false, width: isMobile ? "100%" : 360, children: _jsxs("div", { className: "flex flex-col h-full", children: [_jsxs("div", { className: "flex items-center justify-between p-3", children: [_jsx("span", { className: "text-lg font-medium", children: t("search_message_title") }), _jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: toggle, children: _jsx(Icon, { icon: "close-b", size: 22 }) })] }), _jsx("div", { className: "px-3", children: _jsx(Input, { ref: searchInputRef, placeholder: t("search"), prefix: _jsx(Icon, { icon: "search-o", size: 18, className: "text-gray-400" }), onChange: (e) => {
30
+ setSearch(e.target.value);
31
+ }, className: "rounded-lg text-sm", size: "large", allowClear: true, value: search, autoFocus: false }) }), _jsx("div", { className: "flex-1 py-3 overflow-auto", children: _jsx(SearchMessageOnCurrentConversation, { searchTerm: search, onClose: toggle }) })] }) })] }));
32
+ };
33
+ export default SearchDrawer;
@@ -0,0 +1,7 @@
1
+ interface SearchMessageOnCurrentConversationProps {
2
+ searchTerm: string;
3
+ onClose: () => void;
4
+ }
5
+ declare const SearchMessageOnCurrentConversation: (props: SearchMessageOnCurrentConversationProps) => import("react/jsx-runtime").JSX.Element;
6
+ export default SearchMessageOnCurrentConversation;
7
+ //# sourceMappingURL=SearchMessageOnCurrentConversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchMessageOnCurrentConversation.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchMessageOnCurrentConversation.tsx"],"names":[],"mappings":"AAQA,UAAU,uCAAuC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,QAAA,MAAM,kCAAkC,GACtC,OAAO,uCAAuC,4CAuD/C,CAAC;AAEF,eAAe,kCAAkC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Empty, Spin } from "antd";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useSearchMessage } from "../../hooks/search/useSearchMessage";
5
+ import { MessageType } from "@openim/wasm-client-sdk";
6
+ import InfiniteScroll from "react-infinite-scroll-component";
7
+ import SearchItemAsMessage from "./item/SearchItemAsMessage";
8
+ import useConversationStore from "../../store/conversation";
9
+ const SearchMessageOnCurrentConversation = (props) => {
10
+ const { searchTerm = "" } = props;
11
+ const { t } = useTranslation();
12
+ const conversationData = useConversationStore((state) => state.conversationData);
13
+ const { dataFlatten, hasNextPage, fetchNextPage, isLoading } = useSearchMessage({
14
+ payload: {
15
+ searchTerm: searchTerm.trim(),
16
+ contentType: MessageType.TextMessage,
17
+ recvID: conversationData === null || conversationData === void 0 ? void 0 : conversationData.groupID,
18
+ },
19
+ });
20
+ if (searchTerm.trim() === "")
21
+ return _jsx(Empty, { description: t("no_search_text") });
22
+ if (dataFlatten.length === 0 && !isLoading)
23
+ return _jsx(Empty, { description: t("no_result") });
24
+ if (isLoading)
25
+ return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
26
+ return (_jsx("div", { id: "scrollableCurrentConversationSearchMessages", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableCurrentConversationSearchMessages", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, onClick: props === null || props === void 0 ? void 0 : props.onClose }))) }) }));
27
+ };
28
+ export default SearchMessageOnCurrentConversation;
@@ -0,0 +1,12 @@
1
+ export declare enum SearchConversationTabKey {
2
+ All = "all",
3
+ MyInbox = "myInbox",
4
+ Users = "users",
5
+ Messages = "messages"
6
+ }
7
+ interface SearchConversationProps {
8
+ searchTerm: string;
9
+ }
10
+ declare const SearchConversation: ({ searchTerm }: SearchConversationProps) => import("react/jsx-runtime").JSX.Element;
11
+ export default SearchConversation;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/index.tsx"],"names":[],"mappings":"AAUA,oBAAY,wBAAwB;IAClC,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,kBAAkB,GAAI,gBAAgB,uBAAuB,4CAgDlE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Tabs } from "antd";
4
+ import { useMemo, useState } from "react";
5
+ import { useTranslation } from "react-i18next";
6
+ import SearchConversationAll from "./SearchAll";
7
+ import SearchConversationMyInbox from "./SearchConversationMyInbox";
8
+ import SearchConversationAsUsers from "./SearchConversationAsUsers";
9
+ import SearchConversationAsMessages from "./SearchConversationAsMessages";
10
+ export var SearchConversationTabKey;
11
+ (function (SearchConversationTabKey) {
12
+ SearchConversationTabKey["All"] = "all";
13
+ SearchConversationTabKey["MyInbox"] = "myInbox";
14
+ SearchConversationTabKey["Users"] = "users";
15
+ SearchConversationTabKey["Messages"] = "messages";
16
+ })(SearchConversationTabKey || (SearchConversationTabKey = {}));
17
+ const SearchConversation = ({ searchTerm }) => {
18
+ const { t } = useTranslation();
19
+ const [activeKey, setActiveKey] = useState(SearchConversationTabKey.All);
20
+ const items = useMemo(() => {
21
+ return [
22
+ {
23
+ key: SearchConversationTabKey.All,
24
+ label: t("all"),
25
+ children: (_jsx(SearchConversationAll, { searchTerm: searchTerm, setActiveKey: setActiveKey })),
26
+ },
27
+ {
28
+ key: SearchConversationTabKey.MyInbox,
29
+ label: t("my_inbox_tab"),
30
+ children: _jsx(SearchConversationMyInbox, { searchTerm: searchTerm }),
31
+ },
32
+ {
33
+ key: SearchConversationTabKey.Users,
34
+ label: t("users"),
35
+ children: _jsx(SearchConversationAsUsers, { searchTerm: searchTerm }),
36
+ },
37
+ {
38
+ key: SearchConversationTabKey.Messages,
39
+ label: t("messages"),
40
+ children: _jsx(SearchConversationAsMessages, { searchTerm: searchTerm }),
41
+ },
42
+ ];
43
+ }, [t, searchTerm]);
44
+ return (_jsx("div", { className: "h-full", children: _jsx(Tabs, { defaultActiveKey: SearchConversationTabKey.All, items: items, className: "h-full", activeKey: activeKey, onChange: (key) => setActiveKey(key), destroyOnHidden: true }) }));
45
+ };
46
+ export default SearchConversation;
@@ -0,0 +1,12 @@
1
+ import { MessageItem } from "@openim/wasm-client-sdk";
2
+ interface SearchItemAsMessageProps {
3
+ message: MessageItem & {
4
+ isRevoked?: boolean;
5
+ };
6
+ searchTerm: string;
7
+ displayTag?: string;
8
+ onClick?: () => void;
9
+ }
10
+ declare const SearchItemAsMessage: (props: SearchItemAsMessageProps) => import("react/jsx-runtime").JSX.Element;
11
+ export default SearchItemAsMessage;
12
+ //# sourceMappingURL=SearchItemAsMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchItemAsMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsMessage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAA4B,MAAM,yBAAyB,CAAC;AAehF,UAAU,wBAAwB;IAChC,OAAO,EAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAuG3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SessionType } from "@openim/wasm-client-sdk";
4
+ import { Avatar } from "antd";
5
+ import { formatTimestamp, highlightSearch, sanitizeHtml, } from "../../../utils/common";
6
+ import { DChatSDK } from "../../../constants/sdk";
7
+ import { useChatContext } from "../../../context/ChatContext";
8
+ import { message as antdMessage } from "antd";
9
+ import { useTranslation } from "react-i18next";
10
+ import useConversationStore from "../../../store/conversation";
11
+ import { useMemo } from "react";
12
+ import useAuthStore from "../../../store/auth";
13
+ const SearchItemAsMessage = (props) => {
14
+ var _a;
15
+ const { t } = useTranslation();
16
+ const { message, searchTerm = "", displayTag, onClick } = props;
17
+ const { user } = useChatContext();
18
+ const isCrm = useAuthStore((state) => state.isCrm);
19
+ const conversationData = useConversationStore((state) => state.conversationData);
20
+ const useConversationDisplay = useMemo(() => {
21
+ if (isCrm)
22
+ return true;
23
+ return (user === null || user === void 0 ? void 0 : user.userID) === (message === null || message === void 0 ? void 0 : message.sendID);
24
+ }, [conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex, message === null || message === void 0 ? void 0 : message.sendID, isCrm]);
25
+ const onPressItem = async () => {
26
+ const { data } = await DChatSDK.getOneConversation({
27
+ sourceID: message.sessionType === SessionType.Group
28
+ ? message.groupID
29
+ : (user === null || user === void 0 ? void 0 : user.userID) !== message.sendID
30
+ ? message.sendID
31
+ : message.recvID,
32
+ sessionType: message.sessionType,
33
+ });
34
+ if (!data) {
35
+ return antdMessage.error(t("err_get_conversation"));
36
+ }
37
+ useConversationStore
38
+ .getState()
39
+ .setConversationData(data, message.clientMsgID);
40
+ useConversationStore
41
+ .getState()
42
+ .setSelectedConversationId(data.conversationID);
43
+ onClick === null || onClick === void 0 ? void 0 : onClick();
44
+ };
45
+ let msgContent = "";
46
+ try {
47
+ msgContent =
48
+ (message === null || message === void 0 ? void 0 : message.isRevoked) === true
49
+ ? t("revoked")
50
+ : ((_a = JSON.parse((message === null || message === void 0 ? void 0 : message.content) || "{}")) === null || _a === void 0 ? void 0 : _a.content) || "";
51
+ }
52
+ catch (error) {
53
+ console.error("Failed to parse message content", error);
54
+ if (typeof (message === null || message === void 0 ? void 0 : message.content) === "string") {
55
+ msgContent = message === null || message === void 0 ? void 0 : message.content;
56
+ }
57
+ }
58
+ return (_jsxs("div", { className: "py-3 px-2 flex items-center gap-3 hover:bg-gray-100 hover:rounded-sm cursor-pointer border-b mx-1", onClick: onPressItem, children: [_jsx("div", { children: _jsx(Avatar, { size: "large", src: useConversationDisplay
59
+ ? message.senderFaceUrl
60
+ : conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL, alt: useConversationDisplay
61
+ ? message.senderNickname
62
+ : conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName, children: useConversationDisplay
63
+ ? message.senderNickname.charAt(0).toUpperCase()
64
+ : conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName.charAt(0).toUpperCase() }) }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsxs("div", { className: "flex flex-1 items-center justify-between", children: [_jsx("span", { className: "text-sm flex-1 font-semibold truncate", children: useConversationDisplay
65
+ ? message.senderNickname
66
+ : conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName }), _jsx("span", { className: "text-xs text-gray-500", children: formatTimestamp(message.sendTime, {
67
+ hasTime: true,
68
+ }) })] }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsx("span", { className: "text-xs flex-1 text-gray-500 truncate", dangerouslySetInnerHTML: {
69
+ __html: sanitizeHtml(highlightSearch(msgContent, searchTerm)),
70
+ } }), displayTag && (_jsx("span", { className: "text-[10px] text-blue-600 bg-blue-50 px-1.5 py-0.5 rounded w-fit truncate", children: displayTag }))] })] })] }, message.clientMsgID));
71
+ };
72
+ export default SearchItemAsMessage;
@@ -0,0 +1,8 @@
1
+ import { ISessionByStatus } from "../../../store/type";
2
+ interface SearchItemAsUserProps {
3
+ session: ISessionByStatus;
4
+ searchTerm: string;
5
+ }
6
+ declare const SearchItemAsUser: (props: SearchItemAsUserProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default SearchItemAsUser;
8
+ //# sourceMappingURL=SearchItemAsUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchItemAsUser.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsUser.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKhD,UAAU,qBAAqB;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,4CAyCrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Avatar, message } from "antd";
4
+ import { highlightSearch, sanitizeHtml } from "../../../utils/common";
5
+ import useConversationStore from "../../../store/conversation";
6
+ import { useTranslation } from "react-i18next";
7
+ const SearchItemAsUser = (props) => {
8
+ var _a, _b, _c, _d, _e, _f;
9
+ const { session, searchTerm = "" } = props;
10
+ const { t } = useTranslation();
11
+ const ownerName = `${(_a = session.owner) === null || _a === void 0 ? void 0 : _a.fullName}${((_b = session.owner) === null || _b === void 0 ? void 0 : _b.username) ? ` (${(_c = session.owner) === null || _c === void 0 ? void 0 : _c.username})` : ""}`;
12
+ const onPressItem = async () => {
13
+ if (!(session === null || session === void 0 ? void 0 : session.conversation)) {
14
+ return message.error(t("err_get_conversation"));
15
+ }
16
+ useConversationStore.getState().setConversationData(session.conversation);
17
+ useConversationStore
18
+ .getState()
19
+ .setSelectedConversationId(session.conversationId);
20
+ };
21
+ return (_jsxs("div", { className: "py-3 px-2 flex items-center gap-3 hover:bg-gray-100 hover:rounded-sm cursor-pointer border-b mx-1", onClick: onPressItem, children: [_jsx(Avatar, { size: "large", src: (_d = session.owner) === null || _d === void 0 ? void 0 : _d.avatar, alt: (_e = session.owner) === null || _e === void 0 ? void 0 : _e.username, children: (_f = session.owner) === null || _f === void 0 ? void 0 : _f.fullName.charAt(0).toUpperCase() }), _jsx("div", { className: "flex flex-col flex-1 min-w-0", children: _jsx("p", { className: "text-sm font-semibold truncate", dangerouslySetInnerHTML: {
22
+ __html: sanitizeHtml(highlightSearch(ownerName, searchTerm)),
23
+ } }) })] }, session.id));
24
+ };
25
+ export default SearchItemAsUser;
@@ -1 +1 @@
1
- {"version":3,"file":"useBizSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizSendMessage.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,iBAAiB;iCAOR,MAAM;CA6D3B,CAAC"}
1
+ {"version":3,"file":"useBizSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizSendMessage.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,iBAAiB;iCAOR,MAAM;CAkE3B,CAAC"}
@@ -18,6 +18,10 @@ export const useBizSendMessage = () => {
18
18
  return false;
19
19
  const isGroup = isBizGroupChat(conversation);
20
20
  const peerId = (_a = conversation.peer.id) !== null && _a !== void 0 ? _a : "";
21
+ if (!peerId) {
22
+ console.error("sendBizTextMessage: missing peer id", conversation);
23
+ return false;
24
+ }
21
25
  const recvID = isGroup ? "" : peerId;
22
26
  const groupID = isGroup ? peerId : "";
23
27
  const message = await createTextMessage(text);
@@ -0,0 +1,3 @@
1
+ import { ICannedCategoryResponse } from "../../types/dto";
2
+ export declare const useFetchCannedCategories: (teamId?: string, enabled?: boolean) => import("@tanstack/react-query").UseQueryResult<ICannedCategoryResponse[], Error>;
3
+ //# sourceMappingURL=useFetchCannedCategories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFetchCannedCategories.d.ts","sourceRoot":"","sources":["../../../src/hooks/canned-response/useFetchCannedCategories.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEpE,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,EAAE,UAAU,OAAO,qFAUvE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { useQuery } from "@tanstack/react-query";
2
+ import { QUERY_KEYS } from "../../services/query";
3
+ import { apiInstance } from "../../services/api";
4
+ import { ENDPOINTS } from "../../services/routes";
5
+ export const useFetchCannedCategories = (teamId, enabled) => useQuery({
6
+ queryKey: [QUERY_KEYS.GET_CANNED_CATEGORIES, teamId],
7
+ queryFn: async () => {
8
+ var _a;
9
+ const res = await apiInstance.get(ENDPOINTS.chatService.getCannedCategories, { params: { teamId } });
10
+ return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) || [];
11
+ },
12
+ enabled: !!enabled && !!teamId,
13
+ });