useUsers.jsx 838 B

12345678910111213141516171819202122232425262728293031
  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. return { currentUser, setCurrentUser, users };
  26. };
  27. export default useUsers;