simle-chat
53 строки · 1.6 Кб
1import { useEffect } from 'react';2import { useDispatch } from 'react-redux';3import { useNavigate } from 'react-router-dom';4import { useTranslation } from 'react-i18next';5import { toast } from 'react-toastify';6import axios from 'axios';7
8import { actions as chatActions } from '../../slices/chatSlice';9import useAuth from '../../hooks/index';10import routes from '../../routes';11
12import ChannelsField from './ChannelsField';13import ChatField from './ChatField';14
15const ChatPage = () => {16const dispatch = useDispatch();17const navigate = useNavigate();18const { getAuthHeader, logOut } = useAuth();19const { t } = useTranslation();20
21useEffect(() => {22const axiosRequest = async () => {23const headers = await getAuthHeader();24try {25const messages = await axios.get(routes.dataRequestPath('messages'), { headers });26const channels = await axios.get(routes.dataRequestPath('channels'), { headers });27dispatch(chatActions.setCurrentChats(messages.data));28dispatch(chatActions.setCurrentChannels(channels.data));29} catch (error) {30if (!error.isAxiosError) {31toast.error(t('toasts.auth.unknownErr'));32} else if (error.response.status === 401) {33logOut();34navigate(routes.loginPagePath());35} else {36toast.error(t('toasts.auth.networkErr'));37}38}39};40axiosRequest();41}, [dispatch, getAuthHeader]);42
43return (44<div className="container h-100 my-4 overflow-hidden rounded shadow">45<div className="row h-100 bg-white flex-md-row">46<ChannelsField />47<ChatField />48</div>49</div>50);51};52
53export default ChatPage;54