Zusammenarbeit
Mehrere Teammitglieder können dasselbe Template gleichzeitig bearbeiten. Das Kollaborationssystem bietet Live-Präsenz-Tracking und Block-Sperren, um Konflikte zu vermeiden.
Zusammenarbeit aktivieren
js
const editor = await initCloud({
container: '#editor',
auth: { url: '/api/templatical/token' },
collaboration: {
enabled: true,
},
});So funktioniert es
Wenn die Zusammenarbeit aktiviert ist:
- Präsenz – Avatar und Name jedes Nutzers erscheinen in der Editor-Toolbar und zeigen an, wer das Template aktuell ansieht
- Block-Sperren – Wenn ein Nutzer einen Block auswählt, wird dieser für andere Mitarbeitende gesperrt. Andere Nutzer sehen einen visuellen Hinweis, wer diesen Block bearbeitet
- Live-Updates – Änderungen werden in Echtzeit per WebSocket übertragen. Wenn ein Nutzer einen Block hinzufügt, verschiebt oder ändert, sehen andere Mitarbeitende die Änderung sofort
- Konfliktvermeidung – Der Sperrmechanismus verhindert, dass zwei Nutzer gleichzeitig denselben Block bearbeiten, und beseitigt so Merge-Konflikte
Callbacks
js
const editor = await initCloud({
container: '#editor',
auth: { url: '/api/templatical/token' },
collaboration: {
enabled: true,
},
// Auf Kollaborations-Ereignisse reagieren
onError: (error) => {
console.error('Collaboration error:', error);
},
});Composable
Für benutzerdefinierte UI-Implementierungen:
js
import { useCollaboration } from '@templatical/core/cloud';
const {
collaborators, // Ref<Collaborator[]> — aktuell verbundene Nutzer
lockedBlocks, // Ref<Map<string, Collaborator>> — blockId → wer hat gesperrt
} = useCollaboration({
authManager,
editor,
channel, // Ref<PresenceChannel | null>
onCollaboratorJoined: (user) => { /* Nutzer beigetreten */ },
onCollaboratorLeft: (user) => { /* Nutzer verlassen */ },
onBlockLocked: ({ blockId, collaborator }) => { /* Block gesperrt */ },
onBlockUnlocked: ({ blockId, collaborator }) => { /* Block entsperrt */ },
});Collaborator-Objekt
ts
interface Collaborator {
id: string;
name: string;
color: string;
selectedBlockId: string | null;
}Voraussetzungen
- Zusammenarbeit setzt eine WebSocket-Verbindung voraus. Das SDK verbindet sich automatisch mithilfe der WebSocket-Konfiguration, die in der Antwort des Auth-Tokens enthalten ist.
- Jeder Nutzer muss ein
user-Objekt in seiner Token-Antwort haben (siehe Authentifizierung), damit sein Name korrekt angezeigt wird. Jedem Mitarbeitenden wird automatisch einecolorzur visuellen Identifikation zugewiesen.