diff --git a/client/src/components/OrganizerPanel.jsx b/client/src/components/OrganizerPanel.jsx index a289200..63c2792 100644 --- a/client/src/components/OrganizerPanel.jsx +++ b/client/src/components/OrganizerPanel.jsx @@ -1,40 +1,52 @@ import CopyField from './CopyField.jsx'; +function regenerate(act, target, label) { + if (!window.confirm(`Neuen Code für ${label} erzeugen? Der alte Link funktioniert dann nicht mehr. Bereits beigetretene Spieler bleiben im Team.`)) return; + act('codes/regenerate', { target }, `Neuer Code für ${label}`); +} + +/** Einladungslink eines Teams, steht für den Organisator unten in der Team-Karte. */ +export function TeamInvite({ state, side, act, busy }) { + const { codes, links } = state.organizer; + const open = !['finished', 'cancelled'].includes(state.status); + const name = state.teams[side].name; + return ( +
Führt nur in {name}. Nur an dieses Team weitergeben.
+Jeder Link führt nur in das jeweilige Team. Gib ihn ausschließlich an dieses Team weiter.
- {[ - ['A', state.teams.A.name, 'team-A'], - ['B', state.teams.B.name, 'team-B'], - ['spectator', 'Zuschauer (Stream, Kommentatoren)', 'spectator'], - ].map(([key, label, cls]) => ( -Die Einladungslinks der Teams stehen unten in der jeweiligen Team-Karte.
+Dieser Link gibt volle Kontrolle über das Match. Nicht weitergeben.
diff --git a/client/src/components/TeamCard.jsx b/client/src/components/TeamCard.jsx index dc15850..0552385 100644 --- a/client/src/components/TeamCard.jsx +++ b/client/src/components/TeamCard.jsx @@ -1,3 +1,4 @@ +import { TeamInvite } from './OrganizerPanel.jsx'; export default function TeamCard({ team, side, state, viewer, isOrg, act, busy }) { const isOwnTeam = viewer.team === side; const inLobby = state.status === 'lobby'; @@ -59,6 +60,7 @@ export default function TeamCard({ team, side, state, viewer, isOrg, act, busy }Es fehlen noch {team.teamSize - readiness.count} Spieler.
} + {isOrg && state.organizer &&