UserSearch.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import React, { useEffect, useRef, useState } from "react";
  2. import { connect, useDispatch } from "react-redux";
  3. import { actionFindUsers } from "../actions";
  4. import { CSearchAvatar } from "../components/Avatar";
  5. import Button from "react-bootstrap/esm/Button";
  6. import { Link } from "react-router-dom";
  7. const useDebounce = (cb, depArray, delay, onAdd) => {
  8. let timeoutRef = useRef();
  9. useEffect(() => {
  10. clearInterval(timeoutRef.current);
  11. timeoutRef.current === undefined
  12. ? (timeoutRef.current = -1)
  13. : (timeoutRef.current = setTimeout(cb, delay));
  14. }, depArray);
  15. };
  16. const SearchByLogin = ({ onGetUser, foundUsers, onChange }) => {
  17. const [login, setLogin] = useState();
  18. useDebounce(() => onGetUser(login), [login], 2000);
  19. const newUserId = (user) => {
  20. onChange(user)
  21. }
  22. return (
  23. <form>
  24. <label for="loginInput">Add users to a group: </label>
  25. <div className="search-box">
  26. <input
  27. className="form-control-editing form-control"
  28. placeholder=""
  29. value={login}
  30. onChange={(e) => setLogin(e.target.value)}
  31. />
  32. </div>
  33. {foundUsers
  34. ? foundUsers.map((user) => {
  35. return (
  36. <div className="searchBlock">
  37. {user?.avatar !== null ? (
  38. <CSearchAvatar avatarUrl={user} />
  39. ) : (
  40. <div className="avatarStubChat2"></div>
  41. )}
  42. <div>{user?.login ? user.login : "anon"}</div>
  43. <div>
  44. <Button
  45. user={user}
  46. onClick={() => console.log(user)}
  47. onChange={newUserId}
  48. >
  49. +
  50. </Button>
  51. </div>
  52. </div>
  53. );
  54. })
  55. : null}
  56. </form>
  57. );
  58. };
  59. export const CSearchByLogin = connect(
  60. (state) => ({
  61. foundUsers: state?.promise?.findUsers?.payload,
  62. // state: state
  63. }),
  64. {
  65. onGetUser: actionFindUsers,
  66. }
  67. )(SearchByLogin);