selecting and unselecting all frontend decent now to backend and makign it work!!!

This commit is contained in:
talksik
2022-04-02 15:34:42 -04:00
parent a101f3bb14
commit cb5c6e1c8f
2 changed files with 64 additions and 12 deletions
@@ -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 (
<span
key={user._id.toString()}
key={user._id.toString() + new Date().toDateString()}
className="border-t border-t-zinc-500 py-5 flex flex-row justify-start
items-center w-full hover:bg-zinc-600 cursor-pointer group"
>
@@ -24,12 +31,7 @@ export default function renderUserRow(user: User) {
<span className="text-zinc-300">{user.email}</span>
</span>
{/* actions */}
<Tooltip title="Request connect">
<button className="hover:bg-zinc-300 p-1 flex flex-row items-center justify-center ml-auto">
<FaAngleRight className="group-hover:text-zinc-300 text-lg" />
</button>
</Tooltip>
<div className="ml-auto">{rightJsx}</div>
</span>
);
}
@@ -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<string>("");
const [debUserSearchQ, setDebUserSearchQ] = useState<string>("");
const [selectedUsers, setSelectedUsers] = useState<User[]>([]);
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 (
<div className="flex flex-col">
<div className="flex flex-row">
@@ -82,11 +119,24 @@ export default function NewConvo() {
/>
</div>
{isSearching ? <span>loading</span> : <></>}
<span className="mx-auto">{data?.users.length ?? 0} results</span>
{isSearching ? <span className="mx-auto">loading</span> : <></>}
{/* selected people */}
{selectedUsers?.map((user) => (
<div onClick={() => selectOrUnselectUser(user)}>
<UserRow user={user} rightJsx={<Check />} />
</div>
))}
{/* search results list */}
<div className="flex flex-col">
{data?.users?.map((user) => renderUserRow(user))}
{nonSelectedUsers?.map((user) => (
<div onClick={() => selectOrUnselectUser(user)}>
<UserRow user={user} />
</div>
))}
</div>
</div>
);