Use app ID as part of room key for grid websocket to fix issues with dev/prod tables having the same table ID but being different tables
This commit is contained in:
parent
3f20a3a439
commit
1403ee59ce
1 changed files with 17 additions and 6 deletions
|
@ -20,6 +20,12 @@ export default class GridSocket extends BaseSocket {
|
||||||
socket.on(
|
socket.on(
|
||||||
GridSocketEvent.SelectTable,
|
GridSocketEvent.SelectTable,
|
||||||
async ({ tableId, appId }, callback) => {
|
async ({ tableId, appId }, callback) => {
|
||||||
|
// Ignore if no table or app specified
|
||||||
|
if (!tableId || !appId) {
|
||||||
|
socket.disconnect(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the user has permission to read this resource
|
// Check if the user has permission to read this resource
|
||||||
const middleware = authorized(
|
const middleware = authorized(
|
||||||
PermissionType.TABLE,
|
PermissionType.TABLE,
|
||||||
|
@ -42,10 +48,11 @@ export default class GridSocket extends BaseSocket {
|
||||||
}
|
}
|
||||||
await context.doInAppContext(appId, async () => {
|
await context.doInAppContext(appId, async () => {
|
||||||
await middleware(ctx, async () => {
|
await middleware(ctx, async () => {
|
||||||
await this.joinRoom(socket, tableId)
|
const room = `${appId}-${tableId}`
|
||||||
|
await this.joinRoom(socket, room)
|
||||||
|
|
||||||
// Reply with all users in current room
|
// Reply with all users in current room
|
||||||
const sessions = await this.getRoomSessions(tableId)
|
const sessions = await this.getRoomSessions(room)
|
||||||
callback({ users: sessions })
|
callback({ users: sessions })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -60,7 +67,8 @@ export default class GridSocket extends BaseSocket {
|
||||||
|
|
||||||
emitRowUpdate(ctx: any, row: Row) {
|
emitRowUpdate(ctx: any, row: Row) {
|
||||||
const tableId = getTableId(ctx)
|
const tableId = getTableId(ctx)
|
||||||
this.emitToRoom(ctx, tableId, GridSocketEvent.RowChange, {
|
const room = `${ctx.appId}-${tableId}`
|
||||||
|
this.emitToRoom(ctx, room, GridSocketEvent.RowChange, {
|
||||||
id: row._id,
|
id: row._id,
|
||||||
row,
|
row,
|
||||||
})
|
})
|
||||||
|
@ -68,17 +76,20 @@ export default class GridSocket extends BaseSocket {
|
||||||
|
|
||||||
emitRowDeletion(ctx: any, id: string) {
|
emitRowDeletion(ctx: any, id: string) {
|
||||||
const tableId = getTableId(ctx)
|
const tableId = getTableId(ctx)
|
||||||
this.emitToRoom(ctx, tableId, GridSocketEvent.RowChange, { id, row: null })
|
const room = `${ctx.appId}-${tableId}`
|
||||||
|
this.emitToRoom(ctx, room, GridSocketEvent.RowChange, { id, row: null })
|
||||||
}
|
}
|
||||||
|
|
||||||
emitTableUpdate(ctx: any, table: Table) {
|
emitTableUpdate(ctx: any, table: Table) {
|
||||||
this.emitToRoom(ctx, table._id!, GridSocketEvent.TableChange, {
|
const room = `${ctx.appId}-${table._id}`
|
||||||
|
this.emitToRoom(ctx, room, GridSocketEvent.TableChange, {
|
||||||
id: table._id,
|
id: table._id,
|
||||||
table,
|
table,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
emitTableDeletion(ctx: any, id: string) {
|
emitTableDeletion(ctx: any, id: string) {
|
||||||
this.emitToRoom(ctx, id, GridSocketEvent.TableChange, { id, table: null })
|
const room = `${ctx.appId}-${id}`
|
||||||
|
this.emitToRoom(ctx, room, GridSocketEvent.TableChange, { id, table: null })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue