diff --git a/sdk/js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx b/sdk/js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx index 5d32b23..905cbf9 100644 --- a/sdk/js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx +++ b/sdk/js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx @@ -4,7 +4,7 @@ import flattenObject from "../utils/flattenObject"; import { TestObjectShapeType } from "../../shapes/orm/testShape.shapeTypes"; export function HelloWorldReact() { - const state = useShape(TestObjectShapeType); + const state = useShape(TestObjectShapeType)?.entries().next(); // @ts-expect-error window.reactState = state; diff --git a/sdk/js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte b/sdk/js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte index 58d1e51..24a9c87 100644 --- a/sdk/js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte +++ b/sdk/js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte @@ -20,7 +20,9 @@ cur[keys[keys.length - 1]] = value; } const flatEntries = $derived( - $shapeObject ? flattenObject($shapeObject as any) : [] + $shapeObject + ? flattenObject($shapeObject.entries().next() || ({} as any)) + : [] ); $effect(() => { (window as any).svelteState = $shapeObject; diff --git a/sdk/js/signals/src/connector/ormConnectionHandler.ts b/sdk/js/signals/src/connector/ormConnectionHandler.ts index cf07741..1aadfcd 100644 --- a/sdk/js/signals/src/connector/ormConnectionHandler.ts +++ b/sdk/js/signals/src/connector/ormConnectionHandler.ts @@ -21,7 +21,7 @@ export class OrmConnection { readonly shapeType: ShapeType; readonly scope: Scope; - readonly signalObject: DeepSignalObject; + readonly signalObject: DeepSignalObject>; private refCount: number; /*** Identifier as a combination of shape type and scope. Prevents duplications. */ private identifier: string; @@ -49,7 +49,7 @@ export class OrmConnection { this.ready = false; this.suspendDeepWatcher = false; this.identifier = `${shapeType.shape}::${canonicalScope(scope)}`; - this.signalObject = deepSignal(new Set(), { + this.signalObject = deepSignal>(new Set(), { addIdToObjects: true, idGenerator: this.generateSubjectIri, }); @@ -62,7 +62,7 @@ export class OrmConnection { ); // Add listener to deep signal object to report changes back to wasm land. - watchDeepSignal(this.signalObject as T, this.onSignalObjectUpdate); + watchDeepSignal>(this.signalObject, this.onSignalObjectUpdate); // Initialize per-entry readiness promise that resolves in setUpConnection this.readyPromise = new Promise((resolve) => { @@ -79,7 +79,7 @@ export class OrmConnection { this.onBackendMessage ); } catch (e) { - console.error(e) + console.error(e); } }); } @@ -123,7 +123,7 @@ export class OrmConnection { } } - private onSignalObjectUpdate({ patches }: WatchPatchEvent) { + private onSignalObjectUpdate({ patches }: WatchPatchEvent>) { if (this.suspendDeepWatcher || !this.ready || !patches.length) return; const ormPatches = deepPatchesToDiff(patches); @@ -153,7 +153,9 @@ export class OrmConnection { this.suspendDeepWatcher = true; batch(() => { // Convert arrays to sets and apply to signalObject (we only have sets but can only transport arrays). - Object.assign(this.signalObject, recurseArrayToSet(initialData)!); + for (const newItem of recurseArrayToSet(initialData)) { + this.signalObject.add(newItem); + } }); queueMicrotask(() => { diff --git a/sdk/js/signals/src/frontendAdapters/react/useShape.ts b/sdk/js/signals/src/frontendAdapters/react/useShape.ts index ff530c8..df0aef8 100644 --- a/sdk/js/signals/src/frontendAdapters/react/useShape.ts +++ b/sdk/js/signals/src/frontendAdapters/react/useShape.ts @@ -31,7 +31,7 @@ const useShape = ( }; }, []); - if ("id" in shapeSignalRef.current.signalObject) + if ("@id" in shapeSignalRef.current.signalObject) return shapeSignalRef.current.signalObject; else return null; }; diff --git a/sdk/js/signals/src/frontendAdapters/svelte/useShape.svelte.ts b/sdk/js/signals/src/frontendAdapters/svelte/useShape.svelte.ts index aa0bd25..ab7b9cc 100644 --- a/sdk/js/signals/src/frontendAdapters/svelte/useShape.svelte.ts +++ b/sdk/js/signals/src/frontendAdapters/svelte/useShape.svelte.ts @@ -91,7 +91,7 @@ export interface UseShapeRuneResult extends UseDeepSignalResult { export function useShapeRune( shape: ShapeType, scope?: Scope -): UseShapeRuneResult { +): UseShapeRuneResult> { const { signalObject: rootSignal, stop } = createSignalObjectForShape( shape, scope @@ -101,8 +101,8 @@ export function useShapeRune( onDestroy(stop); // rootSignal is already a deepSignal proxy root (object returned by createSignalObjectForShape) - const ds = useDeepSignal(rootSignal as T); - return { root: rootSignal, ...ds } as UseShapeRuneResult; + const ds = useDeepSignal>(rootSignal as Set); + return { root: rootSignal, ...ds } as UseShapeRuneResult>; } export default useShapeRune;