From 4d1aca5b2ce55faac6591c8987012a9d74333e51 Mon Sep 17 00:00:00 2001 From: mlclaw Date: Tue, 19 May 2026 17:39:09 +0800 Subject: [PATCH] fix(group-chat): create group first when starting group chat from private chat The AddMember branch in onOK() unconditionally called addSubscribers() using the current channelID. When launched from a private chat (channelType=ChannelTypePerson), channelID is a user UID, not a group ID, causing POST /groups/{uid}/members to return 400. Fix: check channelType in the AddMember branch. For ChannelTypePerson, create a new group (self + other person + selected members) first, then navigate to it. For group channels, keep the existing addSubscribers logic. Fixes #51 --- .../src/Organizational/GroupNew/index.tsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/dmworkcontacts/src/Organizational/GroupNew/index.tsx b/packages/dmworkcontacts/src/Organizational/GroupNew/index.tsx index e4b9af2f..98bc0749 100644 --- a/packages/dmworkcontacts/src/Organizational/GroupNew/index.tsx +++ b/packages/dmworkcontacts/src/Organizational/GroupNew/index.tsx @@ -479,15 +479,29 @@ export class OrganizationalGroupNew extends Component< // 添加联系人 if (this.props.action === OrganizationalGroupNewAction.AddMember) { try { - await WKApp.dataSource.channelDataSource.addSubscribers( - channel, - getOptPersonnelData - ); + if (this.props.channel.channelType === ChannelTypePerson) { + // Starting group chat from a private chat: + // must create a new group first, then navigate to it + const uids = [ + WKApp.loginInfo.uid || "", + this.props.channel.channelID, + ...getOptPersonnelData, + ]; + const result = await WKApp.dataSource.channelDataSource.createChannel(uids); + if (result?.group_no) { + WKApp.endpoints.showConversation(new Channel(result.group_no, ChannelTypeGroup)); + } + } else { + // Adding members to an existing group: original logic + await WKApp.dataSource.channelDataSource.addSubscribers( + channel, + getOptPersonnelData + ); + } } catch (error: any) { Toast.error(error.msg); - return + return; } - } this.onCancel(); }