| |
| |
| |
| |
|
|
| import type RealtimeChannel from './RealtimeChannel' |
| import PresenceAdapter from './phoenix/presenceAdapter' |
|
|
| export type Presence<T extends { [key: string]: any } = {}> = { |
| presence_ref: string |
| } & T |
|
|
| export type RealtimePresenceState<T extends { [key: string]: any } = {}> = { |
| [key: string]: Presence<T>[] |
| } |
|
|
| export type RealtimePresenceJoinPayload<T extends { [key: string]: any }> = { |
| event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}` |
| key: string |
| currentPresences: Presence<T>[] |
| newPresences: Presence<T>[] |
| } |
|
|
| export type RealtimePresenceLeavePayload<T extends { [key: string]: any }> = { |
| event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}` |
| key: string |
| currentPresences: Presence<T>[] |
| leftPresences: Presence<T>[] |
| } |
|
|
| export enum REALTIME_PRESENCE_LISTEN_EVENTS { |
| SYNC = 'sync', |
| JOIN = 'join', |
| LEAVE = 'leave', |
| } |
|
|
| export type RealtimePresenceOptions = { |
| events?: { state: string; diff: string } |
| } |
|
|
| export default class RealtimePresence { |
| get state() { |
| return this.presenceAdapter.state |
| } |
|
|
| private presenceAdapter: PresenceAdapter |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| constructor( |
| public channel: RealtimeChannel, |
| opts?: RealtimePresenceOptions |
| ) { |
| this.presenceAdapter = new PresenceAdapter(this.channel.channelAdapter, opts) |
| } |
| } |
|
|