]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/components/pages/Tournament.js
server calculated scoring
[alttp.git] / resources / js / components / pages / Tournament.js
index a5c43caf01f604055b1c077a08862fe7766f24b9..bc1282e0586fdc351d626eb9ccd1707bdcd1ce8b 100644 (file)
@@ -7,7 +7,13 @@ import ErrorMessage from '../common/ErrorMessage';
 import Loading from '../common/Loading';
 import NotFound from '../pages/NotFound';
 import Detail from '../tournament/Detail';
-import { patchResult, patchRound, sortParticipants } from '../../helpers/Tournament';
+import {
+       patchParticipant,
+       patchResult,
+       patchRound,
+       patchUser,
+       sortParticipants,
+} from '../../helpers/Tournament';
 
 const Tournament = () => {
        const params = useParams();
@@ -34,8 +40,13 @@ const Tournament = () => {
        }, [id]);
 
        useEffect(() => {
-               window.Echo.private(`Tournament.${id}`)
-                       .listen('ResultReported', e => {
+               window.Echo.channel(`Tournament.${id}`)
+                       .listen('ParticipantChanged', e => {
+                               if (e.participant) {
+                                       setTournament(tournament => patchParticipant(tournament, e.participant));
+                               }
+                       })
+                       .listen('ResultChanged', e => {
                                if (e.result) {
                                        setTournament(tournament => patchResult(tournament, e.result));
                                }
@@ -52,12 +63,31 @@ const Tournament = () => {
                                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 />;
        }