@droppii-org/chat-mobile 0.2.96 → 0.2.98
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/README.md +10 -1
- package/lib/module/assets/images/index.js +1 -0
- package/lib/module/assets/images/index.js.map +1 -1
- package/lib/module/assets/images/tag_bot_mall.png +0 -0
- package/lib/module/components/Avatar/Avatar.utils.js +9 -2
- package/lib/module/components/Avatar/Avatar.utils.js.map +1 -1
- package/lib/module/config/api-endpoints.js +1 -1
- package/lib/module/config/api-endpoints.js.map +1 -1
- package/lib/module/config/configuration.js +24 -2
- package/lib/module/config/configuration.js.map +1 -1
- package/lib/module/core/index.js +7 -1
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/hooks/message/useSearchMessage.js +9 -8
- package/lib/module/hooks/message/useSearchMessage.js.map +1 -1
- package/lib/typescript/src/assets/images/index.d.ts +1 -0
- package/lib/typescript/src/assets/images/index.d.ts.map +1 -1
- package/lib/typescript/src/components/Avatar/Avatar.utils.d.ts.map +1 -1
- package/lib/typescript/src/config/configuration.d.ts +15 -0
- package/lib/typescript/src/config/configuration.d.ts.map +1 -1
- package/lib/typescript/src/core/index.d.ts +7 -0
- package/lib/typescript/src/core/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/message/useSearchMessage.d.ts +24 -25
- package/lib/typescript/src/hooks/message/useSearchMessage.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/assets/images/index.ts +1 -0
- package/src/assets/images/tag_bot_mall.png +0 -0
- package/src/components/Avatar/Avatar.utils.ts +7 -2
- package/src/config/api-endpoints.ts +1 -1
- package/src/config/configuration.ts +24 -1
- package/src/core/index.ts +14 -2
- package/src/hooks/message/useSearchMessage.ts +9 -12
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ npm install react-native-fs
|
|
|
29
29
|
Khởi tạo Chat SDK. Gọi hàm này **một lần duy nhất** khi ứng dụng khởi động, **trước khi** render bất kỳ component nào sử dụng tính năng chat.
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
|
-
import { initChatSdk } from '@droppii/chat-mobile';
|
|
32
|
+
import { initChatSdk, DChatProject } from '@droppii/chat-mobile';
|
|
33
33
|
import RNFS from 'react-native-fs';
|
|
34
34
|
|
|
35
35
|
initChatSdk({
|
|
@@ -39,6 +39,7 @@ initChatSdk({
|
|
|
39
39
|
logFilePath: RNFS.DocumentDirectoryPath + '/chat', // Thư mục lưu file log
|
|
40
40
|
logLevel: 5, // LogLevel.Debug (xem bảng bên dưới)
|
|
41
41
|
isLogStandardOutput: true, // In log ra console (nên bật khi develop)
|
|
42
|
+
platform: DChatProject.CUS, // Tích hợp cho app Mall — bỏ qua nếu là app Biz (mặc định DChatProject.BIZ)
|
|
42
43
|
});
|
|
43
44
|
```
|
|
44
45
|
|
|
@@ -53,6 +54,14 @@ initChatSdk({
|
|
|
53
54
|
| `logLevel` | `LogLevel` | ✅ | Mức độ log (xem bảng `LogLevel` bên dưới) |
|
|
54
55
|
| `isLogStandardOutput` | `boolean` | ✅ | `true` để in log ra stdout (hữu ích khi debug) |
|
|
55
56
|
|
|
57
|
+
#### Tham số bổ sung của `@droppii/chat-mobile`
|
|
58
|
+
|
|
59
|
+
Ngoài các tham số của `InitOptions` (chuyển thẳng vào OpenIM SDK), `initChatSdk` còn nhận thêm:
|
|
60
|
+
|
|
61
|
+
| Tham số | Kiểu | Bắt buộc | Mô tả |
|
|
62
|
+
| ---------- | -------------- | :------: | ----------------------------------------------------------------------------------------------------------- |
|
|
63
|
+
| `platform` | `DChatProject` | ❌ | App đang tích hợp thư viện: `DChatProject.BIZ` (mặc định) hoặc `DChatProject.CUS` (Mall). Quyết định các asset riêng theo app, ví dụ tag "Bot" trên avatar. Không truyền thì giữ nguyên hành vi cũ (Biz). |
|
|
64
|
+
|
|
56
65
|
#### `LogLevel`
|
|
57
66
|
|
|
58
67
|
| Giá trị | Hằng số | Mô tả |
|
|
@@ -9,6 +9,7 @@ const Images = {
|
|
|
9
9
|
ICON_WORD: require('./icon_word.png'),
|
|
10
10
|
NOTIFICATION_WARNING: require('./notification-warning.png'),
|
|
11
11
|
TAG_BOT: require('./tag_bot.png'),
|
|
12
|
+
TAG_BOT_MALL: require('./tag_bot_mall.png'),
|
|
12
13
|
TAG_MALL: require('./tag_mall.png'),
|
|
13
14
|
ICON_DROPPII: require('./icon_droppii.png'),
|
|
14
15
|
BTN_RESEND: require('./btn_resend.png'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Images","ICON_BOT","require","ICON_EXCEL","ICON_IMG","ICON_PDF","ICON_TXT","ICON_WORD","NOTIFICATION_WARNING","TAG_BOT","TAG_MALL","ICON_DROPPII","BTN_RESEND","RESOURCE_CENTER_EMPTY_BOX","SEARCH_EMPTY"],"sourceRoot":"../../../../src","sources":["assets/images/index.ts"],"mappings":";;AAAA,MAAMA,MAAM,GAAG;EACbC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB,CAAC;EACnCC,UAAU,EAAED,OAAO,CAAC,kBAAkB,CAAC;EACvCE,QAAQ,EAAEF,OAAO,CAAC,gBAAgB,CAAC;EACnCG,QAAQ,EAAEH,OAAO,CAAC,gBAAgB,CAAC;EACnCI,QAAQ,EAAEJ,OAAO,CAAC,gBAAgB,CAAC;EACnCK,SAAS,EAAEL,OAAO,CAAC,iBAAiB,CAAC;EACrCM,oBAAoB,EAAEN,OAAO,CAAC,4BAA4B,CAAC;EAC3DO,OAAO,EAAEP,OAAO,CAAC,eAAe,CAAC;EACjCQ,
|
|
1
|
+
{"version":3,"names":["Images","ICON_BOT","require","ICON_EXCEL","ICON_IMG","ICON_PDF","ICON_TXT","ICON_WORD","NOTIFICATION_WARNING","TAG_BOT","TAG_BOT_MALL","TAG_MALL","ICON_DROPPII","BTN_RESEND","RESOURCE_CENTER_EMPTY_BOX","SEARCH_EMPTY"],"sourceRoot":"../../../../src","sources":["assets/images/index.ts"],"mappings":";;AAAA,MAAMA,MAAM,GAAG;EACbC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB,CAAC;EACnCC,UAAU,EAAED,OAAO,CAAC,kBAAkB,CAAC;EACvCE,QAAQ,EAAEF,OAAO,CAAC,gBAAgB,CAAC;EACnCG,QAAQ,EAAEH,OAAO,CAAC,gBAAgB,CAAC;EACnCI,QAAQ,EAAEJ,OAAO,CAAC,gBAAgB,CAAC;EACnCK,SAAS,EAAEL,OAAO,CAAC,iBAAiB,CAAC;EACrCM,oBAAoB,EAAEN,OAAO,CAAC,4BAA4B,CAAC;EAC3DO,OAAO,EAAEP,OAAO,CAAC,eAAe,CAAC;EACjCQ,YAAY,EAAER,OAAO,CAAC,oBAAoB,CAAC;EAC3CS,QAAQ,EAAET,OAAO,CAAC,gBAAgB,CAAC;EACnCU,YAAY,EAAEV,OAAO,CAAC,oBAAoB,CAAC;EAC3CW,UAAU,EAAEX,OAAO,CAAC,kBAAkB,CAAC;EACvCY,yBAAyB,EAAEZ,OAAO,CAAC,iCAAiC,CAAC;EACrEa,YAAY,EAAEb,OAAO,CAAC,oBAAoB;AAC5C,CAAC;AAED,eAAeF,MAAM","ignoreList":[]}
|
|
Binary file
|
|
@@ -34,14 +34,21 @@ export const getInitials = fullName => {
|
|
|
34
34
|
};
|
|
35
35
|
export const getBadgeImage = variant => {
|
|
36
36
|
const Images = require('../../assets/images').default;
|
|
37
|
+
const {
|
|
38
|
+
getPlatform
|
|
39
|
+
} = require('../../config/configuration');
|
|
40
|
+
const {
|
|
41
|
+
DChatProject
|
|
42
|
+
} = require('../../types/chat');
|
|
43
|
+
const botImage = getPlatform() === DChatProject.CUS ? Images.TAG_BOT_MALL : Images.TAG_BOT;
|
|
37
44
|
switch (variant) {
|
|
38
45
|
case 'mall':
|
|
39
46
|
return Images.TAG_MALL;
|
|
40
47
|
case 'bot':
|
|
41
48
|
case 'support':
|
|
42
|
-
return
|
|
49
|
+
return botImage;
|
|
43
50
|
default:
|
|
44
|
-
return
|
|
51
|
+
return botImage;
|
|
45
52
|
}
|
|
46
53
|
};
|
|
47
54
|
export { SIZE_MAP, TYPO_MAP };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SIZE_MAP","sm","nm","md","lg","TYPO_MAP","getInitials","fullName","cleaned","replace","trim","parts","split","filter","Boolean","length","toUpperCase","firstInitial","lastInitial","getBadgeImage","variant","Images","require","default","
|
|
1
|
+
{"version":3,"names":["SIZE_MAP","sm","nm","md","lg","TYPO_MAP","getInitials","fullName","cleaned","replace","trim","parts","split","filter","Boolean","length","toUpperCase","firstInitial","lastInitial","getBadgeImage","variant","Images","require","default","getPlatform","DChatProject","botImage","CUS","TAG_BOT_MALL","TAG_BOT","TAG_MALL"],"sourceRoot":"../../../../src","sources":["components/Avatar/Avatar.utils.ts"],"mappings":";;AAAA,MAAMA,QAAQ,GAAG;EACfC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACN,CAAC,MAAM,GAAG;AACZ,CAAU;AAEV,MAAMC,QAAQ,GAAG;EACf,EAAE,EAAE,YAAY;EAChB,EAAE,EAAE,YAAY;EAChB,EAAE,EAAE,YAAY;EAChB,EAAE,EAAE,YAAY;EAChB,EAAE,EAAE;AACN,CAAU;AAEV,OAAO,MAAMC,WAAW,GAAIC,QAAiB,IAAa;EACxD,IAAI,CAACA,QAAQ,EAAE,OAAO,GAAG;;EAEzB;EACA,MAAMC,OAAO,GAAGD,QAAQ,CACrBE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;EAAA,CAC5BC,IAAI,CAAC,CAAC;EAET,IAAI,CAACF,OAAO,EAAE,OAAO,GAAG;EAExB,MAAMG,KAAK,GAAGH,OAAO,CAACI,KAAK,CAAC,KAAK,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAElD,IAAIH,KAAK,CAACI,MAAM,KAAK,CAAC,EAAE;IACtB;IACA,OAAOJ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEK,WAAW,CAAC,CAAC,IAAI,GAAG;EAC9C;;EAEA;EACA,MAAMC,YAAY,GAAGN,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEK,WAAW,CAAC,CAAC,IAAI,EAAE;EACzD,MAAME,WAAW,GAAGP,KAAK,GAAGA,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEC,WAAW,CAAC,CAAC,IAAI,EAAE;EACvE,OAAOC,YAAY,GAAGC,WAAW,IAAI,GAAG;AAC1C,CAAC;AAED,OAAO,MAAMC,aAAa,GAAIC,OAAgB,IAAK;EACjD,MAAMC,MAAM,GAAGC,OAAO,CAAC,qBAAqB,CAAC,CAACC,OAAO;EACrD,MAAM;IAAEC;EAAY,CAAC,GAAGF,OAAO,CAAC,4BAA4B,CAAC;EAC7D,MAAM;IAAEG;EAAa,CAAC,GAAGH,OAAO,CAAC,kBAAkB,CAAC;EACpD,MAAMI,QAAQ,GACZF,WAAW,CAAC,CAAC,KAAKC,YAAY,CAACE,GAAG,GAAGN,MAAM,CAACO,YAAY,GAAGP,MAAM,CAACQ,OAAO;EAE3E,QAAQT,OAAO;IACb,KAAK,MAAM;MACT,OAAOC,MAAM,CAACS,QAAQ;IACxB,KAAK,KAAK;IACV,KAAK,SAAS;MACZ,OAAOJ,QAAQ;IACjB;MACE,OAAOA,QAAQ;EACnB;AACF,CAAC;AAED,SAAS1B,QAAQ,EAAEK,QAAQ","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@ const DEFAULT_ENDPOINTS = {
|
|
|
15
15
|
urlMetadata: '/chat-service/v1/utils/url-metadata',
|
|
16
16
|
conversation: '/chat-service/v1/app/conversations',
|
|
17
17
|
imageUpload: '/uploader-service/v1/uploader/permanently',
|
|
18
|
-
bot: '/chat-service/v1/app/bots
|
|
18
|
+
bot: '/chat-service/v1/app/bots',
|
|
19
19
|
uploadFcmToken: '/chat-service/third/fcm_update_token',
|
|
20
20
|
stickerCategories: '/chat-service/v1/app/sticker-categories',
|
|
21
21
|
stickersByCategory: '/chat-service/v1/app/sticker-categories',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_ENDPOINTS","urlMetadata","conversation","imageUpload","bot","uploadFcmToken","stickerCategories","stickersByCategory","stickerHistory","messagesResources","messages","contacts","groupJoinLink","endpoints","getApiEndpoint","key","setApiEndpoint","value","setAllApiEndpoints","newEndpoints","resetApiEndpoints","getAllApiEndpoints"],"sourceRoot":"../../../src","sources":["config/api-endpoints.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA,MAAMA,iBAA+B,GAAG;EACtCC,WAAW,EAAE,qCAAqC;EAClDC,YAAY,EAAE,oCAAoC;EAClDC,WAAW,EAAE,2CAA2C;EACxDC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"names":["DEFAULT_ENDPOINTS","urlMetadata","conversation","imageUpload","bot","uploadFcmToken","stickerCategories","stickersByCategory","stickerHistory","messagesResources","messages","contacts","groupJoinLink","endpoints","getApiEndpoint","key","setApiEndpoint","value","setAllApiEndpoints","newEndpoints","resetApiEndpoints","getAllApiEndpoints"],"sourceRoot":"../../../src","sources":["config/api-endpoints.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA,MAAMA,iBAA+B,GAAG;EACtCC,WAAW,EAAE,qCAAqC;EAClDC,YAAY,EAAE,oCAAoC;EAClDC,WAAW,EAAE,2CAA2C;EACxDC,GAAG,EAAE,2BAA2B;EAChCC,cAAc,EAAE,sCAAsC;EACtDC,iBAAiB,EAAE,yCAAyC;EAC5DC,kBAAkB,EAAE,yCAAyC;EAC7DC,cAAc,EAAE,uCAAuC;EACvDC,iBAAiB,EAAE,yCAAyC;EAC5DC,QAAQ,EAAE,+BAA+B;EACzCC,QAAQ,EAAE,+BAA+B;EACzCC,aAAa,EAAE;AACjB,CAAC;AAED,IAAIC,SAAuB,GAAG;EAAE,GAAGb;AAAkB,CAAC;;AAEtD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMc,cAAc,GACzBC,GAAM,IACc;EACpB,OAAOF,SAAS,CAACE,GAAG,CAAC;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAC5BD,GAAM,EACNE,KAAsB,KACnB;EACHJ,SAAS,CAACE,GAAG,CAAC,GAAGE,KAAK;AACxB,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAIC,YAAmC,IAAK;EACzEN,SAAS,GAAG;IACV,GAAGA,SAAS;IACZ,GAAGM;EACL,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EACrCP,SAAS,GAAG;IAAE,GAAGb;EAAkB,CAAC;AACtC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMqB,kBAAkB,GAAGA,CAAA,MAAqB;EACrD,GAAGR;AACL,CAAC,CAAC","ignoreList":[]}
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
* from the same base URL configuration.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { DChatProject } from "../types/chat.js";
|
|
11
12
|
let config = {
|
|
12
|
-
apiBaseUrl: ''
|
|
13
|
+
apiBaseUrl: '',
|
|
14
|
+
platform: DChatProject.BIZ
|
|
13
15
|
};
|
|
14
16
|
|
|
15
17
|
/**
|
|
@@ -37,10 +39,30 @@ export const getBaseUrl = () => {
|
|
|
37
39
|
*/
|
|
38
40
|
export const resetBaseUrl = () => {
|
|
39
41
|
config = {
|
|
40
|
-
apiBaseUrl: ''
|
|
42
|
+
apiBaseUrl: '',
|
|
43
|
+
platform: DChatProject.BIZ
|
|
41
44
|
};
|
|
42
45
|
};
|
|
43
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Initialize which app (project) the library is running in.
|
|
49
|
+
* This should be called during app startup, e.g. via initChatSdk().
|
|
50
|
+
* Components that render app-specific assets (e.g. bot badge) read this
|
|
51
|
+
* instead of requiring every call site to pass it down as a prop.
|
|
52
|
+
*
|
|
53
|
+
* @param platform - DChatProject.BIZ (default) or DChatProject.CUS
|
|
54
|
+
*/
|
|
55
|
+
export const initPlatform = platform => {
|
|
56
|
+
config.platform = platform;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Get the configured platform (DChatProject.BIZ by default)
|
|
61
|
+
*/
|
|
62
|
+
export const getPlatform = () => {
|
|
63
|
+
return config.platform;
|
|
64
|
+
};
|
|
65
|
+
|
|
44
66
|
/**
|
|
45
67
|
* Check if base URL is configured
|
|
46
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["config","apiBaseUrl","initBaseUrl","__DEV__","console","warn","getBaseUrl","resetBaseUrl","isBaseUrlConfigured"],"sourceRoot":"../../../src","sources":["config/configuration.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["DChatProject","config","apiBaseUrl","platform","BIZ","initBaseUrl","__DEV__","console","warn","getBaseUrl","resetBaseUrl","initPlatform","getPlatform","isBaseUrlConfigured"],"sourceRoot":"../../../src","sources":["config/configuration.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,YAAY,QAAQ,kBAAe;AAO5C,IAAIC,MAAiB,GAAG;EACtBC,UAAU,EAAE,EAAE;EACdC,QAAQ,EAAEH,YAAY,CAACI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAIH,UAAkB,IAAW;EACvD,IAAI,CAACA,UAAU,EAAE;IACf,IAAII,OAAO,EACTC,OAAO,CAACC,IAAI,CAAC,oDAAoD,CAAC;EACtE;EACAP,MAAM,CAACC,UAAU,GAAGA,UAAU;AAChC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMO,UAAU,GAAGA,CAAA,KAAc;EACtC,OAAOR,MAAM,CAACC,UAAU;AAC1B,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMQ,YAAY,GAAGA,CAAA,KAAY;EACtCT,MAAM,GAAG;IAAEC,UAAU,EAAE,EAAE;IAAEC,QAAQ,EAAEH,YAAY,CAACI;EAAI,CAAC;AACzD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,YAAY,GAAIR,QAAsB,IAAW;EAC5DF,MAAM,CAACE,QAAQ,GAAGA,QAAQ;AAC5B,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMS,WAAW,GAAGA,CAAA,KAAoB;EAC7C,OAAOX,MAAM,CAACE,QAAQ;AACxB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMU,mBAAmB,GAAGA,CAAA,KAAe;EAChD,OAAO,CAAC,CAACZ,MAAM,CAACC,UAAU;AAC5B,CAAC","ignoreList":[]}
|
package/lib/module/core/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import OpenIMSDK from '@droppii/openim-rn-client-sdk';
|
|
4
|
-
import { initBaseUrl } from "../config/configuration.js";
|
|
4
|
+
import { initBaseUrl, initPlatform } from "../config/configuration.js";
|
|
5
5
|
import { useUserListener } from "./useUserListener.js";
|
|
6
6
|
import { useChatListener } from "./useChatListener.js";
|
|
7
7
|
import { useBackgroundStatusSync } from "./notification/useBackgroundStatusSync.js";
|
|
@@ -14,6 +14,7 @@ export * from "./notification/index.js";
|
|
|
14
14
|
export const initChatSdk = options => {
|
|
15
15
|
const {
|
|
16
16
|
apiBaseUrl,
|
|
17
|
+
platform,
|
|
17
18
|
...sdkOptions
|
|
18
19
|
} = options;
|
|
19
20
|
|
|
@@ -24,6 +25,11 @@ export const initChatSdk = options => {
|
|
|
24
25
|
if (apiBaseUrl) {
|
|
25
26
|
initBaseUrl(apiBaseUrl);
|
|
26
27
|
}
|
|
28
|
+
|
|
29
|
+
// Initialize which app (biz/mall) the library is running in
|
|
30
|
+
if (platform) {
|
|
31
|
+
initPlatform(platform);
|
|
32
|
+
}
|
|
27
33
|
};
|
|
28
34
|
export const useChatSdk = () => {
|
|
29
35
|
useUserListener();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OpenIMSDK","initBaseUrl","useUserListener","useChatListener","useBackgroundStatusSync","useNetworkStatusSync","initChatSdk","options","apiBaseUrl","sdkOptions","initSDK","useChatSdk"],"sourceRoot":"../../../src","sources":["core/index.ts"],"mappings":";;AAAA,OAAOA,SAAS,MAAM,+BAA+B;AAErD,SAASC,WAAW,QAAQ,4BAAyB;
|
|
1
|
+
{"version":3,"names":["OpenIMSDK","initBaseUrl","initPlatform","useUserListener","useChatListener","useBackgroundStatusSync","useNetworkStatusSync","initChatSdk","options","apiBaseUrl","platform","sdkOptions","initSDK","useChatSdk"],"sourceRoot":"../../../src","sources":["core/index.ts"],"mappings":";;AAAA,OAAOA,SAAS,MAAM,+BAA+B;AAErD,SAASC,WAAW,EAAEC,YAAY,QAAQ,4BAAyB;AAEnE,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,uBAAuB,QAAQ,2CAAwC;AAChF,SAASC,oBAAoB,QAAQ,2BAAwB;AAE7D,cAAc,yBAAgB;AAgB9B;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAIC,OAA2B,IAAK;EAC1D,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAE,GAAGC;EAAW,CAAC,GAAGH,OAAO;;EAEvD;EACAR,SAAS,CAACY,OAAO,CAACD,UAAU,CAAC;;EAE7B;EACA,IAAIF,UAAU,EAAE;IACdR,WAAW,CAACQ,UAAU,CAAC;EACzB;;EAEA;EACA,IAAIC,QAAQ,EAAE;IACZR,YAAY,CAACQ,QAAQ,CAAC;EACxB;AACF,CAAC;AAED,OAAO,MAAMG,UAAU,GAAGA,CAAA,KAAM;EAC9BV,eAAe,CAAC,CAAC;EACjBC,eAAe,CAAC,CAAC;EACjBC,uBAAuB,CAAC,CAAC;EACzBC,oBAAoB,CAAC,CAAC;AACxB,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useInfiniteQuery } from '@tanstack/react-query';
|
|
4
4
|
import { messageQueryKeys } from "../query-keys.js";
|
|
5
|
-
import { apiInstance } from "../../services/apis.js";
|
|
5
|
+
import { apiInstance, unwrapEnvelope } from "../../services/apis.js";
|
|
6
6
|
import { ENDPOINTS } from "../../services/endpoints.js";
|
|
7
7
|
import { MessageType } from '@droppii/openim-rn-client-sdk';
|
|
8
8
|
import { PAGE_SIZE } from "../../constants/index.js";
|
|
@@ -32,21 +32,22 @@ export const useSearchMessage = ({
|
|
|
32
32
|
searchTerm: query.trim(),
|
|
33
33
|
conversationId
|
|
34
34
|
};
|
|
35
|
-
console.log('params', params);
|
|
36
35
|
const res = await apiInstance?.post(ENDPOINTS.chatService.searchMessages(), params);
|
|
37
|
-
return res
|
|
36
|
+
return unwrapEnvelope(res) ?? [];
|
|
38
37
|
},
|
|
39
|
-
getNextPageParam: lastPage => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
getNextPageParam: (lastPage, allPages) => {
|
|
39
|
+
// unwrapEnvelope always resolves a page down to the bare item array, so there's
|
|
40
|
+
// no server-echoed pageable metadata here — derive the next page from how many
|
|
41
|
+
// pages we've already fetched instead of `lastPage.pageable.pageNumber`.
|
|
42
|
+
const dataLength = lastPage?.length || 0;
|
|
43
|
+
return dataLength < pageSize ? undefined : allPages.length + 1;
|
|
43
44
|
},
|
|
44
45
|
initialPageParam: 1,
|
|
45
46
|
enabled: enabled && !!query && !!applicationType
|
|
46
47
|
});
|
|
47
48
|
const baseItems = useMemo(() => {
|
|
48
49
|
if (!query.trim() || !data) return [];
|
|
49
|
-
return data?.pages?.
|
|
50
|
+
return data?.pages?.flat?.() || [];
|
|
50
51
|
}, [data, query]);
|
|
51
52
|
const [dataFlatten, setDataFlatten] = useState(baseItems);
|
|
52
53
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useInfiniteQuery","messageQueryKeys","apiInstance","ENDPOINTS","MessageType","PAGE_SIZE","useEffect","useMemo","useRef","useState","DeviceEventEmitter","ChatEvent","useSearchMessage","query","conversationId","applicationType","pageSize","enabled","data","rest","queryKey","search","trim","queryFn","pageParam","params","contentTypes","TextMessage","UrlTextMessage","QuoteMessage","AtTextMessage","CustomMessage","page","searchTerm","
|
|
1
|
+
{"version":3,"names":["useInfiniteQuery","messageQueryKeys","apiInstance","unwrapEnvelope","ENDPOINTS","MessageType","PAGE_SIZE","useEffect","useMemo","useRef","useState","DeviceEventEmitter","ChatEvent","useSearchMessage","query","conversationId","applicationType","pageSize","enabled","data","rest","queryKey","search","trim","queryFn","pageParam","params","contentTypes","TextMessage","UrlTextMessage","QuoteMessage","AtTextMessage","CustomMessage","page","searchTerm","res","post","chatService","searchMessages","getNextPageParam","lastPage","allPages","dataLength","length","undefined","initialPageParam","baseItems","pages","flat","dataFlatten","setDataFlatten","prevBaseRef","current","sub","addListener","MessageRevoked","clientMsgID","prev","idx","findIndex","item","chatLog","next","contentType","RevokeMessage","remove"],"sourceRoot":"../../../../src","sources":["hooks/message/useSearchMessage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/assets/images/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/assets/images/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;CAeX,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/Avatar/Avatar.utils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ;;;;;;CAMJ,CAAC;AAEX,QAAA,MAAM,QAAQ;;;;;;CAMJ,CAAC;AAEX,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MAqB/C,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"Avatar.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/Avatar/Avatar.utils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ;;;;;;CAMJ,CAAC;AAEX,QAAA,MAAM,QAAQ;;;;;;CAMJ,CAAC;AAEX,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MAqB/C,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,QAgB7C,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
* different protocols (axios, native HTTP), but they should all derive
|
|
6
6
|
* from the same base URL configuration.
|
|
7
7
|
*/
|
|
8
|
+
import { DChatProject } from '../types/chat';
|
|
8
9
|
export interface AppConfig {
|
|
9
10
|
apiBaseUrl: string;
|
|
11
|
+
platform: DChatProject;
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
14
|
* Initialize the base URL configuration
|
|
@@ -23,6 +25,19 @@ export declare const getBaseUrl: () => string;
|
|
|
23
25
|
* Reset configuration (useful for testing)
|
|
24
26
|
*/
|
|
25
27
|
export declare const resetBaseUrl: () => void;
|
|
28
|
+
/**
|
|
29
|
+
* Initialize which app (project) the library is running in.
|
|
30
|
+
* This should be called during app startup, e.g. via initChatSdk().
|
|
31
|
+
* Components that render app-specific assets (e.g. bot badge) read this
|
|
32
|
+
* instead of requiring every call site to pass it down as a prop.
|
|
33
|
+
*
|
|
34
|
+
* @param platform - DChatProject.BIZ (default) or DChatProject.CUS
|
|
35
|
+
*/
|
|
36
|
+
export declare const initPlatform: (platform: DChatProject) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Get the configured platform (DChatProject.BIZ by default)
|
|
39
|
+
*/
|
|
40
|
+
export declare const getPlatform: () => DChatProject;
|
|
26
41
|
/**
|
|
27
42
|
* Check if base URL is configured
|
|
28
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../../src/config/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../../src/config/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAOD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,IAMhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,YAAY,KAAG,IAErD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAAO,YAE9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO,OAEtC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { InitOptions } from '@droppii/openim-rn-client-sdk';
|
|
2
|
+
import type { DChatProject } from '../types/chat';
|
|
2
3
|
export * from './notification';
|
|
3
4
|
export interface InitChatSdkOptions extends InitOptions {
|
|
4
5
|
/**
|
|
@@ -6,6 +7,12 @@ export interface InitChatSdkOptions extends InitOptions {
|
|
|
6
7
|
* Will be set as the centralized configuration
|
|
7
8
|
*/
|
|
8
9
|
apiBaseUrl?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Which app the library is running in — DChatProject.BIZ (default) or
|
|
12
|
+
* DChatProject.CUS. Drives app-specific assets (e.g. the bot avatar
|
|
13
|
+
* badge) without requiring every consumer to pass it down manually.
|
|
14
|
+
*/
|
|
15
|
+
platform?: DChatProject;
|
|
9
16
|
}
|
|
10
17
|
/**
|
|
11
18
|
* Initialize the chat SDK with optional base URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMlD,cAAc,gBAAgB,CAAC;AAE/B,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,kBAAkB,SAetD,CAAC;AAEF,eAAO,MAAM,UAAU,YAKtB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { DChatApplicationType, ISearchMessageItem } from '../../types/chat';
|
|
2
|
-
import type { BaseResponse } from '../../types/auth';
|
|
3
2
|
interface IUseSearchMessageProps {
|
|
4
3
|
query: string;
|
|
5
4
|
conversationId?: string;
|
|
@@ -17,8 +16,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
17
16
|
isSuccess: false;
|
|
18
17
|
isPlaceholderData: false;
|
|
19
18
|
status: "error";
|
|
20
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
21
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
19
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
20
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
22
21
|
hasNextPage: boolean;
|
|
23
22
|
hasPreviousPage: boolean;
|
|
24
23
|
isFetchNextPageError: boolean;
|
|
@@ -38,9 +37,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
38
37
|
isRefetching: boolean;
|
|
39
38
|
isStale: boolean;
|
|
40
39
|
isEnabled: boolean;
|
|
41
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
40
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
42
41
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
43
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
42
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
44
43
|
dataFlatten: ISearchMessageItem[];
|
|
45
44
|
} | {
|
|
46
45
|
error: null;
|
|
@@ -54,8 +53,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
54
53
|
isSuccess: true;
|
|
55
54
|
isPlaceholderData: false;
|
|
56
55
|
status: "success";
|
|
57
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
58
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
56
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
57
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
59
58
|
hasNextPage: boolean;
|
|
60
59
|
hasPreviousPage: boolean;
|
|
61
60
|
isFetchingNextPage: boolean;
|
|
@@ -73,9 +72,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
73
72
|
isRefetching: boolean;
|
|
74
73
|
isStale: boolean;
|
|
75
74
|
isEnabled: boolean;
|
|
76
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
75
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
77
76
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
78
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
77
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
79
78
|
dataFlatten: ISearchMessageItem[];
|
|
80
79
|
} | {
|
|
81
80
|
error: Error;
|
|
@@ -89,8 +88,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
89
88
|
isSuccess: false;
|
|
90
89
|
isPlaceholderData: false;
|
|
91
90
|
status: "error";
|
|
92
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
93
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
91
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
92
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
94
93
|
hasNextPage: boolean;
|
|
95
94
|
hasPreviousPage: boolean;
|
|
96
95
|
isFetchingNextPage: boolean;
|
|
@@ -108,9 +107,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
108
107
|
isRefetching: boolean;
|
|
109
108
|
isStale: boolean;
|
|
110
109
|
isEnabled: boolean;
|
|
111
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
110
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
112
111
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
113
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
112
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
114
113
|
dataFlatten: ISearchMessageItem[];
|
|
115
114
|
} | {
|
|
116
115
|
error: null;
|
|
@@ -124,8 +123,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
124
123
|
isSuccess: false;
|
|
125
124
|
isPlaceholderData: false;
|
|
126
125
|
status: "pending";
|
|
127
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
128
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
126
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
127
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
129
128
|
hasNextPage: boolean;
|
|
130
129
|
hasPreviousPage: boolean;
|
|
131
130
|
isFetchingNextPage: boolean;
|
|
@@ -143,9 +142,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
143
142
|
isRefetching: boolean;
|
|
144
143
|
isStale: boolean;
|
|
145
144
|
isEnabled: boolean;
|
|
146
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
145
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
147
146
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
148
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
147
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
149
148
|
dataFlatten: ISearchMessageItem[];
|
|
150
149
|
} | {
|
|
151
150
|
error: null;
|
|
@@ -158,8 +157,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
158
157
|
isSuccess: false;
|
|
159
158
|
isPlaceholderData: false;
|
|
160
159
|
status: "pending";
|
|
161
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
162
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
160
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
161
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
163
162
|
hasNextPage: boolean;
|
|
164
163
|
hasPreviousPage: boolean;
|
|
165
164
|
isFetchingNextPage: boolean;
|
|
@@ -178,9 +177,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
178
177
|
isRefetching: boolean;
|
|
179
178
|
isStale: boolean;
|
|
180
179
|
isEnabled: boolean;
|
|
181
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
180
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
182
181
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
183
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
182
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
184
183
|
dataFlatten: ISearchMessageItem[];
|
|
185
184
|
} | {
|
|
186
185
|
isError: false;
|
|
@@ -194,8 +193,8 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
194
193
|
isFetchNextPageError: false;
|
|
195
194
|
isFetchPreviousPageError: false;
|
|
196
195
|
status: "success";
|
|
197
|
-
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
198
|
-
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
196
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
197
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
199
198
|
hasNextPage: boolean;
|
|
200
199
|
hasPreviousPage: boolean;
|
|
201
200
|
isFetchingNextPage: boolean;
|
|
@@ -213,9 +212,9 @@ export declare const useSearchMessage: ({ query, conversationId, applicationType
|
|
|
213
212
|
isRefetching: boolean;
|
|
214
213
|
isStale: boolean;
|
|
215
214
|
isEnabled: boolean;
|
|
216
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<
|
|
215
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>, Error>>;
|
|
217
216
|
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
218
|
-
promise: Promise<import("@tanstack/query-core").InfiniteData<
|
|
217
|
+
promise: Promise<import("@tanstack/query-core").InfiniteData<ISearchMessageItem[], unknown>>;
|
|
219
218
|
dataFlatten: ISearchMessageItem[];
|
|
220
219
|
};
|
|
221
220
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchMessage.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/message/useSearchMessage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"useSearchMessage.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/message/useSearchMessage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAO1B,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,eAAO,MAAM,gBAAgB,GAAI,gEAM9B,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ExB,CAAC"}
|
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ const Images = {
|
|
|
7
7
|
ICON_WORD: require('./icon_word.png'),
|
|
8
8
|
NOTIFICATION_WARNING: require('./notification-warning.png'),
|
|
9
9
|
TAG_BOT: require('./tag_bot.png'),
|
|
10
|
+
TAG_BOT_MALL: require('./tag_bot_mall.png'),
|
|
10
11
|
TAG_MALL: require('./tag_mall.png'),
|
|
11
12
|
ICON_DROPPII: require('./icon_droppii.png'),
|
|
12
13
|
BTN_RESEND: require('./btn_resend.png'),
|
|
Binary file
|
|
@@ -39,14 +39,19 @@ export const getInitials = (fullName?: string): string => {
|
|
|
39
39
|
|
|
40
40
|
export const getBadgeImage = (variant?: string) => {
|
|
41
41
|
const Images = require('../../assets/images').default;
|
|
42
|
+
const { getPlatform } = require('../../config/configuration');
|
|
43
|
+
const { DChatProject } = require('../../types/chat');
|
|
44
|
+
const botImage =
|
|
45
|
+
getPlatform() === DChatProject.CUS ? Images.TAG_BOT_MALL : Images.TAG_BOT;
|
|
46
|
+
|
|
42
47
|
switch (variant) {
|
|
43
48
|
case 'mall':
|
|
44
49
|
return Images.TAG_MALL;
|
|
45
50
|
case 'bot':
|
|
46
51
|
case 'support':
|
|
47
|
-
return
|
|
52
|
+
return botImage;
|
|
48
53
|
default:
|
|
49
|
-
return
|
|
54
|
+
return botImage;
|
|
50
55
|
}
|
|
51
56
|
};
|
|
52
57
|
|
|
@@ -30,7 +30,7 @@ const DEFAULT_ENDPOINTS: ApiEndpoints = {
|
|
|
30
30
|
urlMetadata: '/chat-service/v1/utils/url-metadata',
|
|
31
31
|
conversation: '/chat-service/v1/app/conversations',
|
|
32
32
|
imageUpload: '/uploader-service/v1/uploader/permanently',
|
|
33
|
-
bot: '/chat-service/v1/app/bots
|
|
33
|
+
bot: '/chat-service/v1/app/bots',
|
|
34
34
|
uploadFcmToken: '/chat-service/third/fcm_update_token',
|
|
35
35
|
stickerCategories: '/chat-service/v1/app/sticker-categories',
|
|
36
36
|
stickersByCategory: '/chat-service/v1/app/sticker-categories',
|
|
@@ -6,12 +6,16 @@
|
|
|
6
6
|
* from the same base URL configuration.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { DChatProject } from '../types/chat';
|
|
10
|
+
|
|
9
11
|
export interface AppConfig {
|
|
10
12
|
apiBaseUrl: string;
|
|
13
|
+
platform: DChatProject;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
let config: AppConfig = {
|
|
14
17
|
apiBaseUrl: '',
|
|
18
|
+
platform: DChatProject.BIZ,
|
|
15
19
|
};
|
|
16
20
|
|
|
17
21
|
/**
|
|
@@ -39,7 +43,26 @@ export const getBaseUrl = (): string => {
|
|
|
39
43
|
* Reset configuration (useful for testing)
|
|
40
44
|
*/
|
|
41
45
|
export const resetBaseUrl = (): void => {
|
|
42
|
-
config = { apiBaseUrl: '' };
|
|
46
|
+
config = { apiBaseUrl: '', platform: DChatProject.BIZ };
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Initialize which app (project) the library is running in.
|
|
51
|
+
* This should be called during app startup, e.g. via initChatSdk().
|
|
52
|
+
* Components that render app-specific assets (e.g. bot badge) read this
|
|
53
|
+
* instead of requiring every call site to pass it down as a prop.
|
|
54
|
+
*
|
|
55
|
+
* @param platform - DChatProject.BIZ (default) or DChatProject.CUS
|
|
56
|
+
*/
|
|
57
|
+
export const initPlatform = (platform: DChatProject): void => {
|
|
58
|
+
config.platform = platform;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get the configured platform (DChatProject.BIZ by default)
|
|
63
|
+
*/
|
|
64
|
+
export const getPlatform = (): DChatProject => {
|
|
65
|
+
return config.platform;
|
|
43
66
|
};
|
|
44
67
|
|
|
45
68
|
/**
|
package/src/core/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import OpenIMSDK from '@droppii/openim-rn-client-sdk';
|
|
2
2
|
import type { InitOptions } from '@droppii/openim-rn-client-sdk';
|
|
3
|
-
import { initBaseUrl } from '../config/configuration';
|
|
3
|
+
import { initBaseUrl, initPlatform } from '../config/configuration';
|
|
4
|
+
import type { DChatProject } from '../types/chat';
|
|
4
5
|
import { useUserListener } from './useUserListener';
|
|
5
6
|
import { useChatListener } from './useChatListener';
|
|
6
7
|
import { useBackgroundStatusSync } from './notification/useBackgroundStatusSync';
|
|
@@ -14,6 +15,12 @@ export interface InitChatSdkOptions extends InitOptions {
|
|
|
14
15
|
* Will be set as the centralized configuration
|
|
15
16
|
*/
|
|
16
17
|
apiBaseUrl?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Which app the library is running in — DChatProject.BIZ (default) or
|
|
20
|
+
* DChatProject.CUS. Drives app-specific assets (e.g. the bot avatar
|
|
21
|
+
* badge) without requiring every consumer to pass it down manually.
|
|
22
|
+
*/
|
|
23
|
+
platform?: DChatProject;
|
|
17
24
|
}
|
|
18
25
|
|
|
19
26
|
/**
|
|
@@ -21,7 +28,7 @@ export interface InitChatSdkOptions extends InitOptions {
|
|
|
21
28
|
* @param options - SDK initialization options + apiBaseUrl for centralized config
|
|
22
29
|
*/
|
|
23
30
|
export const initChatSdk = (options: InitChatSdkOptions) => {
|
|
24
|
-
const { apiBaseUrl, ...sdkOptions } = options;
|
|
31
|
+
const { apiBaseUrl, platform, ...sdkOptions } = options;
|
|
25
32
|
|
|
26
33
|
// Initialize OpenIM SDK
|
|
27
34
|
OpenIMSDK.initSDK(sdkOptions);
|
|
@@ -30,6 +37,11 @@ export const initChatSdk = (options: InitChatSdkOptions) => {
|
|
|
30
37
|
if (apiBaseUrl) {
|
|
31
38
|
initBaseUrl(apiBaseUrl);
|
|
32
39
|
}
|
|
40
|
+
|
|
41
|
+
// Initialize which app (biz/mall) the library is running in
|
|
42
|
+
if (platform) {
|
|
43
|
+
initPlatform(platform);
|
|
44
|
+
}
|
|
33
45
|
};
|
|
34
46
|
|
|
35
47
|
export const useChatSdk = () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useInfiniteQuery } from '@tanstack/react-query';
|
|
2
2
|
import { messageQueryKeys } from '../query-keys';
|
|
3
|
-
import { apiInstance } from '../../services/apis';
|
|
3
|
+
import { apiInstance, unwrapEnvelope } from '../../services/apis';
|
|
4
4
|
import { ENDPOINTS } from '../../services/endpoints';
|
|
5
5
|
import { MessageType } from '@droppii/openim-rn-client-sdk';
|
|
6
6
|
import type {
|
|
@@ -45,17 +45,18 @@ export const useSearchMessage = ({
|
|
|
45
45
|
searchTerm: query.trim(),
|
|
46
46
|
conversationId,
|
|
47
47
|
};
|
|
48
|
-
console.log('params', params);
|
|
49
48
|
const res = await apiInstance?.post<BaseResponse<ISearchMessageItem[]>>(
|
|
50
49
|
ENDPOINTS.chatService.searchMessages(),
|
|
51
50
|
params
|
|
52
51
|
);
|
|
53
|
-
return res
|
|
52
|
+
return unwrapEnvelope<ISearchMessageItem[]>(res) ?? [];
|
|
54
53
|
},
|
|
55
|
-
getNextPageParam: (lastPage) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
getNextPageParam: (lastPage, allPages) => {
|
|
55
|
+
// unwrapEnvelope always resolves a page down to the bare item array, so there's
|
|
56
|
+
// no server-echoed pageable metadata here — derive the next page from how many
|
|
57
|
+
// pages we've already fetched instead of `lastPage.pageable.pageNumber`.
|
|
58
|
+
const dataLength = lastPage?.length || 0;
|
|
59
|
+
return dataLength < pageSize ? undefined : allPages.length + 1;
|
|
59
60
|
},
|
|
60
61
|
initialPageParam: 1,
|
|
61
62
|
enabled: enabled && !!query && !!applicationType,
|
|
@@ -63,11 +64,7 @@ export const useSearchMessage = ({
|
|
|
63
64
|
|
|
64
65
|
const baseItems = useMemo<ISearchMessageItem[]>(() => {
|
|
65
66
|
if (!query.trim() || !data) return [];
|
|
66
|
-
return (
|
|
67
|
-
data?.pages
|
|
68
|
-
?.flatMap?.((page) => page?.data)
|
|
69
|
-
?.filter((item) => item !== undefined) || []
|
|
70
|
-
);
|
|
67
|
+
return data?.pages?.flat?.() || [];
|
|
71
68
|
}, [data, query]);
|
|
72
69
|
|
|
73
70
|
const [dataFlatten, setDataFlatten] =
|