useUsers.jsx 991 B

123456789101112131415161718192021222324252627282930313233343536
  1. import React from "react";
  2. import { useRecoilValue, useRecoilState } from "recoil";
  3. import { userAtom, usersAtom, persistUser } from "./atoms";
  4. const useUsers = () => {
  5. const [currentUser, setCurrentUserState] = useRecoilState(userAtom);
  6. const users = useRecoilValue(usersAtom);
  7. const setCurrentUser = React.useCallback(
  8. (callbackOrUser) => {
  9. let callback = callbackOrUser;
  10. if (typeof callbackOrUser === "object") {
  11. callback = () => callbackOrUser;
  12. }
  13. setCurrentUserState((prevUser) => {
  14. const newUser = {
  15. ...callback(prevUser),
  16. id: prevUser.id,
  17. uid: prevUser.uid,
  18. };
  19. persistUser(newUser);
  20. return newUser;
  21. });
  22. },
  23. [setCurrentUserState]
  24. );
  25. const localUsers = React.useMemo(
  26. () => users.filter(({ space }) => space === currentUser.space),
  27. [currentUser.space, users]
  28. );
  29. return { currentUser, setCurrentUser, users, localUsers };
  30. };
  31. export default useUsers;