mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-08 09:53:24 +00:00
bf6f7430e7
Mark JS imports as type-only when applicable so they are stripped at build time and ignored during chunk splitting, ensuring we take full advantage of Rollup's code-splitting optimizations.
38 lines
997 B
TypeScript
38 lines
997 B
TypeScript
import { useRoomContext } from '@livekit/components-react'
|
|
import type { NotificationType } from '../NotificationType'
|
|
import type { NotificationPayload } from '../NotificationPayload'
|
|
|
|
export const useNotifyParticipants = () => {
|
|
const room = useRoomContext()
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const notifyParticipants = async <T extends Record<string, any>>(options: {
|
|
type: NotificationType
|
|
destinationIdentities?: string[]
|
|
additionalData?: T
|
|
reliable?: boolean
|
|
}): Promise<void> => {
|
|
const {
|
|
type,
|
|
destinationIdentities,
|
|
additionalData = {} as T,
|
|
reliable = true,
|
|
} = options
|
|
|
|
const payload: NotificationPayload & T = {
|
|
type,
|
|
...additionalData,
|
|
}
|
|
|
|
const encoder = new TextEncoder()
|
|
const data = encoder.encode(JSON.stringify(payload))
|
|
|
|
await room.localParticipant.publishData(data, {
|
|
reliable,
|
|
destinationIdentities,
|
|
})
|
|
}
|
|
|
|
return { notifyParticipants }
|
|
}
|