import { useState, useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import {
DMProfile,
MemberSection,
RecentFiles,
UserProfilePopup,
} from "./memberlist/index.js";
import { FiUserPlus } from "react-icons/fi";
import { CreateSpaceTips, CreateAgentTips } from "./createspace/index.js";
import { SettingsShortcuts } from "./settings/index.js";
import {
setMemberSearchQuery,
setSelectedMember,
clearSelectedMember,
} from "../store/slices/memberSlice";
import { fetchSpaceMembers } from "../store/slices/spaceSlice";
function MemberList({ activeView, activeRoom, createTab }) {
const dispatch = useDispatch();
const { isDark } = useSelector((state) => state.theme);
const { memberSearchQuery, selectedMember } = useSelector(
(state) => state.member,
);
const { selectedDMUser } = useSelector((state) => state.chat);
const { activeConversation } = useSelector((state) => state.dm);
const { spaces, membersMap, membersLoading, fetchedMembers } = useSelector(
(state) => state.space,
);
const appState = useSelector((state) => state.app);
const view = activeView || appState.activeView;
const room = activeRoom || appState.activeRoom;
const activeSpace = appState.activeSpace;
const [dmUser, setDmUser] = useState(null);
// Detect if current room is a space room
const { roomsMap } = useSelector((state) => state.space);
const isSpaceRoom = room && Object.values(roomsMap).some(
(rooms) => rooms.some((r) => r.id === room)
);
const isBotRoom = room === "tro-ly-ai";
const isDM = view === "messages" || (room && !isSpaceRoom && !isBotRoom && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(room));
// Build dmUser from activeConversation
useEffect(() => {
if (!isDM) {
setDmUser(null);
return;
}
if (!room) {
setDmUser(null);
return;
}
if (activeConversation?.other_user) {
const ou = activeConversation.other_user;
setDmUser({
id: ou.id,
name: ou.display_name || "Unknown",
avatar: ou.avatar_url || null,
color: ou.color || null,
isOnline: ou.status === "online",
isFriend: true,
email: ou.email || "",
bio: ou.bio || "",
isBot: false,
});
} else if (selectedDMUser) {
setDmUser({
id: selectedDMUser.id || selectedDMUser.userId,
name: selectedDMUser.name || "Unknown",
avatar: selectedDMUser.avatar || null,
color: selectedDMUser.color || null,
isOnline: selectedDMUser.isOnline || false,
isFriend: selectedDMUser.isFriend ?? true,
email: selectedDMUser.email || "",
bio: selectedDMUser.bio || "",
isBot: selectedDMUser.isBot || false,
});
}
}, [room, isDM, selectedDMUser, activeConversation]);
// 🆕 Lazy load space members when entering a space room
useEffect(() => {
if (!activeSpace || isDM) return;
const hasMembers = membersMap[activeSpace] && membersMap[activeSpace].length > 0;
const isFetched = fetchedMembers[activeSpace];
if (!hasMembers && !isFetched) {
dispatch(fetchSpaceMembers(activeSpace));
}
}, [activeSpace, isDM, dispatch, membersMap, fetchedMembers]);
// CreateSpace view
if (view === "createSpace") {
return createTab === "agent" ?