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

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

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

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

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

@ -112,8 +112,12 @@ function initial(socket: AppSocket, store: AppStore) {
(data ?? []).forEach(async (converseId) => { (data ?? []).forEach(async (converseId) => {
// TODO: 待优化, 可以在后端一次性返回 // TODO: 待优化, 可以在后端一次性返回
const converse = await getCachedConverseInfo(converseId); try {
store.dispatch(chatActions.setConverseInfo(converse)); 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 && ( {withSearch && (
<Input <Input
placeholder={t('搜索好友')} placeholder={t('搜索好友')}
className="mb-2"
value={searchValue} value={searchValue}
onChange={(e) => setSearchValue(e.target.value)} onChange={(e) => setSearchValue(e.target.value)}
/> />

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

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

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

Loading…
Cancel
Save