refactor: 调整创建会话的逻辑, 改为根据情况选择根据会话人数决定行为

如果是双人会话,则添加成员为创建一个新的
如果是多人会话,则为简单的添加用户
pull/81/head
moonrailgun 3 years ago
parent fbc071ba2e
commit 04cee807c1

@ -148,11 +148,13 @@
"ka7907771": "Save Successful",
"ka7ecc377": "Unpin",
"kaa040a8e": "Default Group",
"kaa7d786e": "Create Converse",
"kaaf56f78": "Debug",
"kabb39529": "Save changes",
"kabfe9512": "Save",
"kad207008": "Edit",
"kadeb7a89": "Not supported documentation links",
"kae072a10": "Not found this account",
"kaeec12de": "Manual Install",
"kaefc1e64": "Password reset successful, now back to login page",
"kaf403ef0": "Light Mode",

@ -148,11 +148,13 @@
"ka7907771": "保存成功",
"ka7ecc377": "Unpin",
"kaa040a8e": "默认群组",
"kaa7d786e": "创建会话",
"kaaf56f78": "调试",
"kabb39529": "保存变更",
"kabfe9512": "保存",
"kad207008": "编辑",
"kadeb7a89": "不支持渲染的文档链接",
"kae072a10": "没有找到该用户",
"kaeec12de": "手动安装",
"kaefc1e64": "密码重置成功,现在回到登录页",
"kaf403ef0": "亮色模式",

@ -101,6 +101,11 @@ export function useConverseMessage(context: ConverseContext) {
// NOTICE: 该hook只会在converseId变化和重新链接时执行
const { loading, error } = useAsync(async () => {
if (!currentUserId) {
// 如果当前用户不存在则跳过逻辑
return;
}
if (!converse) {
// 如果是一个新会话(或者当前会话列表中没有)
if (!isGroup) {

@ -112,8 +112,12 @@ function initial(socket: AppSocket, store: AppStore) {
(data ?? []).forEach(async (converseId) => {
// TODO: 待优化, 可以在后端一次性返回
const converse = await getCachedConverseInfo(converseId);
store.dispatch(chatActions.setConverseInfo(converse));
try {
const converse = await getCachedConverseInfo(converseId);
store.dispatch(chatActions.setConverseInfo(converse));
} catch (e) {
console.error(e);
}
});
});

@ -65,6 +65,7 @@ export const FriendPicker: React.FC<FriendPickerProps> = React.memo((props) => {
{withSearch && (
<Input
placeholder={t('搜索好友')}
className="mb-2"
value={searchValue}
onChange={(e) => setSearchValue(e.target.value)}
/>

@ -15,6 +15,7 @@ import { usePanelWindow } from '@/hooks/usePanelWindow';
import { OpenedPanelTip } from '@/components/OpenedPanelTip';
import { IconBtn } from '@/components/IconBtn';
import { DMPluginPanelActionProps, pluginPanelActions } from '@/plugin/common';
import { CreateDMConverse } from '@/components/modals/CreateDMConverse';
const ConversePanelTitle: React.FC<{ converse: ChatConverseState }> =
React.memo(({ converse }) => {
@ -84,21 +85,36 @@ export const ConversePanel: React.FC<ConversePanelProps> = React.memo(
iconClassName="text-2xl"
onClick={openPanelWindow}
/>,
<IconBtn
key="add"
title={t('邀请成员')}
shape="square"
icon="mdi:account-multiple-plus-outline"
iconClassName="text-2xl"
onClick={() =>
openModal(
<AppendDMConverseMembers
converseId={converse._id}
withoutUserIds={converse.members}
/>
)
}
/>,
converse.members.length === 2 ? (
<IconBtn
key="create"
title={t('创建会话')}
shape="square"
icon="mdi:account-multiple-plus-outline"
iconClassName="text-2xl"
onClick={() =>
openModal(
<CreateDMConverse hiddenUserIds={converse.members} />
)
}
/>
) : (
<IconBtn
key="add"
title={t('邀请成员')}
shape="square"
icon="mdi:account-multiple-plus-outline"
iconClassName="text-2xl"
onClick={() =>
openModal(
<AppendDMConverseMembers
converseId={converse._id}
withoutUserIds={converse.members}
/>
)
}
/>
),
// 当成员数大于2时显示成员列表按钮
converse.members.length > 2 && (
<IconBtn

@ -1,25 +1,29 @@
import { Button } from 'antd';
import React, { useState } from 'react';
import { useHistory } from 'react-router';
import { createDMConverse, t, useAsyncFn } from 'tailchat-shared';
import { createDMConverse, t, useAsyncRequest } from 'tailchat-shared';
import { FriendPicker } from '../FriendPicker';
import { closeModal, ModalWrapper } from '../Modal';
interface CreateDMConverseProps {
/**
* id
*
*
*
*/
withoutUserIds?: string[];
hiddenUserIds?: string[];
}
export const CreateDMConverse: React.FC<CreateDMConverseProps> = React.memo(
(props) => {
const { withoutUserIds = [] } = props;
const { hiddenUserIds = [] } = props;
const [selectedFriendIds, setSelectedFriendIds] = useState<string[]>([]);
const history = useHistory();
const [{ loading }, handleCreate] = useAsyncFn(async () => {
const converse = await createDMConverse([...selectedFriendIds]);
const [{ loading }, handleCreate] = useAsyncRequest(async () => {
const converse = await createDMConverse([
...hiddenUserIds,
...selectedFriendIds,
]);
closeModal();
history.push(`/main/personal/converse/${converse._id}`);
}, [selectedFriendIds]);
@ -27,7 +31,7 @@ export const CreateDMConverse: React.FC<CreateDMConverseProps> = React.memo(
return (
<ModalWrapper title={t('创建多人会话')}>
<FriendPicker
withoutUserIds={withoutUserIds}
withoutUserIds={hiddenUserIds}
selectedIds={selectedFriendIds}
onChange={setSelectedFriendIds}
/>

@ -99,6 +99,10 @@ export const AddFriend: React.FC = React.memo(() => {
try {
const data = await searchUserWithUniqueName(uniqueName);
if (data === null) {
showToasts(t('没有找到该用户'), 'warning');
}
return data;
} catch (err) {
showErrorToasts(err);

Loading…
Cancel
Save