diff --git a/packages/desktop/src/components/User/basicUserDetailsRow.tsx b/packages/desktop/src/components/User/basicUserDetailsRow.tsx index 095e63d..300f31b 100644 --- a/packages/desktop/src/components/User/basicUserDetailsRow.tsx +++ b/packages/desktop/src/components/User/basicUserDetailsRow.tsx @@ -1,11 +1,18 @@ import { FaAngleRight } from "react-icons/fa"; +import { ReactElement } from "react"; import { Tooltip } from "antd"; import { User } from "@nirvana/core/models/user.model"; -export default function renderUserRow(user: User) { +export default function UserRow({ + user, + rightJsx, +}: { + user: User; + rightJsx?: ReactElement; +}) { return ( @@ -24,12 +31,7 @@ export default function renderUserRow(user: User) { {user.email} - {/* actions */} - - - +
{rightJsx}
); } diff --git a/packages/desktop/src/pages/Home/newConvo/index.tsx b/packages/desktop/src/pages/Home/newConvo/index.tsx index bd4ea65..7bd3e13 100644 --- a/packages/desktop/src/pages/Home/newConvo/index.tsx +++ b/packages/desktop/src/pages/Home/newConvo/index.tsx @@ -6,11 +6,12 @@ import { InputLabel, TextField, } from "@mui/material"; +import { Check, Search } from "@mui/icons-material"; import { useEffect, useState } from "react"; import { $newConvoPage } from "../../../controller/recoil"; -import { Search } from "@mui/icons-material"; -import renderUserRow from "../../../components/User/basicUserDetailsRow"; +import { User } from "@nirvana/core/models/user.model"; +import UserRow from "../../../components/User/basicUserDetailsRow"; import { useSetRecoilState } from "recoil"; import { useUserSearch } from "../../../controller/index"; @@ -18,6 +19,7 @@ export default function NewConvo() { const setNewPageConvo = useSetRecoilState($newConvoPage); const [userSearchQuery, setuserSearchQuery] = useState(""); const [debUserSearchQ, setDebUserSearchQ] = useState(""); + const [selectedUsers, setSelectedUsers] = useState([]); const { data, @@ -64,6 +66,41 @@ export default function NewConvo() { setuserSearchQuery(newSearchQuery); }; + // select or unselect + const selectOrUnselectUser = (user: User) => { + // remove from list/unselect + if ( + selectedUsers.find( + (selectedUser) => selectedUser.googleId === user.googleId + ) + ) { + console.log("unselecting user"); + setSelectedUsers((prevUsers) => + prevUsers.filter( + (prevUser) => prevUser._id.toString() !== user._id.toString() + ) + ); + + return; + } + + console.log("selecting user"); + + // add to the list of selected + setSelectedUsers((prevUsers) => [...prevUsers, user]); + }; + + let nonSelectedUsers = [] as User[]; + // remove the user from the list of search results + if (data?.users) { + nonSelectedUsers = data?.users.filter( + (user) => + !selectedUsers.find( + (selectedUser) => selectedUser._id.toString() === user._id.toString() + ) + ); + } + return (
@@ -82,11 +119,24 @@ export default function NewConvo() { />
- {isSearching ? loading : <>} + {data?.users.length ?? 0} results + + {isSearching ? loading : <>} + + {/* selected people */} + {selectedUsers?.map((user) => ( +
selectOrUnselectUser(user)}> + } /> +
+ ))} {/* search results list */}
- {data?.users?.map((user) => renderUserRow(user))} + {nonSelectedUsers?.map((user) => ( +
selectOrUnselectUser(user)}> + +
+ ))}
);