tuikit-atomicx-vue3 3.3.0-beta.3 → 3.3.1
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/AttachmentPicker.module-BesmtGyl.js +11 -0
- package/dist/FilePicker.vue_vue_type_script_setup_true_lang-CdJ4DUzE.js +76 -0
- package/dist/ImagePicker.vue_vue_type_script_setup_true_lang-CbNUofpK.js +76 -0
- package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-XRL7A5Gj.js → MessageInput.vue_vue_type_script_setup_true_lang-wUJPjWbx.js} +23 -18
- package/dist/VideoPicker.vue_vue_type_script_setup_true_lang-CmxjbNDJ.js +76 -0
- package/dist/chat/index.d.ts +3747 -2386
- package/dist/chat/index.js +12 -11
- package/dist/components/BarrageInput/BarrageInputH5.js +32 -8
- package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +9 -5
- package/dist/components/BarrageInput/TextEditor/index.js +14 -6
- package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue.d.ts +4 -4
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +12 -4
- package/dist/components/BarrageList/i18n/en-US/index.d.ts +1 -0
- package/dist/components/BarrageList/i18n/en-US/index.js +2 -1
- package/dist/components/BarrageList/i18n/zh-CN/index.d.ts +1 -0
- package/dist/components/BarrageList/i18n/zh-CN/index.js +2 -1
- package/dist/components/ChatSetting/GroupChatSetting/GroupActions/GroupActions.js +5 -3
- package/dist/components/ChatSetting/GroupChatSetting/GroupChatSetting.js +3 -3
- package/dist/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.js +3 -3
- package/dist/components/ChatSetting/GroupChatSetting/GroupManagement/GroupManagement.js +3 -3
- package/dist/components/ChatSetting/GroupChatSetting/GroupMembers/GroupMembers.js +3 -3
- package/dist/components/ChatSetting/SettingItem/SettingItem.js +21 -21
- package/dist/components/ChatSetting/i18n/en-US.js +3 -3
- package/dist/components/ChatSetting/i18n/zh-CN.js +3 -3
- package/dist/components/ChatSetting/index.d.ts +1 -4
- package/dist/components/ChatSetting/index.js +3 -6
- package/dist/components/CoGuestPanel/CoGuestPanel.js +1 -1
- package/dist/components/ContactList/ContactInfo/ContactInfo.js +17 -17
- package/dist/components/ContactList/ContactInfo/ContactInfo.vue.d.ts +26 -2
- package/dist/components/ContactList/ContactInfo/GroupInfo/GroupInfo.js +2 -1
- package/dist/components/ContactList/ContactList.js +19 -10
- package/dist/components/ContactList/ContactList.vue.d.ts +109 -1
- package/dist/components/ContactList/index.d.ts +158 -26
- package/dist/components/ConversationList/ConversationActions/ConversationActions.js +8 -9
- package/dist/components/ConversationList/ConversationCreate/ConversationCreate.js +2 -1
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.js +8 -8
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.js +1 -2
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.js +8 -8
- package/dist/components/ConversationList/ConversationList.js +18 -44
- package/dist/components/ConversationList/ConversationList.vue.d.ts +197 -1535
- package/dist/components/ConversationList/ConversationListContent/ConversationListContent.js +8 -11
- package/dist/components/ConversationList/ConversationListContent/ConversationListContent.vue.d.ts +22 -340
- package/dist/components/ConversationList/ConversationPreview/ConversationPreview.vue.d.ts +80 -134
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewAbstract.js +14 -14
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTimestamp.js +14 -14
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTitle.js +19 -30
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTitle.vue.d.ts +0 -2
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.js +14 -15
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue.d.ts +12 -24
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUnread.js +14 -14
- package/dist/components/ConversationList/ConversationPreview/index.d.ts +1 -1
- package/dist/components/ConversationList/ConversationPreview/index.js +17 -21
- package/dist/components/ConversationList/ConversationSearch/ConversationSearch.js +1 -0
- package/dist/components/ConversationList/index.d.ts +468 -2400
- package/dist/components/ConversationList/index.js +1 -1
- package/dist/components/LiveAudienceList/LiveAudienceListH5.js +1 -1
- package/dist/components/LiveCoreView/index.js +113 -58
- package/dist/components/LiveCoreView/index.vue.d.ts +9 -0
- package/dist/components/LiveList/LiveList.js +7 -5
- package/dist/components/LiveList/LiveListH5.js +77 -71
- package/dist/components/LiveList/i18n/en-US/index.d.ts +5 -0
- package/dist/components/LiveList/i18n/en-US/index.js +6 -1
- package/dist/components/LiveList/i18n/zh-CN/index.d.ts +5 -0
- package/dist/components/LiveList/i18n/zh-CN/index.js +6 -1
- package/dist/components/LiveList/pullToRefresh.js +204 -0
- package/dist/components/LiveList/pullToRefresh.vue.d.ts +86 -0
- package/dist/components/LiveScenePanel/CameraSettingDialog.js +6 -5
- package/dist/components/LiveScenePanel/index.js +3 -3
- package/dist/components/MessageInput/AttachmentPicker/AttachmentPicker.vue.d.ts +0 -4
- package/dist/components/MessageInput/AttachmentPicker/FilePicker.js +1 -1
- package/dist/components/MessageInput/AttachmentPicker/ImagePicker.js +1 -1
- package/dist/components/MessageInput/AttachmentPicker/VideoPicker.js +1 -1
- package/dist/components/MessageInput/AttachmentPicker/index.js +14 -19
- package/dist/components/MessageInput/EmojiPicker/EmojiPicker.js +3 -3
- package/dist/components/MessageInput/MessageInput.js +1 -1
- package/dist/components/MessageInput/MessageInput.vue.d.ts +6 -9
- package/dist/components/MessageInput/TextEditor/TextEditor.vue.d.ts +2 -2
- package/dist/components/MessageInput/TextEditor/index.js +18 -9
- package/dist/components/MessageInput/index.d.ts +5 -41
- package/dist/components/MessageInput/index.js +4 -4
- package/dist/components/MessageList/Message/CustomMessage/index.js +2 -2
- package/dist/components/MessageList/Message/FaceMessage/FaceMessage.js +7 -5
- package/dist/components/MessageList/Message/FaceMessage/FaceMessage.vue.d.ts +8 -8
- package/dist/components/MessageList/Message/LocationMessage/LocationMessage.js +2 -1
- package/dist/components/MessageList/Message/MergerMessage/MergerMessage.js +2 -1
- package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.js +12 -4
- package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue.d.ts +3 -3
- package/dist/components/MessageList/MessageForward/MessageForward.js +2 -3
- package/dist/components/MessageList/MessageList.js +14 -7
- package/dist/components/MessageList/MessageList.vue.d.ts +1 -1
- package/dist/components/MessageList/MessageTimeDivider/MessageTimeDivider.js +5 -5
- package/dist/components/MessageList/MessageTimeDivider/MessageTimeDivider.vue.d.ts +10 -10
- package/dist/components/MessageList/index.d.ts +143 -5
- package/dist/components/MessageList/index.js +5 -5
- package/dist/components/Search/Search.js +1 -3
- package/dist/components/Search/SearchResults/EmptyResult/EmptyResult.js +4 -6
- package/dist/components/Search/SearchResults/Loading/Loading.js +2 -4
- package/dist/components/Search/SearchResults/SearchResults.js +20 -22
- package/dist/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.js +6 -8
- package/dist/components/Search/SearchResults/SearchResultsItem/Group/Group.js +5 -7
- package/dist/components/Search/SearchResults/SearchResultsItem/Message/Message.js +19 -21
- package/dist/components/Search/SearchResults/SearchResultsItem/SearchResultsItem.js +1 -3
- package/dist/components/Search/SearchResults/SearchResultsItem/User/User.js +5 -7
- package/dist/components/StreamMixer/LocalMixer/index.js +11 -5
- package/dist/components/StreamView/manager/mediaManager.js +1 -1
- package/dist/components/UserPicker/UserPicker.js +2 -2
- package/dist/components/UserPicker/UserPicker.vue.d.ts +7 -8
- package/dist/components/UserPicker/components/ListMode/ListMode.js +14 -17
- package/dist/components/UserPicker/components/ListMode/ListMode.vue.d.ts +2 -2
- package/dist/components/UserPicker/components/SelectedPanel/SelectedPanel.vue.d.ts +2 -2
- package/dist/components/UserPicker/components/TreeMode/TreeMode.vue.d.ts +3 -3
- package/dist/components/UserPicker/components/TreeMode/TreeNode.vue.d.ts +4 -4
- package/dist/components/UserPicker/hooks/useSearchFilter.d.ts +3 -3
- package/dist/components/UserPicker/hooks/useSelection.d.ts +8 -8
- package/dist/components/UserPicker/hooks/useTreeState.d.ts +3 -3
- package/dist/components/UserPicker/index.d.ts +134 -3
- package/dist/components/UserPicker/index.js +3 -2
- package/dist/components/UserPicker/type.d.ts +18 -18
- package/dist/index.js +6 -3
- package/dist/rtc/index.d.ts +9 -0
- package/dist/states/GroupSettingState/GroupSettingState.js +3 -3
- package/dist/states/LiveSeatState/usePlayStream/MixStreamPlayer.js +3 -0
- package/dist/states/LoginState.js +1 -0
- package/dist/states/MessageInputState/MessageInputState.js +25 -5
- package/dist/styles/index.css +1294 -3578
- package/dist/types/contact.d.ts +13 -12
- package/dist/types/conversation.d.ts +12 -14
- package/dist/types/engine.d.ts +12 -0
- package/dist/types/engine.js +15 -0
- package/dist/types/index.js +2 -1
- package/dist/utils/json.js +0 -1
- package/package.json +7 -3
- package/src/chat/index.ts +12 -4
- package/src/components/BarrageInput/BarrageInputH5.vue +50 -4
- package/src/components/BarrageInput/EmojiPicker/EmojiPicker.module.scss +1 -0
- package/src/components/BarrageInput/EmojiPicker/EmojiPicker.vue +1 -1
- package/src/components/BarrageInput/TextEditor/Editor.scss +1 -1
- package/src/components/BarrageInput/TextEditor/TextEditor.module.scss +2 -0
- package/src/components/BarrageInput/TextEditor/TextEditor.vue +6 -0
- package/src/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue +8 -8
- package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +10 -0
- package/src/components/BarrageList/i18n/en-US/index.ts +1 -0
- package/src/components/BarrageList/i18n/zh-CN/index.ts +1 -0
- package/src/components/ChatSetting/GroupChatSetting/GroupActions/GroupActions.vue +5 -2
- package/src/components/ChatSetting/GroupChatSetting/GroupChatSetting.vue +5 -4
- package/src/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.vue +2 -2
- package/src/components/ChatSetting/GroupChatSetting/GroupManagement/GroupManagement.vue +3 -2
- package/src/components/ChatSetting/GroupChatSetting/GroupMembers/GroupMembers.vue +3 -3
- package/src/components/ChatSetting/SettingItem/SettingItem.vue +10 -7
- package/src/components/ChatSetting/i18n/en-US.ts +3 -3
- package/src/components/ChatSetting/i18n/zh-CN.ts +3 -3
- package/src/components/ChatSetting/index.ts +3 -3
- package/src/components/CoGuestPanel/CoGuestPanel.vue +9 -0
- package/src/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.scss +2 -0
- package/src/components/ContactList/ContactInfo/ContactInfo.vue +17 -9
- package/src/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.scss +2 -0
- package/src/components/ContactList/ContactInfo/FriendInfo/FriendInfo.scss +4 -3
- package/src/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.scss +2 -0
- package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.scss +2 -0
- package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.vue +1 -0
- package/src/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.scss +2 -2
- package/src/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.scss +3 -2
- package/src/components/ContactList/ContactList.scss +2 -1
- package/src/components/ContactList/ContactList.vue +18 -3
- package/src/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.scss +3 -3
- package/src/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.scss +5 -6
- package/src/components/ContactList/ContactListItem/FriendItem/FriendItem.scss +3 -3
- package/src/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.scss +5 -6
- package/src/components/ContactList/ContactListItem/GroupItem/GroupItem.scss +3 -3
- package/src/components/ConversationList/ConversationActions/ConversationActions.scss +2 -12
- package/src/components/ConversationList/ConversationActions/ConversationActions.vue +2 -2
- package/src/components/ConversationList/ConversationCreate/ConversationCreate.vue +1 -0
- package/src/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.scss +2 -1
- package/src/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.vue +2 -2
- package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.scss +2 -1
- package/src/components/ConversationList/ConversationList.scss +0 -5
- package/src/components/ConversationList/ConversationList.vue +15 -41
- package/src/components/ConversationList/ConversationListContent/ConversationListContent.scss +1 -0
- package/src/components/ConversationList/ConversationListContent/ConversationListContent.vue +13 -18
- package/src/components/ConversationList/ConversationPreview/ConversationPreview.scss +11 -9
- package/src/components/ConversationList/ConversationPreview/ConversationPreview.vue +14 -16
- package/src/components/ConversationList/ConversationPreview/ConversationPreviewTitle.vue +2 -14
- package/src/components/ConversationList/ConversationPreview/index.ts +1 -1
- package/src/components/ConversationList/ConversationSearch/ConversationSearch.vue +1 -0
- package/src/components/LiveAudienceList/LiveAudienceListH5.vue +2 -2
- package/src/components/LiveCoreView/index.vue +145 -79
- package/src/components/LiveList/LiveList.vue +3 -0
- package/src/components/LiveList/LiveListH5.vue +60 -85
- package/src/components/LiveList/i18n/en-US/index.ts +5 -0
- package/src/components/LiveList/i18n/zh-CN/index.ts +5 -0
- package/src/components/LiveList/pullToRefresh.vue +364 -0
- package/src/components/LiveScenePanel/CameraSettingDialog.vue +6 -5
- package/src/components/LiveScenePanel/index.vue +2 -2
- package/src/components/MessageInput/AttachmentPicker/AttachmentPicker.module.scss +4 -0
- package/src/components/MessageInput/AttachmentPicker/AttachmentPicker.vue +12 -17
- package/src/components/MessageInput/AttachmentPicker/FilePicker.vue +3 -2
- package/src/components/MessageInput/AttachmentPicker/ImagePicker.vue +3 -2
- package/src/components/MessageInput/AttachmentPicker/VideoPicker.vue +3 -2
- package/src/components/MessageInput/EmojiPicker/EmojiPicker.module.scss +1 -0
- package/src/components/MessageInput/MessageInput.vue +21 -15
- package/src/components/MessageInput/TextEditor/Editor.scss +1 -0
- package/src/components/MessageInput/TextEditor/TextEditor.vue +16 -6
- package/src/components/MessageInput/types.d.ts +3 -4
- package/src/components/MessageList/Message/CustomMessage/CustomMessage.vue +1 -1
- package/src/components/MessageList/Message/FaceMessage/FaceMessage.vue +10 -7
- package/src/components/MessageList/Message/LocationMessage/LocationMessage.vue +3 -1
- package/src/components/MessageList/Message/MergerMessage/MergerMessage.vue +1 -1
- package/src/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue +2 -2
- package/src/components/MessageList/MessageForward/MessageForward.vue +3 -3
- package/src/components/MessageList/MessageList.vue +17 -5
- package/src/components/MessageList/MessageTimeDivider/MessageTimeDivider.vue +9 -9
- package/src/components/MessageList/index.ts +5 -4
- package/src/components/Search/Search.scss +0 -3
- package/src/components/Search/SearchResults/EmptyResult/EmptyResult.scss +0 -3
- package/src/components/Search/SearchResults/Loading/Loading.scss +0 -3
- package/src/components/Search/SearchResults/SearchResults.scss +7 -16
- package/src/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.scss +5 -11
- package/src/components/Search/SearchResults/SearchResultsItem/Group/Group.scss +5 -11
- package/src/components/Search/SearchResults/SearchResultsItem/Message/Message.scss +5 -11
- package/src/components/Search/SearchResults/SearchResultsItem/SearchResultsItem.scss +0 -3
- package/src/components/Search/SearchResults/SearchResultsItem/User/User.scss +5 -6
- package/src/components/StreamMixer/LocalMixer/index.vue +9 -4
- package/src/components/StreamView/manager/mediaManager.ts +1 -1
- package/src/components/UserPicker/UserPicker.vue +6 -9
- package/src/components/UserPicker/components/ListMode/ListMode.vue +3 -7
- package/src/components/UserPicker/components/SelectedPanel/SelectedPanel.vue +2 -2
- package/src/components/UserPicker/components/TreeMode/TreeMode.vue +3 -3
- package/src/components/UserPicker/components/TreeMode/TreeNode.vue +3 -3
- package/src/components/UserPicker/hooks/useSearchFilter.ts +15 -14
- package/src/components/UserPicker/hooks/useSelection.ts +32 -32
- package/src/components/UserPicker/hooks/useTreeState.ts +4 -4
- package/src/components/UserPicker/index.ts +16 -14
- package/src/components/UserPicker/type.ts +18 -18
- package/src/types/contact.ts +13 -12
- package/src/types/conversation.ts +12 -14
- package/src/types/engine.ts +15 -0
- package/src/utils/json.ts +0 -4
- package/dist/AttachmentPicker.module-0_DWsAtr.js +0 -11
- package/dist/FilePicker.vue_vue_type_script_setup_true_lang-CaSj3Gh_.js +0 -72
- package/dist/ImagePicker.vue_vue_type_script_setup_true_lang-CrzGMmrh.js +0 -72
- package/dist/VideoPicker.vue_vue_type_script_setup_true_lang-DTv6TJKr.js +0 -72
- package/dist/states/UIOpenControlState/UIOpenControlState.d.ts +0 -15
- package/dist/states/UIOpenControlState/UIOpenControlState.js +0 -28
- package/dist/states/UIOpenControlState/index.d.ts +0 -1
- package/dist/states/UIOpenControlState/index.js +0 -4
|
@@ -48,13 +48,13 @@
|
|
|
48
48
|
import { defineProps, computed, withDefaults } from 'vue';
|
|
49
49
|
import { IconClose, useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
50
50
|
import { Avatar } from '../../../Avatar';
|
|
51
|
-
import type {
|
|
51
|
+
import type { UserPickerResult } from '../../type';
|
|
52
52
|
|
|
53
53
|
const { t } = useUIKit();
|
|
54
54
|
|
|
55
55
|
interface SelectedPanelProps {
|
|
56
56
|
displayMode: 'list' | 'tree';
|
|
57
|
-
selectedItems:
|
|
57
|
+
selectedItems: UserPickerResult;
|
|
58
58
|
lockedKeys: Set<string>;
|
|
59
59
|
onRemove: (key: string) => void;
|
|
60
60
|
maxCount?: number;
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
<script setup lang="ts">
|
|
22
22
|
import { defineProps } from 'vue';
|
|
23
23
|
import TreeNode from './TreeNode.vue';
|
|
24
|
-
import type {
|
|
24
|
+
import type { UserPickerNode } from '../../type';
|
|
25
25
|
|
|
26
26
|
interface TreeModeProps<T = unknown> {
|
|
27
|
-
dataSource:
|
|
27
|
+
dataSource: UserPickerNode<T>[];
|
|
28
28
|
selectedKeys: Set<string>;
|
|
29
29
|
halfSelectedKeys: Set<string>;
|
|
30
30
|
lockedKeys: Set<string>;
|
|
31
31
|
expandedKeys: Set<string>;
|
|
32
32
|
loadingKeys: Set<string>;
|
|
33
33
|
onItemClick: (key: string) => void;
|
|
34
|
-
onExpand: (node:
|
|
34
|
+
onExpand: (node: UserPickerNode<T>) => void;
|
|
35
35
|
renderItem?: any; // Vue component or render function
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -88,10 +88,10 @@
|
|
|
88
88
|
import { defineProps, defineEmits, computed } from 'vue';
|
|
89
89
|
import { IconArrowDown, IconCheckSm, IconLoading } from '@tencentcloud/uikit-base-component-vue3';
|
|
90
90
|
import { Avatar } from '../../../Avatar';
|
|
91
|
-
import type {
|
|
91
|
+
import type { UserPickerNode } from '../../type';
|
|
92
92
|
|
|
93
93
|
interface TreeNodeProps<T = unknown> {
|
|
94
|
-
node:
|
|
94
|
+
node: UserPickerNode<T>;
|
|
95
95
|
level: number;
|
|
96
96
|
selectedKeys: Set<string>;
|
|
97
97
|
halfSelectedKeys: Set<string>;
|
|
@@ -105,7 +105,7 @@ const props = defineProps<TreeNodeProps>();
|
|
|
105
105
|
|
|
106
106
|
const emit = defineEmits<{
|
|
107
107
|
'item-click': [key: string];
|
|
108
|
-
expand: [node:
|
|
108
|
+
expand: [node: UserPickerNode<any>];
|
|
109
109
|
}>();
|
|
110
110
|
|
|
111
111
|
const isSelected = computed(() => props.selectedKeys.has(props.node.key));
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { ref, computed
|
|
2
|
-
import type {
|
|
1
|
+
import { ref, computed } from 'vue';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
import type { UserPickerDataSource, UserPickerNode, UserPickerRow } from '../type';
|
|
3
4
|
|
|
4
5
|
interface UseSearchFilterOptions<T = unknown> {
|
|
5
|
-
dataSource: Ref<
|
|
6
|
+
dataSource: Ref<UserPickerDataSource<T>>;
|
|
6
7
|
isTreeMode?: boolean;
|
|
7
8
|
onSearch?: (value: string) => void;
|
|
8
9
|
debounceTime?: number;
|
|
@@ -11,7 +12,7 @@ interface UseSearchFilterOptions<T = unknown> {
|
|
|
11
12
|
interface UseSearchFilterReturn<T = unknown> {
|
|
12
13
|
searchValue: Ref<string>;
|
|
13
14
|
setSearchValue: (value: string) => void;
|
|
14
|
-
filteredData: Ref<
|
|
15
|
+
filteredData: Ref<UserPickerDataSource<T>>;
|
|
15
16
|
isSearching: Ref<boolean>;
|
|
16
17
|
handleSearch: (value: string) => void;
|
|
17
18
|
clearSearch: () => void;
|
|
@@ -19,7 +20,7 @@ interface UseSearchFilterReturn<T = unknown> {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
// Check if it's tree data structure
|
|
22
|
-
function isTreeDataSource<T>(data:
|
|
23
|
+
function isTreeDataSource<T>(data: UserPickerDataSource<T>): data is Array<UserPickerNode<T>> {
|
|
23
24
|
if (data.length === 0) {
|
|
24
25
|
return false;
|
|
25
26
|
}
|
|
@@ -27,22 +28,22 @@ function isTreeDataSource<T>(data: IUserPickerDataSource<T>): data is Array<IUse
|
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
// Search tree structure
|
|
30
|
-
function searchTreeNodes<T>(nodes: Array<
|
|
31
|
+
function searchTreeNodes<T>(nodes: Array<UserPickerNode<T>>, searchValue: string): Array<UserPickerNode<T>> {
|
|
31
32
|
if (!searchValue.trim()) {
|
|
32
33
|
return nodes;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
// Helper function: check if node matches
|
|
36
|
-
const isNodeMatched = (node:
|
|
37
|
+
const isNodeMatched = (node: UserPickerNode<T>): boolean =>
|
|
37
38
|
node.label.toLowerCase().includes(searchValue.toLowerCase());
|
|
38
39
|
|
|
39
40
|
// Helper function: recursively search nodes
|
|
40
|
-
const searchNodes = (nodesList: Array<
|
|
41
|
-
const matchedNodes: Array<
|
|
41
|
+
const searchNodes = (nodesList: Array<UserPickerNode<T>>): Array<UserPickerNode<T>> => {
|
|
42
|
+
const matchedNodes: Array<UserPickerNode<T>> = [];
|
|
42
43
|
|
|
43
44
|
nodesList.forEach(node => {
|
|
44
45
|
const isMatched = isNodeMatched(node);
|
|
45
|
-
let matchedChildren: Array<
|
|
46
|
+
let matchedChildren: Array<UserPickerNode<T>> = [];
|
|
46
47
|
|
|
47
48
|
if (node.children && node.children.length) {
|
|
48
49
|
matchedChildren = searchNodes(node.children);
|
|
@@ -53,7 +54,7 @@ function searchTreeNodes<T>(nodes: Array<IUserPickerNode<T>>, searchValue: strin
|
|
|
53
54
|
matchedNodes.push({
|
|
54
55
|
...node,
|
|
55
56
|
children: matchedChildren.length > 0 ? matchedChildren : node.children,
|
|
56
|
-
} as
|
|
57
|
+
} as UserPickerNode<T>);
|
|
57
58
|
}
|
|
58
59
|
});
|
|
59
60
|
|
|
@@ -64,7 +65,7 @@ function searchTreeNodes<T>(nodes: Array<IUserPickerNode<T>>, searchValue: strin
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
// Search list structure
|
|
67
|
-
function searchListItems<T>(items: Array<
|
|
68
|
+
function searchListItems<T>(items: Array<UserPickerRow<T>>, searchValue: string): Array<UserPickerRow<T>> {
|
|
68
69
|
if (!searchValue.trim()) {
|
|
69
70
|
return items;
|
|
70
71
|
}
|
|
@@ -89,9 +90,9 @@ export function useSearchFilter<T = unknown>({
|
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
if (isTreeMode && isTreeDataSource(dataSource.value)) {
|
|
92
|
-
return searchTreeNodes(dataSource.value as Array<
|
|
93
|
+
return searchTreeNodes(dataSource.value as Array<UserPickerNode<T>>, searchValue.value);
|
|
93
94
|
}
|
|
94
|
-
return searchListItems(dataSource.value as Array<
|
|
95
|
+
return searchListItems(dataSource.value as Array<UserPickerRow<T>>, searchValue.value);
|
|
95
96
|
});
|
|
96
97
|
|
|
97
98
|
// Handle search input
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
2
2
|
import { ref, computed, watch, type Ref } from 'vue';
|
|
3
|
-
import type {
|
|
3
|
+
import type { UserPickerNode, UserPickerRow, UserPickerDataSource, UserPickerResult } from '../type';
|
|
4
4
|
|
|
5
5
|
interface UseSelectionOptions<T = unknown> {
|
|
6
6
|
defaultSelectedKeys?: string[];
|
|
@@ -8,9 +8,9 @@ interface UseSelectionOptions<T = unknown> {
|
|
|
8
8
|
maxCount?: number;
|
|
9
9
|
minCount?: number;
|
|
10
10
|
isTreeMode?: boolean;
|
|
11
|
-
dataSource: Ref<
|
|
12
|
-
onSelectedChange?: (selectedItems:
|
|
13
|
-
onMaxCountExceed?: (selectedItems:
|
|
11
|
+
dataSource: Ref<UserPickerDataSource<T>>;
|
|
12
|
+
onSelectedChange?: (selectedItems: UserPickerResult<T>) => void;
|
|
13
|
+
onMaxCountExceed?: (selectedItems: UserPickerResult<T>) => void;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
interface UseSelectionReturn<T = unknown> {
|
|
@@ -21,18 +21,18 @@ interface UseSelectionReturn<T = unknown> {
|
|
|
21
21
|
isHalfSelected: (key: string) => boolean;
|
|
22
22
|
isLocked: (key: string) => boolean;
|
|
23
23
|
toggle: (key: string) => void;
|
|
24
|
-
getSelectedItems: () =>
|
|
25
|
-
getNodeChildKeys: (node:
|
|
24
|
+
getSelectedItems: () => UserPickerResult<T>;
|
|
25
|
+
getNodeChildKeys: (node: UserPickerNode<T>) => string[];
|
|
26
26
|
getNodeParentChildrenMap: () => Map<string, string[]>;
|
|
27
27
|
canSelectMore: Ref<boolean>;
|
|
28
28
|
reachMaxCount: Ref<boolean>;
|
|
29
29
|
allSelectedCount: Ref<number>;
|
|
30
|
-
getSelectableLeafNodes: (nodeKey: string) =>
|
|
31
|
-
getCancelableLeafNodes: (nodeKey: string) =>
|
|
30
|
+
getSelectableLeafNodes: (nodeKey: string) => UserPickerNode<T>[];
|
|
31
|
+
getCancelableLeafNodes: (nodeKey: string) => UserPickerNode<T>[];
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// Check if it's tree data structure
|
|
35
|
-
function isTreeDataSource<T>(data:
|
|
35
|
+
function isTreeDataSource<T>(data: UserPickerDataSource<T>): data is UserPickerNode<T>[] {
|
|
36
36
|
if (data.length === 0) {
|
|
37
37
|
return false;
|
|
38
38
|
}
|
|
@@ -44,9 +44,9 @@ function isTreeDataSource<T>(data: IUserPickerDataSource<T>): data is IUserPicke
|
|
|
44
44
|
* @param nodes
|
|
45
45
|
* @returns
|
|
46
46
|
*/
|
|
47
|
-
function buildAllNodesMap<T>(nodes:
|
|
48
|
-
const map = new Map<string,
|
|
49
|
-
const traverse = (nodesToScan:
|
|
47
|
+
function buildAllNodesMap<T>(nodes: UserPickerNode<T>[]): Map<string, UserPickerNode<T>> {
|
|
48
|
+
const map = new Map<string, UserPickerNode<T>>();
|
|
49
|
+
const traverse = (nodesToScan: UserPickerNode<T>[]) => {
|
|
50
50
|
nodesToScan.forEach(node => {
|
|
51
51
|
map.set(node.key, node);
|
|
52
52
|
if (node.children && node.children.length) {
|
|
@@ -59,10 +59,10 @@ function buildAllNodesMap<T>(nodes: IUserPickerNode<T>[]): Map<string, IUserPick
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// Build parent-children mapping relationship
|
|
62
|
-
function buildParentChildrenMap<T>(nodes:
|
|
62
|
+
function buildParentChildrenMap<T>(nodes: UserPickerNode<T>[]): Map<string, string[]> {
|
|
63
63
|
const map = new Map<string, string[]>();
|
|
64
64
|
|
|
65
|
-
const traverse = (nodesList:
|
|
65
|
+
const traverse = (nodesList: UserPickerNode<T>[], parentKey?: string) => {
|
|
66
66
|
nodesList.forEach(node => {
|
|
67
67
|
if (parentKey) {
|
|
68
68
|
if (!map.has(parentKey)) {
|
|
@@ -82,10 +82,10 @@ function buildParentChildrenMap<T>(nodes: IUserPickerNode<T>[]): Map<string, str
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
// Build child-parent mapping relationship
|
|
85
|
-
function buildChildParentMap<T>(nodes:
|
|
85
|
+
function buildChildParentMap<T>(nodes: UserPickerNode<T>[]): Map<string, string> {
|
|
86
86
|
const map = new Map<string, string>();
|
|
87
87
|
|
|
88
|
-
const traverse = (nodesList:
|
|
88
|
+
const traverse = (nodesList: UserPickerNode<T>[], parentKey?: string) => {
|
|
89
89
|
nodesList.forEach(node => {
|
|
90
90
|
if (parentKey) {
|
|
91
91
|
map.set(node.key, parentKey);
|
|
@@ -127,23 +127,23 @@ export function useSelection<T = unknown>({
|
|
|
127
127
|
// Tree node relationships
|
|
128
128
|
const parentChildrenMap = computed(() => {
|
|
129
129
|
if (isTreeMode && isTreeDataSource(dataSource.value)) {
|
|
130
|
-
return buildParentChildrenMap(dataSource.value as
|
|
130
|
+
return buildParentChildrenMap(dataSource.value as UserPickerNode<T>[]);
|
|
131
131
|
}
|
|
132
132
|
return new Map<string, string[]>();
|
|
133
133
|
});
|
|
134
134
|
|
|
135
135
|
const childParentMap = computed(() => {
|
|
136
136
|
if (isTreeMode && isTreeDataSource(dataSource.value)) {
|
|
137
|
-
return buildChildParentMap(dataSource.value as
|
|
137
|
+
return buildChildParentMap(dataSource.value as UserPickerNode<T>[]);
|
|
138
138
|
}
|
|
139
139
|
return new Map<string, string>();
|
|
140
140
|
});
|
|
141
141
|
|
|
142
142
|
const nodeEntitiesMap = computed(() => {
|
|
143
143
|
if (isTreeMode && isTreeDataSource(dataSource.value)) {
|
|
144
|
-
return buildAllNodesMap(dataSource.value as
|
|
144
|
+
return buildAllNodesMap(dataSource.value as UserPickerNode<T>[]);
|
|
145
145
|
}
|
|
146
|
-
return new Map<string,
|
|
146
|
+
return new Map<string, UserPickerNode<T>>();
|
|
147
147
|
});
|
|
148
148
|
|
|
149
149
|
// Check if maximum selection count is reached
|
|
@@ -156,7 +156,7 @@ export function useSelection<T = unknown>({
|
|
|
156
156
|
* @param node - The node to get the child keys of
|
|
157
157
|
* @returns The child keys of the node
|
|
158
158
|
*/
|
|
159
|
-
const getNodeChildKeys = (node:
|
|
159
|
+
const getNodeChildKeys = (node: UserPickerNode<T>): string[] => {
|
|
160
160
|
const result: string[] = [];
|
|
161
161
|
|
|
162
162
|
const traverse = (nodeKey: string) => {
|
|
@@ -178,7 +178,7 @@ export function useSelection<T = unknown>({
|
|
|
178
178
|
* @param nodeKey - The key of the node to select
|
|
179
179
|
* @returns The number of leaf nodes that would be selected when selecting this node (excluding already selected or locked nodes)
|
|
180
180
|
*/
|
|
181
|
-
const getSelectableLeafNodes = (nodeKey: string):
|
|
181
|
+
const getSelectableLeafNodes = (nodeKey: string): UserPickerNode<T>[] => {
|
|
182
182
|
// If the node itself is a leaf node and not selected or locked, return 1
|
|
183
183
|
const nodeEntity = nodeEntitiesMap.value.get(nodeKey);
|
|
184
184
|
if (nodeEntity?.isLeafNode && !selectedKeys.value.has(nodeKey) && !lockedKeysSet.value.has(nodeKey)) {
|
|
@@ -186,29 +186,29 @@ export function useSelection<T = unknown>({
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
// Get all child node keys
|
|
189
|
-
const childKeys = getNodeChildKeys({ key: nodeKey } as
|
|
189
|
+
const childKeys = getNodeChildKeys({ key: nodeKey } as UserPickerNode<T>);
|
|
190
190
|
|
|
191
191
|
// Filter out unselected and unlocked leaf nodes
|
|
192
192
|
const selectableLeafNodes = childKeys
|
|
193
193
|
.filter(key => !selectedKeys.value.has(key) && !lockedKeysSet.value.has(key))
|
|
194
194
|
.map(key => nodeEntitiesMap.value.get(key))
|
|
195
|
-
.filter(childNode => childNode?.isLeafNode) as
|
|
195
|
+
.filter(childNode => childNode?.isLeafNode) as UserPickerNode<T>[];
|
|
196
196
|
|
|
197
197
|
return selectableLeafNodes;
|
|
198
198
|
};
|
|
199
199
|
|
|
200
|
-
const getCancelableLeafNodes = (nodeKey: string):
|
|
200
|
+
const getCancelableLeafNodes = (nodeKey: string): UserPickerNode<T>[] => {
|
|
201
201
|
const nodeEntity = nodeEntitiesMap.value.get(nodeKey);
|
|
202
202
|
if (nodeEntity?.isLeafNode && selectedKeys.value.has(nodeKey)) {
|
|
203
203
|
return [nodeEntity];
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
const childKeys = getNodeChildKeys({ key: nodeKey } as
|
|
206
|
+
const childKeys = getNodeChildKeys({ key: nodeKey } as UserPickerNode<T>);
|
|
207
207
|
|
|
208
208
|
const cancelableLeafNodes = childKeys
|
|
209
209
|
.filter(key => selectedKeys.value.has(key) && !lockedKeysSet.value.has(key))
|
|
210
210
|
.map(key => nodeEntitiesMap.value.get(key))
|
|
211
|
-
.filter(childNode => childNode?.isLeafNode) as
|
|
211
|
+
.filter(childNode => childNode?.isLeafNode) as UserPickerNode<T>[];
|
|
212
212
|
|
|
213
213
|
return cancelableLeafNodes;
|
|
214
214
|
};
|
|
@@ -427,14 +427,14 @@ export function useSelection<T = unknown>({
|
|
|
427
427
|
};
|
|
428
428
|
|
|
429
429
|
// Get selected items
|
|
430
|
-
const getSelectedItems = ():
|
|
431
|
-
const result:
|
|
430
|
+
const getSelectedItems = (): UserPickerResult<T> => {
|
|
431
|
+
const result: UserPickerResult<T> = [];
|
|
432
432
|
|
|
433
433
|
if (isTreeMode && isTreeDataSource(dataSource.value)) {
|
|
434
|
-
const treeData = dataSource.value as
|
|
434
|
+
const treeData = dataSource.value as UserPickerNode<T>[];
|
|
435
435
|
|
|
436
436
|
// Helper function: find node - use array iteration instead of for...of loop
|
|
437
|
-
const findNode = (key: string, nodes:
|
|
437
|
+
const findNode = (key: string, nodes: UserPickerNode<T>[]): UserPickerNode<T> | null => {
|
|
438
438
|
const found = nodes.find(node => node.key === key);
|
|
439
439
|
if (found) {
|
|
440
440
|
return found;
|
|
@@ -471,7 +471,7 @@ export function useSelection<T = unknown>({
|
|
|
471
471
|
});
|
|
472
472
|
} else {
|
|
473
473
|
// List mode
|
|
474
|
-
const listData = dataSource.value as
|
|
474
|
+
const listData = dataSource.value as UserPickerRow<T>[];
|
|
475
475
|
selectedKeys.value.forEach(key => {
|
|
476
476
|
const item = listData.find(listItem => listItem.key === key);
|
|
477
477
|
if (item) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ref, type Ref } from 'vue';
|
|
2
|
-
import type {
|
|
2
|
+
import type { UserPickerNode } from '../type';
|
|
3
3
|
|
|
4
4
|
interface UseTreeStateOptions<T = unknown> {
|
|
5
|
-
onExpand?: (node:
|
|
5
|
+
onExpand?: (node: UserPickerNode<T>) => void;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
interface UseTreeStateReturn<T = unknown> {
|
|
@@ -10,7 +10,7 @@ interface UseTreeStateReturn<T = unknown> {
|
|
|
10
10
|
loadingKeys: Ref<Set<string>>;
|
|
11
11
|
checkNodeIsExpanded: (key: string) => boolean;
|
|
12
12
|
checkNodeIsLoading: (key: string) => boolean;
|
|
13
|
-
toggleExpand: (node:
|
|
13
|
+
toggleExpand: (node: UserPickerNode<T>) => void;
|
|
14
14
|
setNodeLoading: (key: string, loading: boolean) => void;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -39,7 +39,7 @@ export function useTreeState<T = unknown>({ onExpand }: UseTreeStateOptions<T> =
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
// Toggle node expand state
|
|
42
|
-
const toggleExpand = (node:
|
|
42
|
+
const toggleExpand = (node: UserPickerNode<T>) => {
|
|
43
43
|
// If node is leaf node, no need to handle
|
|
44
44
|
if (node.isLeafNode) {
|
|
45
45
|
return;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import UserPickerComponent from './UserPicker.vue';
|
|
2
2
|
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
UserPickerProps,
|
|
4
|
+
UserPickerRef,
|
|
5
|
+
UserPickerRow,
|
|
6
|
+
UserPickerNode,
|
|
7
|
+
UserPickerDataSource,
|
|
8
|
+
UserPickerResult,
|
|
9
9
|
} from './type';
|
|
10
10
|
import { addI18n } from '../../i18n';
|
|
11
11
|
import { resources } from './i18n';
|
|
@@ -13,12 +13,14 @@ import { resources } from './i18n';
|
|
|
13
13
|
addI18n('en-US', { translation: { UserPicker: resources['en-US'] } });
|
|
14
14
|
addI18n('zh-CN', { translation: { UserPicker: resources['zh-CN'] } });
|
|
15
15
|
|
|
16
|
+
const UserPicker = UserPickerComponent;
|
|
17
|
+
|
|
18
|
+
export { UserPicker };
|
|
16
19
|
export type {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
UserPickerProps,
|
|
21
|
+
UserPickerRef,
|
|
22
|
+
UserPickerRow,
|
|
23
|
+
UserPickerNode,
|
|
24
|
+
UserPickerDataSource,
|
|
25
|
+
UserPickerResult,
|
|
23
26
|
};
|
|
24
|
-
export { UserPicker };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// List item data structure
|
|
2
|
-
export interface
|
|
2
|
+
export interface UserPickerRow<T = unknown> {
|
|
3
3
|
key: string; // Unique identifier
|
|
4
4
|
label: string; // Display name
|
|
5
5
|
avatarUrl?: string | undefined; // Avatar URL
|
|
@@ -7,21 +7,21 @@ export interface IUserPickerRow<T = unknown> {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
// Tree node data structure
|
|
10
|
-
export interface
|
|
10
|
+
export interface UserPickerNode<T = unknown> {
|
|
11
11
|
key: string; // Unique identifier
|
|
12
12
|
label: string; // Display name
|
|
13
13
|
isLeafNode: boolean; // Whether is leaf node
|
|
14
14
|
avatarUrl?: string | undefined; // Avatar URL
|
|
15
15
|
lazyLoad?: boolean; // Whether supports lazy loading
|
|
16
|
-
children?: Array<
|
|
16
|
+
children?: Array<UserPickerNode<T>>; // Child nodes
|
|
17
17
|
extraData?: T | undefined; // Extended data
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// Data source type
|
|
21
|
-
export type
|
|
21
|
+
export type UserPickerDataSource<T = unknown> = Array<UserPickerRow<T>> | Array<UserPickerNode<T>>;
|
|
22
22
|
|
|
23
23
|
// Selection result item type
|
|
24
|
-
export interface
|
|
24
|
+
export interface UserPickerResultItem<T = unknown> {
|
|
25
25
|
key: string;
|
|
26
26
|
label: string;
|
|
27
27
|
avatarUrl?: string | undefined;
|
|
@@ -31,18 +31,18 @@ export interface IUserPickerResultItem<T = unknown> {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
// Selection result type
|
|
34
|
-
export type
|
|
34
|
+
export type UserPickerResult<T = unknown> = Array<UserPickerResultItem<T>>;
|
|
35
35
|
|
|
36
36
|
// Component props interface
|
|
37
|
-
export interface
|
|
37
|
+
export interface UserPickerProps<T = unknown> {
|
|
38
38
|
// Basic properties
|
|
39
39
|
displayMode: 'list' | 'tree'; // Display mode
|
|
40
|
-
dataSource:
|
|
40
|
+
dataSource: UserPickerDataSource<T>; // Data source
|
|
41
41
|
defaultSelectedItems?: Array<{ key: string; [key: string]: any }>;
|
|
42
42
|
lockedItems?: Array<{ key: string; [key: string]: any }>;
|
|
43
43
|
maxCount?: number | undefined;
|
|
44
44
|
minCount?: number | undefined;
|
|
45
|
-
onMaxCountExceed?: (selectedItems:
|
|
45
|
+
onMaxCountExceed?: (selectedItems: UserPickerResult<T>) => void;
|
|
46
46
|
|
|
47
47
|
// Search related
|
|
48
48
|
enableSearch?: boolean; // Whether to enable search
|
|
@@ -50,31 +50,31 @@ export interface IUserPickerProps<T = unknown> {
|
|
|
50
50
|
onSearch?: (value: string) => void; // Search callback
|
|
51
51
|
|
|
52
52
|
// Custom rendering
|
|
53
|
-
renderItem?: (data:
|
|
53
|
+
renderItem?: (data: UserPickerRow<T> | UserPickerNode<T>) => any; // Vue render function or component
|
|
54
54
|
|
|
55
55
|
// Event callbacks
|
|
56
|
-
onSelectedChange?: (selectedItems:
|
|
56
|
+
onSelectedChange?: (selectedItems: UserPickerResult<T>) => void; // Selection change callback
|
|
57
57
|
onReachEnd?: () => void; // List scroll to bottom callback (list mode)
|
|
58
58
|
|
|
59
59
|
// Tree mode specific properties
|
|
60
|
-
onExpand?: (node:
|
|
60
|
+
onExpand?: (node: UserPickerNode<T>) => void; // Expand callback for lazy loading child items
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// Component ref interface
|
|
64
|
-
export interface
|
|
65
|
-
getSelectedItems: () =>
|
|
66
|
-
updateListData: (newDataSource: Array<
|
|
67
|
-
updateTreeData: (key: string, partialNewNode: Partial<
|
|
64
|
+
export interface UserPickerRef<T = unknown> {
|
|
65
|
+
getSelectedItems: () => UserPickerResult<T>; // Get currently selected items
|
|
66
|
+
updateListData: (newDataSource: Array<UserPickerRow<T>>) => void; // Update list data
|
|
67
|
+
updateTreeData: (key: string, partialNewNode: Partial<UserPickerNode<T>>) => void; // Update tree data
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// Selection state type (for internal state management)
|
|
71
|
-
export interface
|
|
71
|
+
export interface SelectionState {
|
|
72
72
|
selectedKeys: Set<string>;
|
|
73
73
|
halfSelectedKeys?: Set<string>; // Only valid in tree mode
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// Tree node state type (for internal state management)
|
|
77
|
-
export interface
|
|
77
|
+
export interface TreeState {
|
|
78
78
|
expandedKeys: Set<string>;
|
|
79
79
|
loadingKeys: Set<string>;
|
|
80
80
|
}
|
package/src/types/contact.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
1
2
|
import type { GroupModel } from './engine';
|
|
2
3
|
import type TUIChatEngine from '@tencentcloud/chat-uikit-engine';
|
|
3
4
|
|
|
@@ -180,10 +181,10 @@ export interface ContactListProps {
|
|
|
180
181
|
searchPlaceholder?: string;
|
|
181
182
|
emptyText?: string;
|
|
182
183
|
|
|
183
|
-
ContactItem?:
|
|
184
|
-
ContactSearchComponent?:
|
|
185
|
-
GroupHeader?:
|
|
186
|
-
PlaceholderEmptyList?:
|
|
184
|
+
ContactItem?: Component;
|
|
185
|
+
ContactSearchComponent?: Component;
|
|
186
|
+
GroupHeader?: Component;
|
|
187
|
+
PlaceholderEmptyList?: Component;
|
|
187
188
|
|
|
188
189
|
onContactItemClick?: (item: ContactGroupItem) => void;
|
|
189
190
|
onFriendApplicationAction?: (action: 'accept' | 'refuse', application: FriendApplication) => void;
|
|
@@ -197,14 +198,14 @@ export interface ContactInfoBaseProps {
|
|
|
197
198
|
|
|
198
199
|
export interface ContactInfoProps extends ContactInfoBaseProps {
|
|
199
200
|
contactItem?: ContactGroupItem | undefined;
|
|
200
|
-
PlaceholderEmpty?:
|
|
201
|
-
FriendInfoComponent?:
|
|
202
|
-
GroupInfoComponent?:
|
|
203
|
-
BlacklistInfoComponent?:
|
|
204
|
-
FriendApplicationInfoComponent?:
|
|
205
|
-
GroupApplicationInfoComponent?:
|
|
206
|
-
SearchGroupInfoComponent?:
|
|
207
|
-
SearchUserInfoComponent?:
|
|
201
|
+
PlaceholderEmpty?: Component;
|
|
202
|
+
FriendInfoComponent?: Component;
|
|
203
|
+
GroupInfoComponent?: Component;
|
|
204
|
+
BlacklistInfoComponent?: Component;
|
|
205
|
+
FriendApplicationInfoComponent?: Component;
|
|
206
|
+
GroupApplicationInfoComponent?: Component;
|
|
207
|
+
SearchGroupInfoComponent?: Component;
|
|
208
|
+
SearchUserInfoComponent?: Component;
|
|
208
209
|
onSendMessage?: (friend: Friend) => void;
|
|
209
210
|
onDeleteFriend?: (friend: Friend) => void;
|
|
210
211
|
onUpdateFriendRemark?: (friend: Friend, remark: string) => void;
|
|
@@ -26,11 +26,11 @@ export interface ConversationListProps {
|
|
|
26
26
|
/** Specifies a vue component to customize the conversation actions in conversation preview. */
|
|
27
27
|
ConversationActions?: Component<ConversationActionsProps>;
|
|
28
28
|
/** Specifies a vue component to display when the chat list is empty. */
|
|
29
|
-
PlaceholderEmptyList?:
|
|
29
|
+
PlaceholderEmptyList?: Component;
|
|
30
30
|
/** Specifies a vue component to display while the chat list is loading. */
|
|
31
|
-
PlaceholderLoading?:
|
|
31
|
+
PlaceholderLoading?: Component;
|
|
32
32
|
/** Specifies a vue component to display when there is an error loading the chat list. */
|
|
33
|
-
PlaceholderLoadError?:
|
|
33
|
+
PlaceholderLoadError?: Component;
|
|
34
34
|
/** Specifies a vue component to customize the avatar in list. */
|
|
35
35
|
Avatar?: Component<AvatarProps>;
|
|
36
36
|
/** Specifies a function to filter conversations in the conversation list. */
|
|
@@ -74,11 +74,11 @@ export interface ConversationListContentProps {
|
|
|
74
74
|
/** Indicates whether there was an error loading the chat list */
|
|
75
75
|
error?: boolean;
|
|
76
76
|
/** A custom component to display when the chat list is empty */
|
|
77
|
-
PlaceholderEmptyList?:
|
|
77
|
+
PlaceholderEmptyList?: Component;
|
|
78
78
|
/** A custom component to display while the chat list is loading */
|
|
79
|
-
PlaceholderLoading?:
|
|
79
|
+
PlaceholderLoading?: Component;
|
|
80
80
|
/** A custom component to display when there is an error loading the chat list */
|
|
81
|
-
PlaceholderLoadError?:
|
|
81
|
+
PlaceholderLoadError?: Component;
|
|
82
82
|
/** The custom class name */
|
|
83
83
|
className?: string;
|
|
84
84
|
/** The custom class style */
|
|
@@ -92,18 +92,16 @@ export interface ConversationPreviewUIProps {
|
|
|
92
92
|
isSelected?: boolean;
|
|
93
93
|
/** Whether to show the ConversationActions */
|
|
94
94
|
enableActions?: boolean;
|
|
95
|
-
/** The string to be highlighted in the title */
|
|
96
|
-
highlightMatchString?: string;
|
|
97
95
|
/** The custom Avatar component */
|
|
98
96
|
Avatar?: Component<AvatarProps>;
|
|
99
97
|
/** The custom Title component */
|
|
100
|
-
Title?: string |
|
|
98
|
+
Title?: string | Component;
|
|
101
99
|
/** The custom last message abstract component */
|
|
102
|
-
LastMessageAbstract?: string |
|
|
100
|
+
LastMessageAbstract?: string | Component;
|
|
103
101
|
/** The custom last message abstract component */
|
|
104
|
-
LastMessageTimestamp?: string |
|
|
102
|
+
LastMessageTimestamp?: string | Component;
|
|
105
103
|
/** The custom Unread component */
|
|
106
|
-
Unread?: string |
|
|
104
|
+
Unread?: string | Component;
|
|
107
105
|
/** The custom ConversationActions component */
|
|
108
106
|
ConversationActions?: Component<ConversationActionsProps>;
|
|
109
107
|
/** Callback when the user click a conversation from conversation list */
|
|
@@ -162,9 +160,9 @@ export interface ConversationActionsConfig extends ConversationActionsBaseConfig
|
|
|
162
160
|
*/
|
|
163
161
|
customConversationActions?: Record<string, ConversationActionItem>;
|
|
164
162
|
/** The icon vue element to be displayed in the action popup. */
|
|
165
|
-
PopupIcon?:
|
|
163
|
+
PopupIcon?: Component;
|
|
166
164
|
/** An array of vue elements to be displayed in the action popup. */
|
|
167
|
-
PopupElements?:
|
|
165
|
+
PopupElements?: Component[];
|
|
168
166
|
/** The function to be called when the action popup is clicked. */
|
|
169
167
|
onClick?: (e: Event, key?: string, conversation?: ConversationModel) => void;
|
|
170
168
|
/** Function to be called when the actions modal is closed (H5 only). */
|
package/src/types/engine.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import TUIChatEngine from '@tencentcloud/chat-uikit-engine';
|
|
2
|
+
|
|
1
3
|
export type {
|
|
2
4
|
IConversationModel as ConversationModel,
|
|
3
5
|
ISearchResult as SearchResult,
|
|
@@ -16,3 +18,16 @@ export enum SearchType {
|
|
|
16
18
|
USER = 'user',
|
|
17
19
|
GROUP = 'group',
|
|
18
20
|
}
|
|
21
|
+
|
|
22
|
+
export enum MessageType {
|
|
23
|
+
TEXT = TUIChatEngine.TYPES.MSG_TEXT,
|
|
24
|
+
IMAGE = TUIChatEngine.TYPES.MSG_IMAGE,
|
|
25
|
+
AUDIO = TUIChatEngine.TYPES.MSG_AUDIO,
|
|
26
|
+
VIDEO = TUIChatEngine.TYPES.MSG_VIDEO,
|
|
27
|
+
FILE = TUIChatEngine.TYPES.MSG_FILE,
|
|
28
|
+
FACE = TUIChatEngine.TYPES.MSG_FACE,
|
|
29
|
+
LOCATION = TUIChatEngine.TYPES.MSG_LOCATION,
|
|
30
|
+
GRP_TIP = TUIChatEngine.TYPES.MSG_GRP_TIP,
|
|
31
|
+
CUSTOM = TUIChatEngine.TYPES.MSG_CUSTOM,
|
|
32
|
+
MERGER = TUIChatEngine.TYPES.MSG_MERGER,
|
|
33
|
+
}
|