@droppii-org/chat-sdk 0.0.54 → 0.0.56
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/chatBubble/ChatBubble.d.ts.map +1 -1
- package/dist/components/chatBubble/ChatBubble.js +7 -4
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +2 -1
- package/dist/components/message/SelectSession.d.ts.map +1 -1
- package/dist/components/message/SelectSession.js +1 -3
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +16 -4
- package/dist/components/searchConversation/SearchDrawer.d.ts +3 -0
- package/dist/components/searchConversation/SearchDrawer.d.ts.map +1 -0
- package/dist/components/searchConversation/SearchDrawer.js +24 -0
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.d.ts +7 -0
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.d.ts.map +1 -0
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.js +28 -0
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts +1 -0
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts.map +1 -1
- package/dist/components/searchConversation/item/SearchItemAsMessage.js +2 -1
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/useMessage.js +1 -0
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/locales/vi/common.json +4 -1
- package/dist/services/query.d.ts +0 -1
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +0 -1
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils/common.d.ts +0 -3
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +2 -39
- package/package.json +1 -1
- package/dist/components/message/item/UrlTextMessage.d.ts +0 -7
- package/dist/components/message/item/UrlTextMessage.d.ts.map +0 -1
- package/dist/components/message/item/UrlTextMessage.js +0 -30
- package/dist/hooks/common/useFetchExternalLink.d.ts +0 -2
- package/dist/hooks/common/useFetchExternalLink.d.ts.map +0 -1
- package/dist/hooks/common/useFetchExternalLink.js +0 -18
package/dist/utils/common.d.ts
CHANGED
|
@@ -8,9 +8,6 @@ interface FormatOptions {
|
|
|
8
8
|
dateMonthFormat?: string;
|
|
9
9
|
}
|
|
10
10
|
export declare function formatTimestamp(timestamp: number, options?: FormatOptions): string;
|
|
11
|
-
export declare const urlRegex: RegExp;
|
|
12
11
|
export declare function extractLinks(text: string): string[];
|
|
13
|
-
export declare function wrapLinksInHtml(htmlContent: string): string;
|
|
14
|
-
export declare const getHostFromUrl: (url: string) => string | null;
|
|
15
12
|
export {};
|
|
16
13
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,WAkBnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,IAAI,GAAG,WAiCR,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,kBAAc,WA2Cf,CAAC;AAEF,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAqBR;AAED,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,WAkBnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,IAAI,GAAG,WAiCR,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,kBAAc,WA2Cf,CAAC;AAEF,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAqBR;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKnD"}
|
package/dist/utils/common.js
CHANGED
|
@@ -113,45 +113,8 @@ export function formatTimestamp(timestamp, options) {
|
|
|
113
113
|
? date.format(`HH:mm ${dateMonthFormat} YYYY`)
|
|
114
114
|
: date.format(`${dateMonthFormat} YYYY`);
|
|
115
115
|
}
|
|
116
|
-
export const urlRegex = /\bhttps?:\/\/[^\s<>"']*[^\s<>"',.!?()\[\]{}]/g;
|
|
117
116
|
export function extractLinks(text) {
|
|
117
|
+
// Regex match http:// hoặc https:// và domain
|
|
118
|
+
const urlRegex = /\bhttps?:\/\/[^\s<>"']*[^\s<>"',.!?()\[\]{}]/g;
|
|
118
119
|
return text.match(urlRegex) || [];
|
|
119
120
|
}
|
|
120
|
-
export function wrapLinksInHtml(htmlContent) {
|
|
121
|
-
var _a;
|
|
122
|
-
// Regex để kiểm tra xem link có nằm trong thẻ <a> không
|
|
123
|
-
const anchorTagRegex = /<a\s[^>]*>.*?<\/a>/gi;
|
|
124
|
-
let result = "";
|
|
125
|
-
let lastIndex = 0;
|
|
126
|
-
// Tách các đoạn đã có <a> sẵn ra để tránh xử lý nhầm
|
|
127
|
-
const matches = [...htmlContent.matchAll(anchorTagRegex)];
|
|
128
|
-
for (const match of matches) {
|
|
129
|
-
const matchStart = (_a = match.index) !== null && _a !== void 0 ? _a : 0;
|
|
130
|
-
const matchEnd = matchStart + match[0].length;
|
|
131
|
-
// Xử lý phần nằm trước thẻ a
|
|
132
|
-
const before = htmlContent.slice(lastIndex, matchStart);
|
|
133
|
-
const replacedBefore = before.replace(urlRegex, (url) => {
|
|
134
|
-
return `<a href="${url}" target="_blank" rel="noopener noreferrer">${url}</a>`;
|
|
135
|
-
});
|
|
136
|
-
result += replacedBefore;
|
|
137
|
-
// Giữ nguyên phần trong thẻ a
|
|
138
|
-
result += match[0];
|
|
139
|
-
lastIndex = matchEnd;
|
|
140
|
-
}
|
|
141
|
-
// Xử lý phần còn lại sau thẻ a cuối cùng
|
|
142
|
-
const after = htmlContent.slice(lastIndex);
|
|
143
|
-
const replacedAfter = after.replace(urlRegex, (url) => {
|
|
144
|
-
return `<a class="text-blue-500 underline" href="${url}" target="_blank" rel="noopener noreferrer">${url}</a>`;
|
|
145
|
-
});
|
|
146
|
-
result += replacedAfter;
|
|
147
|
-
return result;
|
|
148
|
-
}
|
|
149
|
-
export const getHostFromUrl = (url) => {
|
|
150
|
-
try {
|
|
151
|
-
const u = new URL(url);
|
|
152
|
-
return u.host;
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
};
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MessageItem } from "@openim/wasm-client-sdk";
|
|
2
|
-
interface UrlTextMessageItemProps {
|
|
3
|
-
message: MessageItem;
|
|
4
|
-
}
|
|
5
|
-
declare const UrlTextMessageItem: (props: UrlTextMessageItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
export default UrlTextMessageItem;
|
|
7
|
-
//# sourceMappingURL=UrlTextMessage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UrlTextMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/UrlTextMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,UAAU,uBAAuB;IAC/B,OAAO,EAAE,WAAW,CAAC;CACtB;AACD,QAAA,MAAM,kBAAkB,GAAI,OAAO,uBAAuB,4CAiEzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { getHostFromUrl, wrapLinksInHtml } from "../../../utils/common";
|
|
4
|
-
import { useFetchExternalLink } from "../../../hooks/common/useFetchExternalLink";
|
|
5
|
-
import { Image } from "antd";
|
|
6
|
-
const UrlTextMessageItem = (props) => {
|
|
7
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
8
|
-
const { message } = props;
|
|
9
|
-
const { data: externalLinkData } = useFetchExternalLink(((_b = (_a = message === null || message === void 0 ? void 0 : message.urlTextElem) === null || _a === void 0 ? void 0 : _a.urls) === null || _b === void 0 ? void 0 : _b[0]) || "");
|
|
10
|
-
let extendMessageInfo = null;
|
|
11
|
-
const onPressExternalLink = (url) => {
|
|
12
|
-
if (!url)
|
|
13
|
-
return;
|
|
14
|
-
window.open(url, "_blank", "noopener,noreferrer");
|
|
15
|
-
};
|
|
16
|
-
try {
|
|
17
|
-
extendMessageInfo = JSON.parse((message === null || message === void 0 ? void 0 : message.ex) || "{}");
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
extendMessageInfo = {};
|
|
21
|
-
console.error("Failed to parse extendMessageInfo", error);
|
|
22
|
-
}
|
|
23
|
-
if (Object.keys(extendMessageInfo).length > 0 &&
|
|
24
|
-
(extendMessageInfo === null || extendMessageInfo === void 0 ? void 0 : extendMessageInfo.messageInfo)) {
|
|
25
|
-
const htmlContent = ((_d = (_c = extendMessageInfo === null || extendMessageInfo === void 0 ? void 0 : extendMessageInfo.messageInfo) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.content) || "";
|
|
26
|
-
return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("div", { className: "!text-sm sm:text-base break-words whitespace-pre-line flex-1 break-all", dangerouslySetInnerHTML: { __html: wrapLinksInHtml(htmlContent) } }), !!externalLinkData && (_jsxs("div", { className: "flex items-center rounded-md px-3 py-2 border-l-4 border-l-blue-500 bg-blue-50 gap-2 cursor-pointer", onClick: () => onPressExternalLink((externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) || ""), children: [_jsxs("div", { className: "flex flex-1 flex-col gap-1", children: [(externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.title) && (_jsx("span", { className: "!text-sm font-semibold truncate", children: externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.title })), (externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.description) && (_jsx("span", { className: "!text-sm text-gray-500 line-clamp-2", children: externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.description })), (externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) && (_jsx("span", { className: "!text-sm font-medium text-blue-500", children: getHostFromUrl(externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) }))] }), ((_e = externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.logo) === null || _e === void 0 ? void 0 : _e.url) && (_jsx(Image, { src: (_f = externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.logo) === null || _f === void 0 ? void 0 : _f.url, width: 48, height: 48 }))] }))] }));
|
|
27
|
-
}
|
|
28
|
-
return (_jsx("span", { className: "!text-sm sm:text-base break-words whitespace-pre-line flex-1 break-all", children: ((_h = (_g = message === null || message === void 0 ? void 0 : message.urlTextElem) === null || _g === void 0 ? void 0 : _g.urls) === null || _h === void 0 ? void 0 : _h[0]) || "" }));
|
|
29
|
-
};
|
|
30
|
-
export default UrlTextMessageItem;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchExternalLink.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useFetchExternalLink.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,+DAmB5C,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useQuery } from "@tanstack/react-query";
|
|
2
|
-
import { QUERY_KEYS } from "../../services/query";
|
|
3
|
-
export const useFetchExternalLink = (url) => useQuery({
|
|
4
|
-
queryKey: [QUERY_KEYS.FETCH_EXTERNAL_LINK, url],
|
|
5
|
-
queryFn: async () => {
|
|
6
|
-
const res = await fetch(`https://api.microlink.io?url=${encodeURIComponent(url)}`)
|
|
7
|
-
.then((res) => res.json())
|
|
8
|
-
.then((res) => {
|
|
9
|
-
return res;
|
|
10
|
-
})
|
|
11
|
-
.catch(() => {
|
|
12
|
-
return null;
|
|
13
|
-
});
|
|
14
|
-
return res === null || res === void 0 ? void 0 : res.data;
|
|
15
|
-
},
|
|
16
|
-
enabled: !!url,
|
|
17
|
-
retry: 0,
|
|
18
|
-
});
|