diff --git a/.changeset/tall-frogs-sleep.md b/.changeset/tall-frogs-sleep.md new file mode 100644 index 0000000..5cc2bab --- /dev/null +++ b/.changeset/tall-frogs-sleep.md @@ -0,0 +1,5 @@ +--- +"svelte-object": patch +--- + +fix: overriding parent values breaks reactivity diff --git a/svelte-object/src/SvelteArray.svelte b/svelte-object/src/SvelteArray.svelte index 1b6912f..98cdbed 100644 --- a/svelte-object/src/SvelteArray.svelte +++ b/svelte-object/src/SvelteArray.svelte @@ -1,23 +1,26 @@ - + + diff --git a/svelte-object/src/SvelteValue.svelte b/svelte-object/src/SvelteValue.svelte index 61b1331..1670799 100644 --- a/svelte-object/src/SvelteValue.svelte +++ b/svelte-object/src/SvelteValue.svelte @@ -23,7 +23,7 @@ onValidate }: Props & { onValidate?: (validationEvent: ValidationEvent) => void - children?: Snippet<[{ + children?: Snippet<[props: { value: Props['value'] blurValidation: (element: HTMLElement) => { destroy: () => void } submitOnEnter: (element: HTMLElement) => { destroy: () => void } @@ -122,20 +122,10 @@ object?.addValidator(validate) onDestroy(() => object?.removeValidator(validate)) - const setValue = (v: T) => value = v - if(object && (name !== undefined && name !== null) && name !== '') { - const val = object.value![name!] - if(val !== undefined) - setValue(val) + object.addPrescriptor(name, () => value, v => value = v as T) } - $effect(() => { - if(object?.value && name !== '') { - setValue(object.value[name!]) - } - }) - $effect.pre(() => { value @@ -146,7 +136,6 @@ warning = undefined validate('change') }) - untrack(() => object?.setValue(name, value)) }) diff --git a/svelte-object/stories/issues/overriding-states/Issue.stories.svelte b/svelte-object/stories/issues/overriding-states/Issue.stories.svelte new file mode 100644 index 0000000..183edef --- /dev/null +++ b/svelte-object/stories/issues/overriding-states/Issue.stories.svelte @@ -0,0 +1,48 @@ + + + + {#snippet template()} +
+ + {#snippet children(object)} + + {#snippet children(value)} + + {/snippet} + + + {#snippet children(array)} + {#each array.value as item, i (i)} + + {/each} + + {/snippet} + +
{JSON.stringify(object.value, null, '\t')}
+ {/snippet} + +
+
+ + {/snippet} +
\ No newline at end of file diff --git a/svelte-object/stories/issues/overriding-states/README.mdx b/svelte-object/stories/issues/overriding-states/README.mdx new file mode 100644 index 0000000..61d5446 --- /dev/null +++ b/svelte-object/stories/issues/overriding-states/README.mdx @@ -0,0 +1 @@ +When overriding the top-object value reactants such as lower-level arrays and objects stop working. \ No newline at end of file diff --git a/svelte-object/stories/tw.css b/svelte-object/stories/tw.css new file mode 100644 index 0000000..f173aa4 --- /dev/null +++ b/svelte-object/stories/tw.css @@ -0,0 +1 @@ +@import 'tailwindcss'; \ No newline at end of file