feat: submit own style index on realtime user state set

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2023-03-25 11:08:29 +01:00
parent b538c2c2a3
commit 24b7514e25
8 changed files with 157 additions and 91 deletions
frontend/src
components/editor-page/editor-pane
codemirror-extensions/remote-cursors
hooks/yjs
redux/realtime

View file

@ -20,7 +20,7 @@ export class ReceiveRemoteCursorViewPlugin implements PluginValue {
this.listener = messageTransporter.on(
MessageType.REALTIME_USER_STATE_SET,
({ payload }) => {
const cursors: RemoteCursor[] = payload.map((user) => ({
const cursors: RemoteCursor[] = payload.users.map((user) => ({
from: user.cursor.from,
to: user.cursor.to,
displayName: user.displayName,

View file

@ -21,7 +21,12 @@ export const useReceiveRealtimeUsers = (messageTransporter: MessageTransporter):
useEffect(() => {
const listener = messageTransporter.on(
MessageType.REALTIME_USER_STATE_SET,
(payload) => setRealtimeUsers(payload.payload),
(message) =>
setRealtimeUsers(
message.payload.users,
message.payload.ownUser.styleIndex,
message.payload.ownUser.displayName
),
{ objectify: true }
) as Listener

View file

@ -11,10 +11,14 @@ import type { RealtimeUser } from '@hedgedoc/commons'
/**
* Dispatches an event to add a user
*/
export const setRealtimeUsers = (users: RealtimeUser[]): void => {
export const setRealtimeUsers = (users: RealtimeUser[], ownStyleIndex: number, ownDisplayName: string): void => {
const action: SetRealtimeUsersAction = {
type: RealtimeStatusActionType.SET_REALTIME_USERS,
users
users,
ownUser: {
styleIndex: ownStyleIndex,
displayName: ownDisplayName
}
}
store.dispatch(action)
}

View file

@ -10,7 +10,11 @@ import type { Reducer } from 'redux'
const initialState: RealtimeStatus = {
isSynced: false,
isConnected: false,
onlineUsers: []
onlineUsers: [],
ownUser: {
displayName: '',
styleIndex: 0
}
}
/**
@ -28,7 +32,8 @@ export const RealtimeStatusReducer: Reducer<RealtimeStatus, RealtimeStatusAction
case RealtimeStatusActionType.SET_REALTIME_USERS:
return {
...state,
onlineUsers: action.users
onlineUsers: action.users,
ownUser: action.ownUser
}
case RealtimeStatusActionType.SET_REALTIME_CONNECTION_STATUS:
return {

View file

@ -16,6 +16,10 @@ export enum RealtimeStatusActionType {
export interface SetRealtimeUsersAction extends Action<RealtimeStatusActionType> {
type: RealtimeStatusActionType.SET_REALTIME_USERS
users: RealtimeUser[]
ownUser: {
styleIndex: number
displayName: string
}
}
export interface SetRealtimeConnectionStatusAction extends Action<RealtimeStatusActionType> {
@ -36,6 +40,10 @@ export interface RealtimeStatus {
onlineUsers: RealtimeUser[]
isConnected: boolean
isSynced: boolean
ownUser: {
displayName: string
styleIndex: number
}
}
export type RealtimeStatusActions =