]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/pages/User.js
set window title
[alttp.git] / resources / js / components / pages / User.js
1 import axios from 'axios';
2 import React, { useEffect, useState } from 'react';
3 import { useParams } from 'react-router-dom';
4
5 import ErrorBoundary from '../common/ErrorBoundary';
6 import ErrorMessage from '../common/ErrorMessage';
7 import Loading from '../common/Loading';
8 import NotFound from '../pages/NotFound';
9 import Profile from '../users/Profile';
10
11 const User = () => {
12         const params = useParams();
13         const { id } = params;
14
15         const [error, setError] = useState(null);
16         const [loading, setLoading] = useState(true);
17         const [user, setUser] = useState(null);
18
19         useEffect(() => {
20                 setLoading(true);
21                 axios
22                         .get(`/api/users/${id}`)
23                         .then(response => {
24                                 setError(null);
25                                 setLoading(false);
26                                 setUser(response.data);
27                                 window.document.title = response.data.nickname || response.data.username;
28                         })
29                         .catch(error => {
30                                 setError(error);
31                                 setLoading(false);
32                                 setUser(null);
33                         });
34         }, [id]);
35
36         useEffect(() => {
37                 const cb = (e) => {
38                         if (e.user) {
39                                 setUser(user => e.user.id === user.id ? { ...user, ...e.user } : user);
40                         }
41                 };
42                 window.Echo.channel('App.Control')
43                         .listen('UserChanged', cb);
44                 return () => {
45                         window.Echo.channel('App.Control')
46                                 .stopListening('UserChanged', cb);
47                 };
48         }, []);
49
50         if (loading) {
51                 return <Loading />;
52         }
53
54         if (error) {
55                 return <ErrorMessage error={error} />;
56         }
57
58         if (!user) {
59                 return <NotFound />;
60         }
61
62         return <ErrorBoundary>
63                 <Profile user={user} />
64         </ErrorBoundary>;
65 };
66
67 export default User;