]> 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 1f2a354c4cfaf39b1b1e2d2729ce733f84f8455e..bc1282e0586fdc351d626eb9ccd1707bdcd1ce8b 100644 (file)
@@ -7,6 +7,13 @@ import ErrorMessage from '../common/ErrorMessage';
 import Loading from '../common/Loading';
 import NotFound from '../pages/NotFound';
 import Detail from '../tournament/Detail';
+import {
+       patchParticipant,
+       patchResult,
+       patchRound,
+       patchUser,
+       sortParticipants,
+} from '../../helpers/Tournament';
 
 const Tournament = () => {
        const params = useParams();
@@ -23,7 +30,7 @@ const Tournament = () => {
                        .then(response => {
                                setError(null);
                                setLoading(false);
-                               setTournament(response.data);
+                               setTournament(sortParticipants(response.data));
                        })
                        .catch(error => {
                                setError(error);
@@ -33,21 +40,54 @@ const Tournament = () => {
        }, [id]);
 
        useEffect(() => {
-               window.Echo.private(`Tournament.${id}`)
+               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));
+                               }
+                       })
                        .listen('RoundAdded', e => {
-                               console.log(e);
                                if (e.round) {
                                        setTournament(tournament => ({
                                                ...tournament,
-                                               rounds: [...tournament.rounds, e.round],
+                                               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 />;
        }