File size: 1,550 Bytes
a0fda44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { useEffect } from "react";
import { useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import useFetch from "../hooks/useFetch";
import { chatListActions } from "../store/chatListSlice";

const useChatList = () => {
  const chatList = useSelector((state) => state.chatListReducer);
  const userId = useSelector((state) => state.userReducer.user._id);
  const [searchValue, setSearchValue] = useState("");
  const [searchedChats, setSearchedChats] = useState([]);

  const dispatch = useDispatch();

  const { reqFn: fetchChatRoomSummary, reqState: loadingChatList } = useFetch(
    { method: "GET", url: "/chatRoom/summary" },
    (data) =>
      dispatch(
        chatListActions.setChatList({ chatList: data.data.chatRoomSummary })
      )
  );

  const handleSearchValue = (event) => {
    setSearchValue(event.target.value);
  };

  useEffect(() => {
    if (searchValue) {
      setSearchedChats(
        chatList.filter(
          (chat) =>
            chat.profile.name
              ?.toLowerCase()
              .startsWith(searchValue.toLowerCase()) ||
            chat.profile.username
              .toLowerCase()
              .startsWith(searchValue.toLowerCase())
        )
      );
    } else {
      setSearchedChats(chatList);
    }
  }, [searchValue, chatList]);

  useEffect(() => {
    if (userId) {
      fetchChatRoomSummary();
    }
  }, [userId]);

  return {
    chatList: searchedChats,
    searchValue,
    handleSearchValue,
    loadingChatList,
  };
};

export default useChatList;