Spaces:
Runtime error
Runtime error
| // @ts-nocheck | |
| import { LiveObject } from "@liveblocks/client"; | |
| import { useStorage } from "./useStorage"; | |
| import { onDestroy } from "svelte"; | |
| import type { Writable } from "svelte/store"; | |
| import { writable } from "svelte/store"; | |
| import { useRoom } from "./useRoom"; | |
| /** | |
| * Works similarly to `liveblocks-react` useObject | |
| * https://liveblocks.io/docs/api-reference/liveblocks-react#useObject | |
| * | |
| * The main difference is that it returns a Svelte store: | |
| * const obj = useObject() | |
| * $obj.set('name', 'Chris') | |
| * console.log($obj.get('name')) | |
| */ | |
| export function useObject(name: string, initial?: any): Writable<LiveObject> { | |
| const room = useRoom(); | |
| const rootStore = useStorage(); | |
| const list = writable<LiveObject>(); | |
| let unsubscribe = () => {}; | |
| const unsubscribeRoot = rootStore.subscribe((root) => { | |
| if (!root) { | |
| return; | |
| } | |
| if (!root.get(name)) { | |
| root.set(name, new LiveObject(initial)); | |
| } | |
| list.set(root.get(name)); | |
| unsubscribe(); | |
| unsubscribe = room.subscribe(root.get(name) as LiveObject, (newObject) => { | |
| list.set(newObject); | |
| }); | |
| }); | |
| onDestroy(unsubscribeRoot); | |
| return list; | |
| } | |