]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/components/pages/Tournament.js
fix big key size
[alttp.git] / resources / js / components / pages / Tournament.js
index cdafd69b12c2414140f3dce96d07c87cd2e68bf2..6e32227ab2d04d330b8025dc16744fdbbee5d606 100644 (file)
@@ -7,6 +7,7 @@ import ErrorMessage from '../common/ErrorMessage';
 import Loading from '../common/Loading';
 import NotFound from '../pages/NotFound';
 import Detail from '../tournament/Detail';
+import { patchResult, patchRound, patchUser, sortParticipants } from '../../helpers/Tournament';
 
 const Tournament = () => {
        const params = useParams();
@@ -23,7 +24,7 @@ const Tournament = () => {
                        .then(response => {
                                setError(null);
                                setLoading(false);
-                               setTournament(response.data);
+                               setTournament(sortParticipants(response.data));
                        })
                        .catch(error => {
                                setError(error);
@@ -32,6 +33,50 @@ const Tournament = () => {
                        });
        }, [id]);
 
+       useEffect(() => {
+               window.Echo.channel(`Tournament.${id}`)
+                       .listen('ResultReported', e => {
+                               if (e.result) {
+                                       setTournament(tournament => patchResult(tournament, e.result));
+                               }
+                       })
+                       .listen('RoundAdded', e => {
+                               if (e.round) {
+                                       setTournament(tournament => ({
+                                               ...tournament,
+                                               rounds: [e.round, ...tournament.rounds],
+                                       }));
+                               }
+                       })
+                       .listen('RoundChanged', e => {
+                               if (e.round) {
+                                       setTournament(tournament => patchRound(tournament, e.round));
+                               }
+                       })
+                       .listen('TournamentChanged', e => {
+                               if (e.tournament) {
+                                       setTournament(tournament => ({ ...tournament, ...e.tournament }));
+                               }
+                       });
+               return () => {
+                       window.Echo.leave(`Tournament.${id}`);
+               };
+       }, [id]);
+
+       useEffect(() => {
+               const cb = (e) => {
+                       if (e.user) {
+                               setTournament(tournament => patchUser(tournament, e.user));
+                       }
+               };
+               window.Echo.channel('App.Control')
+                       .listen('UserChanged', cb);
+               return () => {
+                       window.Echo.channel('App.Control')
+                               .stopListening('UserChanged', cb);
+               };
+       }, []);
+
        if (loading) {
                return <Loading />;
        }