@webinex/chatify 2.0.0-alpha8 → 2.0.0-alpha9
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/Chatify-DGRV4QKP.js +2203 -0
- package/dist/Chatify-DGRV4QKP.js.map +1 -0
- package/dist/Chatify.css +670 -0
- package/dist/audit.css +60 -0
- package/dist/audit.js +242 -0
- package/dist/audit.js.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/types/audit/AuditChatList.d.ts +9 -0
- package/dist/types/audit/AuditConversationPanel.d.ts +10 -0
- package/dist/types/audit/AuditPanel.d.ts +14 -0
- package/dist/types/audit/AuditPanelCustomizeValue.d.ts +9 -0
- package/dist/types/audit/AuditSearch.d.ts +5 -0
- package/dist/types/audit/AuditSearchValue.d.ts +14 -0
- package/dist/types/audit/auditApi.d.ts +97 -0
- package/dist/types/audit/index.d.ts +17 -0
- package/dist/types/core/api/api.d.ts +17295 -0
- package/dist/{esm/types → types}/core/api/baseApi.d.ts +1 -1
- package/dist/{esm/types → types}/core/client.d.ts +3 -3
- package/dist/{esm/types → types}/core/types.d.ts +5 -0
- package/dist/types/ui/Chat/ChatEditableHeaderName.d.ts +1 -0
- package/dist/types/ui/Chat/ChatHeaderActions.d.ts +1 -0
- package/dist/{esm/types → types}/ui/Chat/ChatView.d.ts +1 -2
- package/dist/types/ui/Chat/Members/ChatMembersButton.d.ts +1 -0
- package/dist/types/ui/Chat/Members/ChatMembersPanel.d.ts +1 -0
- package/dist/types/ui/Chat/Members/ChatMembersPreview.d.ts +1 -0
- package/dist/{esm/types → types}/ui/ChatGroup/ChatGroupPanel.d.ts +2 -2
- package/dist/types/ui/ChatGroup/Create/CreateChatButton.d.ts +1 -0
- package/dist/{esm/types → types}/ui/ChatGroup/Create/CreateChatForm.d.ts +1 -2
- package/dist/types/ui/ChatGroup/Create/CreateChatMemberInput.d.ts +4 -0
- package/dist/types/ui/ChatGroup/Create/CreateChatNameInput.d.ts +4 -0
- package/dist/types/ui/ChatGroup/Create/CreateChatPanel.d.ts +1 -0
- package/dist/types/ui/ChatGroup/Layout/ChatGroupAside.d.ts +1 -0
- package/dist/types/ui/ChatGroup/Layout/ChatGroupBody.d.ts +1 -0
- package/dist/types/ui/ChatGroup/Layout/ChatGroupFooter.d.ts +1 -0
- package/dist/types/ui/ChatGroup/Layout/ChatGroupHeader.d.ts +1 -0
- package/dist/types/ui/ChatGroup/Layout/ChatGroupMain.d.ts +1 -0
- package/dist/types/ui/ChatGroup/List/ChatListPanel.d.ts +1 -0
- package/dist/types/ui/ChatGroup/List/index.d.ts +6 -0
- package/dist/types/ui/Chatify.d.ts +9 -0
- package/dist/{esm/types → types}/ui/Conversation/Conversation.d.ts +2 -3
- package/dist/types/ui/Conversation/ConversationActions.d.ts +1 -0
- package/dist/types/ui/Conversation/ConversationBody.d.ts +1 -0
- package/dist/{esm/types → types}/ui/Conversation/ConversationContext.d.ts +6 -5
- package/dist/types/ui/Conversation/ConversationHeader.d.ts +1 -0
- package/dist/types/ui/Conversation/ConversationName.d.ts +1 -0
- package/dist/types/ui/Conversation/InputBox/InputBox.d.ts +1 -0
- package/dist/types/ui/Conversation/InputBox/InputBoxFile.d.ts +7 -0
- package/dist/types/ui/Conversation/InputBox/InputBoxFileList.d.ts +7 -0
- package/dist/types/ui/Conversation/InputBox/InputFilesBox.d.ts +11 -0
- package/dist/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +6 -0
- package/dist/{esm/types → types}/ui/Conversation/InputBox/InputTextBox.d.ts +1 -1
- package/dist/types/ui/Conversation/Message/MessageAuthor.d.ts +2 -0
- package/dist/types/ui/Conversation/Message/MessageBox.d.ts +5 -0
- package/dist/types/ui/Conversation/Message/MessageContent.d.ts +2 -0
- package/dist/types/ui/Conversation/Message/MessageFile.d.ts +5 -0
- package/dist/types/ui/Conversation/Message/MessageFileList.d.ts +2 -0
- package/dist/types/ui/Conversation/Message/MessageInfoBox.d.ts +2 -0
- package/dist/{esm/types → types}/ui/Conversation/Message/MessageRow.d.ts +1 -1
- package/dist/types/ui/Conversation/Message/MessageText.d.ts +2 -0
- package/dist/types/ui/Conversation/SendingMessage/SendingMessageBox.d.ts +6 -0
- package/dist/types/ui/Conversation/SendingMessage/SendingMessageContent.d.ts +2 -0
- package/dist/types/ui/Conversation/SendingMessage/SendingMessageInfoBox.d.ts +2 -0
- package/dist/types/ui/Conversation/SendingMessage/SendingMessageText.d.ts +2 -0
- package/dist/types/ui/Conversation/SystemMessage/SystemMessageBox.d.ts +5 -0
- package/dist/{esm/types → types}/ui/Conversation/SystemMessage/SystemMessageRow.d.ts +1 -1
- package/dist/types/ui/Thread/ThreadActions.d.ts +1 -0
- package/dist/{esm/types → types}/ui/Thread/ThreadContext.d.ts +1 -1
- package/dist/types/ui/common/Avatar.d.ts +5 -0
- package/dist/types/ui/common/ChatList/ChatList.d.ts +16 -0
- package/dist/types/ui/common/ChatList/ChatListItemAvatar.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemBox.d.ts +9 -0
- package/dist/types/ui/common/ChatList/ChatListItemLastMessage.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemLastMessageAuthor.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemLastMessageContent.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemLastMessageSentAt.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemName.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListItemUnreadCount.d.ts +2 -0
- package/dist/types/ui/common/ChatList/ChatListValue.d.ts +8 -0
- package/dist/{esm/types/ui/ChatGroup/List → types/ui/common/ChatList}/index.d.ts +1 -0
- package/dist/types/ui/common/Icon.d.ts +21 -0
- package/dist/types/ui/common/MessageSkeleton.d.ts +4 -0
- package/dist/{esm/types → types}/ui/common/index.d.ts +1 -0
- package/dist/{esm/types → types}/ui/customize.d.ts +1 -1
- package/dist/{esm/types → types}/ui/index.d.ts +1 -3
- package/dist/{esm/types → types}/ui/localizer.d.ts +7 -2
- package/package.json +39 -52
- package/src/audit/AuditChatList.tsx +25 -0
- package/src/audit/AuditConversationPanel.tsx +48 -0
- package/src/audit/AuditPanel.tsx +76 -0
- package/src/audit/AuditPanelCustomizeValue.ts +11 -0
- package/src/audit/AuditSearch.tsx +89 -0
- package/src/audit/AuditSearchValue.tsx +42 -0
- package/src/audit/auditApi.tsx +113 -0
- package/src/audit/index.d.ts +18 -0
- package/src/audit/index.tsx +28 -0
- package/src/audit/styles.scss +72 -0
- package/src/core/client.ts +1 -1
- package/src/core/debounce.ts +1 -1
- package/src/core/types.tsx +9 -0
- package/src/styles/aside.scss +0 -136
- package/src/styles/chat-list.scss +138 -0
- package/src/styles/chat.scss +0 -198
- package/src/styles/conversation.scss +200 -0
- package/src/styles/index.scss +2 -0
- package/src/ui/Chat/ChatEditableHeaderName.tsx +1 -1
- package/src/ui/Chat/Members/ChatMembersPreview.tsx +1 -1
- package/src/ui/ChatGroup/ChatGroupPanel.tsx +2 -2
- package/src/ui/ChatGroup/Layout/ChatGroupAside.tsx +2 -2
- package/src/ui/ChatGroup/List/ChatListPanel.tsx +28 -0
- package/src/ui/ChatGroup/List/index.ts +6 -29
- package/src/ui/Chatify.tsx +7 -1
- package/src/ui/Conversation/Conversation.tsx +15 -1
- package/src/ui/Conversation/ConversationActions.tsx +8 -1
- package/src/ui/Conversation/ConversationContext.ts +4 -3
- package/src/ui/Conversation/ConversationHeader.tsx +4 -8
- package/src/ui/Conversation/InputBox/InputBox.tsx +4 -0
- package/src/ui/Conversation/InputBox/InputTextBox.tsx +1 -1
- package/src/ui/Conversation/Message/MessageInfoBox.tsx +1 -1
- package/src/ui/Conversation/ReadObserver/MessageReadObserver.tsx +1 -1
- package/src/ui/common/ChatList/ChatList.tsx +84 -0
- package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemBox.tsx +11 -5
- package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemLastMessageAuthor.tsx +3 -3
- package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemLastMessageContent.tsx +4 -4
- package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemLastMessageSentAt.tsx +1 -1
- package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemUnreadCount.tsx +1 -1
- package/src/ui/common/ChatList/ChatListValue.ts +9 -0
- package/src/ui/common/ChatList/index.ts +32 -0
- package/src/ui/common/Icon.tsx +15 -13
- package/src/ui/common/index.ts +1 -0
- package/src/ui/index.ts +3 -3
- package/src/ui/localizer.tsx +14 -2
- package/dist/css/chatify.css +0 -664
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/types/core/api/api.d.ts +0 -12696
- package/dist/esm/types/ui/Chat/ChatEditableHeaderName.d.ts +0 -2
- package/dist/esm/types/ui/Chat/ChatHeaderActions.d.ts +0 -2
- package/dist/esm/types/ui/Chat/Members/ChatMembersButton.d.ts +0 -2
- package/dist/esm/types/ui/Chat/Members/ChatMembersPanel.d.ts +0 -2
- package/dist/esm/types/ui/Chat/Members/ChatMembersPreview.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Create/CreateChatButton.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Create/CreateChatMemberInput.d.ts +0 -5
- package/dist/esm/types/ui/ChatGroup/Create/CreateChatNameInput.d.ts +0 -5
- package/dist/esm/types/ui/ChatGroup/Create/CreateChatPanel.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Layout/ChatGroupAside.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Layout/ChatGroupBody.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Layout/ChatGroupFooter.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Layout/ChatGroupHeader.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/Layout/ChatGroupMain.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/List/ChatList.d.ts +0 -2
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemAvatar.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemBox.d.ts +0 -6
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemLastMessage.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemLastMessageAuthor.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemLastMessageContent.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemLastMessageSentAt.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemName.d.ts +0 -3
- package/dist/esm/types/ui/ChatGroup/List/ChatListItemUnreadCount.d.ts +0 -3
- package/dist/esm/types/ui/Chatify.d.ts +0 -8
- package/dist/esm/types/ui/Conversation/ConversationActions.d.ts +0 -2
- package/dist/esm/types/ui/Conversation/ConversationBody.d.ts +0 -2
- package/dist/esm/types/ui/Conversation/ConversationHeader.d.ts +0 -2
- package/dist/esm/types/ui/Conversation/ConversationName.d.ts +0 -2
- package/dist/esm/types/ui/Conversation/InputBox/InputBox.d.ts +0 -2
- package/dist/esm/types/ui/Conversation/InputBox/InputBoxFile.d.ts +0 -8
- package/dist/esm/types/ui/Conversation/InputBox/InputBoxFileList.d.ts +0 -8
- package/dist/esm/types/ui/Conversation/InputBox/InputFilesBox.d.ts +0 -12
- package/dist/esm/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +0 -7
- package/dist/esm/types/ui/Conversation/Message/MessageAuthor.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/Message/MessageBox.d.ts +0 -6
- package/dist/esm/types/ui/Conversation/Message/MessageContent.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/Message/MessageFile.d.ts +0 -6
- package/dist/esm/types/ui/Conversation/Message/MessageFileList.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/Message/MessageInfoBox.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/Message/MessageText.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/SendingMessage/SendingMessageBox.d.ts +0 -7
- package/dist/esm/types/ui/Conversation/SendingMessage/SendingMessageContent.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/SendingMessage/SendingMessageInfoBox.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/SendingMessage/SendingMessageText.d.ts +0 -3
- package/dist/esm/types/ui/Conversation/SystemMessage/SystemMessageBox.d.ts +0 -6
- package/dist/esm/types/ui/Thread/ThreadActions.d.ts +0 -2
- package/dist/esm/types/ui/common/Avatar.d.ts +0 -6
- package/dist/esm/types/ui/common/Icon.d.ts +0 -22
- package/dist/esm/types/ui/common/MessageSkeleton.d.ts +0 -5
- package/dist/index.d.ts +0 -13384
- package/src/ui/ChatGroup/List/ChatList.tsx +0 -41
- /package/dist/{esm/types → types}/core/api/index.d.ts +0 -0
- /package/dist/{esm/types → types}/core/constants.d.ts +0 -0
- /package/dist/{esm/types → types}/core/debounce.d.ts +0 -0
- /package/dist/{esm/types → types}/core/index.d.ts +0 -0
- /package/dist/{esm/types → types}/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Chat/ChatContext.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Chat/ChatPanel.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Chat/Members/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Chat/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/ChatGroup/ChatGroupContext.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/ChatGroup/Create/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/ChatGroup/Layout/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/ChatGroup/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/InputBox/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/Message/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/NextObserver/NextMessagesObserver.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/NextObserver/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/ReadObserver/MessageReadObserver.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/ReadObserver/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/SendingMessage/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/SystemMessage/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Conversation/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Thread/ThreadPanel.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/Thread/index.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/color.d.ts +0 -0
- /package/dist/{esm/types → types}/ui/useFormatter.d.ts +0 -0
- /package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemAvatar.tsx +0 -0
- /package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemLastMessage.tsx +0 -0
- /package/src/ui/{ChatGroup/List → common/ChatList}/ChatListItemName.tsx +0 -0
package/package.json
CHANGED
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
"name": "@webinex/chatify",
|
|
3
3
|
"description": "Webinex Chatify",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "2.0.0-
|
|
5
|
+
"version": "2.0.0-alpha9",
|
|
6
6
|
"author": "Webinex Dev",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "dist/index.js",
|
|
11
|
+
"types": "dist/types/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/types/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./audit": {
|
|
18
|
+
"import": "./dist/audit.js",
|
|
19
|
+
"types": "./dist/types/audit/index.d.ts"
|
|
13
20
|
}
|
|
14
21
|
},
|
|
15
22
|
"files": [
|
|
@@ -17,28 +24,19 @@
|
|
|
17
24
|
"src"
|
|
18
25
|
],
|
|
19
26
|
"scripts": {
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"prettier:write": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"",
|
|
24
|
-
"prettier:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
|
|
25
|
-
"parcel": "parcel --target demo --dist-dir ./dist/demo",
|
|
26
|
-
"parcel:build": "rimraf ../Webinex.Chatify.Example/wwwroot && cross-env NODE_ENV=production parcel build --target demo --dist-dir ../Webinex.Chatify.Example/wwwroot",
|
|
27
|
-
"build:types": "dts-bundle-generator --project tsconfig.json --out dist/index.d.ts"
|
|
27
|
+
"dev": "vite",
|
|
28
|
+
"watch": "vite build --watch",
|
|
29
|
+
"build": "tsc -b && vite build"
|
|
28
30
|
},
|
|
29
31
|
"devDependencies": {
|
|
30
32
|
"@microsoft/signalr": "^8.0.0",
|
|
31
|
-
"@
|
|
32
|
-
"@reduxjs/toolkit": "^2.2.7",
|
|
33
|
-
"@rollup/plugin-alias": "^5.1.0",
|
|
34
|
-
"@rollup/plugin-commonjs": "^24.0.1",
|
|
35
|
-
"@rollup/plugin-eslint": "^9.0.3",
|
|
36
|
-
"@rollup/plugin-image": "^3.0.2",
|
|
37
|
-
"@rollup/plugin-node-resolve": "^15.0.2",
|
|
38
|
-
"@rollup/plugin-typescript": "^11.1.0",
|
|
33
|
+
"@reduxjs/toolkit": "^2.6.0",
|
|
39
34
|
"@types/is-hotkey": "^0.1.10",
|
|
35
|
+
"@types/node": "^24.10.1",
|
|
40
36
|
"@types/react": "^18.0.33",
|
|
41
37
|
"@types/react-dom": "^18.0.11",
|
|
38
|
+
"@vitejs/plugin-react": "^4.3.3",
|
|
39
|
+
"@webinex/asky": "^1.1.0",
|
|
42
40
|
"@webinex/flippo": "^1.0.0",
|
|
43
41
|
"antd": "^5.19.0",
|
|
44
42
|
"axios": "^1.6.2",
|
|
@@ -46,49 +44,38 @@
|
|
|
46
44
|
"classnames": "^2.3.2",
|
|
47
45
|
"cross-env": "^7.0.3",
|
|
48
46
|
"dayjs": "^1.11.7",
|
|
49
|
-
"dts-bundle-generator": "^9.5.1",
|
|
50
47
|
"eslint": "^8.38.0",
|
|
51
|
-
"eslint-config-react-app": "^7.0.1",
|
|
52
|
-
"immer": "^10.0.3",
|
|
53
48
|
"is-hotkey": "^0.2.0",
|
|
54
|
-
"parcel": "^2.10.3",
|
|
55
49
|
"postcss": "^8.4.21",
|
|
56
50
|
"prettier": "^2.8.7",
|
|
57
|
-
"process": "^0.11.10",
|
|
58
51
|
"react": "^18.2.0",
|
|
59
52
|
"react-dom": "^18.2.0",
|
|
60
53
|
"react-redux": "^9.1.2",
|
|
61
54
|
"react-router-dom": "^6.23.1",
|
|
62
55
|
"rimraf": "^5.0.5",
|
|
63
|
-
"rollup": "^3.20.2",
|
|
64
|
-
"rollup-plugin-copy": "^3.4.0",
|
|
65
|
-
"rollup-plugin-dts": "^5.3.0",
|
|
66
56
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
67
|
-
"
|
|
68
|
-
"rollup-plugin-scss": "^4.0.0",
|
|
69
|
-
"rollup-plugin-terser": "^7.0.2",
|
|
70
|
-
"rollup-plugin-tsconfig-paths": "^1.5.2",
|
|
71
|
-
"rollup-plugin-typescript-paths": "^1.5.0",
|
|
72
|
-
"rollup-plugin-visualizer": "^5.11.0",
|
|
73
|
-
"rollup-plugin-watch-globs": "^2.0.1",
|
|
74
|
-
"sass": "^1.66.1",
|
|
57
|
+
"sass-embedded": "^1.82.0",
|
|
75
58
|
"shallow-equal": "^3.1.0",
|
|
76
59
|
"tslib": "^2.6.2",
|
|
77
|
-
"typescript": "
|
|
60
|
+
"typescript": "~5.6.2",
|
|
61
|
+
"typescript-eslint": "^8.10.0",
|
|
62
|
+
"vite": "^5.4.9",
|
|
63
|
+
"vite-plugin-dts": "^4.3.0",
|
|
64
|
+
"vite-plugin-lib-inject-css": "^2.1.1"
|
|
78
65
|
},
|
|
79
66
|
"peerDependencies": {
|
|
80
|
-
"@ant-design/icons": "
|
|
81
|
-
"@microsoft/signalr": "
|
|
82
|
-
"@reduxjs/toolkit": "
|
|
83
|
-
"@webinex/
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"is-hotkey": ">=0",
|
|
90
|
-
"react": ">=16",
|
|
91
|
-
"react-dom": ">=16",
|
|
92
|
-
"shallow-equal": "
|
|
67
|
+
"@ant-design/icons": "^5",
|
|
68
|
+
"@microsoft/signalr": "^8",
|
|
69
|
+
"@reduxjs/toolkit": "^2.6.0",
|
|
70
|
+
"@webinex/asky": "^1.1.0",
|
|
71
|
+
"@webinex/flippo": "^1",
|
|
72
|
+
"antd": "^5",
|
|
73
|
+
"axios": "^1",
|
|
74
|
+
"classnames": "^2",
|
|
75
|
+
"dayjs": "^1.8",
|
|
76
|
+
"is-hotkey": ">=0 <1",
|
|
77
|
+
"react": ">=16 <=19",
|
|
78
|
+
"react-dom": ">=16 <=19",
|
|
79
|
+
"shallow-equal": "^3"
|
|
93
80
|
}
|
|
94
81
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChatList, customize } from '@webinex/chatify';
|
|
2
|
+
import { Empty, Skeleton } from 'antd';
|
|
3
|
+
import { AuditChatListItem } from './auditApi';
|
|
4
|
+
|
|
5
|
+
export interface AuditChatListProps {
|
|
6
|
+
items: AuditChatListItem[];
|
|
7
|
+
loading: boolean;
|
|
8
|
+
selected: string | null;
|
|
9
|
+
onSelect: (id: string) => void;
|
|
10
|
+
top?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const AuditChatList = customize('AuditChatList', (props: AuditChatListProps) => {
|
|
14
|
+
const { items, selected, onSelect, loading, top } = props;
|
|
15
|
+
|
|
16
|
+
if (loading) {
|
|
17
|
+
return <Skeleton />;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (items.length === 0) {
|
|
21
|
+
return <Empty />;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return <ChatList items={items} selected={selected} onSelect={onSelect} noRead top={top} />;
|
|
25
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Conversation, customize } from '@webinex/chatify';
|
|
2
|
+
import { auditApi } from './auditApi';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
|
|
5
|
+
export interface AuditConversationPanelProps {
|
|
6
|
+
id: string;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Number of messages to load per page.
|
|
11
|
+
* @default 20
|
|
12
|
+
*/
|
|
13
|
+
pageSize?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const AuditConversationPanel = customize(
|
|
17
|
+
'AuditConversationPanel',
|
|
18
|
+
(props: AuditConversationPanelProps) => {
|
|
19
|
+
const { id, onClose, pageSize = 20 } = props;
|
|
20
|
+
const { data: chat } = auditApi.useGetAuditChatQuery({ id });
|
|
21
|
+
|
|
22
|
+
const {
|
|
23
|
+
data: messageSegments,
|
|
24
|
+
isFetchingNextPage,
|
|
25
|
+
fetchNextPage,
|
|
26
|
+
hasNextPage,
|
|
27
|
+
} = auditApi.useGetAuditChatMessagesInfiniteInfiniteQuery(
|
|
28
|
+
{ id },
|
|
29
|
+
{ initialPageParam: { skip: 0, take: pageSize } },
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const messages = useMemo(() => messageSegments?.pages.flatMap((x) => x.items) ?? [], [messageSegments]);
|
|
33
|
+
|
|
34
|
+
if (!chat) return null;
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<Conversation
|
|
38
|
+
value={{ active: false, id, lastReadMessageId: null, name: chat.name }}
|
|
39
|
+
nextLoading={isFetchingNextPage}
|
|
40
|
+
onNext={fetchNextPage}
|
|
41
|
+
hasMore={!isFetchingNextPage && hasNextPage}
|
|
42
|
+
messages={messages}
|
|
43
|
+
noReadTracking
|
|
44
|
+
onClose={onClose}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
},
|
|
48
|
+
);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { AuditSearch } from './AuditSearch';
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { AuditSearchUtil } from './AuditSearchValue';
|
|
5
|
+
import { auditApi } from './auditApi';
|
|
6
|
+
import { AuditChatList } from './AuditChatList';
|
|
7
|
+
import { CustomizeContext, defaultLocalizer, Localizer, LocalizerContext } from '@webinex/chatify';
|
|
8
|
+
import { AuditConversationPanel } from './AuditConversationPanel';
|
|
9
|
+
import { AuditPanelCustomizeValue } from './AuditPanelCustomizeValue';
|
|
10
|
+
|
|
11
|
+
export interface AuditPanelProps {
|
|
12
|
+
className?: string;
|
|
13
|
+
style?: React.CSSProperties;
|
|
14
|
+
localizer?: Localizer;
|
|
15
|
+
customize?: AuditPanelCustomizeValue;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Maximum number of chats to load.
|
|
19
|
+
* @default 100
|
|
20
|
+
*/
|
|
21
|
+
max?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function useData(props: AuditPanelProps, values: string[]) {
|
|
25
|
+
const { max } = props;
|
|
26
|
+
const query = useMemo(() => AuditSearchUtil.queryOf(values), [values]);
|
|
27
|
+
|
|
28
|
+
const { currentData: chats, isLoading } = auditApi.useGetAuditChatListQuery(
|
|
29
|
+
{
|
|
30
|
+
...query!,
|
|
31
|
+
pagingRule: { skip: 0, take: max! },
|
|
32
|
+
includeTotal: true,
|
|
33
|
+
},
|
|
34
|
+
{ skip: !query },
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return useMemo(() => ({ chats: chats?.items ?? [], isLoading }), [chats, isLoading]);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const EMPTY = Object.freeze({} as AuditPanelCustomizeValue);
|
|
41
|
+
|
|
42
|
+
export function AuditPanel(props: AuditPanelProps) {
|
|
43
|
+
props = { max: 100, customize: EMPTY, ...props };
|
|
44
|
+
const { className, style, localizer = defaultLocalizer, customize = EMPTY, max } = props;
|
|
45
|
+
const [values, setValues] = useState<string[]>([]);
|
|
46
|
+
const { chats, isLoading } = useData(props, values);
|
|
47
|
+
|
|
48
|
+
const [selectedId, setSelectedId] = useState<string | null>(null);
|
|
49
|
+
const resetSelected = useCallback(() => setSelectedId(null), []);
|
|
50
|
+
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (chats.every((x) => x.id !== selectedId)) {
|
|
53
|
+
setSelectedId(null);
|
|
54
|
+
}
|
|
55
|
+
}, [chats, selectedId]);
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<CustomizeContext.Provider value={customize}>
|
|
59
|
+
<LocalizerContext.Provider value={localizer}>
|
|
60
|
+
<div className={classNames(className, 'wxchtf-audit-panel')} style={style}>
|
|
61
|
+
<AuditSearch onSearch={setValues} />
|
|
62
|
+
<div className={classNames('wxchtf-audit-body', { '--conversation-opened': !!selectedId })}>
|
|
63
|
+
<AuditChatList
|
|
64
|
+
items={chats}
|
|
65
|
+
loading={isLoading}
|
|
66
|
+
selected={selectedId}
|
|
67
|
+
onSelect={setSelectedId}
|
|
68
|
+
top={Math.min(chats.length, max!)}
|
|
69
|
+
/>
|
|
70
|
+
{selectedId && <AuditConversationPanel id={selectedId} onClose={resetSelected} />}
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</LocalizerContext.Provider>
|
|
74
|
+
</CustomizeContext.Provider>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChatListCustomizeValue, ConversationCustomizeValue } from '@webinex/chatify';
|
|
2
|
+
import { AuditConversationPanel } from './AuditConversationPanel';
|
|
3
|
+
import { AuditChatList } from './AuditChatList';
|
|
4
|
+
import { AuditSearch } from './AuditSearch';
|
|
5
|
+
|
|
6
|
+
export type AuditPanelCustomizeValue = ConversationCustomizeValue &
|
|
7
|
+
ChatListCustomizeValue & {
|
|
8
|
+
AuditConversationPanel?: typeof AuditConversationPanel.Component;
|
|
9
|
+
AuditChatList?: typeof AuditChatList.Component;
|
|
10
|
+
AuditSearch?: typeof AuditSearch.Component;
|
|
11
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Account, chatifyApi, customize, Localizer, useLocalizer } from '@webinex/chatify';
|
|
2
|
+
import { Select } from 'antd';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { AuditSearchUtil } from './AuditSearchValue';
|
|
6
|
+
|
|
7
|
+
export interface AuditSearchProps {
|
|
8
|
+
className?: string;
|
|
9
|
+
onSearch?: (values: string[]) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type Value = { label: JSX.Element; value: string };
|
|
13
|
+
|
|
14
|
+
function* mapOptions(localizer: Localizer, accounts: Account[] | undefined, searchValue: string) {
|
|
15
|
+
if (searchValue.length === 0) return;
|
|
16
|
+
|
|
17
|
+
if (searchValue.length > 0)
|
|
18
|
+
yield {
|
|
19
|
+
label: localizer.audit.textSearchOption(searchValue),
|
|
20
|
+
value: AuditSearchUtil.TEXT_PREFIX + searchValue,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
for (const account of accounts?.filter((x) =>
|
|
24
|
+
x.name.toLocaleLowerCase().includes(searchValue.toLocaleLowerCase()),
|
|
25
|
+
) ?? []) {
|
|
26
|
+
yield {
|
|
27
|
+
label: localizer.audit.memberSearchOption(account),
|
|
28
|
+
value: AuditSearchUtil.MEMBER_PREFIX + account.id,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function useOptions(accounts: Account[] | undefined, searchValue: string) {
|
|
34
|
+
const localizer = useLocalizer();
|
|
35
|
+
return useMemo(
|
|
36
|
+
() => Array.from(mapOptions(localizer, accounts, searchValue)),
|
|
37
|
+
[localizer, accounts, searchValue],
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const AuditSearch = customize('AuditSearch', (props: AuditSearchProps) => {
|
|
42
|
+
const { className, onSearch } = props;
|
|
43
|
+
const [searchValue, setSearchValue] = useState('');
|
|
44
|
+
const [values, setValues] = useState<Value[]>([]);
|
|
45
|
+
const { data: accounts, isLoading } = chatifyApi.useGetAccountListQuery();
|
|
46
|
+
const options = useOptions(accounts, searchValue);
|
|
47
|
+
const localizer = useLocalizer();
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
onSearch?.(values.map((x) => x.value));
|
|
51
|
+
}, [onSearch, values]);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div className={classNames('wxchtf-search', className)}>
|
|
55
|
+
<Select<string[], Value>
|
|
56
|
+
allowClear
|
|
57
|
+
className="wxchtf-search-select"
|
|
58
|
+
mode="multiple"
|
|
59
|
+
value={values.map((x) => x.value)}
|
|
60
|
+
options={options.length > 0 ? options : values}
|
|
61
|
+
searchValue={searchValue}
|
|
62
|
+
onSearch={setSearchValue}
|
|
63
|
+
onSelect={(_, option) => {
|
|
64
|
+
setValues((prev) => {
|
|
65
|
+
if (AuditSearchUtil.isSearchByText(option.value)) {
|
|
66
|
+
prev = prev.filter((x) => !AuditSearchUtil.isSearchByText(x.value));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return [...prev, option];
|
|
70
|
+
});
|
|
71
|
+
setSearchValue('');
|
|
72
|
+
}}
|
|
73
|
+
onDeselect={(_, option) => {
|
|
74
|
+
setValues((prev) => prev.filter((x) => x.value !== option.value));
|
|
75
|
+
setSearchValue('');
|
|
76
|
+
}}
|
|
77
|
+
filterOption={false}
|
|
78
|
+
onDropdownVisibleChange={() => setSearchValue('')}
|
|
79
|
+
disabled={isLoading}
|
|
80
|
+
loading={isLoading}
|
|
81
|
+
placeholder={localizer.audit.searchPlaceholder}
|
|
82
|
+
notFoundContent={
|
|
83
|
+
searchValue.length === 0 ? localizer.audit.noInputBlurb : localizer.audit.noChatFound
|
|
84
|
+
}
|
|
85
|
+
size="large"
|
|
86
|
+
/>
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { GetAuditChatListQueryArgs } from './auditApi';
|
|
2
|
+
|
|
3
|
+
export interface AuditSearchOption {
|
|
4
|
+
label: JSX.Element;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const MEMBER_PREFIX = 'member://';
|
|
9
|
+
const TEXT_PREFIX = 'text://';
|
|
10
|
+
|
|
11
|
+
function queryOf(
|
|
12
|
+
values: string[],
|
|
13
|
+
): Pick<GetAuditChatListQueryArgs, 'containsOneOfMembers' | 'searchString'> | null {
|
|
14
|
+
let containsOneOfMembers: string[] | null = values
|
|
15
|
+
.filter(AuditSearchUtil.isSearchByMember)
|
|
16
|
+
.map((v) => v.slice(MEMBER_PREFIX.length));
|
|
17
|
+
|
|
18
|
+
containsOneOfMembers = containsOneOfMembers.length > 0 ? containsOneOfMembers : null;
|
|
19
|
+
|
|
20
|
+
const searchStringValues = values
|
|
21
|
+
.filter(AuditSearchUtil.isSearchByText)
|
|
22
|
+
.map((v) => v.slice(TEXT_PREFIX.length));
|
|
23
|
+
|
|
24
|
+
const searchString = searchStringValues.length > 0 ? searchStringValues.join(' ') : null;
|
|
25
|
+
|
|
26
|
+
if (!containsOneOfMembers && !searchString) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
containsOneOfMembers,
|
|
32
|
+
searchString,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const AuditSearchUtil = Object.freeze({
|
|
37
|
+
MEMBER_PREFIX,
|
|
38
|
+
TEXT_PREFIX,
|
|
39
|
+
isSearchByMember: (value: string) => value.startsWith(MEMBER_PREFIX),
|
|
40
|
+
isSearchByText: (value: string) => value.startsWith(TEXT_PREFIX),
|
|
41
|
+
queryOf,
|
|
42
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { PagingRule } from '@webinex/asky';
|
|
2
|
+
import { Account, chatifyApi, File, ListSegment, Optional } from '@webinex/chatify';
|
|
3
|
+
|
|
4
|
+
export interface GetAuditChatListQueryArgs {
|
|
5
|
+
containsOneOfMembers: string[] | null;
|
|
6
|
+
searchString: string | null;
|
|
7
|
+
pagingRule: PagingRule | null;
|
|
8
|
+
includeTotal: boolean | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface AuditChatResponse {
|
|
12
|
+
id: string;
|
|
13
|
+
workspaceId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
createdById: string;
|
|
17
|
+
lastMessage: Optional<AuditChatMessage>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface AuditChatMessage {
|
|
21
|
+
id: string;
|
|
22
|
+
authorId: string;
|
|
23
|
+
sentAt: string;
|
|
24
|
+
text: string | null;
|
|
25
|
+
files: File[];
|
|
26
|
+
sentBy: Account;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface AuditChatListItem {
|
|
30
|
+
id: string;
|
|
31
|
+
workspaceId: string;
|
|
32
|
+
name: string;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
createdById: string;
|
|
35
|
+
lastMessage: AuditChatMessage;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface AuditChat {
|
|
39
|
+
id: string;
|
|
40
|
+
workspaceId: string;
|
|
41
|
+
name: string;
|
|
42
|
+
createdAt: string;
|
|
43
|
+
createdById: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function qs(params: Record<string, any>): string {
|
|
47
|
+
const query = new URLSearchParams();
|
|
48
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
49
|
+
if (value !== null && value !== undefined) {
|
|
50
|
+
query.append(key, typeof value === 'string' ? value : JSON.stringify(value));
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return query.toString();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const auditApi = chatifyApi.injectEndpoints({
|
|
58
|
+
endpoints: (build) => ({
|
|
59
|
+
getAuditChatList: build.query<ListSegment<AuditChatListItem>, GetAuditChatListQueryArgs>({
|
|
60
|
+
queryFn: async (args) =>
|
|
61
|
+
chatifyApi.settings.client.axios
|
|
62
|
+
.get<ListSegment<AuditChatResponse>>(`audit/chats?${qs({ query: args })}`)
|
|
63
|
+
.then(({ data }) => ({
|
|
64
|
+
data: {
|
|
65
|
+
total: data.total,
|
|
66
|
+
items: data.items.map(
|
|
67
|
+
({ lastMessage, ...x }): AuditChatListItem => ({ ...x, lastMessage: lastMessage.value! }),
|
|
68
|
+
),
|
|
69
|
+
},
|
|
70
|
+
}))
|
|
71
|
+
.catch((error) => ({ error })),
|
|
72
|
+
providesTags: ['chat', 'message'],
|
|
73
|
+
}),
|
|
74
|
+
|
|
75
|
+
getAuditChat: build.query<AuditChat, { id: string }>({
|
|
76
|
+
queryFn: async (args) =>
|
|
77
|
+
chatifyApi.settings.client.axios
|
|
78
|
+
.get(`audit/chats/${encodeURIComponent(args.id)}`)
|
|
79
|
+
.then(({ data }) => ({ data }))
|
|
80
|
+
.catch((error) => ({ error })),
|
|
81
|
+
providesTags: ['chat'],
|
|
82
|
+
}),
|
|
83
|
+
|
|
84
|
+
getAuditChatMessagesInfinite: build.infiniteQuery<
|
|
85
|
+
ListSegment<AuditChatMessage>,
|
|
86
|
+
{ id: string },
|
|
87
|
+
{ skip: number; take: number }
|
|
88
|
+
>({
|
|
89
|
+
queryFn: async (args) => {
|
|
90
|
+
const {
|
|
91
|
+
pageParam,
|
|
92
|
+
queryArg: { id },
|
|
93
|
+
} = args;
|
|
94
|
+
|
|
95
|
+
return chatifyApi.settings.client.axios
|
|
96
|
+
.get(`audit/messages?${qs({ query: { chatId: id, pagingRule: pageParam, includeTotal: true } })}`)
|
|
97
|
+
.then(({ data }) => ({ data }))
|
|
98
|
+
.catch((error) => ({ error }));
|
|
99
|
+
},
|
|
100
|
+
infiniteQueryOptions: {
|
|
101
|
+
initialPageParam: { skip: 0, take: 20 },
|
|
102
|
+
getNextPageParam: (lastPage, _, lastPageParam) =>
|
|
103
|
+
lastPage.total > lastPageParam.skip + lastPageParam.take
|
|
104
|
+
? {
|
|
105
|
+
skip: lastPageParam.skip + lastPageParam.take,
|
|
106
|
+
take: lastPageParam.take,
|
|
107
|
+
}
|
|
108
|
+
: undefined,
|
|
109
|
+
},
|
|
110
|
+
providesTags: ['message', 'chat'],
|
|
111
|
+
}),
|
|
112
|
+
}),
|
|
113
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Account } from '@/core';
|
|
2
|
+
import { AuditPanel } from './AuditPanel';
|
|
3
|
+
|
|
4
|
+
declare module '@webinex/chatify' {
|
|
5
|
+
interface ChatifyType {
|
|
6
|
+
Audit: typeof AuditPanel;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface Localizer {
|
|
10
|
+
audit: {
|
|
11
|
+
searchPlaceholder: string;
|
|
12
|
+
noChatFound: string;
|
|
13
|
+
noInputBlurb: string;
|
|
14
|
+
textSearchOption: (searchValue: string) => JSX.Element;
|
|
15
|
+
memberSearchOption: (account: Account) => JSX.Element;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Space } from 'antd';
|
|
2
|
+
import { AuditPanel } from './AuditPanel';
|
|
3
|
+
import './index.d';
|
|
4
|
+
import './styles.scss';
|
|
5
|
+
import { Avatar, Chatify, defaultLocalizer } from '@webinex/chatify';
|
|
6
|
+
|
|
7
|
+
export * from './AuditPanel';
|
|
8
|
+
export * from './AuditPanelCustomizeValue';
|
|
9
|
+
export * from './AuditChatList';
|
|
10
|
+
export * from './AuditSearchValue';
|
|
11
|
+
export * from './AuditSearch';
|
|
12
|
+
export * from './auditApi';
|
|
13
|
+
export * from './AuditConversationPanel';
|
|
14
|
+
|
|
15
|
+
Chatify.Audit = AuditPanel;
|
|
16
|
+
|
|
17
|
+
defaultLocalizer.audit = {
|
|
18
|
+
searchPlaceholder: 'Search chats by chat name or member name',
|
|
19
|
+
noChatFound: 'No chats found',
|
|
20
|
+
noInputBlurb: 'Start typing to search',
|
|
21
|
+
textSearchOption: (text) => <span>{`Chat name includes "${text}"`}</span>,
|
|
22
|
+
memberSearchOption: (account) => (
|
|
23
|
+
<Space>
|
|
24
|
+
<Avatar account={account} />
|
|
25
|
+
{`Chat includes "${account.name}"`}
|
|
26
|
+
</Space>
|
|
27
|
+
),
|
|
28
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
@use '../styles/variables.scss' as vars;
|
|
2
|
+
@use '../styles/mixins.scss' as mixins;
|
|
3
|
+
|
|
4
|
+
.wxchtf-audit-panel {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-flow: column nowrap;
|
|
7
|
+
background: vars.$background;
|
|
8
|
+
border-radius: vars.$radius;
|
|
9
|
+
|
|
10
|
+
.wxchtf-search {
|
|
11
|
+
text-align: center;
|
|
12
|
+
flex: none;
|
|
13
|
+
padding-block: 0.5rem;
|
|
14
|
+
position: relative;
|
|
15
|
+
|
|
16
|
+
&::before {
|
|
17
|
+
content: '';
|
|
18
|
+
position: absolute;
|
|
19
|
+
left: 0;
|
|
20
|
+
right: 0;
|
|
21
|
+
bottom: 0;
|
|
22
|
+
height: 50px;
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
background: linear-gradient(to top, #006e720a, #0000 30%);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.wxchtf-search-select {
|
|
28
|
+
width: 100%;
|
|
29
|
+
max-width: 700px;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.wxchtf-chat-list {
|
|
34
|
+
flex: 1;
|
|
35
|
+
padding-top: 8px;
|
|
36
|
+
height: 100%;
|
|
37
|
+
min-height: 0;
|
|
38
|
+
border-bottom-left-radius: vars.$radius;
|
|
39
|
+
border-bottom-right-radius: vars.$radius;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.wxchtf-audit-body {
|
|
43
|
+
min-height: 0;
|
|
44
|
+
|
|
45
|
+
.ant-empty {
|
|
46
|
+
padding-top: 2rem;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&.--conversation-opened {
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-flow: row nowrap;
|
|
52
|
+
flex: 1;
|
|
53
|
+
|
|
54
|
+
.wxchtf-chat-list {
|
|
55
|
+
flex: none;
|
|
56
|
+
height: 100%;
|
|
57
|
+
min-height: 0;
|
|
58
|
+
width: 400px;
|
|
59
|
+
border-bottom-left-radius: vars.$radius;
|
|
60
|
+
border-bottom-right-radius: 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.wxchtf-conversation {
|
|
64
|
+
z-index: 2;
|
|
65
|
+
min-width: 0;
|
|
66
|
+
box-shadow: 0px 6px 30px 0px #0cd9e214, 0px 1px 12px 0px #006e720f;
|
|
67
|
+
border-bottom-right-radius: vars.$radius;
|
|
68
|
+
overflow: hidden;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
package/src/core/client.ts
CHANGED
package/src/core/debounce.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface DebounceConfig<T> {
|
|
|
17
17
|
export class Debounce<T> {
|
|
18
18
|
private _enqueued: DebounceInternalValue<T>[] = [];
|
|
19
19
|
private _processing: DebounceInternalValue<T>[] = [];
|
|
20
|
-
private _timeoutByGroup: Record<string,
|
|
20
|
+
private _timeoutByGroup: Record<string, number> = {};
|
|
21
21
|
private _subscribers: ((value: Debounce<T>) => any)[] = [];
|
|
22
22
|
|
|
23
23
|
constructor(public config: DebounceConfig<T>) {}
|