Participants

A participant is a resource that represents the relationship between a user and a conversation they are part of. The participant resource contains information about that user's activity in that conversation, such as whether they should receive notifications. By creating a participant representing a specific user and conversation, we are adding that user to the conversation.

interface ParticipantRef

References a given user's participation in a conversation.

Used in all Data API operations affecting that participant, such as joining/leaving a conversation, or setting their access. Created via ConversationRef​.participant.

Method Overview

createIfNotExists

Adds the user as a participant, or does nothing if they are already a participant.

delete

Removes the user as a participant, or does nothing if they are already not a participant.

edit

Edits properties of a pre-existing participant. If the user is not already a participant in the conversation, the promise will reject.

get

Fetches a snapshot of the participant.

set

Sets properties of this participant. If the user is not already a participant in the conversation, they will be added.

Properties

conversationId
: string

The ID of the conversation the user is participating in.

Immutable: if you want to reference the user in a different conversation, get a new ParticipantRef instead.

userId
: string

The ID of the user who is participating.

Immutable: if you want to reference a different participant, get a new ParticipantRef instead.

createIfNotExists

participantRef.createIfNotExists(params): Promise<void>

Adds the user as a participant, or does nothing if they are already a participant.

If the participant already exists, this operation is still considered successful and the promise will still resolve.

Supports Automatic Batching

Parameters

params (optional)
: CreateParticipantParams
interface CreateParticipantParams

Parameters you can pass to ParticipantRef​.createIfNotExists.

Properties that are undefined will be set to the default.

access (optional)
: "ReadWrite" | "Read"

The level of access the participant should have in the conversation. Default = "ReadWrite" access.

notify (optional)
: boolean | "MentionsOnly"

When the participant should be notified about new messages in this conversation. Default = true

false means no notifications, true means notifications for all messages, and "MentionsOnly" means that the user will only be notified when they are mentioned with an @.

Returns

Promise<void>

A promise that resolves when the operation completes. The promise will reject if client-side conversation syncing is disabled and the user is not already a participant.

delete

participantRef.delete(): Promise<void>

Removes the user as a participant, or does nothing if they are already not a participant.

Deleting a nonexistent participant is treated as success, and the promise will resolve.

Returns

Promise<void>

A promise that resolves when the operation completes. This promise will reject if client-side conversation syncing is disabled.

edit

participantRef.edit(params): Promise<void>

Edits properties of a pre-existing participant. If the user is not already a participant in the conversation, the promise will reject.

Supports Automatic Batching

Parameters

interface SetParticipantParams

Parameters you can pass to ParticipantRef​.set or ParticipantRef​.edit.

Properties that are undefined will not be changed. To clear / reset a property to the default, pass null.

access (optional)
: "ReadWrite" | "Read" | null

The level of access the participant should have in the conversation. Default = "ReadWrite" access.

notify (optional)
: boolean | "MentionsOnly" | null

When the participant should be notified about new messages in this conversation. Default = ReadWrite access.

false means no notifications, true means notifications for all messages, and "MentionsOnly" means that the user will only be notified when they are mentioned with an @.

Returns

Promise<void>

A promise that resolves when the operation completes. When client-side conversation syncing is disabled, you must already be a participant and you cannot set anything except the notify property. Everything else requires client-side conversation syncing to be enabled, and will cause the promise to reject.

get

participantRef.get(): Promise<ParticipantSnapshot | null>

Fetches a snapshot of the participant.

This contains all of the participant's public information.

Returns

Promise<ParticipantSnapshot | null>

A snapshot of the participant's attributes, or null if the user is not a participant. The promise will reject if you are not a participant and try to read information about someone else.

set

participantRef.set(params): Promise<void>

Sets properties of this participant. If the user is not already a participant in the conversation, they will be added.

Supports Automatic Batching

Parameters

interface SetParticipantParams

Parameters you can pass to ParticipantRef​.set or ParticipantRef​.edit.

Properties that are undefined will not be changed. To clear / reset a property to the default, pass null.

access (optional)
: "ReadWrite" | "Read" | null

The level of access the participant should have in the conversation. Default = "ReadWrite" access.

notify (optional)
: boolean | "MentionsOnly" | null

When the participant should be notified about new messages in this conversation. Default = ReadWrite access.

false means no notifications, true means notifications for all messages, and "MentionsOnly" means that the user will only be notified when they are mentioned with an @.

Returns

Promise<void>

A promise that resolves when the operation completes. When client-side conversation syncing is disabled, you must already be a participant and you cannot set anything except the notify property. Everything else requires client-side conversation syncing to be enabled, and will cause the promise to reject.

interface ParticipantSnapshot

A snapshot of a participant's attributes at a given moment in time.

Automatically expanded to include a snapshot of the user who is a participant.

Snapshots are immutable and we try to reuse them when possible. You should only re-render your UI when oldSnapshot !== newSnapshot.

Properties

access
: "ReadWrite" | "Read"

The level of access this participant has in the conversation.

joinedAt
: number

The date that this user joined the conversation, as a unix timestamp in milliseconds.

notify
: boolean | "MentionsOnly"

When the participant will be notified about new messages in this conversation.

false means no notifications, true means notifications for all messages, and "MentionsOnly" means that the user will only be notified when they are mentioned with an @.

The user who this participant snapshot is referring to

interface ParticipantSubscription

A subscription to the participants in a specific conversation.

Get a ParticipantSubscription by calling ConversationRef​.subscribeParticipants

The subscription is 'windowed'. It includes everyone who joined since a certain point in time. By default, you subscribe to the 10 most recent participants, and any participants who joined after you subscribe.

You can expand this window by calling loadMore, which extends the window further into the past.

Method Overview

loadMore

Expand the window to include older participants

unsubscribe

Unsubscribe from this resource and stop receiving updates.

Properties

connected
: Promise<ParticipantActiveState>

Resolves when the subscription starts receiving updates from the server.

Wait for this promise if you want to perform some action as soon as the subscription is active.

The promise rejects if the subscription is terminated before it connects.

state
: PendingState | ParticipantActiveState | UnsubscribedState | ErrorState

The current state of the subscription

An object with the following fields:

type is one of "pending", "active", "unsubscribed", or "error".

When type is "active", includes latestSnapshot and loadedAll.

- latestSnapshot: ParticipantSnapshot[] | null the current state of the participants in the window, or null if you're not a participant in the conversation

- loadedAll: boolean true when latestSnapshot contains all the participants in the conversation

When type is "error", includes the error field. It is a JS Error object explaining what caused the subscription to be terminated.

terminated
: Promise<UnsubscribedState | ErrorState>

Resolves when the subscription permanently stops receiving updates from the server.

This is either because you unsubscribed or because the subscription encountered an unrecoverable error.

loadMore

participantSubscription.loadMore(count): Promise<void>

Expand the window to include older participants

Calling loadMore multiple times in parallel will still only load one page of participants.

Parameters

count (optional)
: number

The number of additional participants to load. Must be between 1 and 50. Default 10.

Returns

Promise<void>

A promise that resolves once the additional participants have loaded

unsubscribe

participantSubscription.unsubscribe()

Unsubscribe from this resource and stop receiving updates.

If the subscription is already in the "unsubscribed" or "error" state, this is a no-op.

Returns

void