Team Ai
Apppublic

huggingface-projects/stable-diffusion-multiplayer

sourceHugging Faceupdated 3y agoView on Hugging Face
351likes
useObject.ts45 linesDownload Raw Back to liveblocks
1// @ts-nocheck2import { LiveObject } from "@liveblocks/client";3import { useStorage } from "./useStorage";4import { onDestroy } from "svelte";5import type { Writable } from "svelte/store";6import { writable } from "svelte/store";7import { useRoom } from "./useRoom";8 9/**10 * Works similarly to `liveblocks-react` useObject11 * https://liveblocks.io/docs/api-reference/liveblocks-react#useObject12 *13 * The main difference is that it returns a Svelte store:14 * const obj = useObject()15 * $obj.set('name', 'Chris')16 * console.log($obj.get('name'))17 */18export function useObject(name: string, initial?: any): Writable<LiveObject> {19  const room = useRoom();20  const rootStore = useStorage();21  const list = writable<LiveObject>();22  let unsubscribe = () => {};23 24  const unsubscribeRoot = rootStore.subscribe((root) => {25    if (!root) {26      return;27    }28 29    if (!root.get(name)) {30      root.set(name, new LiveObject(initial));31    }32 33    list.set(root.get(name));34 35    unsubscribe();36    unsubscribe = room.subscribe(root.get(name) as LiveObject, (newObject) => {37      list.set(newObject);38    });39  });40 41  onDestroy(unsubscribeRoot);42 43  return list;44}45