chatty / client /src /hooks /useChatList.jsx
arabdullah's picture
@ARAbdullaSL
a0fda44 verified
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;