From 04cee807c1ebe06d046cbb8d82549872b040cc61 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 16 May 2022 16:33:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BC=9A=E8=AF=9D=E7=9A=84=E9=80=BB=E8=BE=91,=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A0=B9=E6=8D=AE=E6=83=85=E5=86=B5=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=A0=B9=E6=8D=AE=E4=BC=9A=E8=AF=9D=E4=BA=BA=E6=95=B0?= =?UTF-8?q?=E5=86=B3=E5=AE=9A=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果是双人会话,则添加成员为创建一个新的 如果是多人会话,则为简单的添加用户 --- shared/i18n/langs/en-US/translation.json | 2 + shared/i18n/langs/zh-CN/translation.json | 2 + shared/redux/hooks/useConverseMessage.ts | 5 ++ shared/redux/setup.ts | 8 +++- web/src/components/FriendPicker.tsx | 1 + .../Panel/personal/ConversePanel.tsx | 46 +++++++++++++------ .../components/modals/CreateDMConverse.tsx | 18 +++++--- .../Content/Personal/Friends/AddFriend.tsx | 4 ++ 8 files changed, 62 insertions(+), 24 deletions(-) diff --git a/shared/i18n/langs/en-US/translation.json b/shared/i18n/langs/en-US/translation.json index ffed396d..d3ce9bed 100644 --- a/shared/i18n/langs/en-US/translation.json +++ b/shared/i18n/langs/en-US/translation.json @@ -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", diff --git a/shared/i18n/langs/zh-CN/translation.json b/shared/i18n/langs/zh-CN/translation.json index bcab2f9f..1448e36a 100644 --- a/shared/i18n/langs/zh-CN/translation.json +++ b/shared/i18n/langs/zh-CN/translation.json @@ -148,11 +148,13 @@ "ka7907771": "保存成功", "ka7ecc377": "Unpin", "kaa040a8e": "默认群组", + "kaa7d786e": "创建会话", "kaaf56f78": "调试", "kabb39529": "保存变更", "kabfe9512": "保存", "kad207008": "编辑", "kadeb7a89": "不支持渲染的文档链接", + "kae072a10": "没有找到该用户", "kaeec12de": "手动安装", "kaefc1e64": "密码重置成功,现在回到登录页", "kaf403ef0": "亮色模式", diff --git a/shared/redux/hooks/useConverseMessage.ts b/shared/redux/hooks/useConverseMessage.ts index 1df64a3d..083c4077 100644 --- a/shared/redux/hooks/useConverseMessage.ts +++ b/shared/redux/hooks/useConverseMessage.ts @@ -101,6 +101,11 @@ export function useConverseMessage(context: ConverseContext) { // NOTICE: 该hook只会在converseId变化和重新链接时执行 const { loading, error } = useAsync(async () => { + if (!currentUserId) { + // 如果当前用户不存在则跳过逻辑 + return; + } + if (!converse) { // 如果是一个新会话(或者当前会话列表中没有) if (!isGroup) { diff --git a/shared/redux/setup.ts b/shared/redux/setup.ts index f5ae9760..25e46a80 100644 --- a/shared/redux/setup.ts +++ b/shared/redux/setup.ts @@ -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); + } }); }); diff --git a/web/src/components/FriendPicker.tsx b/web/src/components/FriendPicker.tsx index a8b989e5..07cb735d 100644 --- a/web/src/components/FriendPicker.tsx +++ b/web/src/components/FriendPicker.tsx @@ -65,6 +65,7 @@ export const FriendPicker: React.FC = React.memo((props) => { {withSearch && ( setSearchValue(e.target.value)} /> diff --git a/web/src/components/Panel/personal/ConversePanel.tsx b/web/src/components/Panel/personal/ConversePanel.tsx index 73fd1556..3ef94ea6 100644 --- a/web/src/components/Panel/personal/ConversePanel.tsx +++ b/web/src/components/Panel/personal/ConversePanel.tsx @@ -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 = React.memo( iconClassName="text-2xl" onClick={openPanelWindow} />, - - openModal( - - ) - } - />, + converse.members.length === 2 ? ( + + openModal( + + ) + } + /> + ) : ( + + openModal( + + ) + } + /> + ), // 当成员数大于2时,显示成员列表按钮 converse.members.length > 2 && ( = React.memo( (props) => { - const { withoutUserIds = [] } = props; + const { hiddenUserIds = [] } = props; const [selectedFriendIds, setSelectedFriendIds] = useState([]); 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 = React.memo( return ( diff --git a/web/src/routes/Main/Content/Personal/Friends/AddFriend.tsx b/web/src/routes/Main/Content/Personal/Friends/AddFriend.tsx index 8ab88a2a..4a84ea3a 100644 --- a/web/src/routes/Main/Content/Personal/Friends/AddFriend.tsx +++ b/web/src/routes/Main/Content/Personal/Friends/AddFriend.tsx @@ -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);