Канал не подключен при попытке включить чат один на один в потоке (JS)

#getstream-io

#getstream-io

Вопрос:

У меня есть приложение, которое я создаю, где у одного пользователя (называемого администратором) есть канал один на один с большинством пользователей. Я понимаю, что при создании чата один на один будет существовать только один канал, независимо от того, кто (администратор или пользователь) создаст его первым. Моя проблема в том, что когда я добавляю пользователя и должен быть установлен новый в одном чате, другие каналы дублируются и в моем списке каналов. Либо это, либо иногда канал просто вообще не подключается, и пользователь остается без чата. Код / псевдокод, который я использую, приведен ниже, кто-нибудь знает, как создать несколько чатов один на один с помощью stream, или почему некоторые каналы могут подключаться дважды?

PS Я редактирую код, чтобы упростить его только до соответствующих частей здесь, в stack overflow, поэтому, пожалуйста, игнорируйте любые простые синтаксические ошибки ниже. Спасибо!

   setupUserChats = async (chatClient) => {
    let { currentUser, participants } = this.props;


    if (the current user is an admin) {

      for (let i = 0; i < participants.length; i  ) {
        let participant = participants[i];
        
        if (if the participant is a user) {
          
          let conversation = await chatClient.channel('messaging', {
            name: participant.name,
            members: [`${currentUser.participant_id}`, `${participant.participant_id}`]
          });

          await conversation.watch();
        }
      }
    }

    if (currentUser is a user) {

      for (let i = 0; i < participants.length; i  ) {
        let participant = participants[i];

        if (participant is an admin) {

          let conversation = await chatClient.channel('messaging', {
            name: currentUser.name,
            members: [`${currentUser.participant_id}`, `${participant.participant_id}`]
          });

          await conversation.watch();

        }
      }
    }

    this.setState({ chatClient: chatClient });

  }

  

Я вызываю другую функцию (описанную ниже), чтобы настроить базовый чат, а затем вызываю приведенный выше код внутри этой следующей функции:

   setupChat = async () => {
    let { currentUser, participants } = this.props;

    let chatClient = await new StreamChat(process.env.REACT_APP_STREAM_API_KEY);
    let serverResult = await getStreamToken(currentUser.participant_id);
    let userToken = serverResult.token;

    await chatClient.setUser(
      {
        id: currentUser.participant_id,
        name: currentUser.name,
      },
      userToken,
    );



    const moderatorToAdmin = await chatClient.channel('messaging', `conference-ID`, {
      name: "moderator-chat"
    });


    await moderatorToAdmin.watch();


    this.setupUserChats(chatClient);



    moderatorToAdmin.addMembers([`${currentUser.participant_id}`]);
        
    this.setState({ chatClient: chatClient });
  };

  

И затем все это отображается здесь:

 
  render() {
    const { currentUser } = this.props;

    const filters = { members: { $in: [currentUser.participant_id] } }
    
    return (
      <div>
          <Chat client={this.state.chatClient} theme={'messaging light'} >
            <div className="title">Chat</div>
              <ChannelList
                filters={filters}
                Preview={MyChannelPreview}
              />
            <Channel Message={MyMessageComponent} >
              <Window>
                <MessageList />
                <MessageInput />
              </Window>
              <Thread />
            </Channel>
          </Chat>
      </div>
    );

  }




class MyChannelPreview extends React.Component {

  render() {
    const { setActiveChannel, channel } = this.props;

    return (
      <div className={`channel_preview`   currentChannelClass}>
        <a href="#" onClick={(e) => setActiveChannel(channel, e)}>
          {channel._data.name || channel.data.name}
        </a>
      </div>
    );
  }
}