import { onDestroy } from "svelte"; import type { Writable } from "svelte/store"; import { writable } from "svelte/store"; import { useRoom } from "./useRoom"; /** * Works similarly to `liveblocks-react` useSelf * https://liveblocks.io/docs/api-reference/liveblocks-react#useSelf * * The main difference is that it returns a Svelte store: * const self = useSelf() * console.log($self.info.id) *
{$self.info.name}
*/ export function useSelf(): Writable { const room = useRoom(); const self = writable(); const unsubscribeConnection = room.subscribe("connection", () => { self.set(room.getSelf()); }); const unsubscribe = room.subscribe("my-presence", () => { self.set(room.getSelf()); }); onDestroy(() => { unsubscribeConnection(); unsubscribe(); }); return self; }