11import { Presence } from '@supabase/phoenix'
22import type { PresenceState , PresenceStates } from './types'
33import type {
4+ RealtimePresenceJoinPayload ,
45 RealtimePresenceOptions ,
56 RealtimePresenceState ,
67 Presence as RealtimePresenceType ,
@@ -61,23 +62,15 @@ export default class PresenceAdapter {
6162
6263 return Object . getOwnPropertyNames ( state ) . reduce ( ( newState , key ) => {
6364 const presences = state [ key ]
64-
65- newState [ key ] = presences . metas . map ( ( presence ) => {
66- presence [ 'presence_ref' ] = presence [ 'phx_ref' ]
67-
68- delete presence [ 'phx_ref' ]
69- delete presence [ 'phx_ref_prev' ]
70-
71- return presence
72- } ) as RealtimePresenceType [ ]
65+ newState [ key ] = transformState ( presences )
7366
7467 return newState
7568 } , { } as RealtimePresenceState )
7669 }
7770
7871 static onJoinPayload ( key : string , currentPresence : PresenceState , newPresence : PresenceState ) {
7972 const currentPresences = parseCurrentPresences ( currentPresence )
80- const newPresences = newPresence [ 'metas' ]
73+ const newPresences = transformState ( newPresence )
8174
8275 return {
8376 event : 'join' ,
@@ -89,7 +82,7 @@ export default class PresenceAdapter {
8982
9083 static onLeavePayload ( key : string , currentPresence : PresenceState , leftPresence : PresenceState ) {
9184 const currentPresences = parseCurrentPresences ( currentPresence )
92- const leftPresences = leftPresence [ 'metas' ]
85+ const leftPresences = transformState ( leftPresence )
9386
9487 return {
9588 event : 'leave' ,
@@ -100,6 +93,17 @@ export default class PresenceAdapter {
10093 }
10194}
10295
96+ function transformState ( presences : PresenceState ) {
97+ return presences . metas . map ( ( presence ) => {
98+ presence [ 'presence_ref' ] = presence [ 'phx_ref' ]
99+
100+ delete presence [ 'phx_ref' ]
101+ delete presence [ 'phx_ref_prev' ]
102+
103+ return presence
104+ } ) as RealtimePresenceType [ ]
105+ }
106+
103107function cloneState ( state : PresenceStates ) : PresenceStates {
104108 return JSON . parse ( JSON . stringify ( state ) )
105109}
@@ -109,5 +113,5 @@ function phoenixPresenceOptions(opts?: RealtimePresenceOptions) {
109113}
110114
111115function parseCurrentPresences ( currentPresences ?: PresenceState ) {
112- return currentPresences ?. metas || [ ]
116+ return currentPresences ?. metas ? transformState ( currentPresences ) : [ ]
113117}
0 commit comments