const { broadcastState } = usePresenterSync({
localUserId: user.id,
isPresenter: true,
enabled: syncEnabled,
});
// In PrebuiltRoom callbacks:
onSidebarOpenChanged={(open) => broadcastState({ sidebarOpen: open })}
onActiveTabChanged={(tab) => broadcastState({ activeTab: tab })}
const { presenterState, isFollowing } = usePresenterSync({
localUserId: user.id,
isPresenter: false,
enabled: true,
});
// Pass controlled props to PrebuiltRoom when following:
controlledSidebarOpen={isFollowing ? presenterState?.sidebarOpen : undefined}
controlledActiveTab={isFollowing ? presenterState?.activeTab : undefined}
Synchronises presenter state across room participants via WebRTC data messages.
The presenter broadcasts sidebar state changes; followers receive and apply them. Uses the same data-message transport as reactions — low-latency, peer-to-peer.
Messages include the sender's userId and followers only accept messages from the declared presenter, preventing other participants from spoofing sync state.