{"version":3,"file":"ChatRoom.jsx","sourceRoot":"","sources":["ChatRoom.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Drawer } from 'antd';\nimport produce from 'immer';\nimport React, { useEffect, useState } from 'react';\nimport { useMediaQuery } from 'react-responsive';\n\nimport AddUserModal from './components/ChatModal';\nimport MessageInput from './components/index';\nimport MessageHeader from './components/MessageHeader';\nimport MessageList from './components/MessageList';\nimport RoomList from './components/RoomList';\nimport { useChannel } from './hooks/useWebSocket';\nimport { getRoom, patchUpdateRoom } from './services/chat';\nimport styles from './style.module.css';\nimport { xs } from './utils/responsive';\n\ntype PropType = {\n  username: string;\n  room_id: string;\n  to: (room_id?: string) => void;\n  user_id: string;\n  members: any[];\n  qiniu_url: string;\n};\n\nconst ChatRoom: React.FC<PropType> = ({ room_id, username, to, user_id, members, qiniu_url }) => {\n  const isXs = useMediaQuery(xs);\n  const [chat, setChat] = useState<any>({});\n  const [drawerVisible, setDrawerVisible] = useState<boolean>(false);\n  const [visible, setVisible] = useState<boolean>(false);\n  const [addVisible, setAddVisible] = useState<boolean>(false);\n  const [selectedUserIds, setSelectedUserIds] = useState<string[]>([]);\n  const [indeterminate, setIndeterminate] = React.useState<boolean>(false);\n  const [checkAll, setCheckAll] = React.useState<boolean>(false);\n\n  const onCheckAllChange = (e) => {\n    setSelectedUserIds(\n      e.target.checked\n        ? members.filter((s) => chat.room?.allow_user_ids.every((i) => i !== s.user_id)).map((v) => v.user_id)\n        : []\n    );\n    setIndeterminate(false);\n    setCheckAll(e.target.checked);\n  };\n\n  useChannel(\n    `chat-room-record-${username}`,\n    username,\n    (obj) => {\n      const { data } = obj;\n      if (data.room_id !== room_id) {\n        return;\n      }\n      if (data.message) {\n        setChat(\n          produce((draft: any) => {\n            draft.records = chat.records.concat([data]);\n          })\n        );\n      }\n    },\n    { room_id }\n  );\n\n  useEffect(() => {\n    if (room_id) {\n      getRoom(username, room_id)\n        .then((res) => {\n          setChat(\n            produce((draft: any) => {\n              draft.records = res.records;\n              draft.room = res.room;\n              draft.onlineUserIDs = res.online_user_ids;\n            })\n          );\n        })\n        .catch(() => {\n          to();\n        });\n    }\n  }, [room_id, to, username]);\n\n  const checked = (v) => {\n    return chat.room\n      ? selectedUserIds.includes(v.user_id) || chat.room.allow_user_ids.some((i) => i === v.user_id)\n      : false;\n  };\n\n  const disabled = (v) => {\n    return chat.room ? chat.room.allow_user_ids.some((i) => i === v.user_id) : true;\n  };\n\n  return (\n    <div className={styles.chatContainer}>\n      <div />\n      <div className={styles.roomContainer}>\n        {isXs ? (\n          <div className={styles.roomListDrawer}>\n            <Drawer\n              closable={false}\n              getContainer={false}\n              visible={drawerVisible}\n              onClose={() => setDrawerVisible(false)}\n              placement=\"left\"\n            >\n              <RoomList\n                members={members}\n                user_id={user_id}\n                chat={chat}\n                onChatSet={setChat}\n                username={username}\n                room_id=\"\"\n                setDrawerVisible={setDrawerVisible}\n                to={to}\n              />\n            </Drawer>\n          </div>\n        ) : (\n          <div className={styles.chatListContainer}>\n            <div className={styles.chatListContainer}>\n              <div className={styles.chatList}>\n                <RoomList\n                  members={members}\n                  user_id={user_id}\n                  chat={chat}\n                  onChatSet={setChat}\n                  username={username}\n                  room_id={room_id}\n                  setDrawerVisible={setDrawerVisible}\n                  to={to}\n                />\n              </div>\n            </div>\n          </div>\n        )}\n        <div className=\"flex h-full overflow-hidden\">\n          <div className={styles.messagePanel}>\n            <MessageHeader\n              username={username}\n              drawerVisible={drawerVisible}\n              setDrawerVisible={setDrawerVisible}\n              setAddVisible={setAddVisible}\n              visible={visible}\n              setVisible={setVisible}\n              chat={chat}\n              onChatSet={setChat}\n              members={members}\n            />\n            <MessageList user_id={user_id} chat={chat} members={members} />\n            <div className={styles.messageInput}>\n              <MessageInput qiniu_url={qiniu_url} roomId={room_id} username={username} members={members} />\n            </div>\n          </div>\n        </div>\n      </div>\n      <AddUserModal\n        members={members}\n        visible={addVisible}\n        setVisible={setAddVisible}\n        onCheckAllChange={onCheckAllChange}\n        indeterminate={indeterminate}\n        checkAll={checkAll}\n        allowUserIds={selectedUserIds}\n        setAllowUserIds={setSelectedUserIds}\n        checked={(v) => checked(v)}\n        disabled={(v) => disabled(v)}\n        title=\"添加成员\"\n        okText=\"增加\"\n        defaultValue={chat.room ? chat.room.name : ''}\n        onOk={() => {\n          if (chat.room) {\n            setChat(\n              produce((draft: any) => {\n                if (draft.room) {\n                  draft.room.allow_user_ids = chat.room.allow_user_ids.concat(selectedUserIds);\n                }\n              })\n            );\n            patchUpdateRoom(\n              username,\n              chat.room.id,\n              chat.room.name,\n              selectedUserIds.concat(chat.room.allow_user_ids)\n            ).then(() => {\n              setVisible(false);\n              setAddVisible(false);\n              setSelectedUserIds([]);\n            });\n          }\n        }}\n      />\n    </div>\n  );\n};\n\nexport default ChatRoom;\n"]}