@droppii-org/chat-sdk 0.1.67 → 0.1.69
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/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +4 -1
- package/dist/components/conversation-inbox/ConversationInboxItem.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationInboxItem.js +1 -1
- package/dist/components/message/item/CustomMessage.d.ts +7 -0
- package/dist/components/message/item/CustomMessage.d.ts.map +1 -0
- package/dist/components/message/item/CustomMessage.js +26 -0
- package/dist/hooks/message/useSendCustomMessage.d.ts +7 -0
- package/dist/hooks/message/useSendCustomMessage.d.ts.map +1 -0
- package/dist/hooks/message/useSendCustomMessage.js +5 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/customMessage.d.ts +25 -0
- package/dist/types/customMessage.d.ts.map +1 -0
- package/dist/types/customMessage.js +4 -0
- package/dist/utils/common.d.ts +5 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +17 -12
- package/dist/utils/customMessage.d.ts +5 -0
- package/dist/utils/customMessage.d.ts.map +1 -0
- package/dist/utils/customMessage.js +36 -0
- package/package.json +6 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { MessageItem } from "@openim/wasm-client-sdk";
|
|
3
|
+
export declare const CustomMessageType: {
|
|
4
|
+
readonly Order: "Order";
|
|
5
|
+
readonly Product: "Product";
|
|
6
|
+
};
|
|
7
|
+
export type CustomMessageType = (typeof CustomMessageType)[keyof typeof CustomMessageType];
|
|
8
|
+
export type CustomElemOrderData = {
|
|
9
|
+
id: string;
|
|
10
|
+
orderCode: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
};
|
|
13
|
+
export type CustomMessagePayload = {
|
|
14
|
+
type: typeof CustomMessageType.Order;
|
|
15
|
+
data: CustomElemOrderData;
|
|
16
|
+
} | {
|
|
17
|
+
type: typeof CustomMessageType.Product;
|
|
18
|
+
data: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
export interface RenderCustomMessageArgs {
|
|
21
|
+
message: MessageItem;
|
|
22
|
+
payload: CustomMessagePayload | null;
|
|
23
|
+
}
|
|
24
|
+
export type RenderCustomMessage = (args: RenderCustomMessageArgs) => ReactNode | null;
|
|
25
|
+
//# sourceMappingURL=customMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customMessage.d.ts","sourceRoot":"","sources":["../../src/types/customMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE7D,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,OAAO,iBAAiB,CAAC,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,IAAI,EAAE,uBAAuB,KAC1B,SAAS,GAAG,IAAI,CAAC"}
|
package/dist/utils/common.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { MessageType } from "@openim/wasm-client-sdk";
|
|
2
2
|
import { TFunction } from "i18next";
|
|
3
3
|
import { UrlMetadataInfo } from "../types/chat";
|
|
4
|
+
import { PeerType } from "../types/conversation";
|
|
4
5
|
export declare const parseUrlMetadata: (ex?: string) => UrlMetadataInfo | undefined;
|
|
5
6
|
export declare function formatDuration(seconds: number): string;
|
|
6
7
|
export declare function renderFileSize(bytes: number): string;
|
|
7
8
|
export declare const generateContentBasedOnMessageType: (contentType: MessageType, plainText?: string, t?: TFunction) => string;
|
|
8
|
-
export declare const parseLatestMessage: (latestMsg: string, currentUserId?: string, t?: TFunction
|
|
9
|
+
export declare const parseLatestMessage: (latestMsg: string, currentUserId?: string, t?: TFunction, conversation?: {
|
|
10
|
+
peerType?: PeerType | string;
|
|
11
|
+
showName?: string;
|
|
12
|
+
}) => string;
|
|
9
13
|
export declare const highlightSearch: (text: string, keyword: string, maxLength?: number) => string;
|
|
10
14
|
interface FormatOptions {
|
|
11
15
|
hasTime?: boolean;
|
|
@@ -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;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,eAAe,GAAG,SAQhE,CAAC;AAwBF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,EAClB,IAAI,SAAS,WAsBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,IAAI,SAAS,EACb,eAAe;IAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,WAkEnE,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,eAAO,MAAM,QAAQ,QAAkD,CAAC;AAExE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqC3D;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAOrD,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OACf,CAAC;AAEnC,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAO9B,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgEjD"}
|
package/dist/utils/common.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MessageType } from "@openim/wasm-client-sdk";
|
|
2
2
|
import dayjs from "dayjs";
|
|
3
3
|
import DOMPurify from "dompurify";
|
|
4
|
+
import { PeerType } from "../types/conversation";
|
|
4
5
|
import { getSystemLogMessageText } from "./messageLog";
|
|
5
6
|
export const parseUrlMetadata = (ex) => {
|
|
6
7
|
if (!ex)
|
|
@@ -13,17 +14,21 @@ export const parseUrlMetadata = (ex) => {
|
|
|
13
14
|
return undefined;
|
|
14
15
|
}
|
|
15
16
|
};
|
|
16
|
-
const getSenderLabelForLatestPreview = (msgData, currentUserId, t) => {
|
|
17
|
-
var _a;
|
|
17
|
+
const getSenderLabelForLatestPreview = (msgData, currentUserId, t, conversation) => {
|
|
18
|
+
var _a, _b;
|
|
18
19
|
if (currentUserId && msgData.sendID === currentUserId) {
|
|
19
20
|
return String(t("you"));
|
|
20
21
|
}
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
return
|
|
22
|
+
const senderNickname = (_a = msgData.senderNickname) === null || _a === void 0 ? void 0 : _a.trim();
|
|
23
|
+
if (senderNickname) {
|
|
24
|
+
return senderNickname;
|
|
25
|
+
}
|
|
26
|
+
if ((conversation === null || conversation === void 0 ? void 0 : conversation.peerType) === PeerType.BOT) {
|
|
27
|
+
return ((_b = conversation.showName) === null || _b === void 0 ? void 0 : _b.trim()) || undefined;
|
|
24
28
|
}
|
|
25
|
-
return
|
|
29
|
+
return undefined;
|
|
26
30
|
};
|
|
31
|
+
const formatWithSender = (sender, content) => sender ? `${sender}: ${content}` : content;
|
|
27
32
|
export function formatDuration(seconds) {
|
|
28
33
|
const minutes = Math.floor(seconds / 60);
|
|
29
34
|
const secs = Math.floor(seconds % 60);
|
|
@@ -63,32 +68,32 @@ export const generateContentBasedOnMessageType = (contentType, plainText, t) =>
|
|
|
63
68
|
return "";
|
|
64
69
|
}
|
|
65
70
|
};
|
|
66
|
-
export const parseLatestMessage = (latestMsg, currentUserId, t) => {
|
|
71
|
+
export const parseLatestMessage = (latestMsg, currentUserId, t, conversation) => {
|
|
67
72
|
var _a, _b, _c, _d;
|
|
68
73
|
if (!latestMsg || !t)
|
|
69
74
|
return "";
|
|
70
75
|
try {
|
|
71
76
|
const msgData = JSON.parse(latestMsg);
|
|
72
77
|
const contentType = msgData === null || msgData === void 0 ? void 0 : msgData.contentType;
|
|
73
|
-
const sender = getSenderLabelForLatestPreview(msgData, currentUserId, t);
|
|
78
|
+
const sender = getSenderLabelForLatestPreview(msgData, currentUserId, t, conversation);
|
|
74
79
|
switch (contentType) {
|
|
75
80
|
case MessageType.LogTextMessage:
|
|
76
81
|
return getSystemLogMessageText(msgData);
|
|
77
82
|
case MessageType.TextMessage:
|
|
78
83
|
case MessageType.QuoteMessage:
|
|
79
84
|
case MessageType.UrlTextMessage:
|
|
80
|
-
return
|
|
85
|
+
return formatWithSender(sender, generateContentBasedOnMessageType(contentType, ((_a = msgData === null || msgData === void 0 ? void 0 : msgData.textElem) === null || _a === void 0 ? void 0 : _a.content) ||
|
|
81
86
|
((_b = msgData === null || msgData === void 0 ? void 0 : msgData.quoteElem) === null || _b === void 0 ? void 0 : _b.text) ||
|
|
82
87
|
((_c = msgData === null || msgData === void 0 ? void 0 : msgData.urlTextElem) === null || _c === void 0 ? void 0 : _c.content) ||
|
|
83
|
-
"")
|
|
88
|
+
""));
|
|
84
89
|
case MessageType.PictureMessage:
|
|
85
90
|
case MessageType.MergeMessage:
|
|
86
91
|
case MessageType.VoiceMessage:
|
|
87
92
|
case MessageType.VideoMessage:
|
|
88
93
|
case MessageType.FileMessage:
|
|
89
|
-
return
|
|
94
|
+
return formatWithSender(sender, generateContentBasedOnMessageType(contentType));
|
|
90
95
|
case MessageType.RevokeMessage:
|
|
91
|
-
return t("revoked_with_sender", { name: sender });
|
|
96
|
+
return sender ? t("revoked_with_sender", { name: sender }) : t("revoked");
|
|
92
97
|
case MessageType.CustomMessage: {
|
|
93
98
|
const customData = (_d = msgData.customElem) === null || _d === void 0 ? void 0 : _d.data;
|
|
94
99
|
if (customData === "#SESSION - START") {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MessageItem } from "@openim/wasm-client-sdk";
|
|
2
|
+
import { type CustomMessagePayload } from "../types/customMessage";
|
|
3
|
+
export declare const isRenderableCustomMessage: (message: MessageItem) => boolean;
|
|
4
|
+
export declare const parseCustomMessagePayload: (message: MessageItem) => CustomMessagePayload | null;
|
|
5
|
+
//# sourceMappingURL=customMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customMessage.d.ts","sourceRoot":"","sources":["../../src/utils/customMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAY/B,eAAO,MAAM,yBAAyB,GAAI,SAAS,WAAW,KAAG,OAGhE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,WAAW,KACnB,oBAAoB,GAAG,IAuBzB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CustomMessageType, } from "../types/customMessage";
|
|
2
|
+
const KNOWN_CUSTOM_MESSAGE_TYPES = Object.values(CustomMessageType);
|
|
3
|
+
const isCustomElemOrderData = (data) => {
|
|
4
|
+
if (typeof data !== "object" || data === null)
|
|
5
|
+
return false;
|
|
6
|
+
const orderData = data;
|
|
7
|
+
return (typeof orderData.id === "string" && typeof orderData.orderCode === "string");
|
|
8
|
+
};
|
|
9
|
+
export const isRenderableCustomMessage = (message) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const extension = (_a = message === null || message === void 0 ? void 0 : message.customElem) === null || _a === void 0 ? void 0 : _a.extension;
|
|
12
|
+
return !!extension && KNOWN_CUSTOM_MESSAGE_TYPES.includes(extension);
|
|
13
|
+
};
|
|
14
|
+
export const parseCustomMessagePayload = (message) => {
|
|
15
|
+
const customElem = message === null || message === void 0 ? void 0 : message.customElem;
|
|
16
|
+
if (!customElem || !isRenderableCustomMessage(message))
|
|
17
|
+
return null;
|
|
18
|
+
let parsedData = null;
|
|
19
|
+
try {
|
|
20
|
+
parsedData = JSON.parse(customElem.data || "");
|
|
21
|
+
}
|
|
22
|
+
catch (_a) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (typeof parsedData !== "object" || parsedData === null)
|
|
26
|
+
return null;
|
|
27
|
+
if (customElem.extension === CustomMessageType.Order) {
|
|
28
|
+
return isCustomElemOrderData(parsedData)
|
|
29
|
+
? { type: CustomMessageType.Order, data: parsedData }
|
|
30
|
+
: null;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
type: CustomMessageType.Product,
|
|
34
|
+
data: parsedData,
|
|
35
|
+
};
|
|
36
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@droppii-org/chat-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.69",
|
|
4
4
|
"description": "Droppii React Chat SDK",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -59,6 +59,10 @@
|
|
|
59
59
|
"build": "pnpm build:css && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && pnpm copy-assets",
|
|
60
60
|
"build:css": "tailwindcss -i ./src/styles/global.css -o ./dist/styles/global.css --minify",
|
|
61
61
|
"dev": "tsc --noEmit --watch",
|
|
62
|
+
"dev:link": "pnpm copy-assets && concurrently -k -n css,js,alias -c magenta,cyan,yellow \"pnpm:dev:link:css\" \"pnpm:dev:link:js\" \"pnpm:dev:link:alias\"",
|
|
63
|
+
"dev:link:css": "tailwindcss -i ./src/styles/global.css -o ./dist/styles/global.css --watch",
|
|
64
|
+
"dev:link:js": "tsc --watch -p tsconfig.build.json",
|
|
65
|
+
"dev:link:alias": "tsc-alias -p tsconfig.build.json --watch",
|
|
62
66
|
"lint": "eslint src/",
|
|
63
67
|
"type-check": "tsc --noEmit",
|
|
64
68
|
"prepublishOnly": "pnpm build",
|
|
@@ -120,6 +124,7 @@
|
|
|
120
124
|
"@types/node": "^20.0.0",
|
|
121
125
|
"@types/react": "^18.2.37",
|
|
122
126
|
"@types/react-dom": "^18.2.15",
|
|
127
|
+
"concurrently": "^9.1.0",
|
|
123
128
|
"shx": "^0.4.0",
|
|
124
129
|
"tsc-alias": "^1.8.17",
|
|
125
130
|
"typescript": "^5.2.2"
|